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/mTool/mToolPseu/iWxPseuMain.h

213 lines
5.5 KiB
C

#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<QString, QVariant>& map);
public:
void cachePseudoResults(VVecDouble& vvec);
void cachePseudoResults3(const VVecDouble&, \
const QMap<QString, iAlgPseuMethodTriInfo*>&, \
const QMap<QString, double>&);
void cachePseudoResultsC(const VVecDouble&, \
const QMap<QString, iAlgPseuMethodCompInfo*>&, \
const QMap<QString, double>&);
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<QString, QVariant>& map);
// 返回当前的相态(主+次,其中次为组合,需要解析)
virtual void slotGetCurPhaseOptions(QMap<QString, QVariant>& 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<QString, iWxPseuBase*> m_mapSubWxs;
// 布局相关
QVBoxLayout* m_pMainLayout;
QStackedWidget* m_pStackedWx;
// 是否向导模式
bool m_bWizardMode;
// 流体
PvtFluidType m_oPft;
// 相态选择(从前面传递过来)
// map["MainOption"] = (int)opMain;
// map["SubOption"] = (int)fluidType;
QMap<QString, QVariant> 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;
};