/* Header for the definition of a characteristic type*/
/*//////////////////////////////////////////////////////*/
/*	A characteristic type is an abstract class which defines*/
/*	some common functions of specific characteristics (like Booleans,*/
/*	numerical values, aso)*/
/*	Every specific type of characteristic will inherit of this class*/
/*/////////////////////////////////////////////////////////////////////*/
#ifndef _CTL_LIST_OF_DATA_
#define _CTL_LIST_OF_DATA_
 
#if _MSC_VER >= 1000
#pragma once
#endif /* _MSC_VER >= 1000*/
 
#include <afxtempl.h>
 
#include "CTL_Dat.hpp"
 
/*###################################################################*/
/* Definition of the class for the list of characteristics*/
class CPA_EXPORT CTL_Editor_DataList : public CList<CTL_Editor_Data *, CTL_Editor_Data *>
{
public:
	CTL_Editor_DataList();
	~CTL_Editor_DataList();
 
/*Members*/
private:
	/*List of OwnerData*/
	CTL_ListOfOwnerData m_pri_clListOfOwnerData;
 
/*Functions*/
public:
	/*Owner Data*/
	CTL_OwnerData *m_pub_fn_pclAddOwnerData(void *_pvDataPtr,
																					CString _csName);
	CTL_OwnerData *m_pub_fn_pclAddOwnerData(long _lData,
																					CString _csName);
	CTL_OwnerData *m_pub_fn_pclGetOwnerDataWithName(CString _csSearchedName);
 
	/*------------------------------------------------------------------------------------------*/
	/*To add a specific data*/
	CTL_Editor_Data *m_fn_pclAddBooleanData(CString csScriptName,
																					CTL_Editor_Data *pclCurrentBaseData = NULL);
	CTL_Editor_Data *m_fn_pclAddBitFieldBooleanData(tdBitFieldCoder,
																									CString csScriptName,
																									CTL_Editor_Data *pclCurrentBaseData = NULL);
	CTL_Editor_Data *m_fn_pclAddMaskedData(	CTL_Editor_MaskDescriptor *_pclMaskDescriptor,
																					CString csScriptName,
																					CTL_Editor_Data *pclCurrentBaseData = NULL);
	CTL_Editor_Data *m_fn_pclAddIntegerData(char,
																					BOOL,
																					CString csScriptName,
																					CTL_Editor_Data *pclCurrentBaseData = NULL);
	CTL_Editor_Data *m_fn_pclAddDecimalData(char,
																					CString csScriptName,
																					CTL_Editor_Data *pclCurrentBaseData = NULL);
	CTL_Editor_Data *m_fn_pclAddEnumData(	CTL_Editor_EnumDescriptor *,
																				CString csScriptName,
																				CTL_Editor_Data *pclCurrentBaseData = NULL);
 	CTL_Editor_Data *m_fn_pclAddTextData(	CString csScriptName,
																				CTL_Editor_Data *pclCurrentBaseData = NULL);
	CTL_Editor_Data *m_fn_pclAddVectorData(	char,
																					CString csScriptName,
																					CTL_Editor_Data *pclCurrentBaseData = NULL);
 
 	/*------------------------------------------------------------------------------------------*/
	/*To add a user defined data*/
	void m_pub_fn_vAddData(CTL_Editor_Data *_pclDataToAdd);
 
	/*------------------------------------------------------------------------------------------*/
	/*To get a data from its Name*/
	CTL_Editor_Data *m_fn_pclGetDataFromName(CString csName);
 
private:
	void *m_pri_p_vDataPtr;
 
private:
	void m_fn_vEmptyList();
};
 
#endif /*_CTL_LIST_OF_DATA_*/
