|
|
#pragma once
|
|
|
|
|
|
#include "nmGUI_global.h"
|
|
|
#include "iGridRowUtils.h"
|
|
|
|
|
|
/// @brief NM模块专用的参数区渲染工具类,继承自 iGridRowUtils
|
|
|
/// @note 设立此子类的主要目的是作为 NM 模块与基类之间的适配层:
|
|
|
/// - 隔离基类接口变更对 NM 模块的影响,基类改动只需修改本文件
|
|
|
/// - NM 模块后续如需定制参数区行为(如特殊的参数联动、自定义渲染等),
|
|
|
/// 只需在此类中 override 相应虚函数,无需触碰基类代码
|
|
|
/// - 当前实现以直接转发基类接口为主,按需逐步扩展
|
|
|
class NM_GUI_EXPORT nmGridRowUtils : public iGridRowUtils
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
|
|
|
|
/// @brief 构造函数,接口与基类保持一致
|
|
|
/// @param bSimple 是否为简单模式(不涉及序列化),默认 false
|
|
|
/// @param parent 父窗口
|
|
|
explicit nmGridRowUtils(bool bSimple = false, QWidget* parent = nullptr);
|
|
|
~nmGridRowUtils();
|
|
|
|
|
|
// ================================================================
|
|
|
// 初始化与构建
|
|
|
// ================================================================
|
|
|
|
|
|
/// @brief 初始化界面,基类实现负责创建基础布局
|
|
|
virtual void initUI() override;
|
|
|
|
|
|
/// @brief 根据参数列表构建参数区
|
|
|
/// @param listParas 参数英文名列表
|
|
|
/// @param bDnMode 是否为设计模式
|
|
|
/// @param pWxDlg 参数对话框载体
|
|
|
virtual bool buildRowUtils(QStringList listParas,
|
|
|
bool bDnMode,
|
|
|
QWidget* pWxDlg) override;
|
|
|
|
|
|
// ================================================================
|
|
|
// 参数读写
|
|
|
// ================================================================
|
|
|
|
|
|
/// @brief 设置指定参数的值
|
|
|
/// @param sPara 参数名称(英文标识)
|
|
|
/// @param o 参数值
|
|
|
virtual bool setParaValue(QString sPara, QVariant o) override;
|
|
|
|
|
|
/// @brief 获取指定参数的值
|
|
|
/// @param sPara 参数名称(英文标识)
|
|
|
/// @param o 输出的参数值
|
|
|
virtual bool getParaValue(QString sPara, QVariant& o) override;
|
|
|
|
|
|
/// @brief 批量获取所有参数值
|
|
|
/// @param map 输出结果,Key为英文ID
|
|
|
/// @param bOnlyFitted 是否仅获取参与拟合的参数
|
|
|
/// @param bClearMap 是否先清空map
|
|
|
virtual bool getAllParaValues(QMap<QString, QVariant>& map,
|
|
|
bool bOnlyFitted = false,
|
|
|
bool bClearMap = true) override;
|
|
|
|
|
|
/// @brief 批量获取所有参数单位
|
|
|
/// @param map 输出结果,Key为英文ID
|
|
|
/// @param bOnlyFitted 是否仅获取参与拟合的参数
|
|
|
/// @param bClearMap 是否先清空map
|
|
|
virtual bool getAllParaUnits(QMap<QString, QString>& map,
|
|
|
bool bOnlyFitted = false,
|
|
|
bool bClearMap = true) override;
|
|
|
|
|
|
// ================================================================
|
|
|
// 参数项查找
|
|
|
// ================================================================
|
|
|
|
|
|
/// @brief 根据参数名获取对应的行项目
|
|
|
/// @param sPara 参数名称
|
|
|
virtual iGridRowItem* getItemByPara(QString sPara) override;
|
|
|
|
|
|
/// @brief 根据参数名获取对应的值
|
|
|
/// @param sPara 参数名称
|
|
|
virtual QVariant getItemValueByPara(QString sPara) override;
|
|
|
|
|
|
// ================================================================
|
|
|
// 参数来源标识
|
|
|
// ================================================================
|
|
|
|
|
|
/// @brief 设置参数来源标识(对应XML加载时的sKey)
|
|
|
/// @param s 来源标识,如 "WDT" 等
|
|
|
void setParaSrcTag(QString s);
|
|
|
|
|
|
// ================================================================
|
|
|
// 多井分组支持
|
|
|
// ================================================================
|
|
|
|
|
|
/// @brief 设置井名映射(永久ID → 显示名)
|
|
|
/// @param map 井ID到显示名称的映射,如 {0: "Well-1", 3: "测试井A"}
|
|
|
void setWellNames(QMap<int, QString> map);
|
|
|
|
|
|
// ================================================================
|
|
|
// 序列化
|
|
|
// ================================================================
|
|
|
|
|
|
/// @brief 序列化(保存)
|
|
|
virtual void onSerialize(ZxSerializer* ser) override;
|
|
|
|
|
|
/// @brief 反序列化(加载)
|
|
|
virtual void onDeserialize(ZxSerializer* ser) override;
|
|
|
|
|
|
// ================================================================
|
|
|
// 结果组织
|
|
|
// ================================================================
|
|
|
|
|
|
/// @brief 组织结果数据,用于将参数区的值整理为结果信息
|
|
|
/// @param vec 输出结果列表(不清空,由调用方负责)
|
|
|
/// @param sType 结果类型
|
|
|
/// @param bMultiPhase 是否多相
|
|
|
virtual bool organizeResults(QVector<iResultInfo>& vec,
|
|
|
QString sType,
|
|
|
bool bMultiPhase) override;
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// ================================================================
|
|
|
// 内部构建
|
|
|
// ================================================================
|
|
|
|
|
|
/// @brief 内部构建实现,递归创建参数项
|
|
|
/// @param listParas 参数列表
|
|
|
/// @param pItemParent 父级行项目
|
|
|
/// @param bDnMode 是否为设计模式
|
|
|
/// @param bProperOrder 是否保持正确顺序
|
|
|
virtual bool _buildRowUtils(QStringList listParas,
|
|
|
iGridRowItem* pItemParent,
|
|
|
bool bDnMode,
|
|
|
bool bProperOrder = true) override;
|
|
|
|
|
|
/// @brief 创建并添加一个参数项
|
|
|
/// @param pParent 父级行项目
|
|
|
/// @param p 参数对象
|
|
|
/// @param sPara 参数名称
|
|
|
virtual bool createAndAddItem(iGridRowItem* pParent,
|
|
|
iParameter* p,
|
|
|
QString sPara) override;
|
|
|
|
|
|
/// @brief 连接参数项的信号槽
|
|
|
/// @param p 需要连接的参数项
|
|
|
virtual void connectSignalsOf(iGridRowItem* p) override;
|
|
|
|
|
|
/// @brief 参数项创建完成后的绑定处理(如产液段与有效长度的关联)
|
|
|
virtual void bindItems() override;
|
|
|
|
|
|
// ================================================================
|
|
|
// 多井分组内部方法
|
|
|
// ================================================================
|
|
|
|
|
|
/// @brief 将参数列表拆分为储层参数和井参数
|
|
|
/// @param listParas (in) 完整的参数列表
|
|
|
/// @param listRes (out) 储层参数(无前缀)
|
|
|
/// @param mapWellParas (out) 井ID → 该井的参数列表(已剥掉前缀)
|
|
|
void splitWellParas(QStringList listParas,
|
|
|
QStringList& listRes,
|
|
|
QMap<int, QStringList>& mapWellParas);
|
|
|
|
|
|
/// @brief 为每口井创建 Group 分组并填充参数项
|
|
|
/// @param mapWellParas 井ID → 参数列表(已剥掉前缀)
|
|
|
/// @param bDnMode 是否为设计模式
|
|
|
void buildWellGroups(QMap<int, QStringList>& mapWellParas, bool bDnMode);
|
|
|
|
|
|
public slots:
|
|
|
|
|
|
/// @brief 获取指定参数的当前值(供子项内部查询用)
|
|
|
/// @param sPara 参数名称
|
|
|
/// @param o 输出值
|
|
|
/// @param bOk 是否成功获取
|
|
|
virtual void slotGetValueOf(QString sPara, QVariant& o, bool& bOk) override;
|
|
|
|
|
|
private:
|
|
|
|
|
|
/// @brief 井名映射(永久ID → 显示名)
|
|
|
QMap<int, QString> m_mapWellNames;
|
|
|
|
|
|
private slots:
|
|
|
|
|
|
/// @brief 参数值改变后的回调(iGridRowItem::sigValueChanged 触发)
|
|
|
/// @note 立即 emit sigParaChanged,确保数据层与 UI 始终同步
|
|
|
void slotItemValueChanged(QString sPara, QVariant o);
|
|
|
|
|
|
signals:
|
|
|
|
|
|
/// @brief 参数值变更信号(简化版,供 nmAttrRegistry 同步用)
|
|
|
/// @param name 参数名(来自当前激活项的 Name)
|
|
|
/// @param value 变更后的值
|
|
|
void sigParaChanged(QString name, QVariant value);
|
|
|
};
|