]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/xti.h
Richtext interface fixes and additions for Phoenix
[wxWidgets.git] / include / wx / xti.h
index 75da3785c8c1659a43a7305facbaa174a35da90c..dbbfc2d09af6aab3dcdb66220a6a6b83b1926f31 100644 (file)
@@ -21,7 +21,7 @@
 //
 // - Type Information for categorizing built in types as well as custom types
 //   this includes information about enums, their values and names
-// - Type safe value storage : a kind of wxVariant, called right now wxVariantBase
+// - Type safe value storage : a kind of wxVariant, called right now wxAny
 //   which will be merged with wxVariant
 // - Property Information and Property Accessors providing access to a class'
 //   values and exposed event delegates
 
 #if wxUSE_EXTENDED_RTTI
 
-// include definitions of other XTI structures
-#include "wx/variantbase.h"
+class WXDLLIMPEXP_FWD_BASE wxAny;
+class WXDLLIMPEXP_FWD_BASE wxAnyList;
+class WXDLLIMPEXP_FWD_BASE wxObject;
+class WXDLLIMPEXP_FWD_BASE wxString;
+class WXDLLIMPEXP_FWD_BASE wxClassInfo;
+class WXDLLIMPEXP_FWD_BASE wxHashTable;
+class WXDLLIMPEXP_FWD_BASE wxObject;
+class WXDLLIMPEXP_FWD_BASE wxPluginLibrary;
+class WXDLLIMPEXP_FWD_BASE wxHashTable;
+class WXDLLIMPEXP_FWD_BASE wxHashTable_Node;
+
+class WXDLLIMPEXP_FWD_BASE wxStringToAnyHashMap;
+class WXDLLIMPEXP_FWD_BASE wxPropertyInfoMap;
+class WXDLLIMPEXP_FWD_BASE wxPropertyAccessor;
+class WXDLLIMPEXP_FWD_BASE wxObjectAllocatorAndCreator;
+class WXDLLIMPEXP_FWD_BASE wxObjectAllocator;
+
+
+#define wx_dynamic_cast(t, x) dynamic_cast<t>(x)
+
 #include "wx/xtitypes.h"
-#include "wx/xtictor.h"
-#include "wx/xtiprop.h"
 #include "wx/xtihandler.h"
 
 // ----------------------------------------------------------------------------
 // wxClassInfo
 // ----------------------------------------------------------------------------
 
-class WXDLLIMPEXP_BASE wxObject;
-class WXDLLIMPEXP_BASE wxVariantBase;
-class WXDLLIMPEXP_BASE wxVariantBaseArray;
+class WXDLLIMPEXP_BASE wxObjectFunctor
+{
+public:
+    virtual ~wxObjectFunctor();
+
+    // Invoke the actual event handler:
+    virtual void operator()(const wxObject *) = 0;
+};
+
+class WXDLLIMPEXP_FWD_BASE wxPropertyInfo;
+class WXDLLIMPEXP_FWD_BASE wxHandlerInfo;
 
 typedef wxObject *(*wxObjectConstructorFn)(void);
-typedef wxObject* (*wxVariantToObjectConverter)( wxVariantBase &data );
-typedef wxVariantBase (*wxObjectToVariantConverter)( wxObject* );
+typedef wxPropertyInfo *(*wxPropertyInfoFn)(void);
+typedef wxHandlerInfo *(*wxHandlerInfoFn)(void);
+typedef void (*wxVariantToObjectConverter)( const wxAny &data, wxObjectFunctor* fn );
+typedef wxObject* (*wxVariantToObjectPtrConverter) ( const wxAny& data);
+typedef wxAny (*wxObjectToVariantConverter)( wxObject* );
+
+WXDLLIMPEXP_BASE wxString wxAnyGetAsString( const wxAny& data);
+WXDLLIMPEXP_BASE const wxObject* wxAnyGetAsObjectPtr( const wxAny& data);
 
 class WXDLLIMPEXP_BASE wxObjectWriter;
