|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "nmSubWxs_global.h"
|
|
|
|
|
|
#include "nmReservoirParameterCatalog.h"
|
|
|
|
|
|
|
|
|
|
|
|
#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 sError 初始化失败原因。
|
|
|
|
|
|
* @return 参数元数据和单位绑定均成功时返回true。
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool initialize(QGridLayout* pLayout, int nRow, 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,
|
|
|
|
|
|
QString& sError);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief 创建稳定code枚举下拉框。 */
|
|
|
|
|
|
void createEnumEditor(QGridLayout* pLayout, int nRow);
|
|
|
|
|
|
|
|
|
|
|
|
/** @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; ///< 无单位字段的空白对齐占位。
|
|
|
|
|
|
bool m_bVisible; ///< 参数行是否参与编辑。
|
|
|
|
|
|
bool m_bUpdating; ///< 程序写值时阻止业务信号。
|
|
|
|
|
|
};
|