#pragma once #include "nmSubWxs_global.h" #include "nmDefines.h" #include #include class nmAttrRegistry; struct nmReservoirPropertiesSnapshot; /** @brief 储层参数编辑页面分类。 */ enum nmReservoirPropertiesCategory { NM_RESERVOIR_PAGE_RESERVOIR = 0, ///< 储层。 NM_RESERVOIR_PAGE_WELL, ///< 井。 NM_RESERVOIR_PAGE_FAULT, ///< 断层。 NM_RESERVOIR_PAGE_FRACTURE, ///< 裂缝。 NM_RESERVOIR_PAGE_COMPOSITE_REGION, ///< 复合区。 NM_RESERVOIR_PAGE_REGION_MARK, ///< 区域标记。 NM_RESERVOIR_PAGE_COUNT ///< 分类数量。 }; /** @brief 参数对象的具体类型。 */ enum nmReservoirPropertiesObjectType { NM_RESERVOIR_OBJECT_RESERVOIR = 0, ///< 储层对象。 NM_RESERVOIR_OBJECT_VERTICAL_WELL, ///< 直井对象。 NM_RESERVOIR_OBJECT_VERTICAL_FRAC_WELL, ///< 垂直压裂井对象。 NM_RESERVOIR_OBJECT_HORIZONTAL_FRAC_WELL,///< 水平压裂井对象。 NM_RESERVOIR_OBJECT_REGION_MARK, ///< 区域标记对象。 NM_RESERVOIR_OBJECT_FAULT, ///< 断层对象。 NM_RESERVOIR_OBJECT_FRACTURE, ///< 裂缝对象。 NM_RESERVOIR_OBJECT_REGION ///< 复合区对象。 }; /** @brief 参数字段的编辑器类型。 */ enum nmReservoirParameterEditorType { NM_RESERVOIR_EDITOR_NUMBER = 0, ///< 浮点数输入框。 NM_RESERVOIR_EDITOR_INTEGER, ///< 整数输入框。 NM_RESERVOIR_EDITOR_ENUM ///< 稳定code枚举下拉框。 }; /** @brief 枚举下拉框选项。 */ struct NM_SUB_WXS_EXPORT nmReservoirEnumOption { QString m_sCode; ///< 不随语言变化的业务代码。 QString m_sText; ///< 当前语言下的显示文本。 }; /** * @brief 单个参数字段的界面描述。 * @note 稳定参数ID用于会话读写,基础参数ID用于读取XML单位和范围。 */ struct NM_SUB_WXS_EXPORT nmReservoirParameterFieldInfo { QString m_sParameterId; ///< 编辑会话中的稳定参数ID。 QString m_sBaseParameterId; ///< 中英文参数XML中的基础参数ID。 QString m_sLabel; ///< 枚举字段的显示名称;数值字段留空时读取XML别名。 nmReservoirParameterEditorType m_eEditorType; ///< 字段编辑器类型。 bool m_bUnitEnabled; ///< 是否为该字段创建单位下拉框。 QList m_listOptions; ///< 枚举字段的稳定选项。 }; /** @brief 参数分组的界面描述。 */ struct NM_SUB_WXS_EXPORT nmReservoirParameterGroupInfo { QString m_sTitle; ///< 分组标题。 int m_nRow; ///< 分组在页面网格中的行。 int m_nColumn; ///< 分组在页面网格中的列。 int m_nRowSpan; ///< 分组纵向跨越的行数。 int m_nColumnSpan; ///< 分组横跨的列数。 bool m_bValueRightAligned; ///< 数值输入是否右对齐。 bool m_bFieldsCentered; ///< 分组内字段是否水平居中并随宽度伸展。 QList m_listFields; ///< 分组内按显示顺序排列的字段。 }; /** @brief 单个可编辑对象的完整界面描述。 */ struct NM_SUB_WXS_EXPORT nmReservoirPropertyObjectInfo { nmReservoirPropertiesCategory m_eCategory; ///< 对象所属页面分类。 nmReservoirPropertiesObjectType m_eObjectType; ///< 对象具体类型。 int m_nSourceIndex; ///< 对象在工作副本容器中的索引。 QString m_sObjectCode; ///< 编辑会话内稳定的对象编码。 QString m_sDisplayName; ///< 对象显示名称。 QList m_listGroups; ///< 原型式分组和字段描述。 }; /** * @brief 储层参数规范目录。 * @note 对象映射、稳定ID、页面分组和联动所需的基础ID全部在此集中维护。 */ class NM_SUB_WXS_EXPORT nmReservoirParameterCatalog { public: /** * @brief 将工作副本中的属性注册到独立注册表。 * @param pRegistry 编辑会话独占的属性注册表。 * @param oSnapshot 可写工作副本。 */ static void registerSnapshot(nmAttrRegistry* pRegistry, nmReservoirPropertiesSnapshot& oSnapshot); /** * @brief 构建指定分类的对象和原型式分组描述。 * @param eCategory 页面分类。 * @param oSnapshot 当前工作副本。 * @return 按界面显示顺序排列的对象描述。 */ static QList createObjectInfos( nmReservoirPropertiesCategory eCategory, nmReservoirPropertiesSnapshot& oSnapshot); /** * @brief 将数据类中的存储文本转换为稳定枚举code。 * @param sParameterId 枚举参数ID。 * @param sStoredValue 数据类中的存储文本。 * @return 稳定业务code。 */ static QString enumCodeFromStoredValue(const QString& sParameterId, const QString& sStoredValue); /** * @brief 将稳定枚举code转换为数据类的存储文本。 * @param sParameterId 枚举参数ID。 * @param sCode 稳定业务code。 * @return 数据类使用的存储文本。 */ static QString storedValueFromEnumCode(const QString& sParameterId, const QString& sCode); /** @brief 读取工作副本中的枚举code。 */ static QString enumCode(const nmReservoirPropertiesSnapshot& oSnapshot, const QString& sParameterId); /** @brief 修改工作副本中的枚举code。 */ static bool setEnumCode(nmReservoirPropertiesSnapshot& oSnapshot, const QString& sParameterId, const QString& sCode); private: nmReservoirParameterCatalog(); };