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

193 lines
7.9 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 "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);
};