|
|
#pragma once
|
|
|
|
|
|
#include "nmSubWxs_global.h"
|
|
|
|
|
|
#include <QColor>
|
|
|
#include <QList>
|
|
|
#include <QObject>
|
|
|
#include <QString>
|
|
|
#include <QVariant>
|
|
|
|
|
|
class iParameter;
|
|
|
class iUnitGroup;
|
|
|
class QComboBox;
|
|
|
class QGridLayout;
|
|
|
class QLabel;
|
|
|
class QLineEdit;
|
|
|
|
|
|
/** @brief 通用参数字段的编辑器类型。 */
|
|
|
enum nmParameterEditorType
|
|
|
{
|
|
|
NM_PARAMETER_EDITOR_NUMBER = 0, ///< 浮点数输入框。
|
|
|
NM_PARAMETER_EDITOR_INTEGER, ///< 整数输入框。
|
|
|
NM_PARAMETER_EDITOR_ENUM, ///< 稳定code枚举下拉框。
|
|
|
NM_PARAMETER_EDITOR_TEXT ///< 文本输入框。
|
|
|
};
|
|
|
|
|
|
/** @brief 通用枚举下拉框选项。 */
|
|
|
struct NM_SUB_WXS_EXPORT nmParameterEnumOption
|
|
|
{
|
|
|
QString m_sCode; ///< 不随语言变化的业务代码。
|
|
|
QString m_sText; ///< 当前语言下的显示文本。
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* @brief 通用参数字段描述。
|
|
|
* @note 稳定参数ID用于业务读写,基础参数ID用于读取XML单位、精度和范围。
|
|
|
*/
|
|
|
struct NM_SUB_WXS_EXPORT nmParameterFieldInfo
|
|
|
{
|
|
|
/** @brief 创建默认启用单位的数值字段描述。 */
|
|
|
nmParameterFieldInfo();
|
|
|
|
|
|
QString m_sParameterId; ///< 业务层稳定参数ID。
|
|
|
QString m_sBaseParameterId; ///< 参数XML中的基础参数ID。
|
|
|
QString m_sLabel; ///< 文本或枚举字段的显示名称。
|
|
|
nmParameterEditorType m_eEditorType; ///< 字段编辑器类型。
|
|
|
bool m_bUnitEnabled; ///< 是否创建单位下拉框。
|
|
|
QList<nmParameterEnumOption> m_listOptions; ///< 枚举字段的稳定选项。
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* @brief 参数字段所需的最小单位服务接口。
|
|
|
* @note 窗口负责适配iDlgBase,字段不依赖具体业务窗口或全局对象。
|
|
|
*/
|
|
|
class NM_SUB_WXS_EXPORT nmIParameterUnitService
|
|
|
{
|
|
|
public:
|
|
|
/** @brief 析构单位服务接口。 */
|
|
|
virtual ~nmIParameterUnitService() {}
|
|
|
|
|
|
/** @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 nmParameterField : public QObject
|
|
|
{
|
|
|
public:
|
|
|
/** @brief 创建字段控件描述,控件在initialize()时按需生成。 */
|
|
|
nmParameterField(const nmParameterFieldInfo& oFieldInfo,
|
|
|
nmIParameterUnitService* pUnitService,
|
|
|
QObject* pParent = nullptr);
|
|
|
|
|
|
/** @brief 释放字段对象;实际控件由所属Qt父控件管理。 */
|
|
|
virtual ~nmParameterField();
|
|
|
|
|
|
/** @brief 将字段控件加入指定分组网格。 */
|
|
|
bool initialize(QGridLayout* pLayout,
|
|
|
int nRow,
|
|
|
int nColumnOffset,
|
|
|
QString& sError);
|
|
|
|
|
|
/** @brief 返回业务层稳定参数ID。 */
|
|
|
QString parameterId() const;
|
|
|
|
|
|
/** @brief 返回XML参数定义使用的基础参数ID。 */
|
|
|
QString baseParameterId() const;
|
|
|
|
|
|
/** @brief 返回字段是否为枚举。 */
|
|
|
bool isEnum() const;
|
|
|
|
|
|
/** @brief 返回字段是否为文本。 */
|
|
|
bool isText() 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 获取基准单位值或文本值。 */
|
|
|
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 创建数值输入框,并按XML参数定义绑定单位和范围。 */
|
|
|
bool createNumericEditor(QGridLayout* pLayout,
|
|
|
int nRow,
|
|
|
int nColumnOffset,
|
|
|
QString& sError);
|
|
|
|
|
|
/** @brief 创建不参与单位换算的文本输入框。 */
|
|
|
void createTextEditor(QGridLayout* pLayout,
|
|
|
int nRow,
|
|
|
int nColumnOffset);
|
|
|
|
|
|
/** @brief 创建使用稳定业务code保存值的枚举下拉框。 */
|
|
|
void createEnumEditor(QGridLayout* pLayout,
|
|
|
int nRow,
|
|
|
int nColumnOffset);
|
|
|
|
|
|
/** @brief 按XML精度规则格式化无单位绑定的基准数值。 */
|
|
|
QString formatBaseValue(double dValue) const;
|
|
|
|
|
|
/** @brief 根据校验状态统一刷新文字颜色和参数提示。 */
|
|
|
void updateValidationAppearance(bool bValid);
|
|
|
|
|
|
nmParameterFieldInfo m_oFieldInfo; ///< 稳定字段描述。
|
|
|
nmIParameterUnitService* 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; ///< 字段是否参与编辑。
|
|
|
};
|