+ EnsureInfosInited();
+ new wxHandlerInfo( m_firstHandler, this, handlerName, address, eventClassInfo );
+}
+
+// removes an existing runtime-property
+void wxDynamicClassInfo::RemoveProperty( const wxChar *propertyName )
+{
+ for ( wxDynamicObjectList::iterator iter = m_data->m_dynamicObjects.begin(); iter != m_data->m_dynamicObjects.end(); ++iter )
+ (*iter)->RemoveProperty( propertyName );
+ delete FindPropertyInfoInThisClass(propertyName);
+}
+
+// removes an existing runtime-handler
+void wxDynamicClassInfo::RemoveHandler( const wxChar *handlerName )
+{
+ delete FindHandlerInfoInThisClass(handlerName);
+}
+
+// renames an existing runtime-property
+void wxDynamicClassInfo::RenameProperty( const wxChar *oldPropertyName, const wxChar *newPropertyName )
+{
+ wxPropertyInfo* pi = FindPropertyInfoInThisClass(oldPropertyName);
+ wxASSERT_MSG( pi,wxT("not existing property") );
+ pi->m_name = newPropertyName;
+ wx_dynamic_cast(wxGenericPropertyAccessor*, pi->GetAccessor())->RenameProperty( oldPropertyName, newPropertyName );
+ for ( wxDynamicObjectList::iterator iter = m_data->m_dynamicObjects.begin(); iter != m_data->m_dynamicObjects.end(); ++iter )
+ (*iter)->RenameProperty( oldPropertyName, newPropertyName );
+}
+
+// renames an existing runtime-handler
+void wxDynamicClassInfo::RenameHandler( const wxChar *oldHandlerName, const wxChar *newHandlerName )
+{
+ wxASSERT_MSG(FindHandlerInfoInThisClass(oldHandlerName),wxT("not existing handler") );
+ FindHandlerInfoInThisClass(oldHandlerName)->m_name = newHandlerName;