-class WXDLLIMPEXP_BASE wxPropertyInfo
-{
-public :
- wxPropertyInfo( wxPropertyInfo* &iter , const char *name , const char *typeName , const wxTypeInfo* typeInfo , wxPropertyAccessor *accessor , wxxVariant dv ) :
- m_name( name ) , m_typeName(typeName) , m_typeInfo( typeInfo ) , m_accessor( accessor ) , m_defaultValue( dv )
- {
- m_next = iter ;
- iter = this ;
- }
- // return the name of this property
- const char * GetName() const { return m_name ; }
-
- // return the typename of this property
- const char * GetTypeName() const { return m_typeName ; }
-
- // return the type info of this property
- const wxTypeInfo * GetTypeInfo() const { return m_typeInfo ; }
-
- // return the accessor for this property
- wxPropertyAccessor* GetAccessor() const { return m_accessor ; }
-
- // returns NULL if this is the last property of this class
- wxPropertyInfo* GetNext() const { return m_next ; }
-private :
- const char * m_name;
- const char * m_typeName ;
- const wxTypeInfo* m_typeInfo ;
- wxPropertyAccessor* m_accessor ;
- wxxVariant m_defaultValue;
- // string representation of the default value
- // to be assigned by the designer to the property
- // when the component is dropped on the container.
- wxPropertyInfo* m_next ;
-};
+WX_DECLARE_STRING_HASH_MAP_WITH_DECL( wxPropertyInfo* , wxPropertyInfoMap , class WXDLLIMPEXP_BASE ) ;
+
+#define wxBEGIN_PROPERTIES_TABLE(theClass) \
+ wxPropertyInfo *theClass::GetPropertiesStatic() \
+{ \
+ typedef theClass class_t; \
+ static wxPropertyInfo* first = NULL ;
+
+#define wxEND_PROPERTIES_TABLE() \
+ return first ; }
+
+#define wxHIDE_PROPERTY( pname ) \
+ static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(void).name() ,NULL , wxxVariant() , wxPROP_DONT_STREAM , wxEmptyString , wxEmptyString ) ;
+
+#define wxPROPERTY( pname , type , setter , getter , defaultValue , flags , help , group) \
+ wxSETTER( pname , class_t , type , setter ) \
+ static wxSetter##pname _setter##pname ; \
+ wxGETTER( pname , class_t , type , getter ) \
+ static wxGetter##pname _getter##pname ; \
+ static wxPropertyAccessor _accessor##pname( &_setter##pname , &_getter##pname , NULL , NULL ) ; \
+ static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(type).name() ,&_accessor##pname , wxxVariant(defaultValue) , flags , group , help ) ;
+
+#define wxPROPERTY_FLAGS( pname , flags , type , setter , getter ,defaultValue , pflags , help , group) \
+ wxSETTER( pname , class_t , type , setter ) \
+ static wxSetter##pname _setter##pname ; \
+ wxGETTER( pname , class_t , type , getter ) \
+ static wxGetter##pname _getter##pname ; \
+ static wxPropertyAccessor _accessor##pname( &_setter##pname , &_getter##pname , NULL , NULL ) ; \
+ static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(flags).name() ,&_accessor##pname , wxxVariant(defaultValue), wxPROP_ENUM_STORE_LONG | pflags , help , group ) ;
+
+#define wxREADONLY_PROPERTY( pname , type , getter ,defaultValue , flags , help , group) \
+ wxGETTER( pname , class_t , type , getter ) \
+ static wxGetter##pname _getter##pname ; \
+ static wxPropertyAccessor _accessor##pname( NULL , &_getter##pname , NULL , NULL ) ; \
+ static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(type).name() ,&_accessor##pname , wxxVariant(defaultValue), flags , help , group ) ;
+
+#define wxREADONLY_PROPERTY_FLAGS( pname , flags , type , getter ,defaultValue , pflags , help , group) \
+ wxGETTER( pname , class_t , type , getter ) \
+ static wxGetter##pname _getter##pname ; \
+ static wxPropertyAccessor _accessor##pname( NULL , &_getter##pname , NULL , NULL ) ; \
+ static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(flags).name() ,&_accessor##pname , wxxVariant(defaultValue), wxPROP_ENUM_STORE_LONG | pflags , help , group ) ;
+
+#define wxPROPERTY_COLLECTION( pname , colltype , addelemtype , adder , getter , flags , help , group ) \
+ wxADDER( pname , class_t , addelemtype , adder ) \
+ static wxAdder##pname _adder##pname ; \
+ wxCOLLECTION_GETTER( pname , class_t , colltype , getter ) \
+ static wxCollectionGetter##pname _collectionGetter##pname ; \
+ static wxPropertyAccessor _accessor##pname( NULL , NULL ,&_adder##pname , &_collectionGetter##pname ) ; \
+ static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(colltype).name() ,typeid(addelemtype).name() ,&_accessor##pname , flags , help , group ) ;
+
+#define wxREADONLY_PROPERTY_COLLECTION( pname , colltype , addelemtype , getter , flags , help , group) \
+ wxCOLLECTION_GETTER( pname , class_t , colltype , getter ) \
+ static wxCollectionGetter##pname _collectionGetter##pname ; \
+ static wxPropertyAccessor _accessor##pname( NULL , NULL , NULL , &_collectionGetter##pname ) ; \
+ static wxPropertyInfo _propertyInfo##pname( first ,class_t::GetClassInfoStatic() , wxT(#pname) , typeid(colltype).name() ,typeid(addelemtype).name() ,&_accessor##pname , flags , help , group ) ;
+
+
+#define wxEVENT_PROPERTY( name , eventType , eventClass ) \
+ static wxDelegateTypeInfo _typeInfo##name( eventType , CLASSINFO( eventClass ) ) ; \
+ static wxPropertyInfo _propertyInfo##name( first ,class_t::GetClassInfoStatic() , wxT(#name) , &_typeInfo##name , NULL , wxxVariant() ) ; \
+
+#define wxEVENT_RANGE_PROPERTY( name , eventType , lastEventType , eventClass ) \
+ static wxDelegateTypeInfo _typeInfo##name( eventType , lastEventType , CLASSINFO( eventClass ) ) ; \
+ static wxPropertyInfo _propertyInfo##name( first , class_t::GetClassInfoStatic() , wxT(#name) , &_typeInfo##name , NULL , wxxVariant() ) ; \