True Axis Physics SDK 1.2.0.1 Beta Documentation
www.trueaxis.com

DescriptorItemString.h

00001 //---------------------------------------------------------------------------------
00002 // File Name: DescriptorItemString.h
00003 // Description:
00004 //
00005 // Copyright (C) 2004 True Axis Pty Ltd, Australia. 
00006 // All Rights Reserved.
00007 //
00008 // History:
00009 //      Created File.
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.