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

296 lines
8.4 KiB
C

#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)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 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<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);
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;
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;
};