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/iBase/iPlugin/ZxMainWindow.h

202 lines
8.0 KiB
C

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