|
|
#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 ZxDataGaugeBase;
|
|
|
|
|
|
class ZxPlot;
|
|
|
class iGuiPlot;
|
|
|
class ZxRenderItem;
|
|
|
|
|
|
class ZxRstWnd;
|
|
|
|
|
|
// 各类型窗体MDI类型
|
|
|
|
|
|
// 数据管理
|
|
|
#define s_MdiType_DataManager "DataManager"
|
|
|
// 数据编辑
|
|
|
#define s_MdiType_DataEdit "DataEdit"
|
|
|
// 处理解释分析,这是用的最多的一类,包括Anal、Fitting、Design、Nm等
|
|
|
#define s_MdiType_DataAnal "DataAnal"
|
|
|
// 井位图,单独一类
|
|
|
#define s_MdiType_DataMap "DataMap"
|
|
|
// IPR:IPR准备和IPR分析两类
|
|
|
#define s_MdiType_DataIPR "DataIPR"
|
|
|
|
|
|
// WDT:所有与产能相关
|
|
|
#define s_MdiType_DataWDT "DataWDT"
|
|
|
|
|
|
// 小型压裂相关,目前包括四类
|
|
|
#define s_MdiType_DataMiniFr "DataMiniFr"
|
|
|
// Config类
|
|
|
#define s_MdiType_DataConfig "DataConfig"
|
|
|
// 成果对比类
|
|
|
#define s_MdiType_ResCompare "ResCompare"
|
|
|
// 数值类,有待数值类启用
|
|
|
#define s_MdiType_DataNum "DataNum"
|
|
|
|
|
|
// 注入/耦合
|
|
|
#define s_MdiType_DataInject "DataInject"
|
|
|
#define s_MdiType_DataCoupling "DataCoupling"
|
|
|
#define s_MdiType_DataDistrib "DataDistrib"
|
|
|
|
|
|
// 其它
|
|
|
#define s_MdiType_Free "Free"
|
|
|
|
|
|
//#define s_MdiType_DataAnalDn "DataDesign"
|
|
|
//#define s_MdiType_DataFit "DataFit"
|
|
|
|
|
|
// 子窗体基类
|
|
|
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); //set/get 主窗体
|
|
|
ZxMainWindow* getMainWindow();
|
|
|
|
|
|
virtual void initUI(); //初始化入口
|
|
|
virtual void configWnd(QString sPrevInfo); //配置窗体
|
|
|
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 setRstWnd(ZxRstWnd* p);
|
|
|
ZxRstWnd* getRstUtilWnd();
|
|
|
|
|
|
// 执行命令:通常来自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 setRstLoading(bool b);
|
|
|
bool isRstLoading();
|
|
|
|
|
|
// 对于缓存已经保存的压力流量进行刷新处理
|
|
|
void addTempSavedPFs(QString sCode);
|
|
|
virtual void freshByTempSavedPFs();
|
|
|
|
|
|
// 当井相关的内容更改时进行相关的处理,比如更新一下井位图
|
|
|
virtual void dealwithWellChange(ZxDataWell* pDataWell, TreeNodeCmd o);
|
|
|
|
|
|
public:
|
|
|
|
|
|
void keyPressEvent(QKeyEvent* e);
|
|
|
|
|
|
// 序列化
|
|
|
virtual void onSerialize(ZxSerializer* ser);
|
|
|
virtual void onDeserialize(ZxSerializer* ser);
|
|
|
virtual void onDeserialized();
|
|
|
|
|
|
// 保存加载
|
|
|
virtual bool loadRsts();
|
|
|
virtual bool saveRsts();
|
|
|
virtual bool _runSaveRsts(ZxRstWnd* pRstWnd);
|
|
|
virtual bool _runLoadRsts(ZxRstWnd* pRstWnd);
|
|
|
|
|
|
// 20260518 权宜之计,各个窗体提供,各自前置的需保存的信息
|
|
|
// 比如:SubFitting中的 使用 分析 的ID
|
|
|
// 该信息在加载时,非常关键,在创建窗体时,就需要知晓
|
|
|
virtual QString _getPrevInfos4Save();
|
|
|
|
|
|
public:
|
|
|
|
|
|
// 相对通用的函数:某个数据对象(序列化对象)
|
|
|
virtual bool saveSerObjToBa(QByteArray& v, IxSerDes*& pSerObj);
|
|
|
virtual bool loadSerObjFromBa(QByteArray& v, IxSerDes*& pSerObj);
|
|
|
|
|
|
// 相对通用的函数:某个Plot
|
|
|
virtual bool saveOnePlotToBa(ZxPlot* p, QByteArray& v);
|
|
|
virtual bool loadOnePlotFromBa(ZxPlot*& p, QByteArray& v);
|
|
|
|
|
|
public:
|
|
|
|
|
|
// 状态
|
|
|
virtual void setModified(bool b);
|
|
|
virtual bool isModified();
|
|
|
|
|
|
// 模型和参数窗口
|
|
|
virtual void showOrHideModels();
|
|
|
virtual void showOrHideParameters();
|
|
|
|
|
|
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 slotDblClickShowProperty(bool b); //双击弹出
|
|
|
virtual void slotShowProperty();
|
|
|
virtual void updateView();
|
|
|
|
|
|
// 获取当前主窗口有多少Fit窗口(即;Anal对应的Fitting窗口,也可以扩展为其他同类)
|
|
|
virtual void slotGetBrotherFitWnds(QMap<QString, iSubWnd*>& map);
|
|
|
|
|
|
// 属性模板
|
|
|
virtual void slotItemPropertyTempl(IxPtySource* p,
|
|
|
bool bLoad,
|
|
|
bool bSelf);
|
|
|
|
|
|
// 外部传递已修改信号
|
|
|
virtual void slotGuiPlotModified(bool b);
|
|
|
|
|
|
// 从子控件触发Action
|
|
|
virtual void slotChildActioned(QString sAction, bool& b);
|
|
|
|
|
|
// 关闭某个字窗体的Confirm
|
|
|
virtual void slotConfirmCloseSubWxs(bool& bClosable);
|
|
|
|
|
|
// 关闭某个子窗体后触发的响应,刷新布局
|
|
|
virtual void slotSubWxClosed();
|
|
|
|
|
|
// 数据加载信号相应
|
|
|
virtual void slotPfObjSaved(ZxDataGaugeBase* p);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
/// @brief 绑定子窗体信号(通用的信号部分)
|
|
|
/// @param pSubWx 子窗体 说明:pSubWx可能为iGuiPlot,也可能为ZxMdiSubWindow,也可能为其他
|
|
|
/// @param bAttached 该子窗体是否从属于另外的一个窗体,比如双对数窗体,隶属于ZxMdiSubWindowChild
|
|
|
/// @note bAttached标识,主要为了避免多重的Close,比如iGuiPlot由destroy信号,而ZxMdiSubWindowChild有close信号
|
|
|
virtual void bindSubWxSignals(QWidget* pSubWx, bool bAttached = false);
|
|
|
|
|
|
/// @brief 为了方便,把数据加载对话框,统一整合了一下
|
|
|
/// @param sAction,区分是压力还是流量,通常为 "LoadP"或"LoadF"
|
|
|
/// @param bFixWellName 井名是否固定,固定的话,就不允许下拉
|
|
|
/// @param pTargetDataWell 保存到哪口井,如果不设置,则保存至当前井
|
|
|
virtual bool promptDataLoader(QString sAction, \
|
|
|
bool bFixWellName = false, \
|
|
|
ZxDataWell* pTargetDataWell = nullptr);
|
|
|
|
|
|
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<IxPtySource*> 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;
|
|
|
ZxRstWnd* 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,比如流动段选择+试井设计+IPR+小型压裂准备 需要强制创建Mdi
|
|
|
bool m_bForcedMdiWnd;
|
|
|
|
|
|
bool m_bRstLoading;//是否加载成果模式,不涉及序列,临时变量
|
|
|
};
|