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/nmNum/nmGUI/nmGridRowUtils.h

202 lines
8.5 KiB
C

#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 设置井信息映射wellCode → 显示名)
/// @param map wellCode到显示名称的映射如 {"W001": "Well-1", "W002": "测试井A"}
void setWellNames(QMap<QString, QString> map);
/// @brief 剥离 wellCode 前缀,返回基础参数名(如 "W001_W_X" → "W_X"
/// @return 剥离后的基名;若无前缀匹配则返回空字符串
QString stripWellPrefix(QString sPara) const;
// ================================================================
// 序列化
// ================================================================
/// @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) wellCode → 该井的参数列表(已剥掉前缀)
void splitWellParas(QStringList listParas,
QStringList& listRes,
QMap<QString, QStringList>& mapWellParas);
/// @brief 为每口井创建 Group 分组并填充参数项
/// @param mapWellParas wellCode → 参数列表(已剥掉前缀)
/// @param bDnMode 是否为设计模式
void buildWellGroups(QMap<QString, QStringList>& mapWellParas, bool bDnMode);
/// @brief 为井分组中的参数项补齐 nameInner含 wellCode 前缀)
/// @param mapWellParas wellCode → 基参数名列表
/// @note 必须在 bkAllItems 之后调用,因为 bkAllItems 会重建 m_vecAllItems
void applyWellParaNameInners(const QMap<QString, QStringList>& mapWellParas);
public slots:
/// @brief 获取指定参数的当前值(供子项内部查询用)
/// @param sPara 参数名称
/// @param o 输出值
/// @param bOk 是否成功获取
virtual void slotGetValueOf(QString sPara, QVariant& o, bool& bOk) override;
private:
/// @brief 井名映射wellCode → 显示名)
QMap<QString, 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);
};