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/mToolPvt/iWxPvtSubPhase.h

296 lines
10 KiB
C

#pragma once
#include "qglobal.h"
#if (QT_VERSION >= 0x050000)
#include <QtWebEngineWidgets/QtWebEngineWidgets>
#define QWebView QWebEngineView
#else
#include <QtWebKit/QWebView>
#endif
#include "iWxPvtBase.h"
#include "mToolPvt_global.h"
class iAlgPvtBase;
class iWxPvtPhaseParaCal;
class iWxPvtSubHeader;
class iWxPvtUtilItem;
class ZxMdiArea;
class iPvtParaItem;
class iWxPvtPhaseParaPlot;
class ZxRenderItem;
class ZxPtyDock;
class IxPtySource;
class ZxObjCurve;
class ZxTableView;
class ZxTableModel;
class iPvtParaItemGroup;
class iPvtParaCalRst;
class M_TOOL_PVT_EXPORT iWxPvtSubPhase : public iWxPvtBase
{
Q_OBJECT
public:
explicit iWxPvtSubPhase(QString sFluidType, \
QString sPhaseType, \
QWidget *parent = 0);
~iWxPvtSubPhase();
// 设置关联
void setBindInfos(iWxPvtSubHeader* pSubHeader);
// 初始化
virtual void initUI();
/// @brief 获取 Pvt页面中油气水项某个参数的计算结果
/// @param sPara,参数,英文标识而且大小写敏感,如"Pb"/"Rs"/"Co"等
/// @param vecX,返回之x列通常是压力或温度参数
/// @param vecY,返回之y列即sPara对应的参数数值列与vecX一一对应
/// @param ptrPtResult,结果选用的点即PVT曲线上方块点
/// @param ptrPtReferPb,对应的pb相应的参考点
bool getPvtParaRstOf(QString sPara, \
VecDouble& vecX, VecDouble& vecY, \
QPointF* ptrPtResult = nullptr, \
QPointF* ptrPtReferPb = nullptr);
/// @brief 根据 Pvt页面中各自的算法进行重新计算目前暂时用于CO2模块之中
/// @param sPara,参数,通常以英文标识为准
/// @param mapInputs 该算法涉及的输入参数
/// @param dOut 计算结果
virtual bool calPvtRstOf(QString sPara, QMap<QString, double>& mapInputs, double& dOut);
protected:
// 默认值
virtual void initDefault();
virtual void initLayouts();
virtual void initMethodLists();
virtual void dealWithMethodItemExt(QGridLayout* pLayout, \
QString sPara, int r, int& c);
virtual void fillParaMethods();
iPvtParaItem* getPvtParaConfig(QString sPara);
virtual void prepareAlgCalObj();
// 主要是为了顺序
QStringList getCheckedMethodList(QString sPara, bool bIncludeX);
// 默认模拟勾选第一个
void simuCheckFirstOne();
protected:
// 程序启动,即把所有的参数先计算一遍
virtual void calAndCacheAll(bool bUpdatePlotsIfChecked);
virtual bool recalAndCacheOf(QString sPara, bool bUpdatePlotsIfChecked);
virtual void cacheAlgRst(QString sPara, QString sMethodBase, \
QMap<QString, VecDouble>& mapRs, \
QPointF& ptRs, QPointF& ptReferPb);
// 各个Pvt参数具体涉及到的算法
virtual void dealwithPvtItemAlgos();
virtual void dealwithPvtItemAlgos_O(QString sPara);//油
virtual void dealwithPvtItemAlgos_G(QString sPara);//气
virtual void dealwithPvtItemAlgos_W(QString sPara);//水
virtual void dealwithPvtItemAlgos_C(QString sPara);//二氧化碳
virtual void dealwithPvtItemAlgos_S(QString sPara);//盐水
virtual void dealwithPvtItemAlgos_M(QString sPara);//混合气体
virtual void dealwithPvtItemAlgos_Gc(); //临界
virtual void dealwithAlgoBindings(); //绑定算法类
iPvtParaItemGroup* getCurPvtGroup();
void bindDockPty(IxPtySource* pPtyObj);
protected:
// 绘图相关
virtual bool freshPlotOf(QString sPara, bool bVisible);
iWxPvtPhaseParaPlot* getSubPlotBy(QString sPara, \
bool bExistForced, \
bool bVisibleForced);
iWxPvtPhaseParaPlot* initSubPlotBy(QString sPara);
bool updateSubPlotBy(iWxPvtPhaseParaPlot* pWxPlot, QString sPara);
void closeSubPlotBy(QString sPara);
void relayoutSubWnds();
protected:
// 表格相关
virtual void initSubTableAbouts();
virtual bool setActiveTableAboutsOf(QString sPara);
virtual bool updateSubTableAboutsBy(QString sMethodBase, QString sPara);
virtual void updateSubTableDataBy(QString sPara);
virtual void updateSubTableTitleBy(QString sPara, QString sMethodBase);//指定第2列为table只有table特殊
//virtual void refreshTable(ZxObjCurve* pCurve, QString sPara, bool bChangeTitle);
//void closeSubTableAbouts(QString sPara);
virtual void fillTableViewWithDefault(ZxTableView* pTableView, QString sPara);
virtual void changeTableTitles(ZxTableModel* pTableModel, \
ZxObjCurve* pCurve = nullptr);
// 显示常数部分
virtual void showConstAbouts(QString sPara, bool bVisible);
// 表格只读
virtual void setTableEditable(QString sPara, bool bEditable);
virtual void freshByConstChange(QString sPara);
virtual void freshByTableChange(QString sPara);
protected:
virtual void paintEvent(QPaintEvent*);
virtual void resizeEvent(QResizeEvent*);
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
virtual void onDeserialized();
public:
// 类似clone
virtual void copyFrom(ZxUiBase* p);
virtual void freshAllPlotsByRstDatas();
public slots:
// 窗体构建及图窗口构建过程中涉及的信号
virtual void slotToolbarBuilt(QToolBar* pToolBar);
virtual void slotGuiPlotModified(bool b);
virtual void slotSubPlotWxActivated(QMdiSubWindow* p);
virtual void slotPlotAreaClicked(const QPointF&);
virtual void slotConfirmCloseSubWxs(bool& bClosable);
virtual void slotSubWxClosed();
// 自行调整,绘图视图下侧的内容显示
virtual void slotAdjustPlotBottomLayout(QString sPara, QHBoxLayout*& pLayoutH);
virtual void slotGraphItemPoliciesInstalled(ZxRenderItem*);
// 当选择变化时发射,传递复选框选中的索引和单选框的索引
virtual void slotPvtParaMethodChanged(const QVector<int>& vecIndexCbx, int indexRadio);
virtual void slotPvtParaPlotChecked();
// 计算时,对于参数的设定
virtual void slotDealwithAlgoMembers(iAlgPvtBase*& p);
// 获取表格数据
virtual void slotGetPvtTableData(QString sPara, VVecVariant& vvec);
virtual void slotGetPvtConstData(QString sPara, double& d);
void slotConstValueChanged(QString s);
// 参数结果结果获得
virtual void slotPvtAlgResult(QString sPara, QString sMethodBase, \
QMap<QString, VecDouble>& mapRs, \
QPointF& ptRs, QPointF& ptReferPb, \
bool bUpdatePlotsIfChecked);
// 图上选中了某一条曲线
virtual void slotCurveSelected(ZxObjCurve* pCurve, bool bSelected);
// 这是各个Item触发
//void slotItemParaMethodChanged(QString sPara, QString sMethod);
// 获取Pb压力值
void slotDealwithReferPb(QPointF& pt);
// 表格
void slotTableCellChanged(const QModelIndex&, const QModelIndex&);
void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index);
/// @brief 响应当Header触发参数数据更改时比如压力数据范围改变
void slotHeaderOptionDataChanged();
signals:
// 某些计算结果数据更改
void sigParaRstDataChanged(QString sPara);
public:
// 从当前所有的信息中获取参数的值
virtual bool getPvtParaValue(QString s, double& d);
virtual bool getParaValue(QString sPara,
double &dValue,
QString sUnitDest = "");
// 获取结果
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 savePvt();
// 文件标识
virtual QString getFilePvtTag();
QMap<QString, iPvtParaCalRst*>* getMapAllRsDataPtrs() { return &m_mapAllRsDatas; }
protected:
// FluidType这是主类型
QString m_sFluidType;
// PhaseType相类型
QString m_sPhaseType;
// 当前相 涉及的所有参数标识,通常英文
QStringList m_listAllParas;
// SubHeader
iWxPvtSubHeader* m_pSubHeader;
/////////////////////////////////////////////////////////////
// 布局
QSplitter* m_pSplitter; //拆分器
QVBoxLayout* m_pLayoutOptions; //左侧选项
QGroupBox* m_pGbxMethods; //左侧:方法选择区
QMap<QString, QComboBox*> m_mapCmbParas; //左侧:方法下拉缓存
QMap<QString, QCheckBox*> m_mapCbxParas; //左侧:方法是否勾选缓存
ZxMdiArea* m_pMdiArea; //中间绘图区域
QMap<QString, iWxPvtPhaseParaPlot*> m_mapPvtItemPlots;//中间:绘图缓存
QTabWidget* m_pTabWxTables; //右侧显示区(多个)
QStackedWidget* m_pStackedTableWx;//右侧:表格区
//QMap<QString, QHBoxLayout*> m_mapLayoutConsts; //右侧:常数项
QMap<QString, QVector<QWidget*> > m_mapWxConsts; //右侧:常数项
QMap<QString, ZxTableView*> m_mapTableViews; //右侧:表格
/////////////////////////////////////////////////////////////
// 算法类,与参数标识对应
QMap<QString, iAlgPvtBase*> m_mapPvtAlgs;
iWxPvtPhaseParaCal* m_pAlgCal;
// 特殊方法的标识与配置xml文件要对应而且必须放在列表的最前面
QStringList m_listSpecialMethodTags; //所有
// 计算结果缓存(当前相的所有计算结果,以 参数标识 为键值)
QMap<QString, iPvtParaCalRst*> m_mapAllRsDatas;
// 常数
QMap<QString, double> m_mapConstValues;
// 临时不涉及序列化
QMap<QString, iPvtParaItem*> m_mapCachedPvtDefineItems;
//bool m_bMethodItemExt; //是否在Method右侧增加按钮扩展列
// 属性框
ZxPtyDock* m_pDockPty;
QList<IxPtySource*> m_listProps;
bool m_bModified;
};