/** * @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 得到指定列号的列所对应的控件的控制数据,控制数据大多数情况下都是空值。 *
有时需要通过这种控制数据来控制该控件的初始状态如"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