#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& vec, QString sType); #ifdef _SCAN_OLD_CODES_ bool sortByShow(QVector& vec); #endif // 返回所有的跟模型相关的边界参数的类型,封闭或定压 // 封闭:0 // 定压:1 bool getBdyInfos(QMap& map); // 从各个Wx(m_vecWxDatas)中遍历查找 virtual bool setParaValue(QString sPara, double d); virtual bool getParaValue(QString sPara, double& d); // 返回所有参数,Key为英文ID virtual bool getAllParaValues(QMap& map, bool bOnlyFitted = false, bool bClearMap = true); virtual bool getAllParaUnits(QMap& map, bool bOnlyFitted = false, bool bClearMap = true); /// @brief 收集多层相关的一些乱七八糟的信息,包括模型选项、边界类型、每条边的定压还是封闭等等。 /// @param map 收集的结果 /// @param bClearOlds 是否清空 /// @note 对于通用的,直接用标识,对于层内的添加层标识 bool collectFuzzyMLs(QMap& map, \ bool bClearOlds = false); // 模式设置 void setDnMode(bool b); // 由ModelOption的触发(常规模式) void freshByNormalMode(iModelOption* pOption); // 由ModelOption的触发(多层模式) void freshByLayersMode(iModelOption* pOption); void makesureLayerParaInfos(QVector& 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*); private slots: void slotShowParam(bool bHide); public: // 当前面窗体参数改变时,本窗体响应 virtual void slotParasObtained(QMap& map); // 根据多相单相对右侧参数进行调整 void setToMpMode(bool bMultiPhase, PvtFluidType pft); void freshParasByMap(QMap& 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 >& 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: 当前选择的数据Index,currentindex在列表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: 当前选择的数据Index,currentindex在列表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 m_vecSpecialParas; // 多层数据 QVector 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; //不涉及序列化 };