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

267 lines
8.4 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 "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();
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);
void prepareAlgCalObj();
// 主要是为了顺序
QStringList getCheckedMethodList(QString sPara, bool bIncludeX);
// 默认模拟勾选第一个
void simuCheckFirstOne();
protected:
// 程序启动,即把所有的参数先计算一遍
void calAndCacheAll(bool bUpdatePlotsIfChecked);
void recalAndCacheOf(QString sPara, bool bUpdatePlotsIfChecked);
virtual void cacheAlgRst(QString sPara, QString sMethodBase, \
QMap<QString, VecDouble>& mapRs, \
QPointF& ptRs, QPointF& ptReferPb);
// 各个Pvt参数具体涉及到的算法
void dealwithPvtItemAlgos();
void dealwithPvtItemAlgos_O(QString sPara);
void dealwithPvtItemAlgos_G(QString sPara);
void dealwithPvtItemAlgos_Gc();
void dealwithPvtItemAlgos_W(QString sPara);
void dealwithAlgoBindings(); //绑定算法类
iPvtParaItemGroup* getCurPvtGroup();
void bindDockPty(IxPtySource* pPtyObj);
protected:
// 绘图相关
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);
bool updateSubTableAboutsBy(QString sMethodBase, QString sPara);
void updateSubTableDataBy(QString sPara);
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 = NULL);
// 显示常数部分
virtual void showConstAbouts(QString sPara, bool bVisible);
// 表格只读
virtual void setTableEditable(QString sPara, bool bEditable);
void freshByConstChange(QString sPara);
void freshByTableChange(QString sPara);
protected:
virtual void paintEvent(QPaintEvent*);
virtual void resizeEvent(QResizeEvent*);
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
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 &fValue,
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();
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;
};