#pragma once #include "iWxDiffusionBase.h" #include "mToolDiffusion_global.h" class iWxToolBar; class iRibbonXmlCmd; class iRibbonXmlTab; class TreeWxConfig; class iWxDiffusionSub; class iAlgPseuMethodTriInfo; class iAlgPseuMethodCompInfo; class M_TOOL_DIFFUSION_EXPORT iWxDiffusionMain : public iWxDiffusionBase { Q_OBJECT public: iWxDiffusionMain(QWidget* parent = 0); ~iWxDiffusionMain(); /// @brief 设置默认勾选哪些项 /// @param lists哪些项,英文标识 void setDiffusionInfos(QStringList lists); // 是否向导模式 void setWizardMode(bool b); // 初始化 virtual void initUI(); // 文件标识 virtual QString getFileDiffusionTag(); // 新增接口(与一个数据对象体进行绑定式关联) virtual bool saveAsDataObj(ZxDataObject*& pDataObj); virtual bool loadFromDataObj(ZxDataObject*& pDataObj); // 返回名称标识 virtual QString getAwiName(); public: // 类似clone virtual void copyFrom(ZxUiBase* p); /// @brief 获取 Diffusion页面中,某个参数的具体数值 /// @param dso,参数,代表是相渗还是压敏还是吸附 /// @param sPara,参数,英文标识而且大小写敏感 /// @param d,返回的结果 /// @note 主要是左侧属性页上的各项的数据,参照xml定义进行读取 bool getDiffParaOf(DiffusionSubOption dso, QString sPara, double& d); /// @brief 获取 Diffusion页面中,所有参数数值 /// @param dso,参数,代表是相渗还是压敏还是吸附 /// @param map,返回的结果。 /// @param bOnlyFitted,是否只考虑拟合类参数,本处不涉及 /// @param bClearMap,是否清空。 /// @note 主要是左侧属性页上的各项的数据,参照xml定义进行读取 bool getDiffAllParaValues(DiffusionSubOption dso, \ QMap& map, \ bool bOnlyFitted = false, \ bool bClearMap = true); /// @brief 获取 Diffusion页面中,计算结果,基本上就是右侧对应表格的数据 /// @param dso,参数,代表是相渗还是压敏还是吸附 /// @param vvec,返回数据,即计算结果,与右侧表格对应 bool getDiffRstOf(DiffusionSubOption dso, VVecDouble& vvec); /// @brief 单独增加一个对相渗的处理(针对CO2,比较特殊,此处相渗是气水两相,具体咨询wangzg) /// @param dSg 气饱和度(范围0-100) /// @param dKrg (out) 气 /// @param dKrw (out) 水 bool calKrRstOf(double dSg, double& dKrg, double& dKrw); private: // void init(); // // 初始化 void initUI_MainLayout(); void initUI_Tops(); void initUI_StackedWx(); void initUI_Bottoms(); // 具体的内容填充 void initStatckedWxs(); void makesureSubWxOf(QString sName); iWxDiffusionBase* createSubHeader(); //Header iWxDiffusionBase* createDiffusionSub(QString sName); //油气水 // 该Action是否必须执行 bool isActionMust(QString sAction, bool bApplyMode); // 刷新 void refresh(); // void runAction(QString sAction); bool importOrExport(QString sAction); bool saveDiffusion(); bool loadDiffusion(); void refreshActionStates(); // 是否包含相态 bool isPhaseIncluded(QString sPhase); // 根据类型获取窗体 iWxDiffusionSub* getSubWxBy(DiffusionSubOption dso); protected: virtual void paintEvent(QPaintEvent*); virtual void resizeEvent(QResizeEvent*); virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); public: // 在导航模式下,点击下一步时,先判断本步是否正确 //virtual bool verifyCurInfos(QString& sLog); // 在导航模式下,点击下一步时,先判断本步是否正确 virtual bool checkCurWxInputs(); // 在每次设定时,从上一步获取数值,并且刷新至本窗体 virtual bool getAndFreshByPrevWx(); public slots: // 与sigPrevWxValueOf对应 virtual void slotValueToNextWx(QStringList& listParas, QMap& map); signals: void sigDiffusionResultsChanged(QMap& map); void sigPseudoResults(VVecDouble& vvec); void sigPseudoResults3(const VVecDouble&, const QMap&, const QMap&); void sigPseudoResultsC(const VVecDouble&, const QMap&, const QMap&); private slots: void slotBtnTriggered(); void slotBtnHelp(); void slotBtnApply(); void slotBtnOK(); void slotBtnCancel(); // 某项参数计算结果数据更改 //void slotParaRstDataChanged(QString sPara); void slotActionByRibbon(QWidget* pCtrl, iRibbonXmlCmd* pInfo, QVariant o); void slotRibbonTabActivated(iRibbonXmlTab* pTab); /// @brief 响应:当Heade中选项发生改变时 void slotHeaderOptionChanged(QStringList& list); // 当前面窗体参数改变时,本窗体响应 virtual void slotParasObtained(QMap& map); // 返回当前的相态(主+次,其中次为组合,需要解析) virtual void slotGetCurPhaseOptions(QMap& map); public: private: // 当前勾选项 QStringList m_listDiffusions; // Ribbon iWxToolBar* m_pWxToolBar; // 子窗体,与Cmd的ID一一对应 QMap m_mapSubWxs; // 布局相关 QVBoxLayout* m_pMainLayout; QStackedWidget* m_pStackedWx; // 是否向导模式 bool m_bWizardMode; // 相态选择(从前面传递过来) // map["MainOption"] = (int)opMain; // map["SubOption"] = (int)fluidType; QMap m_mapPhaseInfos; };