X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7cb1b9a91c6c2cfedf38258791628d11bab9879c..aa61d3525370a9b9fa8c797d9b7f89d96994db5f:/include/wx/clntdata.h diff --git a/include/wx/clntdata.h b/include/wx/clntdata.h index 3812ea2ed8..33fae4c104 100644 --- a/include/wx/clntdata.h +++ b/include/wx/clntdata.h @@ -5,19 +5,85 @@ // Modified by: // Created: 9-Oct-2001 // RCS-ID: $Id$ -// Copyright: (c) wxWindows team +// Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_CLNTDATAH__ #define _WX_CLNTDATAH__ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "clntdata.h" -#endif - #include "wx/defs.h" #include "wx/string.h" +#include "wx/hashmap.h" + +typedef int (*wxShadowObjectMethod)(void*, void*); +WX_DECLARE_STRING_HASH_MAP_WITH_DECL( + wxShadowObjectMethod, + wxShadowObjectMethods, + class WXDLLIMPEXP_BASE +); +WX_DECLARE_STRING_HASH_MAP_WITH_DECL( + void *, + wxShadowObjectFields, + class WXDLLIMPEXP_BASE +); + +class WXDLLIMPEXP_BASE wxShadowObject +{ +public: + wxShadowObject() { } + + void AddMethod( const wxString &name, wxShadowObjectMethod method ) + { + wxShadowObjectMethods::iterator it = m_methods.find( name ); + if (it == m_methods.end()) + m_methods[ name ] = method; + else + it->second = method; + } + + bool InvokeMethod( const wxString &name, void* window, void* param, int* returnValue ) + { + wxShadowObjectMethods::iterator it = m_methods.find( name ); + if (it == m_methods.end()) + return false; + wxShadowObjectMethod method = it->second; + int ret = (*method)(window, param); + if (returnValue) + *returnValue = ret; + return true; + } + + void AddField( const wxString &name, void* initialValue = NULL ) + { + wxShadowObjectFields::iterator it = m_fields.find( name ); + if (it == m_fields.end()) + m_fields[ name ] = initialValue; + else + it->second = initialValue; + } + + void SetField( const wxString &name, void* value ) + { + wxShadowObjectFields::iterator it = m_fields.find( name ); + if (it == m_fields.end()) + return; + it->second = value; + } + + void* GetField( const wxString &name, void *defaultValue = NULL ) + { + wxShadowObjectFields::iterator it = m_fields.find( name ); + if (it == m_fields.end()) + return defaultValue; + return it->second; + } + +private: + wxShadowObjectMethods m_methods; + wxShadowObjectFields m_fields; +}; + // ---------------------------------------------------------------------------- @@ -29,14 +95,14 @@ enum wxClientDataType wxClientData_Void // client data is untyped and we don't own it }; -class WXDLLEXPORT wxClientData +class WXDLLIMPEXP_BASE wxClientData { public: wxClientData() { } virtual ~wxClientData() { } }; -class WXDLLEXPORT wxStringClientData : public wxClientData +class WXDLLIMPEXP_BASE wxStringClientData : public wxClientData { public: wxStringClientData() : m_data() { } @@ -57,7 +123,7 @@ private: // NOTE: This functionality is currently duplicated in wxEvtHandler in order // to avoid having more than one vtable in that class hierarchy. -class WXDLLEXPORT wxClientDataContainer +class WXDLLIMPEXP_BASE wxClientDataContainer { public: wxClientDataContainer(); @@ -93,12 +159,9 @@ protected: }; -// not Motif-specific, but currently used only under Motif -#ifdef __WXMOTIF__ +#include "wx/vector.h" -#include - -struct WXDLLEXPORT wxClientDataDictionaryPair +struct WXDLLIMPEXP_BASE wxClientDataDictionaryPair { wxClientDataDictionaryPair( size_t idx ) : index( idx ), data( 0 ) { } @@ -106,7 +169,11 @@ struct WXDLLEXPORT wxClientDataDictionaryPair wxClientData* data; }; -WX_DECLARE_VECTOR(wxClientDataDictionaryPair,wxClientDataDictionaryPairVector); +_WX_DECLARE_VECTOR( + wxClientDataDictionaryPair, + wxClientDataDictionaryPairVector, + WXDLLIMPEXP_BASE +); // this class is used internally to maintain the association between items // of (some subclasses of) wxControlWithItems and their client data @@ -114,10 +181,10 @@ WX_DECLARE_VECTOR(wxClientDataDictionaryPair,wxClientDataDictionaryPairVector); // wxClientData or void*. The client must ensure that // it does not contain a mix of the two, and that // DestroyData is called if it contains wxClientData -class WXDLLEXPORT wxClientDataDictionary +class WXDLLIMPEXP_BASE wxClientDataDictionary { public: - wxClientDataDictionary() {}; + wxClientDataDictionary() {} // deletes all the data void DestroyData() @@ -202,8 +269,5 @@ private: wxClientDataDictionaryPairVector m_vec; }; -#endif // __WXMOTIF__ - -// ---------------------------------------------------------------------------- -#endif +#endif // _WX_CLNTDATAH__