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/mGui/mGuiJob/iWxModelOption.h

331 lines
12 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 "iWxBase.h"
#include "mGuiJob_global.h"
class ZxPlot;
class iWxModelSketch;
class iModelOption;
class iWxModelTipAssist;
class iModelInfoBase;
#ifdef _SCAN_OLD_CODES_
class iGridLineUtils;
#endif
class iModelDesc;
class tLayerDesc;
class ZxSplitterWx;
namespace Ui {
class iWxModelOption;
}
class M_GUI_JOB_EXPORT iWxModelOption : public iWxBase
{
Q_OBJECT
public:
enum ListWxItemType
{
LWIT_Group = 0, //这是分组Group比如直井、压裂直井等xml中配置为-1用于井型ListWx
LWIT_Separator = 1, //这是内部分割线通常项比较多的时候添加分割线xml中配置为-99
LWIT_Item_Todo = 2, //实际的ListWxItem项但是还没做完待完善TODOxml中配置有”TODO"
LWIT_Item_Enable = 3, //实际的ListWxItem项可以正常用
LWIT_Item_Unable = 4, //实际的ListWxItem项但因为模型不支持不能用
LWIT_Unknown
};
explicit iWxModelOption(QWidget *parent = 0);
~iWxModelOption();
// 初始化
virtual void initUI();
// 根据测试类型更改UI(比如多层、干扰等)
virtual void adjustUiByTestType(PvtTestType ptt);
virtual void hideAllUseOptions();
// 切换模型时刷新
virtual void refreshBrothers(bool bfreshSS = true);
virtual void refreshBrothers_SS();
// 组织结果数据,注vec不进行clear由调用方自行clear
virtual bool organizeResults(QVector<iResultInfo>& vec, QString sType);
// 返回所有参数Key为英文ID
virtual bool getAllParaValues(QMap<QString, double>& map,
bool bOnlyFitted = false,
bool bClearMap = true);
// 返回当前选中的
iModelOption* getOption();
// 示意图绘图(多幅,弹出对话框)
virtual void showSketchCharts();
/// @brief FitModel之后改变一些状态
void dealwithFitOption(iModelOption* p);
/// @brief 具体改变相的状态
/// @param pListWx QListWidget
/// @param sItem ID这是XML配置ID非ExtID
/// @param bSelectOnly 是否唯一选
void freshListWxCurrentItemTo(QListWidget* pListWx, QString sID, \
bool bSelectOnly = true);
#ifdef _SCAN_OLD_CODES_
void changeRowLineItem(iGridLineUtils* pLineUtils, \
QString sItem, QString sKey, \
bool bSelectOnly = true);
#endif
// 得到聚合物中启动低渗的按钮状态
bool getCbxStatePF();
protected:
// 新的listwidget展示模式
virtual void initNovelListWxs();
virtual void initSplitterWx();
virtual QWidget* initNovelListWxOf(QString sType, QListWidget*& pListWx);
virtual void fillNovelListWxOf(QListWidget* pListWx, QString sType);
virtual void adjustSplitterWx();
void initFromLasts();
#ifdef _SCAN_OLD_CODES_
void initUI_TopSpecial(QVBoxLayout*& pLayout); //该函数暂时不启用,后续可能需要重启
void initUI_ModelListWxs();
void initUI_ModelGridLines(QVector<iModelInfoBase*>& vec, \
QVBoxLayout* pLayout, \
QString sType = "");
QVector<iModelInfoBase*> classifyModelInfos(QVector<iModelInfoBase*>& vec, \
QString sType);
#endif
// 根据ini配置获取当前支持的模型序列
virtual bool _checkPossibleModelSeries(bool& bFilter, QStringList& listFilteredSeries);
// 判断当前Model是否需要考虑
virtual bool _isModelItemConsidered(iModelInfoBase* p, \
QString sType, \
const bool bFilter, \
const QStringList listFilteredSeries, \
int nIndex);
//考虑到Well也要做筛选这里单独写一个函数
virtual void fillWelListWx(QListWidget* pListWx, QString sType);
//由于WEl决定Res选项
virtual void fillResListWx(QListWidget* pListWx, QString sType);
// 填充List
virtual void fillListWx(QListWidget* pListWx, QString sType);
// 重新填充
virtual bool refreshListWxRes(); //重新填充储层Res
virtual bool refreshListWxWbs(); //刷新井储Wbs
virtual bool refreshListWxBdy(); //刷新边界Bdy
virtual bool _refreshListWxWbsOrBdy(QString sType); //刷新
/// @brief 根据当前的井型+储层,获取支持的井储类型或者边界类型
/// @param sType 井储或边界标识
/// @param listItemAlias 支持的井储或边界是中文Alias因为不会重复所以没用ID
/// @param bAdsorptionMode 是否吸附模式(统一情况下,吸附与非吸附分别对应西安和北京,二者的边界类型不太一致)
/// @note 内部自行获取当前的井型+储层类型
virtual bool _checkEnabledWbsOrBdyItems(QString sType, QStringList& listItemAlias, bool bAdsorptionMode);
/// @brief 根据当前的井型+储层获取iModelDesc
/// @param bAdsorptionMode 是否吸附模式(统一情况下,吸附与非吸附分别对应西安和北京,二者的边界类型不太一致)
/// @note 内部自行获取当前的井型+储层类型
virtual iModelDesc* _getCurModelDesc(bool bAdsorptionMode);
//////////////////////////////////////////////////////////
// 需要考虑看看能否统一通过配置来处理
// 四种ListWx的Item改变具体做什么
virtual void onWelItemChanged();
virtual void onResItemChanged(iModelDesc *pModelDesc);
virtual void onBdyItemChanged(iModelDesc* pModelDesc);
virtual void onWbsItemChanged();
// 模型切换后,对于吸附是否勾选的处理(控制到储层类型一级)
// 注意,该函数只是权宜之计,具体参见 iModelDesc 中说明
void freshUseOptionAS(iModelDesc* pModelDesc, bool bInit);
// 模型切换后,对于启动压力梯度是否勾选的处理(控制到储层类型一级)
// 注意,该函数只是权宜之计,具体参见 iModelDesc 中说明
void freshUseOptionPG(iModelDesc* pModelDesc, bool bInit);
// 模型切换后,对于小信号是否勾选的处理(控制到边界一级)
void freshUseOptionSS(iModelDesc* pModelDesc, bool bInit);
void _freshUseOptionOf(QCheckBox* pCbx, bool bInit, bool bEnable);
//////////////////////////////////////////////////////////
// 界面数据到Option载体
virtual void freshUi2Option();
void _freshUiListWx2Option(QListWidget* pListWx, QString sKey);
void _freshUiCheckBox2Option(QCheckBox* pCbx, QString sKey);
// 最近选用
void freshUiByOpenRecents();
void fillRecentModels();
// sModels形式
// QString sModel = QString("%1+%2+%3+%4:%5+%6+%7+%8").arg(pOption->getTagWbs())
// .arg(pOption->getTagWel())
// .arg(pOption->getTagRes())
// .arg(pOption->getTagBdy())
// .arg((int)pOption->m_oWbsType)
// .arg((int)pOption->m_oWelType)
// .arg((int)pOption->m_oResType)
// .arg((int)pOption->m_oBdyType);
void refreshRecentModels(QString sModels);
public:
// s 的格式:井储+井型+储层+边界(注意是一堆Code/ID
void freshModelDesc2ListWxs(QString sModelCodes, bool bFreshBrothers = true);
public:
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
protected:
// 对于序列化父类的QListWidget处理已经不能满足要求故重载该函数
virtual bool _writeCtrl(ZxSerializer* ser, QWidget* p, QString& sTag);
virtual bool _readCtrl(ZxSerializer* ser, QWidget*& p, QString& sTag);
// 反序列化时进行精准遍历
int _fuzzyRealIndexOfListWx(QListWidget* pWx, QString sWhatThis, QString sText, int nCurRow);
// 对旧版本的临时处理从读取到的VecString遍历得到新的配置的编码WhatThis
bool _getItemCode4OldVersion(const VecString& vecOldSaveds, QString& sWhatThis);
protected:
virtual void paintEvent(QPaintEvent *);
virtual bool eventFilter(QObject *obj, QEvent *event);
protected:
// 查找组下面的项(如果有)(井型+储层类型)
virtual bool findChildItemsOf(QListWidget* pListWx, \
QListWidgetItem* pItem, \
QVector<QListWidgetItem*>& vecChildItems, \
bool* ptrIsHidden = nullptr);
void initContextMenu(QListWidget* pListWx, \
QListWidgetItem* pItem, \
bool bHidden);
/// @brief 绑定并切换Item状态
/// @param pItem
/// @param pModelInfo 关联的XML节点对象
/// @param oType 状态模式类型如果为Unknown则自动从pModelInfo获取
void bindAndChangeItemBy(QListWidgetItem* pItem, iModelInfoBase* pModelInfo, \
ListWxItemType oType = LWIT_Unknown);
/// @brief 切换Item状态的具体实现
void _changeItemStateTo(QListWidgetItem* pItem, ListWxItemType oType);
// 折叠/展开
void expandOrCollapse(bool bExpand);
void expandOrCollapseAll(bool bExpand);
// 隐藏Tip助手框
void hideWxAssist();
QListWidget* getListWxByType(QString sType);
QString getTypeByListWx(QListWidget* pListWx);
protected slots:
// 模型选择
virtual void slotModelOptionChanged(QString);
// 各复选框选项的状态设定
void slotUseOptionCbxChanged();
// 双击(井型+储层类型)
virtual void slotListWxItemDoubleClicked(QListWidgetItem* pItem);
//virtual void slotListWxItemClicked(QListWidgetItem* pItem);
// 鼠标移动至
virtual void slotListWxItemEntered(QListWidgetItem* pItem);
virtual void slotListWxLeaveAllItems();
virtual void slotCheckAndHideWxToolTips();
virtual void slotHideWxAssist();
// 右键(井型+储层类型)
virtual void slotListWxCustomMenu(const QPoint& pos);
// 右键菜单
virtual void slotExpandGroup();
virtual void slotCollapseGroup();
virtual void slotExpandGroupAll();
virtual void slotCollapseGroupAll();
// 最近选用
void on_listWxRecents_doubleClicked(const QModelIndex &index);
void on_cbxOpenRecents_clicked();
void on_sbRecentCounts_valueChanged(int arg1);
// ToolTips辅助助手开关
void on_btnAssist_clicked();
signals:
// 模型切换信号
void sigParasChangedEx(iModelOption* );
// 增加这个信号主要增加小信号的选择模式(目前小信号只比普通模式多一条线,增加信号,保证绘制时候出现)
void sigCbxStateSsChanged(bool bSsChecked);
#ifdef _SCAN_OLD_CODES_
// 聚合物PF
void sigCbxStatePfChanged(bool bCheck);
#endif
/// @brief 触发消息,获取具体的多层信息
void sigGetMultiLayerOptions(bool&, QVector<tLayerDesc*>*);
protected:
Ui::iWxModelOption *ui;
QListWidget* m_pListWxWel;
QListWidget* m_pListWxRes;
QListWidget* m_pListWxWbs;
QListWidget* m_pListWxBdy;
// 选择内容的载体
iModelOption* m_pOption;
// ListWidget Ctrls / CheckBox
QMap<QString, QWidget*> m_mapSubWxs;
// 示意图
iWxModelSketch* m_pWxSketch;
// iWxModelSketch* m_pWxTheory; //二者用的同一个窗体,暂未启用,后续考虑
// 临时变量,不涉及序列化
bool m_bRecentDbClick;
// 右键菜单
QMenu* m_pContextMenu;
// 临时,针对右键操作而设定的对象体
QListWidget* m_pTempListWx;
QListWidgetItem* m_pTempListWxItem;
ZxSplitterWx* m_pSplitterWx;
// 临时Tip助手相关
iWxModelTipAssist *m_pWxAssist;
QTimer* m_pTimerAssist;
bool m_bAssistOn;
QHBoxLayout* m_pLayoutBottom;//临时,为了产能
};