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

#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;
};