/** * @file ParameterItemControl.h * @brief 参数编辑面板中的所有编辑器 * @date 2012-3-27 * @author sinopec */ #ifndef PAI_FRAME_WORKFLOWVIEW_PARAMETERITEMCONTROL_H_ #define PAI_FRAME_WORKFLOWVIEW_PARAMETERITEMCONTROL_H_ #include #include #include #include //#include "PaiCheckBox.h" #include "PaiSpinBox.h" //#include "PaiDoubleSpinBox.h" #include "PaiLineEdit.h" #include "PaiComboBox.h" #include "ParameterItem.h" #include namespace pai { namespace gui { /** * @brief 这是个纯虚接口类,代表了参数编辑面板上的编辑器 */ class CParameterItemControl { public: CParameterItemControl(pai::module::CParameterItem* pParameterItem); virtual ~CParameterItemControl(); /** * @brief 将控件中显示的值转化成QVariant并返回 */ virtual QVariant GetDisplayValue() const=0; /** * @brief 将控件对应的值转化成QVariant并返回 */ virtual QVariant GetValue() const=0; /** * @brief 为控件设置当前显示值 * @param varDisplayValue */ virtual void SetDisplayValue(const QVariant& varDisplayValue)=0; /** * @brief 为控件设置对应的值 */ virtual void SetValue(const QVariant& varValue)=0; pai::module::CParameterItem*GetParameterItem() { return m_pParameterItem; } protected: pai::module::CParameterItem* m_pParameterItem; }; ///////////////////////////////////////////RADIOBUTTONGROUP/////////////////////////////////// /** * @class CParameterItemRadioButtonGroup * @brief 微调样式的参数项编辑器 */ class CParameterItemRadioButtonGroup: public QGroupBox, public CParameterItemControl { Q_OBJECT public: /** * @brief 构造函数 * @param pParameterItem 参数项 * @param pParent 父控件句柄 */ CParameterItemRadioButtonGroup(pai::module::CParameterItem* pParameterItem,QWidget* pParent=0); /** * @brief 将控件中显示的值转化成QVariant并返回 */ virtual QVariant GetDisplayValue() const; /** * @brief 将控件对应的值转化成QVariant并返回 */ virtual QVariant GetValue() const; /** * @brief 为控件设置当前显示值 * @param varDisplayValue */ virtual void SetDisplayValue(const QVariant& varDisplayValue); /** * @brief 为控件设置对应的值 */ virtual void SetValue(const QVariant& varValue); /** * @brief 安装过滤器 */ void installEventFilter(QObject * filterObj); signals: /** * @brief 选择内容改变时发送该信号 */ void signalInternalIndexChanged(); private slots: /** * @brief 响应radiobutton的点击 */ void slotOnToggled(bool toggled); }; ///////////////////////////////////////////SPINBOX/////////////////////////////////// /** * @class CParameterItemSpinBox * @brief 微调样式的参数项编辑器 */ class CParameterItemSpinBox: public PaiSpinBox,public CParameterItemControl { public: /** * @brief 构造函数 * @param pParameterItem 参数项 * @param pParent 父控件句柄 */ CParameterItemSpinBox(pai::module::CParameterItem* pParameterItem,QWidget* pParent=0); /** * @brief 将控件中显示的值转化成QVariant并返回 */ virtual QVariant GetDisplayValue() const; /** * @brief 将控件对应的值转化成QVariant并返回 */ virtual QVariant GetValue() const; /** * @brief 为控件设置当前显示值 * @param varDisplayValue */ virtual void SetDisplayValue(const QVariant& varDisplayValue); /** * @brief 为控件设置对应的值 */ virtual void SetValue(const QVariant& varValue); }; ///////////////////////////////////////////DOUBLE SPINBOX/////////////////////////////////// /** * @class CParameterItemSpinBox * @brief 支持浮点的微调样式的参数项编辑器 */ class CParameterItemDoubleSpinBox: public QDoubleSpinBox,public CParameterItemControl { public: /** * @brief 构造函数 * @param pParameterItem 参数项 * @param pParent 父控件句柄 */ CParameterItemDoubleSpinBox(pai::module::CParameterItem* pParameterItem,QWidget* pParent=0); /** * @brief 将控件中显示的值转化成QVariant并返回 */ virtual QVariant GetDisplayValue() const; /** * @brief 将控件对应的值转化成QVariant并返回 */ virtual QVariant GetValue() const; /** * @brief 为控件设置当前显示值 * @param varDisplayValue */ virtual void SetDisplayValue(const QVariant& varDisplayValue); /** * @brief 为控件设置对应的值 */ virtual void SetValue(const QVariant& varValue); }; ///////////////////////////////////////////CHECKBOX/////////////////////////////////// /** * @class CParameterItemCheckBox * @brief 复选框参数项编辑器 */ class CParameterItemCheckBox: public QCheckBox,public CParameterItemControl { public: /** * @brief 构造函数 * @param pParameterItem 参数项 * @param pParent 父控件句柄 */ CParameterItemCheckBox(pai::module::CParameterItem* pParameterItem,QWidget* pParent=0); /** * @brief 将控件中显示的值转化成QVariant并返回 */ virtual QVariant GetDisplayValue() const; /** * @brief 将控件对应的值转化成QVariant并返回 */ virtual QVariant GetValue() const; /** * @brief 为控件设置当前显示值 * @param varDisplayValue */ virtual void SetDisplayValue(const QVariant& varDisplayValue); /** * @brief 为控件设置对应的值 */ virtual void SetValue(const QVariant& varValue); }; ///////////////////////////////////////////LINEEDIT/////////////////////////////////// /** * @class CParameterItemLineEdit * @brief 单行编辑框参数项编辑器 */ class CParameterItemLineEdit: public PaiLineEdit,public CParameterItemControl { Q_OBJECT public: /** * @brief 构造函数 * @param pParameterItem 参数项 * @param pParent 父控件句柄 */ CParameterItemLineEdit(pai::module::CParameterItem* pParameterItem,QWidget* pParent=0); /** * @brief 将控件中显示的值转化成QVariant并返回 */ virtual QVariant GetDisplayValue() const; /** * @brief 将控件对应的值转化成QVariant并返回 */ virtual QVariant GetValue() const; /** * @brief 为控件设置当前显示值 * @param varDisplayValue */ virtual void SetDisplayValue(const QVariant& varDisplayValue); /*virtual */void dropEvent(QDropEvent *pEvent); /** * @brief 为控件设置对应的值 */ virtual void SetValue(const QVariant& varValue); private slots: /** * @brief 响应文本框编辑,将编辑后的值同步到相关参数项 */ void slotOnEditingFinished(const QString& text); }; ///////////////////////////////////////////COMBOBOX/////////////////////////////////// /** * @class CParameterItemComboBox * @brief 组合选择框参数项编辑器 */ class CParameterItemComboBox: public PaiComboBox,public CParameterItemControl { Q_OBJECT public: /** * @brief 构造函数 * @param pParameterItem 参数项 * @param pParent 父控件句柄 */ CParameterItemComboBox(pai::module::CParameterItem* pParameterItem,QWidget* pParent=0); /** * @brief 将控件中显示的值转化成QVariant并返回 */ virtual QVariant GetDisplayValue() const; /** * @brief 将控件对应的值转化成QVariant并返回 */ virtual QVariant GetValue() const; /** * @brief 为控件设置当前显示值 * @param varDisplayValue */ virtual void SetDisplayValue(const QVariant& varDisplayValue); /** * @brief 为控件设置对应的值 */ virtual void SetValue(const QVariant& varValue); public slots: /** * @brief 响应currentIndexChnaged 信号 */ void slotIndexChanged(int index); signals: /** * @brief combox 选择内容改变时发送该信号 */ void signalInternalIndexChanged(); }; ///////////////////////////////////////////Add Button(Special)/////////////////////////////////// /** * @class CParameterItemButtonBox * @brief 按钮组参数项编辑器 */ class CParameterItemButtonBox: public QDialogButtonBox,public CParameterItemControl { Q_OBJECT public slots: void slotZonesSizeChanged(); public: pai::module::CParameterItem* CurrentParameterItem; // PaiComboBox * m_cb_Zones; /** * @brief 构造函数 * @param pParameterItem 参数项 * @param pParent 父控件句柄 */ CParameterItemButtonBox(pai::module::CParameterItem* pParameterItem,QWidget* pParent=0); /** * @brief 将控件中显示的值转化成QVariant并返回 */ virtual QVariant GetDisplayValue() const; /** * @brief 将控件对应的值转化成QVariant并返回 */ virtual QVariant GetValue() const; /** * @brief 为控件设置当前显示值 * @param varDisplayValue */ virtual void SetDisplayValue(const QVariant& varDisplayValue); /** * @brief 为控件设置对应的值 */ virtual void SetValue(const QVariant& varValue); }; ///////////////////////////////////////////CheckBoxGROUP/////////////////////////////////// /** * @class CParameterItemCheckBoxGroup * @brief 微调样式的参数项编辑器 */ class CParameterItemCheckBoxGroup: public QGroupBox, public CParameterItemControl { Q_OBJECT public: /** * @brief 构造函数 * @param pParameterItem 参数项 * @param pParent 父控件句柄 */ CParameterItemCheckBoxGroup(pai::module::CParameterItem* pParameterItem,QWidget* pParent=0); /** * @brief 将控件中显示的值转化成QVariant并返回 */ virtual QVariant GetDisplayValue() const; /** * @brief 将控件对应的值转化成QVariant并返回 */ virtual QVariant GetValue() const; /** * @brief 为控件设置当前显示值 * @param varDisplayValue */ virtual void SetDisplayValue(const QVariant& varDisplayValue); /** * @brief 为控件设置对应的值 */ virtual void SetValue(const QVariant& varValue); /** * @brief 安装过滤器 */ void installEventFilter(QObject * filterObj); signals: /** * @brief 选择内容改变时发送该信号 */ void signalInternalIndexChanged(); private slots: /** * @brief 响应radiobutton的点击 */ void slotOnToggled(bool toggled); }; } } /** * @brief 根据指定的类型生成校验器并设置到指定的lineedit上 * @param eParamType 指定的参数类型 * @param pLineEdit 编辑框句柄 */ extern void SetValidator(pai::module::ParameterType eParamType, QLineEdit *pLineEdit, bool isNessary = true); #endif /* PAI_FRAME_WORKFLOWVIEW_PARAMETERITEMCONTROL_H_ */