-class WXDLLIMPEXP_BASE wxObjectReaderCallback;
+class WXDLLIMPEXP_BASE wxObjectWriterCallback;
 
 typedef bool (*wxObjectStreamingCallback) ( const wxObject *, wxObjectWriter *, \
-                                            wxObjectReaderCallback *, wxVariantBaseArray & );
+                                            wxObjectWriterCallback *, const wxStringToAnyHashMap & );
+
+
 
 class WXDLLIMPEXP_BASE wxClassInfo
 {
     friend class WXDLLIMPEXP_BASE wxPropertyInfo;
-    friend class WXDLLIMPEXP_BASE wxHandlerInfo;
-    friend wxObject *wxCreateDynamicObject(const wxChar *name);
+    friend class /* WXDLLIMPEXP_BASE */ wxHandlerInfo;
+    friend wxObject *wxCreateDynamicObject(const wxString& name);
 
 public:
     wxClassInfo(const wxClassInfo **_Parents,
@@ -73,12 +105,12 @@ public:
                 const wxChar *_ClassName,
                 int size,
                 wxObjectConstructorFn ctor,
-                wxPropertyInfo *_Props,
-                wxHandlerInfo *_Handlers,
+                wxPropertyInfoFn _Props,
+                wxHandlerInfoFn _Handlers,
                 wxObjectAllocatorAndCreator* _Constructor,
                 const wxChar ** _ConstructorProperties,
                 const int _ConstructorPropertiesCount,
-                wxVariantToObjectConverter _PtrConverter1,
+                wxVariantToObjectPtrConverter _PtrConverter1,
                 wxVariantToObjectConverter _Converter2,
                 wxObjectToVariantConverter _Converter3,
                 wxObjectStreamingCallback _streamingCallback = NULL) :
@@ -86,8 +118,11 @@ public:
             m_objectSize(size),
             m_objectConstructor(ctor),
             m_next(sm_first),
-            m_firstProperty(_Props),
-            m_firstHandler(_Handlers),
+            m_firstPropertyFn(_Props),
+            m_firstHandlerFn(_Handlers),
+            m_firstProperty(NULL),
+            m_firstHandler(NULL),
+            m_firstInited(false),
             m_parents(_Parents),
             m_unitName(_UnitName),
             m_constructor(_Constructor),
@@ -108,8 +143,11 @@ public:
             m_objectSize(0),
             m_objectConstructor(NULL),
             m_next(sm_first),
+            m_firstPropertyFn(NULL),
+            m_firstHandlerFn(NULL),
             m_firstProperty(NULL),
             m_firstHandler(NULL),
+            m_firstInited(true),
             m_parents(_Parents),
             m_unitName(_UnitName),
             m_constructor(NULL),
@@ -134,8 +172,11 @@ public:
             m_objectSize(size),
             m_objectConstructor(ctor),
             m_next(sm_first),
+            m_firstPropertyFn(NULL),
+            m_firstHandlerFn(NULL),
             m_firstProperty(NULL),
             m_firstHandler(NULL),
+            m_firstInited(true),
             m_parents(NULL),
             m_unitName(NULL),
             m_constructor(NULL),
@@ -164,11 +205,10 @@ public:
     wxObject *CreateObject() const { return AllocateObject(); }
 
     // direct construction call for classes that cannot construct instances via alloc/create
-    wxObject *ConstructObject(int ParamCount, wxVariantBase *Params) const;
-
-    bool NeedsDirectConstruction() const 
-        { return wx_dynamic_cast(wxObjectAllocator*, m_constructor) != NULL; }
+    wxObject *ConstructObject(int ParamCount, wxAny *Params) const;
 
+    bool NeedsDirectConstruction() const;
+    
     const wxChar       *GetClassName() const 
         { return m_className; }
     const wxChar       *GetBaseClassName1() const
@@ -198,7 +238,7 @@ public:
     // statics:
 
     static void                CleanUp();
-    static wxClassInfo        *FindClass(const wxChar *className);
+    static wxClassInfo        *FindClass(const wxString& className);
     static const wxClassInfo  *GetFirst() 
         { return sm_first; }
 
@@ -208,30 +248,30 @@ public:
 
     bool IsKindOf(const wxClassInfo *info) const;
 
-    wxDECLARE_CLASS_INFO_ITERATORS()
+    wxDECLARE_CLASS_INFO_ITERATORS();
 
     // if there is a callback registered with that class it will be called
     // before this object will be written to disk, it can veto streaming out
     // this object by returning false, if this class has not registered a
     // callback, the search will go up the inheritance tree if no callback has
     // been registered true will be returned by default
-    bool BeforeWriteObject( const wxObject *obj, wxObjectWriter *streamer, \
-                            wxObjectReaderCallback *persister, wxVariantBaseArray &metadata) const;
+    bool BeforeWriteObject( const wxObject *obj, wxObjectWriter *streamer, 
+                            wxObjectWriterCallback *writercallback, const wxStringToAnyHashMap &metadata) const;
 
     // gets the streaming callback from this class or any superclass
     wxObjectStreamingCallback GetStreamingCallback() const;
 
     // returns the first property
-    const wxPropertyInfo* GetFirstProperty() const 
-        { return m_firstProperty; }
+    wxPropertyInfo* GetFirstProperty() const 
+        { EnsureInfosInited(); return m_firstProperty; }
 
     // returns the first handler
-    const wxHandlerInfo* GetFirstHandler() const 
-        { return m_firstHandler; }
+    wxHandlerInfo* GetFirstHandler() const 
+        { EnsureInfosInited(); return m_firstHandler; }
 
     // Call the Create upon an instance of the class, in the end the object is fully
     // initialized
-    virtual bool Create (wxObject *object, int ParamCount, wxVariantBase *Params) const;
+    virtual bool Create (wxObject *object, int ParamCount, wxAny *Params) const;
 
     // get number of parameters for constructor
     virtual int GetCreateParamCount() const 
@@ -244,27 +284,22 @@ public:
     // Runtime access to objects for simple properties (get/set) by property 
     // name and variant data
     virtual void SetProperty (wxObject *object, const wxChar *propertyName, 
-                              const wxVariantBase &value) const;
-    virtual wxVariantBase GetProperty (wxObject *object, const wxChar *propertyName) const;
+                              const wxAny &value) const;
+    virtual wxAny GetProperty (wxObject *object, const wxChar *propertyName) const;
 
     // Runtime access to objects for collection properties by property name
