You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/iBase/iPlugin/ZxMainWindow.h

202 lines
8.0 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#include <QMainWindow>
#include "iPlugin_global.h"
class iAnalRun;
class iSubWnd;
class iSubWndAnal;
class iSubWndBaseAF;
class ZxObjWmPoint;
class ZxObjInfPoint;
class ZxTabWidget;
class ZxMdiSubWindow;
class iWxRunOptionIPR;
class iRibbonXmlCmd;
class iRibbonXmlTab;
class iWxRibbon;
class iDockBaseWx;
class TreeWxMain;
#ifdef _SCAN_OLD_CODES_
class iWxDesign;
#endif
class ZxDataWell;
// 为外部引用xMainWindow主窗体部分接口而单独封装
// 原本想通过虚接口类实现,但由于QObject缘故,虚接口类
// 不便实现信号槽机制,故只能封装该类进行实现
class I_PLUGIN_EXPORT ZxMainWindow : public QMainWindow
{
public:
ZxMainWindow(QWidget* parent = 0);
~ZxMainWindow();
public:
/// @brief 检验是否具有正式授权
/// @param bPromptLicenseDlg 在不具备授权的时候,是否弹出授权对话框
virtual bool checkLicensed(bool bPromptLicenseDlg = false) = 0;
/// @brief 返回当前所有AnalRun的数组指针
virtual QVector<iAnalRun*>* getVecAnalRunPtrs() = 0;
/// @brief 返回iWxRunOptionIPR窗体指针,该函数接口为权宜之计,慎用,后续可能需要删除
virtual iWxRunOptionIPR* getWxIprOptionPtr() = 0;
// 左侧工区树
// enum DockTreeMode
// {
// DTM_Da = 0, //数据
// DTM_Jb = 1, //分析Anals
// DTM_Rs = 2 //成果
// };
/// @brief 获取左侧DockWx指针
/// @param n (in) 0:数据树 1:分析树 2:成果树
/// @note 注1:由于宏定义及依赖关系问题,暂时用int而非enum枚举作为参数类型
/// 注2:对于WTAI来讲,目前Dock其实均为子类型iDockWellExplorer
virtual iDockBaseWx* getLeftDockWx(int n) = 0;
/// @brief 获取左侧树型控件指针
/// @param n (in) 0:数据树 1:分析树 2:成果树
/// @note 注1:由于宏定义及依赖关系问题,暂时用int而非enum枚举作为参数类型
/// 注2:获取指针之后,可以根据需要各自转换为如下三种子类类型
/// TreeWxMainDa* / TreeWxMainJb* / TreeWxMainRs*
virtual TreeWxMain* getLeftTreeWx(int n) = 0;
/// @brief 获取指定窗体Wnd对应的TabWx
/// @param p:某窗体
virtual ZxTabWidget* getTabWxOfSubWnd(iSubWnd* p) = 0;
/// @brief 获取当前Mdi对应的TabWx
/// @param p:某MdiSubWindow,如果p为空,则是当前激活的
virtual ZxTabWidget* getTabWxOf(ZxMdiSubWindow* p = nullptr) = 0;
/// @brief 获取当前MdiChild
virtual ZxMdiSubWindow* getCurMdiChild() = 0;
/// @brief 获取当前TabWidget
virtual ZxTabWidget* getCurTabWx() = 0;
/// @brief 获取当前SubWnd
virtual iSubWnd* getCurSubWnd() = 0;
/// @brief 遍历查找 满足 某种ID属性的 所有窗体
/// @param pTabWx, 遍历范围:如果为空,则全局遍历,否则 遍历 pTabWx 下
/// @param sID, 指定的窗体 ID,在xml中配置的,如果为空,则返回 遍历范围内的所有
/// @param bOnlyOne 是否只获取一个,比如井位图,其实就是获取一个
virtual QVector<iSubWnd*> getAllSubWndsOf(ZxTabWidget* pTabWx = nullptr, \
QString sID = "", \
bool bOnlyOne = false) = 0;
/// @brief 其它方创建的DockWx,与主窗口显示Detach,通常在析构时
virtual bool detachOuterDockWx(iDockBaseWx* pDockWx) = 0;
/// @brief 对应Ribbon主菜单的按钮处理
virtual void runCmd(iRibbonXmlCmd* pInfo) = 0;
virtual void runCmd(QString sID, QString sName, QString sExtInfo = "") = 0;
/// @brief 确保对应的BrotherMapWnd存在
/// @param pSubWnd, 比如SubWndAnal
/// @param sID, 比如创建BrotherSubWnd需要的ID
/// @return 返回关联的SubWnd,比如干扰的WellMap2D
virtual iSubWnd* makesureBrotherWnd(iSubWnd* pSubWnd, QString sID) = 0;
/// @brief 在外部强制创建井,该方式慎用,具体咨询wzg
/// @param vecWmPts,井点,如果是水平井,则对应的是两个点
/// @param nType井类型,直井、水平井之类
/// @param pDataWell 返回的井对象
virtual void forceNewWellBy(QVector<QPointF>& vecWmPts, int nType, ZxDataWell*& pDataWell) = 0;
/// @brief 在外部强制编辑或者浏览井,该方式慎用,具体咨询wzg
/// @param pDataWell 井对象,非空
/// @param bReadOnly 是否只读(仅仅查看一下)
virtual void forceEditWellBy(ZxDataWell*& pDataWell, bool bReadOnly = false) = 0;
/// @brief 返回主窗口上侧的Ribbon窗口,方便外部进行直接调用
/// @note 为安全起见,该函数暂未启用,如需要,请咨询wzg
virtual iWxRibbon* getMainRibbon() = 0;
/// @brief 保存辅助信息,比如Fitting保存时,由主窗体来保存数值相关信息
/// @param p 窗体,比如Fitting
/// @param sRstCode 成果Code(窗体名称的上一级)
/// @param sError,错误信息
/// @note 主要由于数值部分依赖关系导致无法更好的处理类似逻辑
virtual bool saveExtRsts(iSubWnd* p, QString sRstCode, QString& sError) = 0;
public slots:
/// @brief 主窗口创建一个新的窗体,由iWxRunOptionStd/iWxRunOptionIPR之后的窗体触发
/// @param p (out)待创建的指针
/// @note 举例:流动段选择确定之后,右键弹出,创建 下一个 流动段分析窗口
virtual void slotCreateNextSubWnd(iSubWndBaseAF*& p) = 0;
/// @brief 激活,由iWxRunOptionStd/iWxIprRunOptio之后的窗体触发
/// @param p (in)待激活窗体
virtual void slotActivateSubWnd(iSubWnd*& p) = 0;
/// @brief 当压力流量数据更改时触发,主要是PF一旦保存之后
/// 提供给其它相关的SubWnd一种刷新机制
virtual void slotCacheDataCodePF(QString sCode) = 0;
/// @brief 成果保存时,申请创建RstWnd,
/// @param (out) b:是否已经成功创建
/// @note:①如果成功创建,则会同步生成RstUtils等成果必须内容
/// ②如果成功创建,则会把创建结果设置给SubWnd(即信号触发者)
virtual void slotCreateRstWndForSubWnd(bool& b) = 0;
/// @brief 在外部触发,关闭或者显示左侧工区数据树(全部,所有的Dock)
virtual void slotLeftTreeDocksVisible(bool bVisible) = 0;
/// @brief 刷新Ribbon按钮状态,这是更新所有按钮
/// @param list可以为id也可以为name
/// @note 如果list为空则指的是Ribbon全部,否则仅仅刷新指定的Btn
virtual void slotFreshRnStates(QStringList list) = 0;
/// @brief 获取井位图信息
virtual void slotGetWmInfos(QVector<ZxObjWmPoint*>&) = 0;
virtual void slotGetInfInfos(QVector<ZxObjInfPoint*>&) = 0;
/// @brief Ipr点收集了,右键响应
virtual void slotIprPointPQ(QVector<QPointF>& vec) = 0;
/// @brief 获取当前主窗口有多少窗口
virtual void slotGetAllWnds(QMap<QString, iSubWnd*>& map, ZxTabWidget* pTabWx) = 0;
/// @brief 刷新井相关
virtual void slotFreshWellBasics() = 0;
/// @brief SubWndData表格右键删除时,触发
virtual void slotSwdDataDelObjs(QStringList& listKeys, QString& sTable, QString& sError) = 0;
/// @brief 控制所在的MDI视图
virtual void slotMdiChildShow(int) = 0;
/// @brief 获取所有MDI
virtual void slotGetAllMdis(QVector<ZxMdiSubWindow*>&) = 0;
/// @brief 在SubWnd中创建Dock并且显示至主窗体之中,该Dock由SubWnd进行管理
/// @param pDockWx (in) Dock指针
/// @param areaDefault(in) 默认布局区域
virtual void slotAppendDock2Main(iDockBaseWx* pDockWx, \
Qt::DockWidgetArea areaDefault = Qt::LeftDockWidgetArea) = 0;
public slots:
// 线程控制
/// @brief 在算法执行时显示隐藏进度条相关
virtual void slotShowProgressAbout(bool bVisible) = 0;
/// @brief 线程暂停
virtual void slotThreadPause() = 0;
/// @brief 线程结束
virtual void slotThreadQuit() = 0;
signals:
};