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

169 lines
6.4 KiB
C

#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 设置页面级关联校验错误;空文字表示清除关联错误。 */
void setExternalValidationError(const QString& sError);
/** @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; ///< 输入框默认文字颜色。
QString m_sExternalValidationError; ///< 页面级关联校验错误文字。
bool m_bVisible; ///< 参数行是否参与编辑。
bool m_bUpdating; ///< 程序写值时阻止业务信号。
};