-    virtual wxVariantBaseArray GetPropertyCollection(wxObject *object, 
+    virtual wxAnyList GetPropertyCollection(wxObject *object, 
                                                   const wxChar *propertyName) const;
     virtual void AddToPropertyCollection(wxObject *object, const wxChar *propertyName, 
-                                         const wxVariantBase& value) const;
+                                         const wxAny& value) const;
 
     // we must be able to cast variants to wxObject pointers, templates seem 
     // not to be suitable
-    wxObject* VariantToInstance( wxVariantBase &data ) const
-    {
-        if ( data.GetTypeInfo()->GetKind() == wxT_OBJECT )
-            return m_variantToObjectConverter( data );
-        else
-            return m_variantOfPtrToObjectConverter( data );
-    }
+    void CallOnAny( const wxAny &data, wxObjectFunctor* functor ) const;
+
+    wxObject* AnyToObjectPtr( const wxAny &data) const;
 
-    wxVariantBase InstanceToVariant( wxObject *object ) const 
-        { return m_objectToVariantConverter( object ); }
+    wxAny ObjectPtrToAny( wxObject *object ) const;
 
     // find property by name
     virtual const wxPropertyInfo *FindPropertyInfo (const wxChar *PropertyName) const;
@@ -295,18 +330,35 @@ private:
 
     static wxHashTable      *sm_classTable;
 
