X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6b91e252475d73358a87cfacce9c75aa04012e2e..35c2acd4a81a3b41ced9253f744a00e64de2a423:/include/wx/clntdata.h?ds=sidebyside diff --git a/include/wx/clntdata.h b/include/wx/clntdata.h index 1fc54ba6a4..7653e09b36 100644 --- a/include/wx/clntdata.h +++ b/include/wx/clntdata.h @@ -18,6 +18,79 @@ #include "wx/defs.h" #include "wx/string.h" +#include "wx/hashmap.h" + +#if wxABI_VERSION >= 20602 + +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; +}; + +#endif // wxABI_VERSION // ---------------------------------------------------------------------------- @@ -117,7 +190,7 @@ WX_DECLARE_VECTOR(wxClientDataDictionaryPair,wxClientDataDictionaryPairVector); class WXDLLIMPEXP_BASE wxClientDataDictionary { public: - wxClientDataDictionary() {}; + wxClientDataDictionary() {} // deletes all the data void DestroyData()