00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef TA_DESCRIPTORITEMSTRING_H
00013 #define TA_DESCRIPTORITEMSTRING_H
00014
00015 #ifndef TA_DESCRIPTORITEM_H
00016 #include "DescriptorItem.h"
00017 #endif // TA_DESCRIPTORITEM_H
00018
00019 namespace TA
00020 {
00021
00022 class TACOMMON_CLASS DescriptorItemString : public DescriptorItem
00023 {
00024 public:
00025 enum { INVALID_DATA_OFFSET = 0xFFFFFFFF };
00026 DescriptorItemString() : DescriptorItem()
00027 {
00028 m_nDataOffset = INVALID_DATA_OFFSET;
00029 m_pSetValueCallBack = 0;
00030 m_pGetValueCallBack = 0;
00031 }
00032
00033 virtual ~DescriptorItemString() { Finalise(); }
00034
00035 void Initialise(
00036 const Char* szName,
00037 Descriptor* pDescriptor,
00038 String& strVar,
00039 const Char* szDefault,
00040 const Char* szDescription)
00041 {
00042 Initialise(
00043 szName,
00044 0,
00045 0,
00046 szDefault,
00047 szDescription);
00048 m_nDataOffset = (u32)&strVar - (u32)pDescriptor;
00049 }
00050
00051 void Initialise(
00052 const Char* szName,
00053 void (*SetVar)(const String&, void* pData),
00054 const String& (*GetVar)(void* pData),
00055 const Char* szDefault,
00056 const Char* szDescription)
00057 {
00058 DescriptorItem::Initialise(szName, szDescription);
00059 m_strDefaultValue = szDefault;
00060
00061 m_pSetValueCallBack = SetVar;
00062 m_pGetValueCallBack = GetVar;
00063 }
00064
00065 void Finalise()
00066 {
00067 DescriptorItem::Finalise();
00068 m_nDataOffset = INVALID_DATA_OFFSET;
00069 m_pSetValueCallBack = 0;
00070 m_pGetValueCallBack = 0;
00071 }
00072
00073 virtual String GetValueAsString(Descriptor* pDescriptor) const { return GetString(pDescriptor); }
00074 virtual String GetDisplayString(Descriptor* pDescriptor) const
00075 {
00076 String strDisplayString = GetName();
00077 strDisplayString += ": \"";
00078 strDisplayString += GetString(pDescriptor);
00079 strDisplayString += "\"";
00080 return strDisplayString;
00081 }
00082 virtual void SetValueFromString(const char* szString, Descriptor* pDescriptor) { SetString(szString, pDescriptor); }
00083 virtual void SetToDefaultValue(Descriptor* pDescriptor) { SetString(m_strDefaultValue, pDescriptor); }
00084 virtual u32 GetTypeID() const { return s_nClassID; }
00085 static u32 GetStaticTypeID() { return s_nClassID; }
00086
00087
00088 private:
00089 u32 m_nDataOffset;
00090 String m_strDefaultValue;
00091 void (*m_pSetValueCallBack)(const String&, void* pData);
00092 const String& (*m_pGetValueCallBack)(void* pData);
00093
00094 static u32 s_nClassID;
00095
00096 String& GetStringRef(Descriptor* pDescriptor) const
00097 {
00098 return *(String*)((u32)pDescriptor + m_nDataOffset);
00099 }
00100
00101 void SetString(const String& strValue, Descriptor* pDescriptor)
00102 {
00103 if (m_nDataOffset != INVALID_DATA_OFFSET)
00104 GetStringRef(pDescriptor) = strValue;
00105 else if (m_pSetValueCallBack)
00106 m_pSetValueCallBack(strValue, pDescriptor);
00107 }
00108 const String& GetString(Descriptor* pDescriptor) const
00109 {
00110 if (m_nDataOffset != INVALID_DATA_OFFSET)
00111 return GetStringRef(pDescriptor);
00112 else if (m_pGetValueCallBack)
00113 return m_pGetValueCallBack(pDescriptor);
00114 else
00115 return k_strEmptyString;
00116 }
00117 };
00118
00119 };
00120
00121 #endif // TA_DESCRIPTORITEMSTRING_H
© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.