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/mToolDiffusion/iWxDiffusionMain.h

197 lines
5.8 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 "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<QString, double>& 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<QString, QVariant>& map);
signals:
void sigDiffusionResultsChanged(QMap<QString, double>& map);
void sigPseudoResults(VVecDouble& vvec);
void sigPseudoResults3(const VVecDouble&, const QMap<QString, iAlgPseuMethodTriInfo*>&, const QMap<QString, double>&);
void sigPseudoResultsC(const VVecDouble&, const QMap<QString, iAlgPseuMethodCompInfo*>&, const QMap<QString, double>&);
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<QString, QVariant>& map);
// 返回当前的相态(主+次,其中次为组合,需要解析)
virtual void slotGetCurPhaseOptions(QMap<QString, QVariant>& map);
public:
private:
// 当前勾选项
QStringList m_listDiffusions;
// Ribbon
iWxToolBar* m_pWxToolBar;
// 子窗体与Cmd的ID一一对应
QMap<QString, iWxDiffusionBase*> m_mapSubWxs;
// 布局相关
QVBoxLayout* m_pMainLayout;
QStackedWidget* m_pStackedWx;
// 是否向导模式
bool m_bWizardMode;
// 相态选择(从前面传递过来)
// map["MainOption"] = (int)opMain;
// map["SubOption"] = (int)fluidType;
QMap<QString, QVariant> m_mapPhaseInfos;
};