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

193 lines
7.0 KiB
C

#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 IDIDXML
*/
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; ///< 字段是否参与编辑。
};