logplus/Workflow/WFEngine/Module/include/TableParameterItemDelegate.h
2026-01-16 17:18:41 +08:00

171 lines
8.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @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_ */