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/iGui/iGuiGridPty/iGridRowUtils.h

370 lines
13 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 "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: 当前选择的数据Indexcurrentindex在列表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);
// 从各个Wxm_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;
};