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/iWxDiffusionSub.h

262 lines
7.4 KiB
C

#pragma once
#include "qglobal.h"
#if (QT_VERSION >= 0x050000)
#include <QtWebEngineWidgets/QtWebEngineWidgets>
#define QWebView QWebEngineView
#else
#include <QtWebKit/QWebView>
#endif
#include "mAlgDefines.h"
#include "iWxDiffusionBase.h"
#include "mToolDiffusion_global.h"
class ZxTableView;
class ZxTableModel;
class iGridRowUtils;
class ZxPtyDock;
class IxPtySource;
class ZxRenderItem;
class ZxObjCurve;
class iCurveDesc;
class iGuiPlot;
class iWxDiffusionHeader;
class iAlgDiffusionBase;
class M_TOOL_DIFFUSION_EXPORT iWxDiffusionSub : public iWxDiffusionBase
{
Q_OBJECT
public:
explicit iWxDiffusionSub(QString sDiffusion, \
QWidget* parent /*= 0*/);
~iWxDiffusionSub();
// 设置关联
void setBindInfos(iWxDiffusionHeader* pSubHeader);
// 初始化
virtual void initUI();
// 导出导入
virtual bool importOrExport(bool bImport);
// 当主窗体相态发生改变时的处理(主+次,其中次为组合,需要解析)
virtual void freshOnPhaseChanged(QMap<QString, QVariant>& map);
void makesurePft();
/// @brief 获取 Diffusion页面中某个参数的具体数值
/// @param sPara,参数,英文标识而且大小写敏感
/// @param d,返回的结果
/// @note 主要是左侧属性页上的各项的数据参照xml定义进行读取
virtual bool getDiffParaOf(QString sPara, double& d);
/// @brief 获取 Diffusion页面中计算结果基本上就是右侧对应表格的数据
/// @param vvec,返回数据,即计算结果,与右侧表格对应
virtual bool getDiffRstOf(VVecDouble& vvec);
/// @brief 获取 Diffusion页面中所有参数数值
/// @param dso,参数,代表是相渗还是压敏还是吸附
/// @param map,返回的结果。
/// @param bOnlyFitted,是否只考虑拟合类参数,本处不涉及
/// @param bClearMap,是否清空。
/// @note 主要是左侧属性页上的各项的数据参照xml定义进行读取
virtual bool getDiffAllParaValues(QMap<QString, double>& map, \
bool bOnlyFitted = false, \
bool bClearMap = true);
iAlgDiffusionBase* getAlg(bool bCreateIfNotExists = false);
protected:
// 标识
virtual void configLabels();
virtual QStringList getTableTitles();
// 布局
virtual void initUI_Inputs();
virtual QWidget* initUI_Inputs_Up();
virtual void initUI_Inputs_Up_GridPty(QVBoxLayout*& pLayoutV);
virtual void initUI_Inputs_Up_Fuzzies(QVBoxLayout*& pLayoutV);
virtual QWidget* initUI_Inputs_Down();
virtual void initUI_Inputs_Down_TableView(QVBoxLayout*& pLayoutV);
virtual void initUI_Chart();
virtual void initUI_Chart_One(iGuiPlot* pWxPlot);
virtual void initUI_DockPty();
virtual void initUI_Outputs_TableView();
virtual void initUI_Others();
// 默认值
virtual void initDefault();
void fillTableViewWithDefault(ZxTableView* pTableView);
// 返回指定的绘图对象体
virtual iGuiPlot* getWxPlotOf(int n = 0);
protected:
void bindDockPty(IxPtySource* pPtyObj);
// 组织初始x数值
virtual VecDouble defaultInputs();
virtual double defaultScaleMax();
virtual double defaultScaleMin();
virtual int defaultInputCount();
protected:
// 算法相关
virtual void resetGridPty();
virtual bool makesureAlg();
virtual bool configAlg();
// 输入表格
virtual void freshChartByTableInputsChange();
virtual bool makesureTableInputs(VVecDouble& vvec);
virtual void refreshTableAbouts(VVecDouble& vvec);
// 算法算法
virtual void freshChartByGridPtyChange();
// 结果图+表
virtual void refreshRstAbouts(VVecDouble& vvec);
virtual void refreshRstCharts(VVecDouble& vvec);
virtual void refreshRstTables(VVecDouble& vvec);
virtual void clearChart(iGuiPlot* pWxPlot, bool bClearAll = true); //false时只清空曲线不清空点
// 调用算法
virtual bool calRstByGridPty(VVecDouble& vvec);
// 是否用户输入时更改相关界面布局
virtual void freshUiByTableInputs(bool bCustom);
protected:
virtual void paintEvent(QPaintEvent*);
virtual void resizeEvent(QResizeEvent*);
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
public:
// 类似clone
virtual void copyFrom(ZxUiBase* p);
public slots:
// 响应左侧GridPty数据的改变注意该函数为父类继承过来的函数不能进行名称更改
virtual void slotParaCtrlValueChanged(QString sPara, QVariant o);
// 表格
void slotTableDataChanged(const QModelIndex&, const QModelIndex&);
void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index);
// 窗体构建及图窗口构建过程中涉及的信号
virtual void slotToolbarBuilt(QToolBar* pToolBar);
virtual void slotGraphItemPoliciesInstalled(ZxRenderItem*);
virtual void slotCustomInputClicked();
virtual void slotPtCountChanged();
// 图上选中了某一条曲线
// virtual void slotCurveSelected(ZxObjCurve* pCurve, bool bSelected);
signals:
// 从主窗体获取当前的相态(主+次,其中次为组合,需要解析)
void sigGetCurPhaseOptions(QMap<QString, QVariant>&);
public:
// 从当前所有的信息中获取参数的值
virtual bool getParaValue(QString sPara,
double &dValue,
QString sUnitDest = "");
// 返回所有参数Key为英文ID
virtual bool getAllParaValues(QMap<QString, double>& map,
bool bOnlyFitted = false,
bool bClearMap = true);
// 获取结果
virtual bool getAllResults(QMap<QString, double>& mapResults);
// 获取类似Zg、Cg的页面的原始数据
virtual bool getRawDataOf(QString sPara, VecDouble& x, VecDouble& y);
virtual bool getRawDataOf(QString sPara, VVecVariant& vvec);
virtual bool saveDiffusion();
// 文件标识
virtual QString getFileDiffusionTag();
protected:
// FluidType这是主类型
QString m_sDiffusion;
// SubHeader
iWxDiffusionHeader* m_pSubHeader;
// 布局(左侧)
QGroupBox* m_pWxInputs;
iGridRowUtils* m_pGridItemUtils;
ZxTableView* m_pTableViewInputs;
ZxTableModel* m_pTableModelInputs;
// 布局(中间)
iGuiPlot* m_pWxPlot;
// 布局(油藏)
ZxTableView* m_pTableViewOutputs;
ZxTableModel* m_pTableModelOutputs;
QTabWidget* m_pTabWx; //右侧显示区(多个)
QGroupBox* m_pGbxTop;
QGroupBox* m_pGbxBottom;
QSplitter* m_pSplitter;
QCheckBox* m_pCbxTableInputMode;
QLineEdit* m_pTbxPtCount;
// 左侧输入
QStringList m_listParas; //哪些参数,对应英文标识
// 属性框
ZxPtyDock* m_pDockPty;
QList<IxPtySource*> m_listProps;
// 坐标轴相关
QStringList m_listNames;
QStringList m_listUnits;
QString m_sTitle;
// 相态选择(从前面传递过来)
// map["MainOption"] = (int)opMain;
// map["SubOption"] = (int)fluidType;
QMap<QString, QVariant> m_mapPhaseInfos;
// 临时变量不涉及序列化
PvtFluidType m_oPft; //可以是单相,也可以是多相组合
// 调用的算法
iAlgDiffusionBase* m_pAlg;
// 参数列表(左侧)
QMap<QString, QVariant> m_mapParas;
};