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/nmReservoirParameterField.h

165 lines
6.1 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 "nmReservoirParameterCatalog.h"
#include <QColor>
#include <QObject>
#include <QVariant>
class iParameter;
class iUnitGroup;
class QComboBox;
class QGridLayout;
class QLabel;
class QLineEdit;
/**
* @brief 储层参数字段所需的最小单位服务接口。
* @note 主对话框负责适配iDlgBase字段不直接依赖对话框基类或全局对象。
*/
class NM_SUB_WXS_EXPORT nmIReservoirParameterUnitService
{
public:
/** @brief 析构单位服务接口。 */
virtual ~nmIReservoirParameterUnitService() {}
/** @brief 按NM参数定义绑定一个数值编辑器和单位下拉框。 */
virtual bool bindUnitField(QLineEdit* pLineEdit,
QComboBox* pUnitComboBox,
const QString& sBaseParameterId) = 0;
/** @brief 将基准单位数值写入指定编辑器。 */
virtual void setUnitBaseValue(QLineEdit* pLineEdit,
double dBaseValue) = 0;
/** @brief 读取指定编辑器的基准单位数值。 */
virtual double unitBaseValue(QLineEdit* pLineEdit) const = 0;
/** @brief 校验指定单位编辑器。 */
virtual bool isUnitInputValid(QLineEdit* pLineEdit) = 0;
/** @brief 返回指定编辑器当前显示单位。 */
virtual QString currentUnit(QLineEdit* pLineEdit) const = 0;
/** @brief 返回指定编辑器的单位组,不转移所有权。 */
virtual iUnitGroup* unitGroup(QLineEdit* pLineEdit) const = 0;
};
/**
* @brief 原型式参数行的轻量逻辑单元。
* @note 本类不创建外框或子面板,只把标签、编辑器和单位控件直接加入分组网格。
*/
class NM_SUB_WXS_EXPORT nmReservoirParameterField : public QObject
{
public:
/**
* @brief 构造参数字段。
* @param oFieldInfo 稳定字段描述。
* @param pUnitService 主对话框注入的单位服务,不转移所有权。
* @param pParent 字段生命周期父对象。
*/
nmReservoirParameterField(
const nmReservoirParameterFieldInfo& oFieldInfo,
nmIReservoirParameterUnitService* pUnitService,
QObject* pParent = nullptr);
/** @brief 析构字段,不单独删除由分组控件拥有的界面控件。 */
virtual ~nmReservoirParameterField();
/**
* @brief 将字段的三个直接控件加入分组网格。
* @param pLayout 所属分组的网格布局。
* @param nRow 字段所在行。
* @param nColumnOffset 字段起始列偏移。
* @param sError 初始化失败原因。
* @return 参数元数据和单位绑定均成功时返回true。
*/
bool initialize(QGridLayout* pLayout,
int nRow,
int nColumnOffset,
QString& sError);
/** @brief 返回编辑会话使用的稳定参数ID。 */
QString parameterId() const;
/** @brief 返回XML参数定义使用的基础参数ID。 */
QString baseParameterId() const;
/** @brief 返回字段是否为稳定code枚举。 */
bool isEnum() const;
/** @brief 设置数值输入文字是否右对齐。 */
void setValueRightAligned(bool bRightAligned);
/** @brief 返回数值编辑列的统一最小宽度。 */
static int editorMinimumWidth();
/** @brief 返回单位列的统一最小宽度。 */
static int unitMinimumWidth();
/** @brief 返回输入框和下拉框的统一紧凑高度。 */
static int editorHeight();
/** @brief 设置基准单位下的数值并刷新显示。 */
void setBaseValue(const QVariant& oValue);
/**
* @brief 获取基准单位下的当前数值。
* @param bValid 输出当前输入是否有效。
* @return 有效时返回基准值否则返回无效QVariant。
*/
QVariant baseValue(bool& bValid);
/** @brief 设置枚举稳定code不会触发业务联动。 */
void setEnumCode(const QString& sCode);
/** @brief 返回当前枚举稳定code。 */
QString enumCode() const;
/** @brief 校验当前输入,并更新参数范围提示。 */
bool validate();
/** @brief 同时显示或隐藏该参数行的三个直接控件。 */
void setFieldVisible(bool bVisible);
/** @brief 返回参数行当前是否参与编辑和校验。 */
bool isFieldVisible() const;
/** @brief 返回数值输入框,供页面集中连接变化信号。 */
QLineEdit* valueEditor() const;
/** @brief 返回枚举下拉框,供页面集中连接变化信号。 */
QComboBox* enumEditor() const;
private:
/** @brief 创建数值输入框及单位控件。 */
bool createNumericEditor(QGridLayout* pLayout,
int nRow,
int nColumnOffset,
QString& sError);
/** @brief 创建稳定code枚举下拉框。 */
void createEnumEditor(QGridLayout* pLayout,
int nRow,
int nColumnOffset);
/** @brief 按XML精度格式化无单位或整数参数。 */
QString formatBaseValue(double dValue) const;
/** @brief 更新输入框的有效状态和帮助文字。 */
void updateValidationAppearance(bool bValid);
nmReservoirParameterFieldInfo m_oFieldInfo; ///< 稳定字段描述。
nmIReservoirParameterUnitService* m_pUnitService; ///< 注入的单位服务,不拥有所有权。
iParameter* m_pParameter; ///< 共享XML参数定义不拥有所有权。
QLabel* m_pLabel; ///< 参数名称标签。
QLineEdit* m_pLineEdit; ///< 数值输入框。
QComboBox* m_pValueComboBox; ///< 枚举值下拉框。
QComboBox* m_pUnitComboBox; ///< 可换算单位下拉框。
QLabel* m_pUnitLabel; ///< 无单位字段的空白对齐占位。
QColor m_clrNormalText; ///< 输入框默认文字颜色。
bool m_bVisible; ///< 参数行是否参与编辑。
bool m_bUpdating; ///< 程序写值时阻止业务信号。
};