+    wxPropertyInfoFn          m_firstPropertyFn;
+    wxHandlerInfoFn           m_firstHandlerFn;
+
+
 protected:
-    wxPropertyInfo *          m_firstProperty;
-    wxHandlerInfo *           m_firstHandler;
+    void                      EnsureInfosInited() const
+    {
+        if ( !m_firstInited)
+        {
+            if ( m_firstPropertyFn != NULL)
+                m_firstProperty = (*m_firstPropertyFn)();
+            if ( m_firstHandlerFn != NULL)
+                m_firstHandler = (*m_firstHandlerFn)();
+            m_firstInited = true;
+        }
+    }
+    mutable wxPropertyInfo*   m_firstProperty;
+    mutable wxHandlerInfo*    m_firstHandler;
 
 private:
+    mutable bool              m_firstInited;
+
     const wxClassInfo**       m_parents;
     const wxChar*             m_unitName;
 
     wxObjectAllocatorAndCreator*     m_constructor;
     const wxChar **           m_constructorProperties;
     const int                 m_constructorPropertiesCount;
-    wxVariantToObjectConverter m_variantOfPtrToObjectConverter;
+    wxVariantToObjectPtrConverter m_variantOfPtrToObjectConverter;
     wxVariantToObjectConverter m_variantToObjectConverter;
     wxObjectToVariantConverter m_objectToVariantConverter;
     wxObjectStreamingCallback  m_streamingCallback;
@@ -321,8 +373,7 @@ protected:
     DECLARE_NO_COPY_CLASS(wxClassInfo)
 };
 
-WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxChar *name);
-
+WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxString& name);
 
 // ----------------------------------------------------------------------------
 // wxDynamicClassInfo
@@ -343,7 +394,7 @@ public:
     virtual wxObject *AllocateObject() const;
 
     // Call the Create method for a class
-    virtual bool Create (wxObject *object, int ParamCount, wxVariantBase *Params) const;
+    virtual bool Create (wxObject *object, int ParamCount, wxAny *Params) const;
 
     // get number of parameters for constructor
     virtual int GetCreateParamCount() const;
@@ -353,8 +404,8 @@ public:
 
     // Runtime access to objects by property name, and variant data
     virtual void SetProperty (wxObject *object, const wxChar *PropertyName, 
-                              const wxVariantBase &Value) const;
-    virtual wxVariantBase GetProperty (wxObject *object, const wxChar *PropertyName) const;
+                              const wxAny &Value) const;
+    virtual wxAny GetProperty (wxObject *object, const wxChar *PropertyName) const;
 
     // adds a property to this class at runtime
     void AddProperty( const wxChar *propertyName, const wxTypeInfo* typeInfo );
@@ -380,7 +431,6 @@ private:
     wxDynamicClassInfoInternal* m_data;
 };
 
-
 // ----------------------------------------------------------------------------
 // wxDECLARE class macros
 // ----------------------------------------------------------------------------
@@ -403,212 +453,18 @@ private:
     _DECLARE_DYNAMIC_CLASS(name)
 
 #define wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(name)             \
-    wxDECLARE_NO_ASSIGN_CLASS(name)                         \
+    wxDECLARE_NO_ASSIGN_CLASS(name);                        \
     wxDECLARE_DYNAMIC_CLASS(name)
 
 #define wxDECLARE_DYNAMIC_CLASS_NO_COPY(name)               \
-    wxDECLARE_NO_COPY_CLASS(name)                           \
+    wxDECLARE_NO_COPY_CLASS(name);                          \
+    wxDECLARE_DYNAMIC_CLASS(name)
+
+#define wxDECLARE_CLASS(name)                               \
     wxDECLARE_DYNAMIC_CLASS(name)
 
 #define wxDECLARE_ABSTRACT_CLASS(name)    _DECLARE_DYNAMIC_CLASS(name)
 #define wxCLASSINFO(name)                 (&name::ms_classInfo)
 
