]> git.saurik.com Git - wxWidgets.git/commitdiff
additional file, test auto-props
authorStefan Csomor <csomor@advancedconcepts.ch>
Fri, 7 Jan 2011 17:28:18 +0000 (17:28 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Fri, 7 Jan 2011 17:28:18 +0000 (17:28 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66622 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/xti2.h [new file with mode: 0644]

diff --git a/include/wx/xti2.h b/include/wx/xti2.h
new file mode 100644 (file)
index 0000000..885fe7d
--- /dev/null
@@ -0,0 +1,244 @@
+/////////////////////////////////////////////////////////////////////////////\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