-/////////////////////////////////////////////////////////////////////////////\r
-// Name: wx/wxt2.h\r
-// Purpose: runtime metadata information (extended class info)\r
-// Author: Stefan Csomor\r
-// Modified by: Francesco Montorsi\r
-// Created: 27/07/03\r
-// RCS-ID: $Id: xti.h 66555 2011-01-04 08:31:53Z SC $\r
-// Copyright: (c) 1997 Julian Smart\r
-// (c) 2003 Stefan Csomor\r
-/////////////////////////////////////////////////////////////////////////////\r
-\r
-#ifndef _WX_XTI2H__\r
-#define _WX_XTI2H__\r
-\r
-// ----------------------------------------------------------------------------\r
-// second part of xti headers, is included from object.h\r
-// ----------------------------------------------------------------------------\r
-\r
-#if wxUSE_EXTENDED_RTTI\r
-\r
-class WXDLLIMPEXP_BASE wxDynamicObject : public wxObject\r
-{\r
- friend class WXDLLIMPEXP_FWD_BASE wxDynamicClassInfo ;\r
-public:\r
- // instantiates this object with an instance of its superclass\r
- wxDynamicObject(wxObject* superClassInstance, const wxDynamicClassInfo *info) ;\r
- virtual ~wxDynamicObject();\r
-\r
- void SetProperty (const wxChar *propertyName, const wxAny &value);\r
- wxAny GetProperty (const wxChar *propertyName) const ;\r
-\r
- // get the runtime identity of this object\r
- wxClassInfo *GetClassInfo() const\r
- {\r
-#ifdef _MSC_VER\r
- return (wxClassInfo*) m_classInfo;\r
-#else\r
- wxDynamicClassInfo *nonconst = const_cast<wxDynamicClassInfo *>(m_classInfo);\r
- return static_cast<wxClassInfo *>(nonconst);\r
-#endif\r
- }\r
-\r
- wxObject* GetSuperClassInstance() const\r
- {\r
- return m_superClassInstance ;\r
- }\r
-private :\r
- // removes an existing runtime-property\r
- void RemoveProperty( const wxChar *propertyName ) ;\r
-\r
- // renames an existing runtime-property\r
- void RenameProperty( const wxChar *oldPropertyName , const wxChar *newPropertyName ) ;\r
-\r
- wxObject *m_superClassInstance ;\r
- const wxDynamicClassInfo *m_classInfo;\r
- struct wxDynamicObjectInternal;\r
- wxDynamicObjectInternal *m_data;\r
-};\r
-\r
-#include "wx/xtiprop.h"\r
-\r
-// ----------------------------------------------------------------------------\r
-// wxIMPLEMENT class macros for concrete classes\r
-// ----------------------------------------------------------------------------\r
-\r
-// Single inheritance with one base class\r
-\r
-#define _DEFAULT_CONSTRUCTOR(name) \\r
-wxObject* wxConstructorFor##name() \\r
-{ return new name; } \r
-\r
-#define _DEFAULT_CONVERTERS(name) \\r
-wxObject* wxVariantOfPtrToObjectConverter##name ( const wxAny &data ) \\r
-{ return data.As( (name**)NULL ); } \\r
- wxAny wxObjectToVariantConverter##name ( wxObject *data ) \\r
-{ return wxAny( wx_dynamic_cast(name*, data) ); }\r
-\r
-#define _TYPEINFO_CLASSES(n, toString, fromString ) \\r
- wxClassTypeInfo s_typeInfo##n(wxT_OBJECT, &n::ms_classInfo, \\r
- toString, fromString, typeid(n).name()); \\r
- wxClassTypeInfo s_typeInfoPtr##n(wxT_OBJECT_PTR, &n::ms_classInfo, \\r
- toString, fromString, typeid(n*).name());\r
-\r
-#define _IMPLEMENT_DYNAMIC_CLASS(name, basename, unit, callback) \\r
- _DEFAULT_CONSTRUCTOR(name) \\r
- _DEFAULT_CONVERTERS(name) \\r
- \\r
- const wxClassInfo* name::ms_classParents[] = \\r
-{ &basename::ms_classInfo, NULL }; \\r
- wxClassInfo name::ms_classInfo(name::ms_classParents, wxT(unit), \\r
- wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) wxConstructorFor##name, \\r
- name::GetPropertiesStatic, name::GetHandlersStatic, name::ms_constructor, \\r
- name::ms_constructorProperties, name::ms_constructorPropertiesCount, \\r
- wxVariantOfPtrToObjectConverter##name, NULL, wxObjectToVariantConverter##name, \\r
- callback);\r
-\r
-#define _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY(name, basename, unit, callback ) \\r
- _DEFAULT_CONSTRUCTOR(name) \\r
- _DEFAULT_CONVERTERS(name) \\r
- void wxVariantToObjectConverter##name ( const wxAny &data, wxObjectFunctor* fn ) \\r
-{ (*fn)( &wxANY_AS(data, name) ); } \\r
- \\r
- const wxClassInfo* name::ms_classParents[] = { &basename::ms_classInfo,NULL }; \\r
- wxClassInfo name::ms_classInfo(name::ms_classParents, wxT(unit), \\r
- wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) wxConstructorFor##name, \\r
- name::GetPropertiesStatic,name::GetHandlersStatic,name::ms_constructor, \\r
- name::ms_constructorProperties, name::ms_constructorPropertiesCount, \\r
- wxVariantOfPtrToObjectConverter##name, wxVariantToObjectConverter##name, \\r
- wxObjectToVariantConverter##name, callback);\r
-\r
-#define wxIMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name, basename ) \\r
- _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name, basename, "", NULL ) \\r
- _TYPEINFO_CLASSES(name, NULL, NULL) \\r
- const wxPropertyInfo *name::GetPropertiesStatic() \\r
-{ return (wxPropertyInfo*) NULL; } \\r
- const wxHandlerInfo *name::GetHandlersStatic() \\r
-{ return (wxHandlerInfo*) NULL; } \\r
- wxCONSTRUCTOR_DUMMY( name )\r
-\r
-#define wxIMPLEMENT_DYNAMIC_CLASS( name, basename ) \\r
- _IMPLEMENT_DYNAMIC_CLASS( name, basename, "", NULL ) \\r
- _TYPEINFO_CLASSES(name, NULL, NULL) \\r
- wxPropertyInfo *name::GetPropertiesStatic() \\r
-{ return (wxPropertyInfo*) NULL; } \\r
- wxHandlerInfo *name::GetHandlersStatic() \\r
-{ return (wxHandlerInfo*) NULL; } \\r
- wxCONSTRUCTOR_DUMMY( name )\r
-\r
-#define wxIMPLEMENT_DYNAMIC_CLASS_XTI( name, basename, unit ) \\r
- _IMPLEMENT_DYNAMIC_CLASS( name, basename, unit, NULL ) \\r
- _TYPEINFO_CLASSES(name, NULL, NULL)\r
-\r
-#define wxIMPLEMENT_DYNAMIC_CLASS_XTI_CALLBACK( name, basename, unit, callback )\\r
- _IMPLEMENT_DYNAMIC_CLASS( name, basename, unit, &callback ) \\r
- _TYPEINFO_CLASSES(name, NULL, NULL)\r
-\r
-#define wxIMPLEMENT_DYNAMIC_CLASS_WITH_COPY_XTI( name, basename, unit ) \\r
- _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name, basename, unit, NULL ) \\r
- _TYPEINFO_CLASSES(name, NULL, NULL)\r
-\r
-#define wxIMPLEMENT_DYNAMIC_CLASS_WITH_COPY_AND_STREAMERS_XTI( name, basename, \\r
- unit, toString, \\r
- fromString ) \\r
- _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name, basename, unit, NULL ) \\r
- _TYPEINFO_CLASSES(name, toString, fromString)\r
-\r
-// this is for classes that do not derive from wxObject, there are no creators for these\r
-\r
-#define wxIMPLEMENT_DYNAMIC_CLASS_NO_WXOBJECT_NO_BASE_XTI( name, unit ) \\r
- const wxClassInfo* name::ms_classParents[] = { NULL }; \\r
- wxClassInfo name::ms_classInfo(name::ms_classParents, wxEmptyString, \\r
- wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) 0, \\r
- name::GetPropertiesStatic,name::GetHandlersStatic, 0, 0, \\r
- 0, 0, 0 ); \\r
- _TYPEINFO_CLASSES(name, NULL, NULL)\r
-\r
-// this is for subclasses that still do not derive from wxObject\r
-\r
-#define wxIMPLEMENT_DYNAMIC_CLASS_NO_WXOBJECT_XTI( name, basename, unit ) \\r
- const wxClassInfo* name::ms_classParents[] = { &basename::ms_classInfo, NULL }; \\r
- wxClassInfo name::ms_classInfo(name::ms_classParents, wxEmptyString, \\r
- wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) 0, \\r
- name::GetPropertiesStatic,name::GetHandlersStatic, 0, 0, \\r
- 0, 0, 0 ); \\r
- _TYPEINFO_CLASSES(name, NULL, NULL)\r
-\r
-\r
-// Multiple inheritance with two base classes\r
-\r
-#define _IMPLEMENT_DYNAMIC_CLASS2(name, basename, basename2, unit, callback) \\r
- _DEFAULT_CONSTRUCTOR(name) \\r
- _DEFAULT_CONVERTERS(name) \\r
- \\r
- const wxClassInfo* name::ms_classParents[] = \\r
-{ &basename::ms_classInfo,&basename2::ms_classInfo, NULL }; \\r
- wxClassInfo name::ms_classInfo(name::ms_classParents, wxT(unit), \\r
- wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) wxConstructorFor##name, \\r
- name::GetPropertiesStatic,name::GetHandlersStatic,name::ms_constructor, \\r
- name::ms_constructorProperties, name::ms_constructorPropertiesCount, \\r
- wxVariantOfPtrToObjectConverter##name, NULL, wxObjectToVariantConverter##name, \\r
- callback);\r
-\r
-#define wxIMPLEMENT_DYNAMIC_CLASS2( name, basename, basename2) \\r
- _IMPLEMENT_DYNAMIC_CLASS2( name, basename, basename2, "", NULL) \\r
- _TYPEINFO_CLASSES(name, NULL, NULL) \\r
- wxPropertyInfo *name::GetPropertiesStatic() { return (wxPropertyInfo*) NULL; } \\r
- wxHandlerInfo *name::GetHandlersStatic() { return (wxHandlerInfo*) NULL; } \\r
- wxCONSTRUCTOR_DUMMY( name )\r
-\r
-#define wxIMPLEMENT_DYNAMIC_CLASS2_XTI( name, basename, basename2, unit) \\r
- _IMPLEMENT_DYNAMIC_CLASS2( name, basename, basename2, unit, NULL) \\r
- _TYPEINFO_CLASSES(name, NULL, NULL)\r
-\r
-\r
-\r
-// ----------------------------------------------------------------------------\r
-// wxIMPLEMENT class macros for abstract classes\r
-// ----------------------------------------------------------------------------\r
-\r
-// Single inheritance with one base class\r
-\r
-#define _IMPLEMENT_ABSTRACT_CLASS(name, basename) \\r
- _DEFAULT_CONVERTERS(name) \\r
- \\r
- const wxClassInfo* name::ms_classParents[] = \\r
-{ &basename::ms_classInfo,NULL }; \\r
- wxClassInfo name::ms_classInfo(name::ms_classParents, wxEmptyString, \\r
- wxT(#name), (int) sizeof(name), (wxObjectConstructorFn) 0, \\r
- name::GetPropertiesStatic,name::GetHandlersStatic, 0, 0, \\r
- 0, wxVariantOfPtrToObjectConverter##name,0, \\r
- wxObjectToVariantConverter##name); \\r
- _TYPEINFO_CLASSES(name, NULL, NULL)\r
-\r
-#define wxIMPLEMENT_ABSTRACT_CLASS( name, basename ) \\r
- _IMPLEMENT_ABSTRACT_CLASS( name, basename ) \\r
- wxHandlerInfo *name::GetHandlersStatic() { return (wxHandlerInfo*) NULL; } \\r
- wxPropertyInfo *name::GetPropertiesStatic() { return (wxPropertyInfo*) NULL; }\r
-\r
-// Multiple inheritance with two base classes\r
-\r
-#define wxIMPLEMENT_ABSTRACT_CLASS2(name, basename1, basename2) \\r
- wxClassInfo name::ms_classInfo(wxT(#name), wxT(#basename1), \\r
- wxT(#basename2), (int) sizeof(name), \\r
- (wxObjectConstructorFn) 0);\r
-\r
-// templated streaming, every type must have their specialization for these methods\r
-\r
-template<typename T>\r
-void wxStringReadValue( const wxString &s, T &data );\r
-\r
-template<typename T>\r
-void wxStringWriteValue( wxString &s, const T &data);\r
-\r
-template<typename T>\r
-void wxToStringConverter( const wxAny &v, wxString &s ) \r
-{ wxStringWriteValue(s, wxANY_AS(v, T)); }\r
-\r
-template<typename T>\r
-void wxFromStringConverter( const wxString &s, wxAny &v) \r
-{ T d; wxStringReadValue(s, d); v = wxAny(d); }\r
-\r
-#endif\r
-\r
-#endif // _WX_XTIH2__\r
+/////////////////////////////////////////////////////////////////////////////
+// Name: wx/wxt2.h
+// Purpose: runtime metadata information (extended class info)
+// Author: Stefan Csomor
+// Modified by: Francesco Montorsi
+// Created: 27/07/03
+// RCS-ID: $Id$
+// Copyright: (c) 1997 Julian Smart
+// (c) 2003 Stefan Csomor
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_XTI2H__
+#define _WX_XTI2H__
+
+// ----------------------------------------------------------------------------
+// second part of xti headers, is included from object.h
+// ----------------------------------------------------------------------------
+
+#if wxUSE_EXTENDED_RTTI
+
+// ----------------------------------------------------------------------------
+// wxDynamicObject class, its instances connect to a 'super class instance'
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_BASE wxDynamicObject : public wxObject
+{
+ friend class WXDLLIMPEXP_FWD_BASE wxDynamicClassInfo ;
+public:
+ // instantiates this object with an instance of its superclass
+ wxDynamicObject(wxObject* superClassInstance, const wxDynamicClassInfo *info) ;
+ virtual ~wxDynamicObject();
+
+ void SetProperty (const wxChar *propertyName, const wxAny &value);
+ wxAny GetProperty (const wxChar *propertyName) const ;
+
+ // get the runtime identity of this object
+ wxClassInfo *GetClassInfo() const
+ {
+#ifdef _MSC_VER
+ return (wxClassInfo*) m_classInfo;
+#else
+ wxDynamicClassInfo *nonconst = const_cast<wxDynamicClassInfo *>(m_classInfo);
+ return static_cast<wxClassInfo *>(nonconst);
+#endif
+ }
+
+ wxObject* GetSuperClassInstance() const
+ {
+ return m_superClassInstance ;
+ }
+private :
+ // removes an existing runtime-property
+ void RemoveProperty( const wxChar *propertyName ) ;
+
+ // renames an existing runtime-property
+ void RenameProperty( const wxChar *oldPropertyName , const wxChar *newPropertyName ) ;
+
+ wxObject *m_superClassInstance ;
+ const wxDynamicClassInfo *m_classInfo;
+ struct wxDynamicObjectInternal;
+ wxDynamicObjectInternal *m_data;
+};
+
+// ----------------------------------------------------------------------------
+// String conversion templates supporting older compilers
+// ----------------------------------------------------------------------------
+
+#if wxUSE_FUNC_TEMPLATE_POINTER
+# define wxTO_STRING(type) wxToStringConverter<type>
+# define wxTO_STRING_IMP(type)
+# define wxFROM_STRING(type) wxFromStringConverter<type>
+# define wxFROM_STRING_IMP(type)
+#else
+# define wxTO_STRING(type) ToString##type
+# define wxTO_STRING_IMP(type) \
+ inline void ToString##type( const wxAny& data, wxString &result ) \
+{ wxToStringConverter<type>(data, result); }
+
+# define wxFROM_STRING(type) FromString##type
+# define wxFROM_STRING_IMP(type) \
+ inline void FromString##type( const wxString& data, wxAny &result ) \
+{ wxFromStringConverter<type>(data, result); }
+#endif
+
+#include "wx/xtiprop.h"
+#include "wx/xtictor.h"
+
+// ----------------------------------------------------------------------------
+// wxIMPLEMENT class macros for concrete classes
+// ----------------------------------------------------------------------------
+
+// Single inheritance with one base class
+
+#define _DEFAULT_CONSTRUCTOR(name) \
+wxObject* wxConstructorFor##name() \
+{ return new name; }
+
+#define _DEFAULT_CONVERTERS(name) \
+wxObject* wxVariantOfPtrToObjectConverter##name ( const wxAny &data ) \
+{ return data.As( (name**)NULL ); } \
+ wxAny wxObjectToVariantConverter##name ( wxObject *data ) \
+{ return wxAny( wx_dynamic_cast(name*, data) ); }
+
+#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) \
+ _DEFAULT_CONSTRUCTOR(name) \
+ _DEFAULT_CONVERTERS(name) \
+ \
+ 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 ) \
+ _DEFAULT_CONSTRUCTOR(name) \
+ _DEFAULT_CONVERTERS(name) \
+ void wxVariantToObjectConverter##name ( const wxAny &data, wxObjectFunctor* fn ) \
+{ (*fn)( &wxANY_AS(data, name) ); } \
+ \
+ 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) \
+ _DEFAULT_CONSTRUCTOR(name) \
+ _DEFAULT_CONVERTERS(name) \
+ \
+ 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) \
+ _DEFAULT_CONVERTERS(name) \
+ \
+ 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,0, \
+ 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);
+
+// templated streaming, every type that can be converted to wxString
+// must have their specialization for these methods
+
+template<typename T>
+void wxStringReadValue( const wxString &s, T &data );
+
+template<typename T>
+void wxStringWriteValue( wxString &s, const T &data);
+
+template<typename T>
+void wxToStringConverter( const wxAny &v, wxString &s )
+{ wxStringWriteValue(s, wxANY_AS(v, T)); }
+
+template<typename T>
+void wxFromStringConverter( const wxString &s, wxAny &v)
+{ T d; wxStringReadValue(s, d); v = wxAny(d); }
+
+// --------------------------------------------------------------------------
+// Collection Support
+// --------------------------------------------------------------------------
+
+template<typename iter, typename collection_t > void wxListCollectionToAnyList(
+ const collection_t& coll, wxAnyList &value )
+{
+ for ( iter current = coll.GetFirst(); current;
+ current = current->GetNext() )
+ {
+ value.Append( new wxAny(current->GetData()) );
+ }
+}
+
+template<typename collection_t> void wxArrayCollectionToVariantArray(
+ const collection_t& coll, wxAnyList &value )
+{
+ for( size_t i = 0; i < coll.GetCount(); i++ )
+ {
+ value.Append( new wxAny(coll[i]) );
+ }
+}
+
+#endif
+
+#endif // _WX_XTIH2__