+#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() ) ; \