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++

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 "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();
//设置参数隐藏
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; //不涉及序列化
};