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/mGuiJob/iWxModelParameter.h

261 lines
8.9 KiB
C

#pragma once
#include "iWxBase.h"
#include "mAlgDefines.h"
#include "mGuiJob_global.h"
//class iModelDesc;
class iParameter;
class ZxTableView;
class iModelOption;
class iBdyInfo;
class iGridRowItem;
class iGridRowUtils;
class iWxParam;
class tLayerDesc;
class tLayerParaInfo;
class iModelInfoBase;
class M_GUI_JOB_EXPORT iWxModelParameter : public iWxBase
{
Q_OBJECT
public:
explicit iWxModelParameter(QWidget *parent = 0);
~iWxModelParameter();
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
// 根据测试类型更改UI(比如多层、干扰等)
virtual void adjustUiByTestType(PvtTestType ptt);
// 初始化
virtual void initUI();
void initUI_HelpBox();
// 在pCtrl InitUI之前允许部分调整如参数跟着模型走的调整
// 包括:
// 1. 把原有的被特殊模型修改过的,重新矫正过来
// 2. 调整特殊模型
virtual void adjustParaInfos(iParameter* pParameter);
virtual void restoreParaInfos(iParameter* pParameter = nullptr); //如果为空,则全部恢复
// 组织结果数据,注vec不进行clear由调用方自行clear
virtual bool organizeResults(QVector<iResultInfo>& vec, QString sType);
#ifdef _SCAN_OLD_CODES_
bool sortByShow(QVector<iResultInfo>& vec);
#endif
// 返回所有的跟模型相关的边界参数的类型,封闭或定压
// 封闭0
// 定压1
bool getBdyInfos(QMap<QString, int>& map);
// 从各个Wxm_vecWxDatas中遍历查找
virtual bool setParaValue(QString sPara, double d);
virtual bool getParaValue(QString sPara, double& d);
// 返回所有参数Key为英文ID
virtual bool getAllParaValues(QMap<QString, double>& map,
bool bOnlyFitted = false,
bool bClearMap = true);
virtual bool getAllParaUnits(QMap<QString, QString>& map,
bool bOnlyFitted = false,
bool bClearMap = true);
/// @brief 收集多层相关的一些乱七八糟的信息,包括模型选项、边界类型、每条边的定压还是封闭等等。
/// @param map 收集的结果
/// @param bClearOlds 是否清空
/// @note 对于通用的,直接用标识,对于层内的添加层标识
bool collectFuzzyMLs(QMap<QString, QVariant>& map, \
bool bClearOlds = false);
// 模式设置
void setDnMode(bool b);
// 由ModelOption的触发常规模式
void freshByNormalMode(iModelOption* pOption);
// 由ModelOption的触发多层模式
void freshByLayersMode(iModelOption* pOption);
void makesureLayerParaInfos(QVector<tLayerDesc*>& vecTds, bool bCrossFlow);
// 刷新
virtual void refreshUIs_Normal(QStringList& listParas);
virtual void refreshUIs_ML(QStringList& listParas); //增加多层模式
virtual void _refreshUIs(QStringList& listParas);
void dealwithSegItem(double d);
protected:
virtual void paintEvent(QPaintEvent *);
signals:
//增加信号保证切换的时候,窗口中的参数显示与否的按钮初始化(即恢复到隐藏状态)
void sigWxImageInit();
void sigIsAddBt(bool IsAdd);
void sigGetNqAll(double& d);
/// @brief 触发消息,获取具体的多层信息
void sigGetMultiLayerOptions(bool&, QVector<tLayerDesc*>*);
private slots:
void slotShowParam(bool bHide);
public:
// 当前面窗体参数改变时,本窗体响应
virtual void slotParasObtained(QMap<QString, QVariant>& map);
// 根据多相单相对右侧参数进行调整
void setToMpMode(bool bMultiPhase, PvtFluidType pft);
void freshParasByMap(QMap<QString, QVariant>& mapOldValues);
void freshParasByValue(QString sPara, QVariant o);
// 参数表已经填写处理完毕之后,再次进行一些定制化的处理,比如线性流相关的内容
virtual void finalGridUtilDeals(bool bLinearFlow);
public slots:
virtual void slotParasObtainedEx(iModelOption* pOption);
// 响应ParaCtrl数据的改变
virtual void slotParaCtrlValueChanged(QString sPara, QVariant o);
// 外部控制
virtual void slotOuterValidate(QString sPara, QVariant o, bool& bValid, bool& bSet);
/// @brief 响应属性页子参数列表改变,比如调用水平井段数编辑功能
/// @param sSegName: (in) 基准参数,为英文标识,如流动段数:"Nq"
/// @param vvec: (in & out) 子参数数据,
/// 注意key为英文如"NqX","NqL","NqQ"之类与xml配置文件严格对应
/// @param dWellLen: (in) 水平井长度
/// @param bModified: (out) 是否正确触发且vvec发生改变
virtual void slotSegItemMore(const QString sSegName, \
QVector<QMap<QString, double> >& vvec, \
const double dWellLen, \
bool& bModified);
/// @brief 响应边界信息改变,比如修改平行边界,由上下改为左右
/// @param pItem: (in) 当前的GroupItem其实即是本类iGridRowGroupBdy
/// @param vvec: (in & out) 边界信息数据
/// @param bModified: (out) 是否正确触发且vvec发生改变
void slotBdyDetails(iGridRowItem* pItem, \
QVector< iBdyInfo* >& vvec, \
bool& bModified);
/// @brief 响应 触发按钮,允许外部进行按钮操作,比如弹出对话框之类
/// @param sName: (in) 参数标识,为英文标识
/// @param vCustom: (in & out) 外部弹出后,可以把数据传递回来,并且缓存,以支持序列化
/// @param bModified: (out) 是否正确触发且vCustom发生改变
void slotItemBtnClicked(const QString sName, QVariant& vCustom, bool& bModified);
/// @brief 触发参数(其它,比如边界,下拉选项)改变,允许外界进行更改
/// @param sName: 参数名称
/// @param o1: 当前选择的数据Indexcurrentindex在列表o2中的索引
/// @param o2: 辅助数据如Cbx的下拉填充内容QStringList
/// 比如有的边界,可以下拉包括 无限大,有的不需要
/// @param bSet:是否已经正确设置
/// @note 通常 在 setParameter 函数中触发
void slotItemExPrevChanged(QString sName, \
QVariant& o1, QVariant& o2, \
bool& bSet);
/// @brief 响应Basic对话框的Changed当勾选多层或者多层数据修改了则触发
void slotBasicMultiLayerOptionChanged();
// 对GridRowUtils右键菜单进行调整
virtual void slotAdjustGridUtilContextMenu(QMenu*& pMenu, iGridRowItem* pItem);
virtual void slotShowAllItems();
virtual void slotShowMainItems();
virtual void slotShowHelpBox();
virtual void slotHideHelpBox();
// help msg
virtual void slotHelpMsg(QString& s);
protected:
void showItems(bool bMainItems);
void setHelpBoxVisible(bool bVisible);
//virtual void makesureListParas(QStringList& listParas); //对显示名称进行调整
virtual void runParseOldVersion(QStringList& listParas, ZxSerializer* ser);
QStringList checkTypes(); //类别
// 根据当前选中模型处理特殊参数
void findSpecialParas(iModelOption* pOption);
//设置参数隐藏
void setSpecialParasHide(bool &IsAdd);
/// @brief 检查参数选项是否需要外部定制(其它,比如边界,下拉选项)
/// @param sName: 参数名称
/// @param o1: 当前选择的数据Indexcurrentindex在列表o2中的索引
/// @param o2: 辅助数据如Cbx的下拉填充内容QStringList
/// 比如有的边界,可以下拉包括 无限大,有的不需要
bool checkSpecialBDY(QString sName, \
QVariant& o1, QVariant& o2);
protected:
// 布局器
QVBoxLayout* m_pMainLayout;
QStringList m_listParas;
iGridRowUtils* m_pGridItemUtils;
#ifdef _SCAN_OLD_CODES_
// 临时,不序列化
QStringList m_listParaTags;
#endif
// 临时
QString m_sSerie;
QString m_sWbs;
QString m_sWelTag;
QString m_sResTag;
QString m_sBdy;
// 满足当前模型条件的特殊的Parameter
QVector<iParameter*> m_vecSpecialParas;
// 多层数据
QVector<tLayerParaInfo*> m_vecLayerInfos;
bool m_bDnMode;
bool m_bMultiPhase;
PvtFluidType m_pft; //20260407 Added
iWxParam* m_pWxBk;//不涉及序列化
iModelOption* m_pOption; //不涉及序列化
// Help
QTextEdit * m_pHelpBox;
protected:
// 参数来源标识,默认情况下,为 s_Sys_Para_Default
// 不涉及序列化
QString m_sParaSrcTag;
// 临时,是否线性流,目前只考虑了 常规,其它如多层等均未考虑
// 该函数是基于WelID根据后台ini文件进行判断
// 目的是决定,边界是否特殊定制
// 目前主要用于西安线性流模型
bool m_bLinearFlow; //不涉及序列化
};