#pragma once #include #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* 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 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& 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&) = 0; virtual void slotGetInfInfos(QVector&) = 0; /// @brief Ipr点收集了,右键响应 virtual void slotIprPointPQ(QVector& vec) = 0; /// @brief 获取当前主窗口有多少窗口 virtual void slotGetAllWnds(QMap& 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&) = 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: };