-
-// ----------------------------------------------------------------------------
-// wxIMPLEMENT class macros for concrete classes
-// ----------------------------------------------------------------------------
-
-// Single inheritance with one base class
-
-#define _TYPEINFO_CLASSES(n, toString, fromString )                           \
-    wxClassTypeInfo s_typeInfo##n(wxT_OBJECT, &n::ms_classInfo,               \
-                                  toString, fromString, typeid(n).name());    \
-    wxClassTypeInfo s_typeInfoPtr##n(wxT_OBJECT_PTR, &n::ms_classInfo,        \
-                                     toString, fromString, typeid(n*).name());
-
-#define _IMPLEMENT_DYNAMIC_CLASS(name, basename, unit, callback)                \
-    wxObject* wxConstructorFor##name()                                          \
-        { return new name; }                                                    \
-    wxObject* wxVariantOfPtrToObjectConverter##name ( wxVariantBase &data )        \
-        { return data.wxTEMPLATED_MEMBER_CALL(Get, name*); }                    \
-    wxVariantBase wxObjectToVariantConverter##name ( wxObject *data )              \
-        { return wxVariantBase( wx_dynamic_cast(name*, data)  ); }                 \
-                                                                                \
-    const wxClassInfo* name::ms_classParents[] =                                \
-        { &basename::ms_classInfo, NULL };                                      \
-    wxClassInfo name::ms_classInfo(name::ms_classParents, wxT(unit),            \
-        wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) wxConstructorFor##name,   \
-        name::GetPropertiesStatic(), name::GetHandlersStatic(), name::ms_constructor,     \
-        name::ms_constructorProperties, name::ms_constructorPropertiesCount,              \
-        wxVariantOfPtrToObjectConverter##name, NULL, wxObjectToVariantConverter##name,    \
-        callback);
-
-#define _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY(name, basename, unit, callback )         \
-    wxObject* wxConstructorFor##name()                                              \
-        { return new name; }                                                        \
-    wxObject* wxVariantToObjectConverter##name ( wxVariantBase &data )                 \
-        { return &data.wxTEMPLATED_MEMBER_CALL(Get, name); }                        \
-    wxObject* wxVariantOfPtrToObjectConverter##name ( wxVariantBase &data )            \
-        { return data.wxTEMPLATED_MEMBER_CALL(Get, name*); }                        \
-    wxVariantBase wxObjectToVariantConverter##name ( wxObject *data )                  \
-        { return wxVariantBase( wx_dynamic_cast(name*, data)  ); }                     \
-                                                                                    \
-    const wxClassInfo* name::ms_classParents[] = { &basename::ms_classInfo,NULL };  \
-    wxClassInfo name::ms_classInfo(name::ms_classParents, wxT(unit),                \
-        wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) wxConstructorFor##name,  \
-        name::GetPropertiesStatic(),name::GetHandlersStatic(),name::ms_constructor,      \
-        name::ms_constructorProperties, name::ms_constructorPropertiesCount,             \
-        wxVariantOfPtrToObjectConverter##name, wxVariantToObjectConverter##name,         \
-        wxObjectToVariantConverter##name, callback);
-
-#define wxIMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name, basename )                   \
-    _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name, basename, "", NULL )              \
-    _TYPEINFO_CLASSES(name, NULL, NULL)                                         \
-    const wxPropertyInfo *name::GetPropertiesStatic()                           \
-        { return (wxPropertyInfo*) NULL; }                                      \
-    const wxHandlerInfo *name::GetHandlersStatic()                              \
-        { return (wxHandlerInfo*) NULL; }                                       \
-    wxCONSTRUCTOR_DUMMY( name )
-
-#define wxIMPLEMENT_DYNAMIC_CLASS( name, basename )                             \
-    _IMPLEMENT_DYNAMIC_CLASS( name, basename, "", NULL )                        \
-    _TYPEINFO_CLASSES(name, NULL, NULL)                                         \
-    wxPropertyInfo *name::GetPropertiesStatic()                                 \
-        { return (wxPropertyInfo*) NULL; }                                      \
-    wxHandlerInfo *name::GetHandlersStatic()                                    \
-        { return (wxHandlerInfo*) NULL; }                                       \
-    wxCONSTRUCTOR_DUMMY( name )
-
-#define wxIMPLEMENT_DYNAMIC_CLASS_XTI( name, basename, unit )                   \
-    _IMPLEMENT_DYNAMIC_CLASS( name, basename, unit, NULL )                      \
-    _TYPEINFO_CLASSES(name, NULL, NULL)
-
-#define wxIMPLEMENT_DYNAMIC_CLASS_XTI_CALLBACK( name, basename, unit, callback )\
-    _IMPLEMENT_DYNAMIC_CLASS( name, basename, unit, &callback )                 \
-    _TYPEINFO_CLASSES(name, NULL, NULL)
-
-#define wxIMPLEMENT_DYNAMIC_CLASS_WITH_COPY_XTI( name, basename, unit )         \
-    _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name, basename, unit, NULL  )           \
-    _TYPEINFO_CLASSES(name, NULL, NULL)
-
-#define wxIMPLEMENT_DYNAMIC_CLASS_WITH_COPY_AND_STREAMERS_XTI( name, basename,  \
-                                                             unit, toString,    \
-                                                             fromString )       \
-    _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name, basename, unit, NULL  )           \
-    _TYPEINFO_CLASSES(name, toString, fromString)
-
-// this is for classes that do not derive from wxObject, there are no creators for these
-
-#define wxIMPLEMENT_DYNAMIC_CLASS_NO_WXOBJECT_NO_BASE_XTI( name, unit )         \
-    const wxClassInfo* name::ms_classParents[] = { NULL };                      \
-    wxClassInfo name::ms_classInfo(name::ms_classParents, wxEmptyString,        \
-            wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) 0,          \
-            name::GetPropertiesStatic(),name::GetHandlersStatic(), 0, 0,        \
-            0, 0, 0 );                                                          \
-    _TYPEINFO_CLASSES(name, NULL, NULL)
-
-// this is for subclasses that still do not derive from wxObject
-
-#define wxIMPLEMENT_DYNAMIC_CLASS_NO_WXOBJECT_XTI( name, basename, unit )           \
-    const wxClassInfo* name::ms_classParents[] = { &basename::ms_classInfo, NULL }; \
-    wxClassInfo name::ms_classInfo(name::ms_classParents, wxEmptyString,            \
-            wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) 0,              \
-            name::GetPropertiesStatic(),name::GetHandlersStatic(), 0, 0,            \
-            0, 0, 0 );                                                              \
-    _TYPEINFO_CLASSES(name, NULL, NULL)
-
-
-// Multiple inheritance with two base classes
-
-#define _IMPLEMENT_DYNAMIC_CLASS2(name, basename, basename2, unit, callback)         \
-    wxObject* wxConstructorFor##name() { return new name; }                          \
-    wxObject* wxVariantOfPtrToObjectConverter##name ( wxVariantBase &data )             \
-        { return data.wxTEMPLATED_MEMBER_CALL(Get, name*); }                         \
-    wxVariantBase wxObjectToVariantConverter##name ( wxObject *data )                   \
-        { return wxVariantBase( wx_dynamic_cast(name*, data)  ); }                      \
-                                                                                     \
-    const wxClassInfo* name::ms_classParents[] =                                     \
-        { &basename::ms_classInfo,&basename2::ms_classInfo, NULL };                  \
-    wxClassInfo name::ms_classInfo(name::ms_classParents, wxT(unit),                 \
-        wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) wxConstructorFor##name, \
-        name::GetPropertiesStatic(),name::GetHandlersStatic(),name::ms_constructor,     \
-        name::ms_constructorProperties, name::ms_constructorPropertiesCount,            \
-        wxVariantOfPtrToObjectConverter##name, NULL, wxObjectToVariantConverter##name,  \
-        callback);
-
-#define wxIMPLEMENT_DYNAMIC_CLASS2( name, basename, basename2)                      \
-    _IMPLEMENT_DYNAMIC_CLASS2( name, basename, basename2, "", NULL)                 \
-    _TYPEINFO_CLASSES(name, NULL, NULL)                                             \
-    wxPropertyInfo *name::GetPropertiesStatic() { return (wxPropertyInfo*) NULL; }  \
-    wxHandlerInfo *name::GetHandlersStatic() { return (wxHandlerInfo*) NULL; }      \
-    wxCONSTRUCTOR_DUMMY( name )
-
-#define wxIMPLEMENT_DYNAMIC_CLASS2_XTI( name, basename, basename2, unit) \
-    _IMPLEMENT_DYNAMIC_CLASS2( name, basename, basename2, unit, NULL)    \
-    _TYPEINFO_CLASSES(name, NULL, NULL)
-
-
-
-// ----------------------------------------------------------------------------
-// wxIMPLEMENT class macros for abstract classes
-// ----------------------------------------------------------------------------
-
-// Single inheritance with one base class
-
-#define _IMPLEMENT_ABSTRACT_CLASS(name, basename)                               \
-    wxObject* wxVariantToObjectConverter##name ( wxVariantBase &data )             \
-        { return data.wxTEMPLATED_MEMBER_CALL(Get, name*); }                    \
-    wxObject* wxVariantOfPtrToObjectConverter##name ( wxVariantBase &data )        \
-        { return data.wxTEMPLATED_MEMBER_CALL(Get, name*); }                    \
-    wxVariantBase wxObjectToVariantConverter##name ( wxObject *data )              \
-        { return wxVariantBase( wx_dynamic_cast(name*, data)  ); }                 \
-                                                                                \
-    const wxClassInfo* name::ms_classParents[] =                                \
-        { &basename::ms_classInfo,NULL };                                       \
-    wxClassInfo name::ms_classInfo(name::ms_classParents, wxEmptyString,        \
-        wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) 0,              \
-        name::GetPropertiesStatic(),name::GetHandlersStatic(), 0, 0,            \
-        0, wxVariantOfPtrToObjectConverter##name,wxVariantToObjectConverter##name, \
-        wxObjectToVariantConverter##name);                                         \
-    _TYPEINFO_CLASSES(name, NULL, NULL)
-
-#define wxIMPLEMENT_ABSTRACT_CLASS( name, basename )                            \
-    _IMPLEMENT_ABSTRACT_CLASS( name, basename )                                 \
-    wxHandlerInfo *name::GetHandlersStatic() { return (wxHandlerInfo*) NULL; }  \
-    wxPropertyInfo *name::GetPropertiesStatic() { return (wxPropertyInfo*) NULL; }
-
-// Multiple inheritance with two base classes
-
-#define wxIMPLEMENT_ABSTRACT_CLASS2(name, basename1, basename2)                 \
-    wxClassInfo name::ms_classInfo(wxT(#name), wxT(#basename1),                 \
-                                   wxT(#basename2), (int) sizeof(name),         \
-                                   (wxObjectConstructorFn) 0);
-
-
-
-// --------------------------------------------------------------------------
-// Collection Support
-// --------------------------------------------------------------------------
-
-template<typename iter, typename collection_t > void wxListCollectionToVariantArray( 
-    const collection_t& coll, wxVariantBaseArray &value )
-{
-    iter current = coll.GetFirst();
-    while (current)
-    {
-        value.Add( new wxVariantBase(current->GetData()) );
-        current = current->GetNext();
-    }
-}
-
-template<typename collection_t> void wxArrayCollectionToVariantArray( 
-    const collection_t& coll, wxVariantBaseArray &value )
-{
-    for( size_t i = 0; i < coll.GetCount(); i++ )
-    {
-        value.Add( new wxVariantBase(coll[i]) );
-    }
-}
-
 #endif  // wxUSE_EXTENDED_RTTI
 #endif // _WX_XTIH__