#pragma once #include "nmSubWxs_global.h" #include "nmDefines.h" #include "nmParameterField.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 参数分组的界面描述。 */ 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(); };