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/mGui/mSubWnd/iSubWnd.h

367 lines
11 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 "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"
// IPRIPR准备和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)trueEnabled falsedisabled
/// @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;//是否加载成果模式,不涉及序列,临时变量
};