390 lines
9.6 KiB
C++
390 lines
9.6 KiB
C++
/*
|
||
* @file ParameterTableWidget.h
|
||
* @brief 参数编辑面板中的表格控件,它对应的数据模型是一个组合的参数项,用户可以添加删除组合参数项中的子参数项
|
||
* @date 2011-12-21
|
||
* @author sinapec
|
||
*/
|
||
|
||
#ifndef PAI_FRAME_WORKFLOWVIEW_PARAMETERTABLEWIDGET_H
|
||
#define PAI_FRAME_WORKFLOWVIEW_PARAMETERTABLEWIDGET_H
|
||
|
||
#include <QLabel>
|
||
#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
|