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

216 lines
6.5 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"
class iBdyInfo;
// 参数区统一处理的Utils
class X_GUI_GRIDPTY_EXPORT iGridRowUtils : public iDlgBase//QAbstractScrollArea
{
Q_OBJECT
public:
explicit iGridRowUtils();
~iGridRowUtils();
public:
// 初始化
virtual void initUI();
// 对外暴露接口
bool buildRowUtils(QStringList listParas, \
QStringList& listParaTags, \
bool bDnMode, \
QWidget* pWxDlg);
void setParaItems(QVector<iGridRowItem *>& vec, \
bool bDnMode, \
QWidget* pWxDlg);
void setBounds(QRectF& rt);
double getUtilHeight();
void connectSignalsOf(iGridRowItem* p);
void bkAllItems();
QStringList getAllTags(); //不考虑层级
void resetLayout(); //流动段增减后重置
// 根据名字获取
iGridRowItem* getItemByPara(QString sPara);
// 根据名字取数据
QVariant getItemValueByPara(QString sPara);
// 查询并处理 UseMdoe == 3 的参数,初始不显示
void dealwithHide(bool bHideMode, bool& bItemChanged);
// 查询并处理 多相/单相切换 的参数,初始不显示
void deawithMpMode(bool bMultiPhase, bool& bItemChanged);
void dealwithItemOfs(ParaUseMode o, bool bHideMode, bool& bItemChanged);
// 清空
void clearAllItems();
// Header
void setHeaderVisible(bool b);
bool isHeaderVisible();
// 对Items进行检测正确输入
bool checkItems();
// 刷新
void updateItem(iGridRowItem* p);
private:
// 搭建过程
QStringList getParaTypes(QStringList listParas);
bool createAndAddItem(iGridRowItem* pParent, \
iParameter* p, QString sPara);
iGridRowItem* createWithSegOlds(iGridRowItem* pParent, \
iParameter* p, QString sPara);//兼容原先没有配置ParaType
void insertItem(int nIndex, iGridRowItem* pItem);
// 这是一些特殊处理就是创建完成所有Item后相关的关联
// 如 产液段与有效长度
void bindItems();
// 把所有Item从上到下不考虑层级记录下来
bool getAllItems(QVector<iGridRowItem*>& vec); //不考虑层级
// 范围及布局
void setSplitPos(double f);
void updateLayout();
void doLayout();
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 *);
void paintGrid(QPainter* pPainter);
void paintHeader(QPainter* pPainter);
public slots:
void slotActivateItem(iGridRowItem* p);
void onActiveItemChanged(iGridRowItem* p);
void slotValuePrevChanged(QVariant& o1, QVariant& o2);
void slotGetValueOf(QString sPara, QVariant& o, bool& bOk);
signals:
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);
// 是否启用正则验证,比如,直角边界,第一个边界要大于井长/2,只有点源才支持
void sigOuterValidate(QString sPara, QVariant o, bool& bValid, bool& bSet);
/// @brief 触发子参数列表改变,比如调用水平井段数编辑功能,目前只限于 iGridRowItemSegEx 类型的信号传递
/// @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);
protected:
// 节点操作及属性更改
GridTickPos hitTest(QPoint pt);
void expand(iGridRowItem* p);
void collapse(iGridRowItem* p);
iGridRowItem* getLastActive();
// 位置记录
int getPreferedSplitX();
void saveSplitX();
void loadSplitX();
public:
// 组织数据
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
// 组织结果数据,注vec不进行clear由调用方自行clear
virtual bool organizeResults(QVector<iResultInfo>& vec, QString sType);
// 从各个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
bool getBdyInfos(QMap<QString, int>& map);
private:
// 窗体载体
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_fSplitPos;
// Header
bool m_bHeaderVisible;
double m_fRowHeight;
bool m_bUnableSP;
};