#pragma once #include "mAlgDefines.h" #include "iWxPseuBase.h" #include "mToolPseu_global.h" class iWxToolBar; class iRibbonXmlCmd; class iRibbonXmlTab; class TreeWxConfig; class iPseu3Wrapper; class iPseuCWrapper; class iAlgPseuMethodTriInfo; class iAlgPseuMethodCompInfo; class iWxPseuBase; class iWxPseuHeader; class iWxPseuSub; class M_TOOL_PSEU_EXPORT iWxPseuMain : public iWxPseuBase { Q_OBJECT public: iWxPseuMain(QWidget* parent = 0); ~iWxPseuMain(); // 是否向导模式 void setWizardMode(bool b); // 初始化 virtual void initUI(); // 文件标识 virtual QString getFilePseuTag(); // 新增接口(与一个数据对象体进行绑定式关联) virtual bool saveAsDataObj(ZxDataObject*& pDataObj); virtual bool loadFromDataObj(ZxDataObject*& pDataObj); /// @brief 获取 拟压力页面中,拟压力结果表 /// @param vvec,返回数据,长度为4,分别为压力P/拟压力Ps/偏差因子Zg/黏度Miug /// 压力,单位 Mpa /// 拟压力,单位 Pa/sec /// 偏差因子,单位 Pa/sec /// 黏度,单位 Pa/sec bool getPseuRstOf(VVecDouble& vvec); // 拟压力模式 VVecDouble getPseuData(); iPseu3Wrapper* getPseuData3(); //三区 iPseuCWrapper* getPseuDataC(); // 返回名称标识 virtual QString getAwiName(); public: // 类似clone virtual void copyFrom(ZxUiBase* p); private: // //void init(); // // 初始化 void initUI_MainLayout(); void initUI_Tops(); void initUI_StackedWx(); void initUI_Bottoms(); // 具体的内容填充 void initStatckedWxs(); void makesureSubWxOf(QString sName); iWxPseuHeader *createSubHeader(); //Header iWxPseuSub* createPseuSub(QString sName);//三种拟压力 // 该Action是否必须执行 bool isActionMust(QString sAction, bool bApplyMode); // 刷新 //void refresh(); // void runAction(QString sAction); bool importOrExport(QString sAction); bool savePseu(); bool loadPseu(); void refreshActionStates(); // 是否包含相态 bool isPhaseIncluded(QString sPhase); // 判断当前用的是哪一种拟压力 // 注意:有些常规、然后三区、然后组分 // 只有当结果数据有了,才是正确的 iWxPseuSub* getActionedPseuSub(); 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); public: void cachePseudoResults(VVecDouble& vvec); void cachePseudoResults3(const VVecDouble&, \ const QMap&, \ const QMap&); void cachePseudoResultsC(const VVecDouble&, \ const QMap&, \ const QMap&); signals: void sigPseuResultsChanged(VVecVariant& vvec); // 获取某个参数的PVT数据(比如Zg) // vvec为两列 // vvec[0]: p1 Zg1 // vvec[1]: p2 Zg2 // vvec[2]: p3 Zg3 void sigGetPvtDataOf(QString sPara, VVecVariant& vvec); private slots: void slotBtnTriggered(); void slotBtnHelp(); void slotBtnApply(); void slotBtnOK(); void slotBtnCancel(); 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); // 返回某个参数的PVT数据(比如Zg) // vvec为两列 // vvec[0]: p1 Zg1 // vvec[1]: p2 Zg2 // vvec[2]: p3 Zg3virtual void slotGetPvtDataOf(QString sPara,VVecVariant& vvec); private: // 当前勾选项 QStringList m_listPseus; // Ribbon iWxToolBar* m_pWxToolBar; // 子窗体,与Cmd的ID一一对应 QMap m_mapSubWxs; // 布局相关 QVBoxLayout* m_pMainLayout; QStackedWidget* m_pStackedWx; // 是否向导模式 bool m_bWizardMode; // 流体 PvtFluidType m_oPft; // 相态选择(从前面传递过来) // map["MainOption"] = (int)opMain; // map["SubOption"] = (int)fluidType; QMap m_mapPhaseInfos; // //Pseudo结果,四列 // VecDouble vecP = vvec[0] // VecDouble vecPs = vvec[1] // VecDouble vecZg = vvec[2] // VecDouble vecMug = vvec[3] VVecDouble m_vvecPseuData;//原先VecPointF iPseu3Wrapper* m_pPseu3Wrapper; //对于三区,采用数据体 iPseuCWrapper* m_pPseuCWrapper; };