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/nmNum/nmSubWnd/nmSubWndUtils.h

127 lines
5.5 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 <QMap>
#include <QObject>
#include "nmSubWnd_global.h"
class iRibbonXmlCmd;
class iRibbonXmlTab;
class ZxMainWindow;
class iSubWnd;
class iDockBaseWx;
class ZxTabWidget;
// 本来主要是为数值部分提供SubWnd初始化构造的方法
class NM_SUB_WND_EXPORT nmSubWndUtils : public QObject
{
Q_OBJECT
public:
static nmSubWndUtils* getInstance();
nmSubWndUtils();
~nmSubWndUtils();
public:
/// @brief 构造窗体根据RibbonXmlCmd
/// @param pCmdInfoconst in) 命令Cmb定义
/// @param pMainWndconst in) 主窗体
/// @param bCreatedNewOne(out) 返回是否新建的,还是 原先的
/// @note 权宜之计:此处构造的窗体,无需额外删除(析构),系统会统一处理
static iSubWnd* createSubWnd(const iRibbonXmlCmd* pCmdInfo, \
const ZxMainWindow* pMainWnd, \
bool& bCreatedNewOne);
/// @brief 构造窗体根据sID和sExt
/// @param sIDsExt 命令Cmb定义来自RibbonXmlCmd
/// @param pMainWndconst in) 主窗体
/// @param bCreatedNewOne 返回是否新建的,还是 原先的
/// @param bCreatedNewOne(out) 返回是否新建的,还是 原先的
/// @param bOnlyOneForCurTabWx(in) 为true则如果已有则直接返回false每次都会自动创建新的
/// @note 权宜之计:此处构造的窗体,无需额外删除(析构),系统会统一处理
static iSubWnd* makesureSubWnd(QString sID, QString sExt, \
const ZxMainWindow* pMainWnd, \
bool& bCreatedNewOne, \
bool bOnlyOneForCurTabWx = true);
/// @brief 执行一些特殊的功能按钮
/// @param pCmdInfo const in)命令Cmb定义
/// @param pMainWnd const in)主窗体
/// @return 只要是数值模块自己的按钮请返回true否则返回false
/// @note 此处指的是与SubWnd无关即不受SubWnd限制的功能按钮
static bool runCmdBySpecial(const iRibbonXmlCmd* pCmdInfo, \
const ZxMainWindow* pMainWnd);
/// @brief 执行一些特殊的功能按钮
/// @param sIDsExt(in) 命令Cmb定义来自RibbonXmlCmd
/// @param pMainWndconst in) 主窗体
/// @return 只要是数值模块自己的按钮请返回true否则返回false
/// @note 此处指的是与SubWnd无关即不受SubWnd限制的功能按钮
/// sID和sExt也是来自于RibbonXmlCmd
static bool runCmdBySpecial(QString sID, QString sExt, \
const ZxMainWindow* pMainWnd);
/// @brief 在当前没有激活数值SubWnd的情况下判断是否某些命令是否Enable
/// @param sID(in) 命令ID
/// @param sName(in) 命令Name
/// @param bLicensedconst in)当前是否正式授权
/// @param pMainWndconst in) 主窗体
/// @note sID和sName也是来自于RibbonXmlCmd
static bool isEnableOfID_Common(QString sID, QString sName, \
const bool bLicensed, \
const ZxMainWindow* pMainWnd);
/// @brief 当Ribbon上顶级Tab选项切换时触发/允许外部[比如数值试井]做些相应处理
/// @param pTab(in) 当前激活的是哪个Tab请iRibbonXmlTab进行筛选是不是自己需要的Tab
/// @param pMainWndconst in) 主窗体
static bool dealwithRibbonTab(iRibbonXmlTab* pTab, \
const ZxMainWindow* pMainWnd);
/// @brief 当首次切换为数值解时进行Dock目前设定两个的内容设定
/// @param pSubWndin) 当前的SubWndFitting窗体
static bool fillNmDockWxs(iSubWnd* pSubWnd);
/// @brief 解析解计算及结果刷新部分
/// @param pSubWndin) 当前的SubWndFitting窗体
/// @param pMainWndconst in) 主窗体
static bool nmCalAndFresh(iSubWnd* pSubWnd, \
const ZxMainWindow* pMainWnd);
/// @brief 获取解析解的当前参数相关信息,请根据需要调整该函数
/// @param pSubWndin) 当前的SubWndFitting窗体
static bool getAnaDockParas(iSubWnd* pSubWnd);
/// @brief 在成果保存时,辅助信息(如数值解相关)保存
/// @param pSubWndin) 基本上指的是 SubWndFitting 窗体
/// @param sRstName(in) 指的是成果的名称
/// @param pMainWndconst in) 主窗体
static bool saveRsts(iSubWnd* pSubWnd, \
QString sRstName, \
const ZxMainWindow* pMainWnd);
/// @brief 在成果加载时,辅助信息(如数值解相关)加载
/// @param pSubWndin) 基本上指的是 SubWndFitting 窗体
/// @param sRstName(in) 指的是成果的名称
/// @param pMainWndconst in) 主窗体
static bool loadRsts(iSubWnd* pSubWnd, \
QString sRstName, \
const ZxMainWindow* pMainWnd);
public slots:
// 声明处理 ZxTabWidget 切换的槽函数
// 信号 currentChanged(int) 传递一个 int 参数
void slotHandleTabChange(int index);
private:
// 因为边界是可以旋转的所以真实的顺序并非ee,se,we,ne根据索引传递查阅真实的比如 ee,se,we,ne
// xIndex 从1开始如果矩形则分别传入1,2,3,4 如果是圆形则传入1
static QString getBdyRealNameOf(int xIndex, QMap<QString, QVariant>& map);
// 存储当前操作的是哪一个窗体
ZxMainWindow* m_pMainWnd;
ZxTabWidget* m_pTabWx;
};