#pragma once #include "IxSerDes.h" #include "IxPtyPano.h" #include "ZxXpf.h" #include "ZxSerializer.h" #include "ZxBaseUtil.h" #include "mModuleDefines.h" #include "mSubWnd_global.h" class ZxMainWindow; class ZxMdiSubWindow; class ZxTabWidget; class ZxPtyDock; class iDockBaseWx; class ZxDataWell; class ZxDataJobInfo; class ZxDataGaugeBase; class ZxPlot; class iGuiPlot; class ZxRenderItem; class ZxRstJobWnd; // 各类型窗体MDI类型 #define s_MdiType_DataManager "DataManager" #define s_MdiType_DataEdit "DataEdit" #define s_MdiType_DataAnal "DataAnal" #define s_MdiType_DataIPR "DataIPR" #define s_MdiType_DataMiniFr "DataMiniFr" #define s_MdiType_DataAnalDn "DataDesign" #define s_MdiType_DataFit "DataFit" #define s_MdiType_DataConfig "DataConfig" #define s_MdiType_ResCompare "ResCompare" #define s_MdiType_DataNum "DataNum" #define s_MdiType_Free "Free" // 子窗体基类 class M_SUB_WND_EXPORT iSubWnd : public QMainWindow, virtual public IxSerDes { Q_OBJECT public: /// @brief 子窗体基类构造 /// @param parent:父 /// @param sExt指的是辅助信息,如操作的表名等等 explicit iSubWnd(QWidget *parent = 0, QString sExt = ""); ~iSubWnd(); void setMainWindow(ZxMainWindow* p); //主窗体 virtual void initUI(); //初始化入口 virtual void configWnd(); //配置窗体 virtual void loadData(QString sWell = ""); //加载数据 virtual void runUpdate(); //刷新 virtual void firstLoadAndUpdate(); //窗体初始后允许数据加载及刷新 virtual bool onConfirmClosing(); //窗体关闭之前的确认 virtual void onActivated(); //当前窗体激活时被调用 virtual void finalDeals(); //窗体完成并且在显示之前,允许再做些调整 void setProgressBar(QProgressBar* p); //进度条传递 virtual void setDataWell(ZxDataWell* p); //操作对象井传递 ZxDataWell* getDataWell(); void setWndID(QString sID); //窗体ID QString getWndID(); // 为了触发消息,新增标题修改函数,触发 void setWndTag(QString s); // 是否强制创建MDI bool isForcedMdiWnd(); void setMdiWndType(QString sType); //窗体MdiWndType QString getMdiWndType(); void setMdiChild(ZxMdiSubWindow *p); ZxMdiSubWindow* getMdiChild(); ZxTabWidget* getTabWx(); // 临时变量,对应的窗体Obj virtual void setRstJobWnd(ZxRstJobWnd* p); ZxRstJobWnd* getRstJobWnd(); // 执行命令:通常来自Ribbon virtual bool runCmdBy(QString sName, QString sID); /// @brief 命令是否Enabled的状态判断,通常来自Ribbon /// @param b (out),true:Enabled false:disabled /// @param sName (in),Cmd Name /// @param nID (in),Cmd ID /// @param bLicensed (in),当前是否有授权 /// @return 本窗体是否已经进行状态判断(即属于本窗体可执行的命令) virtual bool checkCmdEnable(bool &b, \ QString sName, int nID, \ bool bLicensed); // 辅助信息 void setExt(QString s); QString getExt(); // readonly void setReadonly(bool b); bool isReadonly(); // 对于缓存已经保存的压力流量进行刷新处理 void addTempSavedPFs(QString sCode); virtual void freshByTempSavedPFs(); public: void keyPressEvent(QKeyEvent* e); // 序列化 virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); virtual void onDeserialized(); // Rst virtual bool saveRstInfoToArr(QByteArray& v, IxSerDes*& pSerObj); virtual bool loadRstInfoFromArr(QByteArray& v, IxSerDes*& pSerObj); // graph virtual bool loadOnePlot(ZxPlot*& p, QByteArray& v); virtual bool saveOnePlot(ZxPlot* p, QByteArray& v); // 保存加载 virtual bool loadRss(); virtual bool saveRss(); virtual bool _runSaveRss(ZxRstJobWnd* pRstWnd); virtual bool _runLoadRss(ZxRstJobWnd* pRstWnd); // 状态 virtual void setModified(bool b); virtual bool isModified(); protected: // 初始化参数 virtual void initStyleSheets(); //Sheet // 初始化UI virtual void initUiMain(); virtual QWidget* initUiMainWx(); virtual void initUiDockPtys(); virtual void initUiDockToolBar(); virtual void initUiDockWxs(); // 绑定属性载体 virtual void bindDockPty(IxPtySource* pPtyObj); // 绑定图形信号 virtual void bindChartSignals(iGuiPlot* pWxPlot); // 执行命令:通常来自图形右侧/左侧的工具栏 virtual bool runActionOf(QString sAction); // 权限验证 bool checkLicensed(bool bPromptLicenseDlg = false); public: signals: // 当通过外界创建了一个PF数据后,刷新到TreeCtrl void sigPfObjFinished(ZxDataGaugeBase* p); // 窗体的大小,附带需要所在的MDI进行变化 // 0: Normal 1 Max 2 Min void sigMdiChildShow(int); // m_pRstWnd为空时,提醒父窗体进行创建指定 void sigNeedCreateRstWnd(bool& ); // 进度条 void sigShowProgressAbout(bool); // 触发信号刷新Ribbon按钮状态 // list可以为id也可以为name // 如果list为空则指的是Ribbon全部,否则仅仅刷新指定的Btn void sigFreshRnStates(QStringList list); // 触发信息,关闭或者显示左侧工区数据树 void sigLeftTreeDocksVisible(bool); /// @brief 在SubWnd中创建Dock并且显示至主窗体之中,该Dock由SubWnd进行管理 /// @param pDockWx (in) Dock指针 /// @param areaDefault(in) 默认布局区域 void sigAppendDock2Main(iDockBaseWx* pDockWx, \ Qt::DockWidgetArea areaDefault = Qt::LeftDockWidgetArea); public slots: // 进度条 virtual void slotPrsRangeSet(int nMin, int nMax); virtual void slotPrsValueSet(int nPos); virtual void slotPrsFormatSet(QString s); // Toolbar按钮消息响应 virtual void slotBtnTriggered(); virtual void slotGraphItemPoliciesInstalled(ZxRenderItem*); // 当前窗体所有信息的保存,比如关闭时提问的保存 virtual bool slotSaveAll(); virtual void slotShowProperty(); virtual void updateView(); // 获取当前主窗口有多少Fit窗口(即;Anal对应的Fitting窗口,也可以扩展为其他同类) virtual void slotGetBrotherFitWnds(QMap& map); // 属性模板 virtual void slotItemPropertyTempl(IxPtySource* p, bool bLoad, bool bSelf); // 外部传递已修改信号 virtual void slotGuiPlotModified(bool b); // 从子控件触发Action virtual void slotChildActioned(QString sAction, bool& b); protected: virtual void paintEvent(QPaintEvent *); // /// @brief 拖拽支持 // void dragEnterEvent(QDragEnterEvent *event); // void dropEvent(QDropEvent* event); protected: // 主窗体 ZxMainWindow* m_pMainWindow; // toolbar、属性等成员变量 QToolBar* m_pToolBar; ZxPtyDock* m_pDockPty; QList m_listProps; // 辅助信息,如操作的表名等等 QString m_sExt; // MdiSubWnd Type QString m_sMdiWndType; // 该窗体是否显示ToolBar bool m_bShowToolbar; // 与数据库对应的真实数据(外界传入,本类不进行创建释放维护) ZxDataWell* m_pDataWell; // ID QString m_sWndID; // 从属的Mdi窗口,内含TabWx,主窗口传递过来 ZxMdiSubWindow* m_pMdiChild; // // 按钮类别,如需增加工具栏,只需在构造中对该变量赋值 QString m_sCmdType; // 临时变量,对应的窗体Obj bool m_bDeserialzing; ZxRstJobWnd* m_pRstWnd; // 临时变量 bool m_bModified; // 进度条 QProgressBar* m_pProgressBar; // 进度条刷新间隔 int m_nProgressLoop; // 临时 bool m_bReadonly; // 临时,当前涉及到的,可能得已经发生保存的压力/流量code,只需要刷新本视窗 QStringList m_listTempSavedPFs; bool m_bUnableSP; //临时变量不参与序列化 // 是否启用新的样式表,ZXF202407,不参与序列化 bool m_bNovelQss; // 该窗口是否强制创建MDI,比如流动段选择+试井设计+LPR+小型压裂准备 需要强制创建Mdi bool m_bForcedMdiWnd; };