+// adds an element to a property collection
+void wxRuntimeDepersister::AddToPropertyCollection( int objectID ,
+ const wxClassInfo *classInfo,
+ const wxPropertyInfo* propertyInfo ,
+ const wxxVariant &value)
+{
+ wxObject *o;
+ o = m_data->GetObject(objectID);
+ classInfo->AddToPropertyCollection( o , propertyInfo->GetName() , value ) ;
+}
+
+// sets the corresponding property (value is an object)
+void wxRuntimeDepersister::AddToPropertyCollectionAsObject(int objectID,
+ const wxClassInfo *classInfo,
+ const wxPropertyInfo* propertyInfo ,
+ int valueObjectId)
+{
+ wxObject *o, *valo;
+ o = m_data->GetObject(objectID);
+ valo = m_data->GetObject(valueObjectId);
+ const wxCollectionTypeInfo * collectionTypeInfo = dynamic_cast< const wxCollectionTypeInfo * >(propertyInfo->GetTypeInfo() ) ;
+ const wxClassInfo* valClassInfo = (dynamic_cast<const wxClassTypeInfo*>(collectionTypeInfo->GetElementType()))->GetClassInfo() ;
+ // if this is a dynamic object and we are asked for another class
+ // than wxDynamicObject we cast it down manually.
+ wxDynamicObject *dynvalo = dynamic_cast< wxDynamicObject * > (valo) ;
+ if ( dynvalo!=NULL && (valClassInfo != dynvalo->GetClassInfo()) )
+ {
+ valo = dynvalo->GetSuperClassInstance() ;
+ }
+
+ classInfo->AddToPropertyCollection( o , propertyInfo->GetName() , valClassInfo->InstanceToVariant(valo) ) ;
+}