|
|
#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项,但是还没做完,待完善,TODO,xml中配置有”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;//临时,为了产能
|
|
|
};
|