/* * @file ParameterTableWidget.h * @brief 参数编辑面板中的表格控件,它对应的数据模型是一个组合的参数项,用户可以添加删除组合参数项中的子参数项 * @date 2011-12-21 * @author sinapec */ #ifndef PAI_FRAME_WORKFLOWVIEW_PARAMETERTABLEWIDGET_H #define PAI_FRAME_WORKFLOWVIEW_PARAMETERTABLEWIDGET_H #include #include "ParameterItemControl.h" #include "PaiTableWidget.h" class QTableWidget; class QTableWidgetItem; class QToolButton; namespace pai { namespace gui { class PaiToolButton; } } namespace pai { namespace module { class CParameterItem; class CCompositeParameterItem; class CTableParameterItemDelegate; } } namespace pai { namespace graphics2d { struct SColumnMetaData { QString strColumnName;//该列的名字(这个名字也同时是指定行在该列对应参数项的Id) QString strColumnType;//该列的类型(请参考ParameterItem.h中的ParameterType) QString strColumnWidget;//该列的控件类型(请参考ParameterItem.h中的ParameterInputType) QString strColumnWidgetData;//该列的控件的元数据 QString strColumnWidgetState;//该列的控件的状态 QString strColumnDefaultValue;//该列缺省值 }; /** * @class CParameterTableActionIcon * @brief 代表删除一行的删除图标 */ class CParameterTableActionIcon : public QLabel { Q_OBJECT public: /** * @brief 构造函数 * @param strIconPath 图标路径 * @param pParent 父窗口句柄 */ CParameterTableActionIcon(const QString& strIconPath,int iRow,QWidget* pParent=0); protected: /** * @brief 重载该函数使得用户鼠标点击到icon时发送信号。 */ virtual void mouseReleaseEvent(QMouseEvent *pEvent); private: int m_iRow;//行号 signals: /** * @brief 激发icon被鼠标点击的信号 */ void signalIconClicked(int); }; /** * @class CParameterTableCombobox * @brief 该类用来给参数编辑表格控件中的单元格提供下拉框编辑器,编辑的内容同步到相关参数项 */ class CParameterTableLineEdit: public pai::gui::PaiLineEdit { Q_OBJECT public: /** * @brief 构造函数 * @param pParameterItem 相关参数项 * @param pTableItem 相关单元格 * @param pParent 父窗口句柄 */ CParameterTableLineEdit(pai::module::CParameterItem* pParameterItem, QTableWidgetItem* pTableItem, QWidget* pParent = 0); private slots: /** * @brief 响应文本框编辑,将编辑后的值同步到相关参数项 */ void slotOnEditingFinished(); void slotOnEditingFinished(const QString& text); protected: /** * @brief 实现焦点移出事件 */ virtual void focusOutEvent (QFocusEvent *pEvent); private: pai::module::CParameterItem* m_pParameterItem; QTableWidgetItem* m_pTableItem; signals: /** *@brief QLineEditor 输入 + - 号失去焦点时发送该信号 */ void editFocuseOut(); }; /** * @class CParameterTableCombobox * @brief 该类用来给参数编辑表格控件中的单元格提供下拉框编辑器,编辑的内容同步到相关参数项 */ class CParameterTableCombobox: public pai::gui::PaiComboBox { Q_OBJECT public: /** * @brief 构造函数 * @param pParameterItem 相关参数项 * @param pTableItem 相关单元格 * @param pParent 父窗口句柄 */ CParameterTableCombobox(pai::module::CParameterItem* pParameterItem, QTableWidgetItem* pTableItem, QWidget* pParent = 0); /** * @brief 析构函数 */ virtual ~CParameterTableCombobox(); protected: /** * @brief 实现焦点移出事件,在该函数中对值进行补齐 */ virtual void focusOutEvent (QFocusEvent *pEvent); private: /** * @brief 获取要显示的文本 * @return 要显示的item文本 */ QStringList GetVisibleText(); /** * @brief 弹出显示详细列表对话框 * @param[in] 被点击item索引 */ void ShowMoreDialog(int index); private slots: /** * @brief 响应下拉框编辑,将编辑后的值同步到相关参数项 */ void slotOnIndexChanged(); /** * @brief 设置combox和TableWidgetItem的文本 * @param[in] text 要显示文件 */ void SetText(const QString& text); private: pai::module::CParameterItem* m_pParameterItem; QTableWidgetItem* m_pTableItem; signals: void stateChanged(); }; /** * @class ParamTableWgt */ class ParamTableWgt : public pai::gui::PaiTableWidget { Q_OBJECT public: ParamTableWgt(QWidget* parent = 0); ParamTableWgt(int rows, int columns, QWidget* parent = 0); void setError(int row, int column, bool bError = true); /* * @brief 实现sizeHint用来获得设计的高度 */ virtual QSize sizeHint() const; protected: /** * @brief 绘制红色错误边框 */ void paintEvent(QPaintEvent* pEvent); private: int m_row; int m_col; bool m_bError; }; /** * @class CParameterTableWidget * @brief 参数编辑面板中的表格控件,它对应的数据模型是一个组合的参数项,用户可以添加删除组合参数项中的子参数项 */ class CParameterTableWidget:public QFrame,public pai::gui::CParameterItemControl { Q_OBJECT public: /** * @brief 构造函数 * @param pCompositeItem 和表格相关联的复合参数项 * @param pParent 父控件句柄 */ CParameterTableWidget(pai::module::CParameterItem* pCompositeItem, QWidget* pParent=0); /** * @brief 析构函数 */ virtual ~CParameterTableWidget(); /** * @brief 根据组合参数项的内容初始化表格 * @param[in] pCompositeItem 组合参数项 */ virtual void SetData(pai::module::CCompositeParameterItem* pCompositeItem); /** * @brief 得到内部表格控件的句柄 */ QTableWidget* GetTable() const; /** * @brief 将整个表格转化为一个与根参数项相关连的JSON字符串并返回 */ QString ToJsonString() const; /** * @brief set error message */ void setError(const QString &errMsg); /** * @brief 根据指定的参数显示或隐藏AddButton * @param bShow true:显示AddButton,false:隐藏AddButton */ void ShowAddButton(bool bShow); /* * @brief 实现sizeHint用来获得设计的高度 */ virtual QSize sizeHint() const; protected: /** * @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 实现该函数用来重绘边框 */ virtual void paintEvent(QPaintEvent *pEvent); protected slots: /** * @brief 在表格中添加一行并且向数据模型添加一系列子参数项 */ virtual void slotOnAddRow(); /** * @brief 从表格中移除一行并且向数据模型删除一系列子参数项 * @param iRow 行索引 */ virtual void slotOnRemoveRow(int iRow); /** * @brief 选中某一行时将每个单元格的编辑器打开 */ virtual void slotOnActiveRow(); /** * @brief 响应CheckBox选中或反选,对参数项作相应修改 * @param pCheckItem 带有Checkbox的QTableWidgetItem */ virtual void slotOnCheckItem(QTableWidgetItem* pCheckItem); /** * @brief 在选中radioButton时,选中当前行 * @param[in] toggled radioButton选中状态 */ void SelectRow(bool toggled); /** * @brief 设置radioButton到表格的某单元格 * @param[in] row 行号 * @param[in] col 列号 */ void SetCellRadioButton(int row, int col); protected: int m_iOldSelectRow; ParamTableWgt* m_pTable; QToolButton* m_pBtnAdd; bool m_bBtnAddShouldShow; //用来标定当前是否需要显示添加按钮 pai::module::CCompositeParameterItem* m_pRootItem; pai::module::CTableParameterItemDelegate* m_pRootItemDelegate; signals: void signalOnFinishEditingRowOrCell(); }; /** * @class SortParamTableWidget * @brief 十字交叉道集参数面板 */ class SortParamTableWidget : public CParameterTableWidget { Q_OBJECT public: SortParamTableWidget(pai::module::CParameterItem* pCompositeItem, QWidget* pParent=0); virtual ~SortParamTableWidget(); /** * @brief 根据组合参数项的内容初始化表格 * @param[in] pCompositeItem 组合参数项 */ virtual void SetData(pai::module::CCompositeParameterItem* pCompositeItem); protected slots: /** * @brief 在表格中添加一行并且向数据模型添加一系列子参数项 */ virtual void slotOnAddRow(); /** * @brief 选中某一行时将每个单元格的编辑器打开 */ virtual void slotOnActiveRow(); /** * @brief 响应CheckBox选中或反选,对参数项作相应修改 * @param pCheckItem 带有Checkbox的QTableWidgetItem */ virtual void slotOnCheckItem(QTableWidgetItem* pCheckItem); /** * @brief 响应Combox选中状态改变消息,使同一行cellWidget可用 */ void slotOnComboxStateChanged(); protected: /** * @brief 获得当前参数项是否为此行的关键参数 */ virtual bool IsKeyValueItem(int row, int column); }; } } #endif