|
|
#pragma once
|
|
|
|
|
|
#include "iDlgBase.h"
|
|
|
#include "iResultInfo.h"
|
|
|
#include "iGridRowItemUnt.h"
|
|
|
#include "iModelInfo.h"
|
|
|
|
|
|
class iBdyInfo;
|
|
|
|
|
|
// 参数区统一处理的Utils
|
|
|
class X_GUI_GRIDPTY_EXPORT iGridRowUtils : public iDlgBase//QAbstractScrollArea
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 右键拷贝内容范围
|
|
|
enum CopyDataMode
|
|
|
{
|
|
|
CDM_CurItem = 0,//当前项
|
|
|
CDM_CurGroup, //当前组
|
|
|
CDM_AllItems, //所有项
|
|
|
CDM_Unknown
|
|
|
|
|
|
};
|
|
|
|
|
|
public:
|
|
|
|
|
|
explicit iGridRowUtils(bool bSimple = false, QWidget *parent = 0);
|
|
|
~iGridRowUtils();
|
|
|
|
|
|
public:
|
|
|
|
|
|
// 初始化
|
|
|
virtual void initUI();
|
|
|
#ifdef _SCAN_OLD_CODES_
|
|
|
// 对外暴露接口
|
|
|
virtual bool buildRowUtils(QStringList listParas, \
|
|
|
QStringList& listParaTags, \
|
|
|
bool bDnMode, \
|
|
|
QWidget* pWxDlg);
|
|
|
virtual bool _buildRowUtils(QStringList listParas, \
|
|
|
QStringList& listParaTags, \
|
|
|
iGridRowItem* pItemParent, \
|
|
|
bool bDnMode, \
|
|
|
bool bProperOrder = true);
|
|
|
#else
|
|
|
// 对外暴露接口
|
|
|
// 注:20260108,全面去除listParaTags参数接口
|
|
|
virtual bool buildRowUtils(QStringList listParas, \
|
|
|
bool bDnMode, \
|
|
|
QWidget* pWxDlg);
|
|
|
virtual bool _buildRowUtils(QStringList listParas, \
|
|
|
iGridRowItem* pItemParent, \
|
|
|
bool bDnMode, \
|
|
|
bool bProperOrder = true);
|
|
|
#endif
|
|
|
|
|
|
#ifdef _SCAN_OLD_CODES_
|
|
|
virtual bool createParamsUtils(QStringList listParas, \
|
|
|
bool bDnMode);
|
|
|
//ZXF20241110
|
|
|
//创建Model项
|
|
|
virtual iGridRowItem* createModelItem(iModelInfo* p, \
|
|
|
iGridRowItem* pGridItemG,\
|
|
|
int& nIndex);
|
|
|
#endif
|
|
|
|
|
|
virtual void setParaItems(QVector<iGridRowItem *>& vec, \
|
|
|
bool bDnMode, \
|
|
|
QWidget* pWxDlg);
|
|
|
|
|
|
virtual void setBounds(QRectF& rt);
|
|
|
virtual double getUtilHeight();
|
|
|
|
|
|
virtual void connectSignalsOf(iGridRowItem* p);
|
|
|
virtual void bkAllItems();
|
|
|
virtual QStringList getAllTags(); //不考虑层级
|
|
|
virtual void resetLayout(); //流动段增减后重置
|
|
|
// 根据名字获取
|
|
|
virtual iGridRowItem* getItemByPara(QString sPara);
|
|
|
//virtual iGridRowItem* getGridGroupItem(QString sTag);
|
|
|
// 根据名字取数据
|
|
|
virtual QVariant getItemValueByPara(QString sPara);
|
|
|
|
|
|
// 查询并处理 UseMdoe == 3 的参数,初始不显示
|
|
|
virtual void dealwithHide(bool bHideMode, bool& bItemChanged);
|
|
|
|
|
|
// 查询并处理 多相/单相切换 的参数,初始不显示
|
|
|
virtual void deawithMpMode(bool bMultiPhase, bool& bItemChanged);
|
|
|
|
|
|
virtual void dealwithItemOfs(ParaUseMode o, bool bHideMode, bool& bItemChanged);
|
|
|
|
|
|
// 清空
|
|
|
virtual void clearAllItems();
|
|
|
|
|
|
// Header
|
|
|
virtual void setHeaderVisible(bool b);
|
|
|
virtual bool isHeaderVisible();
|
|
|
|
|
|
// 对Items进行检测,正确输入
|
|
|
virtual bool checkItems();
|
|
|
|
|
|
// 刷新
|
|
|
virtual void updateItem(iGridRowItem* p);
|
|
|
|
|
|
|
|
|
virtual void insertItem(int nIndex, iGridRowItem* pItem);
|
|
|
//得到所有的大节点Group
|
|
|
virtual QVector<iGridRowItem*> getAllGridGroupItems();
|
|
|
//删除
|
|
|
virtual void removeGridGroupItem(iGridRowItem* pItemG);
|
|
|
virtual void removeGridChildItem(iGridRowItem* pItemC);
|
|
|
//删除组中的一个节点
|
|
|
virtual void removeGridItemFromGroup(iGridRowItem* pItemG, iGridRowItem* pItemC);
|
|
|
|
|
|
virtual void dealwithSegItem(QString sTag, double dNqAll);
|
|
|
|
|
|
// 获取属性页中,对应的第几个边界参数,顺序也是按照 m_pParaManager->getBdyRealNameOf(1); //对应 x1
|
|
|
// 把原来的"x1"之类,根据索引传递,查阅真实的,比如 ee,se,we,ne
|
|
|
// xIndex 从1开始,即遇到"x1"则传入1
|
|
|
virtual QString getBdyRealNameOf(int xIndex);
|
|
|
|
|
|
// 参数来源标识,默认情况下,为 s_Sys_Para_Default
|
|
|
void setParaSrcTag(QString s);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 按键
|
|
|
virtual void keyPressEvent(QKeyEvent* e);
|
|
|
|
|
|
/// @brief 获取当前激活的Item的索引,在全局m_vecAllItems中
|
|
|
/// @param bStrict 为true:取的item 处于激活同时hasFocus
|
|
|
/// 为false 取的item 处于激活同时 本类[iGridRowUtils] hasFocus
|
|
|
virtual int getFocusedItemIndex(bool bStrict = true);
|
|
|
|
|
|
/// @brief 获取下一个可以激活[获取索引]的Item的索引,在全局m_vecAllItems中
|
|
|
/// @param nFrom 为当前:要从nFrom+1开始算起,若干到头,则从0开始继续
|
|
|
/// @param bStrict 为true:不考虑隐藏、只读等
|
|
|
/// 为false 所有item都考虑
|
|
|
virtual int getNextItemIndexToFocus(int nFrom, bool bStrict = true);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 搭建过程
|
|
|
virtual QStringList getParaTypes(QStringList listParas);
|
|
|
virtual bool createAndAddItem(iGridRowItem* pParent, \
|
|
|
iParameter* p, QString sPara);
|
|
|
virtual iGridRowItem* createWithSegOlds(iGridRowItem* pParent, \
|
|
|
iParameter* p, QString sPara);//兼容原先,没有配置ParaType
|
|
|
|
|
|
|
|
|
// 这是一些特殊处理,就是创建完成所有Item后,相关的关联
|
|
|
// 如 产液段与有效长度
|
|
|
virtual void bindItems();
|
|
|
|
|
|
// 把所有Item从上到下(不考虑层级记录下来)
|
|
|
virtual bool getAllItems(QVector<iGridRowItem*>& vec); //不考虑层级
|
|
|
|
|
|
|
|
|
// 范围及布局
|
|
|
virtual void setSplitPos(double d);
|
|
|
virtual void updateLayout();
|
|
|
virtual void doLayout();
|
|
|
|
|
|
// 右键拷贝数据
|
|
|
virtual void copyDataBy(CopyDataMode o);
|
|
|
virtual bool collectsDataBy(CopyDataMode o, QVector<iGridRowItem*>& vec);
|
|
|
|
|
|
// void showItems(bool bMainItems);
|
|
|
// void setHelpBoxVisible(bool bVisible);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
virtual void mousePressEvent(QMouseEvent *);
|
|
|
virtual void mouseDoubleClickEvent(QMouseEvent* e);
|
|
|
virtual void mouseReleaseEvent(QMouseEvent *);
|
|
|
virtual void mouseMoveEvent(QMouseEvent *);
|
|
|
|
|
|
virtual void resizeEvent(QResizeEvent *);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
virtual void paintEvent(QPaintEvent *);
|
|
|
|
|
|
virtual void paintGrid(QPainter* pPainter);
|
|
|
virtual void paintHeader(QPainter* pPainter);
|
|
|
|
|
|
public slots:
|
|
|
|
|
|
virtual void slotActivateItem(iGridRowItem* p);
|
|
|
virtual void onActiveItemChanged(iGridRowItem* p);
|
|
|
virtual void slotValuePrevChanged(QVariant& o1, QVariant& o2);
|
|
|
virtual void slotValueExPrevChanged(QVariant& o1, QVariant& o2);
|
|
|
|
|
|
virtual void slotGetValueOf(QString sPara, QVariant& o, bool& bOk);
|
|
|
|
|
|
public slots:
|
|
|
|
|
|
// 右键
|
|
|
virtual void slotCustomContextMenu(const QPoint &pos);
|
|
|
|
|
|
virtual void slotCopyCurrentItem();
|
|
|
virtual void slotCopyCurrentGroup();
|
|
|
virtual void slotCopyAllItems();
|
|
|
|
|
|
// virtual void slotShowAllItems();
|
|
|
// virtual void slotShowMainItems();
|
|
|
|
|
|
// virtual void slotShowHelpBox();
|
|
|
// virtual void slotHideHelpBox();
|
|
|
|
|
|
signals:
|
|
|
|
|
|
// // 当前显示的状态
|
|
|
// void sigGetMainItemMode(bool& b);
|
|
|
// void sigSetMainItemMode(bool b);
|
|
|
|
|
|
// // HelpBox的状态
|
|
|
// void sigGetHelpBoxVisible(bool& b);
|
|
|
// void sigSetHelpBoxVisible(bool b);
|
|
|
|
|
|
void sigHelpMsg(QString& s);
|
|
|
// TODO not use
|
|
|
// void sigAppendOtherItems(QVector<iGridRowItem *>& vec);
|
|
|
/// @brief 触发参数改变,允许外界进行更改
|
|
|
/// @param sName: 参数名称
|
|
|
/// @param o1: 主要数据,m_oRawValue
|
|
|
/// @param o2: 辅助数据,如Cbx的下拉填充内容QStringList
|
|
|
/// @param bSet:是否已经正确设置
|
|
|
void sigItemPrevChanged(QString sName, \
|
|
|
QVariant& o1, QVariant& o2, \
|
|
|
bool& bSet);
|
|
|
|
|
|
/// @brief 触发参数(其它,比如边界,下拉选项)改变,允许外界进行更改
|
|
|
/// @param sName: 参数名称
|
|
|
/// @param o1: 当前选择的数据Index,currentindex在列表o2中的索引
|
|
|
/// @param o2: 辅助数据,如Cbx的下拉填充内容QStringList
|
|
|
/// 比如有的边界,可以下拉包括 无限大,有的不需要
|
|
|
/// @param bSet:是否已经正确设置
|
|
|
/// @note 通常 在 setParameter 函数中触发
|
|
|
void sigItemExPrevChanged(QString sName, \
|
|
|
QVariant& o1, QVariant& o2, \
|
|
|
bool& bSet);
|
|
|
|
|
|
// 由外界调整右键菜单
|
|
|
void sigAdjustContextMenu(QMenu*& pMenu, iGridRowItem*);
|
|
|
|
|
|
// /// @brief 触发参数改变
|
|
|
// /// @param sPara: 参数名称
|
|
|
// /// @param o 更改后的数据
|
|
|
// void sigItemValueChanged(QString sPara, QVariant o);
|
|
|
|
|
|
// 是否启用正则验证,比如,直角边界,第一个边界要大于井长/2,只有点源才支持
|
|
|
void sigOuterValidate(QString sPara, QVariant o, bool& bValid, bool& bSet);
|
|
|
|
|
|
|
|
|
/// @brief 触发子参数列表改变,比如调用水平井段数编辑功能,目前只限于 iGridRowItemSubSegEx 类型的信号传递
|
|
|
/// @param sSegName: (in) 基准参数,为英文标识,如流动段数:"Nq"
|
|
|
/// @param vvec: (in & out) 子参数数据,注意:key为英文,如"NqX","NqL","NqQ"之类,与xml配置文件严格对应
|
|
|
/// @param dWellLen: (in) 水平井长度
|
|
|
/// @param bModified: (out) 是否正确触发且vvec发生改变
|
|
|
void sigSegMore(const QString sSegName, \
|
|
|
QVector< QMap<QString, double> >& vvec, \
|
|
|
const double dWellLen, \
|
|
|
bool& bModified);
|
|
|
|
|
|
/// @brief 触发边界信息改变,比如修改平行边界,由上下改为左右
|
|
|
/// @param pItem: (in) 当前的GroupItem,其实即是本类iGridRowGroupBdy
|
|
|
/// @param vvec: (in & out) 边界信息数据
|
|
|
/// @param bModified: (out) 是否正确触发且vvec发生改变
|
|
|
void sigBdyDetails(iGridRowItem* pItem, \
|
|
|
QVector< iBdyInfo* >& vvec, \
|
|
|
bool& bModified);
|
|
|
|
|
|
/// @brief 触发按钮,允许外部进行按钮操作,比如弹出对话框之类
|
|
|
/// @param sName: (in) 参数标识,为英文标识
|
|
|
/// @param vCustom: (in & out) 外部弹出后,可以把数据传递回来,并且缓存,以支持序列化
|
|
|
/// @param bModified: (out) 是否正确触发且vCustom发生改变
|
|
|
void sigBtnClicked(const QString sSegName, \
|
|
|
QVariant& vCustom, \
|
|
|
bool& bModified);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 节点操作及属性更改
|
|
|
virtual GridTickPos hitTest(QPoint pt);
|
|
|
|
|
|
virtual void expand(iGridRowItem* p);
|
|
|
virtual void collapse(iGridRowItem* p);
|
|
|
|
|
|
virtual iGridRowItem* getLastActive();
|
|
|
|
|
|
// 位置记录
|
|
|
virtual int getPreferedSplitX();
|
|
|
virtual void saveSplitX();
|
|
|
virtual void loadSplitX();
|
|
|
|
|
|
public:
|
|
|
|
|
|
// 组织数据
|
|
|
// 序列化
|
|
|
virtual void onSerialize(ZxSerializer* ser);
|
|
|
virtual void onDeserialize(ZxSerializer* ser);
|
|
|
|
|
|
// 组织结果数据,注:vec不进行clear,由调用方自行clear
|
|
|
virtual bool organizeResults(QVector<iResultInfo>& vec, QString sType, bool bMultiPhase);
|
|
|
|
|
|
// 从各个Wx(m_vecWxDatas)中遍历查找
|
|
|
virtual bool setParaValue(QString sPara, QVariant o);
|
|
|
virtual bool getParaValue(QString sPara, QVariant& o);
|
|
|
// 返回所有参数,Key为英文ID
|
|
|
virtual bool getAllParaValues(QMap<QString, QVariant>& map,
|
|
|
bool bOnlyFitted = false,
|
|
|
bool bClearMap = true);
|
|
|
|
|
|
virtual bool getAllParaUnits(QMap<QString, QString>& map,
|
|
|
bool bOnlyFitted = false,
|
|
|
bool bClearMap = true);
|
|
|
|
|
|
// 返回所有的跟模型相关的边界参数的类型,封闭或定压
|
|
|
// 封闭:0
|
|
|
// 定压:1
|
|
|
virtual bool getBdyInfos(QMap<QString, int>& map);
|
|
|
|
|
|
public:
|
|
|
// 20260107开始扩充,与层有关的内容
|
|
|
|
|
|
// 获取当前所在的父级层的标识,可能为空
|
|
|
virtual QString getUpperLayerTagOf(iGridRowItem* pItem);
|
|
|
// 获取当前所在的父级层的Index(第几层),从0开始,如果没找到,则为-1
|
|
|
virtual int getUpperLayerIndexOf(iGridRowItem* pItem);
|
|
|
// 是否层内节点(不考虑层内本身的层级)
|
|
|
virtual bool isUpperLayerInnerOf(iGridRowItem* pItem);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 窗体载体
|
|
|
QWidget* m_pWxDlg;
|
|
|
|
|
|
// 子项
|
|
|
QVector<iGridRowItem*> m_vecGridItems;
|
|
|
QVector<iGridRowItem*> m_vecAllItems;// 从上到下不考虑层级,所有
|
|
|
iGridRowItem* m_pItemSel;
|
|
|
|
|
|
// 位置及布局
|
|
|
QRectF m_rtBounds;
|
|
|
bool m_bNeedLayout;
|
|
|
|
|
|
// 分割线
|
|
|
bool m_bHitSplit;
|
|
|
double m_dSplitPos;
|
|
|
|
|
|
// Header
|
|
|
bool m_bHeaderVisible;
|
|
|
|
|
|
double m_dRowHeight;
|
|
|
|
|
|
QMenu* m_pContextMenu;
|
|
|
bool m_bSimpleMode; //不涉及序列化,默认为false,但比如相渗里面的,可以设为true
|
|
|
|
|
|
bool m_bUnableSP;
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 参数来源标识,默认情况下,为 s_Sys_Para_Default
|
|
|
// 不涉及序列化
|
|
|
QString m_sParaSrcTag;
|
|
|
};
|