/** * @file PaiInfoEditor.h * @brief 该类代表了工作流参数面板上每个参数的编辑器,除了编辑器本身外还包含了错误提示和Loading动画 * @date 2011-10-25 * @Author dev */ #ifndef PAI_FRAME_WORKFLOWVIEW_PAIINFOEDITOR_H #define PAI_FRAME_WORKFLOWVIEW_PAIINFOEDITOR_H #include #include "ParameterProperty.h" #include "PaiToolButton.h" class QPushButton; class QLabel; class QMovie; class QModelIndex; namespace pai { namespace gui { class PaiLabel; } namespace graphics2d { class ParameterProperty; /** * @class CPaiInfoEditor * @brief 该类代表了工作流参数面板上每个参数的编辑器,除了编辑器本身外还包含了错误提示和Loading动画 */ class CPaiInfoEditor : public QFrame { Q_OBJECT public: /** *@brief 将ToolTip的内容截短换行 */ static QString GetToolTipDescription(QString description); /** * @brief 构造函数 * @param pParameterProperty 与该编辑器相关联的参数面板树节点 * @param parent 父控件句柄 */ CPaiInfoEditor(ParameterProperty* pParameterProperty,QWidget *parent=0,const QString& strDisplayName=""); /** * @brief 析构函数 */ virtual ~CPaiInfoEditor(); /** * @brief 得到内部的编辑器句柄,不同参数类型对应不同的编辑器 */ QWidget* GetInternalEditor() const; /** * @brief 是否有删除按钮 */ bool HasDeleteButton() const; /* * @brief 实现sizeHint用来获得设计的高度 */ virtual QSize sizeHint() const; public slots: /** * @brief 相应模块树数据改变 * @param dataIndex 树模型节点 * @param strPropertyName 改变的属性名 * @param varPropertyValue 改变的属性值 */ void slotDataPropertyChanged(const QModelIndex& dataIndex,const QString& strPropertyName,const QVariant& varPropertyValue); void slotUpdateHideShowItemsIcon(bool hide); protected: /** * @brief 实现该函数以捕获focusin focuseOut事件 */ bool eventFilter(QObject *obj, QEvent *event); private: /** * @brief 通过当前节点得到对应参数项的父亲参数项(注意父亲参数项必须是个数组元素项)的参数项ID * @param pParameterProperty 当前节点 */ QString _GetDeleteItemID(ParameterProperty* pParameterProperty) const; /** * @brief 根据参数控件类型创建相应的控件 * @return 类型枚举对应的控件 */ QWidget* CreateInternalEditor(); private slots: /** * @brief 显示Loading动画 */ void slotShowLoadingAnimate(); /** * @brief 停止Loading动画 */ void slotStopAnimate(); /** * @brief 设置错误信息并显示 * @param errorMessage 错误信息内容 */ void slotSetErrorMessage(const QString& errorMessage); /** * @brief 响应删除按钮的点击事件并发送信号 */ void slotOnDeleteButtonClick(); /** * @brief 响应显示隐藏按钮的点击事件并发送信号 */ void slotOnHideShowButtonClick(); /** * @brief 响应显示隐藏非重要参数按钮的点击事件并发送信号 */ void slotOnHideShowOptionalButtonClick(); /** * @brief 显示或隐藏删除按钮 * @param bShow true:显示删除按钮 false:隐藏删除按钮 */ void slotShowDeleteButton(bool bShow); private: ParameterProperty* m_pParameterProperty;//相应的参数面板节点 pai::gui::PaiLabel *m_label;//错误信息提示区 QWidget* m_pInternalEditor;//内部的编辑器句柄 QPushButton *m_pMovieLabel;//Loading动画显示区 QMovie *m_pMovie;//Loading动画 bool HideBrothers; //pai::gui::PaiToolButton* pHideShowButton ; bool HideOptionals; pai::gui::PaiToolButton* pHideShowOptionalButton ; signals: /** * @brief 当编辑器附带一个删除按钮时,一旦用户点击了删除按钮,则触发此信号 * @param strDeleteItemID 待删除的参数项ID */ void signalDeleteItem(const QString& strDeleteItemID); /** * @brief 当编辑器附带一个隐藏显示按钮时,一旦用户点击了该按钮,则触发此信号 * @param strDeleteItemID 待隐藏的参数项ID */ void signalHideShowItems(const QString& strDeleteItemID,bool hideBrothers); /** * @brief 当编辑器附带一个隐藏显示按钮时,一旦用户点击了该按钮,则触发此信号 * @param strDeleteItemID 待隐藏的参数项ID */ void signalHideShowOptionalItems(const QString& strDeleteItemID,bool hide); /** * @brief 内部的失去焦点信号 */ void _signalInternalEditorLostFocus(const QString &str); /** *@brief QLineEditor 输入 + - 号失去焦点时发送该信号 */ void editFocuseOut(); }; } } #endif