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/nmSubWxs/nmReservoirParameterCatalog.h

144 lines
6.0 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 "nmSubWxs_global.h"
#include "nmDefines.h"
#include <QList>
#include <QString>
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<nmReservoirEnumOption> 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; ///< 数值输入是否右对齐。
QList<nmReservoirParameterFieldInfo> 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<nmReservoirParameterGroupInfo> 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<nmReservoirPropertyObjectInfo> 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();
};