- valo = dynvalo->GetSuperClassInstance() ;
- }
-
- classInfo->AddToPropertyCollection( o , propertyInfo->GetName() , valClassInfo->InstanceToVariant(valo) ) ;
-}
-
-// ----------------------------------------------------------------------------
-// depersisting to code
-// ----------------------------------------------------------------------------
-
-struct wxCodeDepersister::wxCodeDepersisterInternal
-{
-#if wxUSE_UNICODE
- map<int,wstring> m_objectNames ;
-#else
- map<int,string> m_objectNames ;
-#endif
-
- void SetObjectName(int objectID, const wxString &name )
- {
- if ( m_objectNames.find(objectID) != m_objectNames.end() )
- {
- wxLogError( _("Passing a already registered object to SetObjectName") ) ;
- return ;
- }
- m_objectNames[objectID] = (const wxChar *)name;
- }
-
- wxString GetObjectName( int objectID )
- {
- if ( objectID == wxNullObjectID )
- return wxT("NULL") ;
-
- if ( m_objectNames.find(objectID) == m_objectNames.end() )
- {
- wxLogError( _("Passing an unkown object to GetObject") ) ;
- return wxEmptyString ;
- }
- return wxString( m_objectNames[objectID].c_str() ) ;
- }
-} ;
-
-wxCodeDepersister::wxCodeDepersister(wxTextOutputStream *out)
-: m_fp(out)
-{
- m_data = new wxCodeDepersisterInternal ;
-}
-
-wxCodeDepersister::~wxCodeDepersister()
-{
- delete m_data ;
-}
-
-void wxCodeDepersister::AllocateObject(int objectID, wxClassInfo *classInfo ,
- wxxVariantArray &WXUNUSED(metadata))
-{
- wxString objectName = wxString::Format( wxT("LocalObject_%d") , objectID ) ;
- m_fp->WriteString( wxString::Format( wxT("\t%s *%s = new %s;\n"),
- classInfo->GetClassName(),
- objectName.c_str(),
- classInfo->GetClassName()) );
- m_data->SetObjectName( objectID , objectName ) ;
-}
-
-void wxCodeDepersister::DestroyObject(int objectID, wxClassInfo *WXUNUSED(classInfo))
-{
- m_fp->WriteString( wxString::Format( wxT("\tdelete %s;\n"),
- m_data->GetObjectName( objectID).c_str() ) );
-}
-
-wxString wxCodeDepersister::ValueAsCode( const wxxVariant ¶m )
-{
- wxString value ;
- const wxTypeInfo* type = param.GetTypeInfo() ;
- if ( type->GetKind() == wxT_CUSTOM )
- {
- const wxCustomTypeInfo* cti = dynamic_cast<const wxCustomTypeInfo*>(type) ;
- if ( cti )
- {
- value.Printf( wxT("%s(%s)"), cti->GetTypeName().c_str(),param.GetAsString().c_str() );
- }
- else
- {
- wxLogError ( _("Internal error, illegal wxCustomTypeInfo") ) ;
- }
- }
- else if ( type->GetKind() == wxT_STRING )
- {
- value.Printf( wxT("\"%s\""),param.GetAsString().c_str() );
- }
- else
- {
- value.Printf( wxT("%s"), param.GetAsString().c_str() );
- }
- return value ;
-}
-
-void wxCodeDepersister::CreateObject(int objectID,
- const wxClassInfo *WXUNUSED(classInfo),
- int paramCount,
- wxxVariant *params,
- int *objectIDValues,
- const wxClassInfo **WXUNUSED(objectClassInfos) ,
- wxxVariantArray &WXUNUSED(metadata)
- )
-{
- int i;
- m_fp->WriteString( wxString::Format( wxT("\t%s->Create("), m_data->GetObjectName(objectID).c_str() ) );
- for (i = 0; i < paramCount; i++)
- {
- if ( objectIDValues[i] != wxInvalidObjectID )
- m_fp->WriteString( wxString::Format( wxT("%s"), m_data->GetObjectName( objectIDValues[i] ).c_str() ) );
- else
- {
- m_fp->WriteString( wxString::Format( wxT("%s"), ValueAsCode(params[i]).c_str() ) );
- }
- if (i < paramCount - 1)
- m_fp->WriteString( wxT(", "));
- }
- m_fp->WriteString( wxT(");\n") );
-}
-
-void wxCodeDepersister::ConstructObject(int objectID,
- const wxClassInfo *classInfo,
- int paramCount,
- wxxVariant *params,
- int *objectIDValues,
- const wxClassInfo **WXUNUSED(objectClassInfos) ,
- wxxVariantArray &WXUNUSED(metadata)
- )
-{
- wxString objectName = wxString::Format( wxT("LocalObject_%d") , objectID ) ;
- m_fp->WriteString( wxString::Format( wxT("\t%s *%s = new %s("),
- classInfo->GetClassName(),
- objectName.c_str(),
- classInfo->GetClassName()) );
- m_data->SetObjectName( objectID , objectName ) ;
-
- int i;
- for (i = 0; i < paramCount; i++)
- {
- if ( objectIDValues[i] != wxInvalidObjectID )
- m_fp->WriteString( wxString::Format( wxT("%s"), m_data->GetObjectName( objectIDValues[i] ).c_str() ) );
- else
- {
- m_fp->WriteString( wxString::Format( wxT("%s"), ValueAsCode(params[i]).c_str() ) );
- }
- if (i < paramCount - 1)
- m_fp->WriteString( wxT(", ") );