171 lines
8.9 KiB
C++
171 lines
8.9 KiB
C++
/**
|
||
* @file TableParameterItemDelegate.h
|
||
* @brief 对于代表一个表格的参数项,本类提供了对其添加行,删除行,获取单元格等代理操作
|
||
* @author sinopec
|
||
* @date 2012-3-22
|
||
*/
|
||
|
||
#ifndef PAI_FRAME_MODULEAPI_TABLEPARAMETERITEMDELEGATE_H_
|
||
#define PAI_FRAME_MODULEAPI_TABLEPARAMETERITEMDELEGATE_H_
|
||
#include "ParameterItem.h"
|
||
#include "Turtle.h"
|
||
namespace pai
|
||
{
|
||
namespace module
|
||
{
|
||
const char CommonSplitChar = ';'; ///< 通常用来区分参数项同一属性值的不同部分
|
||
const char ColumnSplitChar = '|'; ///< 通常用来区分各列之间的同类数据
|
||
const char ItemSplitChar = '/'; ///< 通常用来区分各列之间的数据的细分项
|
||
/**
|
||
* @brief 表格参数项中InputMetaData中的组成部分
|
||
*/
|
||
enum
|
||
{
|
||
iColumnNameSection =0, ///< 列名在代表一个表格的参数项的InputMetaData中处于第一部分
|
||
iColumnTypeSection =1, ///< 列类型在代表一个表格的参数项的InputMetaData中处于第二部分
|
||
iColumnWidgetSection =2, ///< 列控件类型在代表一个表格的参数项的InputMetaData中处于第三部分
|
||
iColumnWidgetMetaDataSection =3, ///< 列控件的元数据在代表一个表格的参数项的InputMetaData中处于第四部分
|
||
iColumnControlDataSection = 4, ///< 列控件的控制数据在代表一个表格的参数项的InputMetaData中处于第五部分
|
||
iColumnDefaultTextSection = 5 ///< 列控件的缺省值在代表一个表格的参数项的InputMetaData中处于第六部分
|
||
};
|
||
/**
|
||
* @brief 列的元数据
|
||
*/
|
||
struct SColumnMetaData
|
||
{
|
||
std::string strColumnName; ///< 该列的名字(这个名字也同时是指定行在该列对应参数项的Id)
|
||
std::string strColumnType; ///< 该列的类型(请参考ParameterItem.h中的ParameterType)
|
||
std::string strColumnWidget; ///< 该列的控件类型(请参考ParameterItem.h中的ParameterInputType)
|
||
std::string strColumnWidgetMetaData; ///< 该列的控件的元数据
|
||
std::string strColumnWidgetState; ///< 该列的控件的状态
|
||
std::string strColumnDefaultValue; ///< 该列缺省值
|
||
SColumnMetaData() : strColumnName(""), strColumnType(""), strColumnWidget(""),
|
||
strColumnWidgetMetaData(""), strColumnWidgetState(""), strColumnDefaultValue(""){}
|
||
};
|
||
/**
|
||
* @class CTableParameterItemDelegate
|
||
* @brief 针对代表一个表格的参数项,本类提供了对其添加行,删除行,获取单元格等代理操作
|
||
*/
|
||
class PAI_MODULE_EXPORT CTableParameterItemDelegate
|
||
{
|
||
private:
|
||
CTableParameterItemDelegate(const CTableParameterItemDelegate& tableParameterItemDelegate );
|
||
CTableParameterItemDelegate operator=(const CTableParameterItemDelegate& tableParameterItemDelegate );
|
||
public:
|
||
/**
|
||
* @brief 构造函数
|
||
* @param[in] pTableParameterItem 代表一个表格的复合参数项
|
||
*/
|
||
CTableParameterItemDelegate(CParameterItem* pTableParameterItem);
|
||
/**
|
||
* @brief 析构函数
|
||
*/
|
||
virtual ~CTableParameterItemDelegate();
|
||
/**
|
||
* @brief 增加一行
|
||
* @return 返回代表新加的一行的复合参数项
|
||
*/
|
||
CCompositeParameterItem* AddRow();
|
||
/**
|
||
* @brief 删除指定行
|
||
* @param[in] iRow 行号,从0开始,0代表第一行,1代表第二行,依次类推。
|
||
* @return 删除成功返回true,否则返回false
|
||
*/
|
||
bool DeleteRow(int iRow);
|
||
/**
|
||
* @brief 得到指定行列号的单元格所对应的参数项
|
||
* @param[in] iRow 行号,从0开始,0代表第一行,1代表第二行,依次类推。
|
||
* @param[in] iColumn 列号,从0开始,0代表第一列,1代表第二列,依次类推。
|
||
* @return 参数项
|
||
*/
|
||
CParameterItem* GetCellParameterItem(int iRow,int iColumn) const;
|
||
/**
|
||
* @brief 得到指定行号及列名的单元格所对应的参数项
|
||
* @param[in] iRow 行号,从0开始,0代表第一行,1代表第二行,依次类推。
|
||
* @param[in] strColumnName 列名。
|
||
* @return 参数项
|
||
*/
|
||
CParameterItem* GetCellParameterItem(int iRow,const std::string& strColumnName) const;
|
||
/**
|
||
* @brief 得到指定行列号的单元格所对应的参数项ID
|
||
* @param[in] iRow 行号,从0开始,0代表第一行,1代表第二行,依次类推。
|
||
* @param[in] iColumn 列号,从0开始,0代表第一列,1代表第二列,依次类推。
|
||
* @return 参数项Id
|
||
*/
|
||
std::string GetCellID(int iRow,int iColumn) const;
|
||
/**
|
||
* @brief 得到当前代表一个表格的参数项的表格总行数
|
||
* @return 总行数
|
||
*/
|
||
int GetRowCount() const;
|
||
/**
|
||
* @brief 得到当前代表一个表格的参数项的表格总列数
|
||
* @return 总列数
|
||
*/
|
||
int GetColumnCount() const;
|
||
/**
|
||
* @brief 得到指定列号的列名
|
||
* @param[in] iColumn 列号,从0开始,0代表第一列,1代表第二列,依次类推。
|
||
* @return 列名
|
||
*/
|
||
std::string GetColumnName(int iColumn) const;
|
||
/**
|
||
* @brief 得到指定列号的列所代表的数据类型
|
||
* @param[in] iColumn 列号,从0开始,0代表第一列,1代表第二列,依次类推。
|
||
* @return 参数项的数据类型
|
||
*/
|
||
pai::module::ParameterType GetColumnType(int iColumn) const;
|
||
/**
|
||
* @brief 得到指定列号的列所对应的控件类型
|
||
* @param[in] iColumn 列号,从0开始,0代表第一列,1代表第二列,依次类推。
|
||
* @return 控件类型
|
||
*/
|
||
ParameterInputType GetColumnInputType(int iColumn) const;
|
||
/**
|
||
* @brief 得到指定列号的列所对应的控件的控制数据,控制数据大多数情况下都是空值。
|
||
* <p>有时需要通过这种控制数据来控制该控件的初始状态如"Disable;","Invisible;","Editable"等等。
|
||
* 极特殊情况下含有对该控件触发事件的脚本逻辑。
|
||
* @param[in] iColumn 列号,从0开始,0代表第一列,1代表第二列,依次类推。
|
||
* @return 控件的属性字符串
|
||
*/
|
||
std::string GetColumnWidgetControlData(int iColumn) const;
|
||
/**
|
||
* @brief 得到指定列号的列所对应的控件的元数据。举例来说,如果控件是ComboBox,
|
||
* 那么控件元数据通常包含ComboBox中的所有选择项,这些选择项之间被要求用/连接(分割)。
|
||
* @param[in] iColumn 列号,从0开始,0代表第一列,1代表第二列,依次类推。
|
||
* @return 控件的元数据
|
||
*/
|
||
std::string GetColumnWidgetMetaData(int iColumn) const;
|
||
/**
|
||
* @brief 得到指定列号的列所对应的控件的元数据。举例来说,如果控件是ComboBox,
|
||
* 那么控件元数据通常包含ComboBox中的所有选择项,这些选择项之间被要求用/连接分割。
|
||
* @param[in] iColumn 列号,从0开始,0代表第一列,1代表第二列,依次类推。
|
||
* @return 控件的元数据
|
||
*/
|
||
std::string GetColumnWidgetMetaData(const std::string& strColumnName) const;
|
||
/**
|
||
* @brief 得到指定列号的列所对应的控件上的缺省文本
|
||
* @param[in] iColumn 列号,从0开始,0代表第一列,1代表第二列,依次类推。
|
||
* @return 列号对应的控件的缺省值
|
||
*/
|
||
std::string GetColumnWidgetDefaultText(int iColumn) const;
|
||
private:
|
||
/**
|
||
* @brief 根据列名推断其对应的列号
|
||
* @param strColumnName
|
||
*/
|
||
int GetColumnIndexByColumnName(const std::string& strColumnName) const;
|
||
/**
|
||
* @brief 解析表格所有列的元数据
|
||
*/
|
||
void RetreiveTableMetaData();
|
||
private:
|
||
CCompositeParameterItem* m_pRootItem;//代表表格的根参数项
|
||
std::vector<SColumnMetaData> m_vecColumnMetaData;//所有列的元数据
|
||
|
||
};
|
||
}
|
||
}
|
||
|
||
#endif /* PAI_FRAME_MODULEAPI_TABLEPARAMETERITEMDELEGATE_H_ */
|