]> git.saurik.com Git - wxWidgets.git/commitdiff
XTI extensions
authorStefan Csomor <csomor@advancedconcepts.ch>
Tue, 19 Aug 2003 16:40:20 +0000 (16:40 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Tue, 19 Aug 2003 16:40:20 +0000 (16:40 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23023 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/ctrlsub.cpp
src/common/xti.cpp
src/common/xtistrm.cpp

index 9a7ec228e30ff3bf159bbafa4e9c1529d5cf58c3..03be03f3dc1cc17287d09e967425192fe5cef4bc 100644 (file)
@@ -58,6 +58,15 @@ wxString wxItemContainer::GetStringSelection() const
     return s;
 }
 
+wxArrayString wxItemContainer::GetStrings() const
+{
+    wxArrayString result ;
+    size_t count = GetCount() ;
+    for ( size_t n = 0 ; n < count ; n++ )
+        result.Add(GetString(n));
+    return result ;
+}
+
 // ----------------------------------------------------------------------------
 // appending items
 // ----------------------------------------------------------------------------
index 38ed197501e6f0cf7461cebbce2a929658650086..c3b5bef7d2bc081d04fd6c17855dc8485665320a 100644 (file)
@@ -28,7 +28,8 @@
 
 #include "wx/xml/xml.h"
 #include "wx/tokenzr.h"
-
+#include "wx/notebook.h"
+#include "wx/list.h"
 #include <string.h>
 
 #if wxUSE_EXTENDED_RTTI
@@ -104,89 +105,6 @@ const char * wxEnumData::GetEnumMemberNameByIndex( int idx )
 // ----------------------------------------------------------------------------
 // Type Information
 // ----------------------------------------------------------------------------
-
-template<> const wxTypeInfo* wxGetTypeInfo( void * )
-{
-       static wxBuiltInTypeInfo s_typeInfo( wxT_VOID ) ;
-       return &s_typeInfo ;
-}
-
-template<> const wxTypeInfo* wxGetTypeInfo( bool * )
-{
-       static wxBuiltInTypeInfo s_typeInfo( wxT_BOOL ) ;
-       return &s_typeInfo ;
-}
-
-template<> const wxTypeInfo* wxGetTypeInfo( char * )
-{
-       static wxBuiltInTypeInfo s_typeInfo( wxT_CHAR ) ;
-       return &s_typeInfo ;
-}
-
-template<> const wxTypeInfo* wxGetTypeInfo( unsigned char * )
-{
-       static wxBuiltInTypeInfo s_typeInfo( wxT_UCHAR ) ;
-       return &s_typeInfo ;
-}
-
-template<> const wxTypeInfo* wxGetTypeInfo( int * )
-{
-       static wxBuiltInTypeInfo s_typeInfo( wxT_CHAR ) ;
-       return &s_typeInfo ;
-}
-
-template<> const wxTypeInfo* wxGetTypeInfo( unsigned int * )
-{
-       static wxBuiltInTypeInfo s_typeInfo( wxT_UCHAR ) ;
-       return &s_typeInfo ;
-}
-
-template<> const wxTypeInfo* wxGetTypeInfo( long * )
-{
-       static wxBuiltInTypeInfo s_typeInfo( wxT_CHAR ) ;
-       return &s_typeInfo ;
-}
-
-template<> const wxTypeInfo* wxGetTypeInfo( unsigned long * )
-{
-       static wxBuiltInTypeInfo s_typeInfo( wxT_UCHAR ) ;
-       return &s_typeInfo ;
-}
-
-template<> const wxTypeInfo* wxGetTypeInfo( float * )
-{
-       static wxBuiltInTypeInfo s_typeInfo( wxT_FLOAT ) ;
-       return &s_typeInfo ;
-}
-
-template<> const wxTypeInfo* wxGetTypeInfo( double * )
-{
-       static wxBuiltInTypeInfo s_typeInfo( wxT_DOUBLE ) ;
-       return &s_typeInfo ;
-}
-
-template<> const wxTypeInfo* wxGetTypeInfo( wxString * )
-{
-       static wxBuiltInTypeInfo s_typeInfo( wxT_STRING ) ;
-       return &s_typeInfo ;
-}
-
-template<> const wxTypeInfo* wxGetTypeInfo( wxWindowList * )
-{
-    static wxCollectionTypeInfo s_typeInfo( (wxTypeInfo*) wxGetTypeInfo( (wxWindow **) NULL) ) ;
-    return &s_typeInfo ;
-}
-
-// this are compiler induced specialization which are never used anywhere
-
-WX_ILLEGAL_TYPE_SPECIALIZATION( char const * )
-WX_ILLEGAL_TYPE_SPECIALIZATION( char * )
-WX_ILLEGAL_TYPE_SPECIALIZATION( unsigned char * )
-WX_ILLEGAL_TYPE_SPECIALIZATION( int * )
-WX_ILLEGAL_TYPE_SPECIALIZATION( bool * )
-WX_ILLEGAL_TYPE_SPECIALIZATION( long * )
-WX_ILLEGAL_TYPE_SPECIALIZATION( wxString * )
-
 // ----------------------------------------------------------------------------
 // value streaming
 // ----------------------------------------------------------------------------
@@ -372,6 +290,100 @@ template<> void wxStringWriteValue(wxString & , wxSize * const & )
 
 WX_CUSTOM_TYPE_INFO(wxSize)
 
+
+template<> const wxTypeInfo* wxGetTypeInfo( void * )
+{
+       static wxBuiltInTypeInfo s_typeInfo( wxT_VOID ) ;
+       return &s_typeInfo ;
+}
+
+template<> const wxTypeInfo* wxGetTypeInfo( bool * )
+{
+       static wxBuiltInTypeInfo s_typeInfo( wxT_BOOL , &wxToStringConverter<bool> , &wxFromStringConverter<bool>) ;
+       return &s_typeInfo ;
+}
+
+template<> const wxTypeInfo* wxGetTypeInfo( char * )
+{
+       static wxBuiltInTypeInfo s_typeInfo( wxT_CHAR , &wxToStringConverter<char> , &wxFromStringConverter<char>) ;
+       return &s_typeInfo ;
+}
+
+template<> const wxTypeInfo* wxGetTypeInfo( unsigned char * )
+{
+       static wxBuiltInTypeInfo s_typeInfo( wxT_UCHAR , &wxToStringConverter< unsigned char > , &wxFromStringConverter<unsigned char>) ;
+       return &s_typeInfo ;
+}
+
+template<> const wxTypeInfo* wxGetTypeInfo( int * )
+{
+       static wxBuiltInTypeInfo s_typeInfo( wxT_CHAR , &wxToStringConverter<int> , &wxFromStringConverter<int>) ;
+       return &s_typeInfo ;
+}
+
+template<> const wxTypeInfo* wxGetTypeInfo( unsigned int * )
+{
+       static wxBuiltInTypeInfo s_typeInfo( wxT_UCHAR , &wxToStringConverter<unsigned int> , &wxFromStringConverter<unsigned int>) ;
+       return &s_typeInfo ;
+}
+
+template<> const wxTypeInfo* wxGetTypeInfo( long * )
+{
+       static wxBuiltInTypeInfo s_typeInfo( wxT_LONG , &wxToStringConverter<long> , &wxFromStringConverter<long>) ;
+       return &s_typeInfo ;
+}
+
+template<> const wxTypeInfo* wxGetTypeInfo( unsigned long * )
+{
+       static wxBuiltInTypeInfo s_typeInfo( wxT_ULONG , &wxToStringConverter<unsigned long> , &wxFromStringConverter<unsigned long>) ;
+       return &s_typeInfo ;
+}
+
+template<> const wxTypeInfo* wxGetTypeInfo( float * )
+{
+       static wxBuiltInTypeInfo s_typeInfo( wxT_FLOAT , &wxToStringConverter<float> , &wxFromStringConverter<float>) ;
+       return &s_typeInfo ;
+}
+
+template<> const wxTypeInfo* wxGetTypeInfo( double * )
+{
+       static wxBuiltInTypeInfo s_typeInfo( wxT_DOUBLE , &wxToStringConverter<double> , &wxFromStringConverter<double>) ;
+       return &s_typeInfo ;
+}
+
+template<> const wxTypeInfo* wxGetTypeInfo( wxString * )
+{
+       static wxBuiltInTypeInfo s_typeInfo( wxT_STRING , &wxToStringConverter<wxString> , &wxFromStringConverter<wxString>) ;
+       return &s_typeInfo ;
+}
+
+// this are compiler induced specialization which are never used anywhere
+
+WX_ILLEGAL_TYPE_SPECIALIZATION( char const * )
+WX_ILLEGAL_TYPE_SPECIALIZATION( char * )
+WX_ILLEGAL_TYPE_SPECIALIZATION( unsigned char * )
+WX_ILLEGAL_TYPE_SPECIALIZATION( int * )
+WX_ILLEGAL_TYPE_SPECIALIZATION( bool * )
+WX_ILLEGAL_TYPE_SPECIALIZATION( long * )
+WX_ILLEGAL_TYPE_SPECIALIZATION( wxString * )
+
+//
+
+// make wxWindowList known
+
+template<> const wxTypeInfo* wxGetTypeInfo( wxArrayString * )
+{
+    static wxCollectionTypeInfo s_typeInfo( (wxTypeInfo*) wxGetTypeInfo( (wxString *) NULL) ) ;
+    return &s_typeInfo ;
+}
+
+template<> void wxCollectionToVariantArray( wxArrayString const &theArray, wxxVariantArray &value)
+{
+    wxArrayCollectionToVariantArray( theArray , value ) ;
+}
+
+
+
 /*
 
 template<> void wxStringReadValue(const wxString &s , wxColour &data )
@@ -507,19 +519,23 @@ wxxVariant wxClassInfo::GetProperty(wxObject *object, const char *propertyName)
 
     accessor = FindAccessor(propertyName);
     wxASSERT(accessor->HasGetter());
-    return accessor->GetProperty(object);
+    wxxVariant result ;
+    accessor->GetProperty(object,result);
+    return result ;
 }
 
-wxxVariantArray wxClassInfo::GetPropertyCollection(wxObject *object, const wxChar *propertyName) const 
+wxxVariantArray wxClassInfo::GetPropertyCollection(wxObject *object, const wxChar *propertyName) const
 {
     const wxPropertyAccessor *accessor;
 
     accessor = FindAccessor(propertyName);
     wxASSERT(accessor->HasGetter());
-    return accessor->GetPropertyCollection(object);
+    wxxVariantArray result ;
+    accessor->GetPropertyCollection(object,result);
+    return result ;
 }
 
-void wxClassInfo::AddToPropertyCollection(wxObject *object, const wxChar *propertyName , const wxxVariant& value) const 
+void wxClassInfo::AddToPropertyCollection(wxObject *object, const wxChar *propertyName , const wxxVariant& value) const
 {
     const wxPropertyAccessor *accessor;
 
@@ -555,7 +571,7 @@ struct wxDynamicObject::wxDynamicObjectInternal
 } ;
 
 // instantiates this object with an instance of its superclass
-wxDynamicObject::wxDynamicObject(wxObject* superClassInstance, const wxDynamicClassInfo *info) 
+wxDynamicObject::wxDynamicObject(wxObject* superClassInstance, const wxDynamicClassInfo *info)
 {
     m_superClassInstance = superClassInstance ;
     m_classInfo = info ;
@@ -585,7 +601,7 @@ wxxVariant wxDynamicObject::GetProperty (const wxChar *propertyName) const
 // ----------------------------------------------------------------------------
 
 wxDynamicClassInfo::wxDynamicClassInfo( const wxChar *unitName, const wxChar *className , const wxClassInfo* superClass ) :
-    wxClassInfo( unitName, className , new const wxClassInfo*[2]) 
+    wxClassInfo( unitName, className , new const wxClassInfo*[2])
 {
     GetParents()[0] = superClass ;
     GetParents()[1] = NULL ;
@@ -596,13 +612,13 @@ wxDynamicClassInfo::~wxDynamicClassInfo()
     delete[] GetParents() ;
 }
 
-wxObject *wxDynamicClassInfo::AllocateObject() const 
+wxObject *wxDynamicClassInfo::AllocateObject() const
 {
     wxObject* parent = GetParents()[0]->AllocateObject() ;
     return new wxDynamicObject( parent , this ) ;
 }
 
-void wxDynamicClassInfo::Create (wxObject *object, int paramCount, wxxVariant *params) const 
+void wxDynamicClassInfo::Create (wxObject *object, int paramCount, wxxVariant *params) const
 {
     wxDynamicObject *dynobj = dynamic_cast< wxDynamicObject *>( object ) ;
     wxASSERT_MSG( dynobj , wxT("cannot call wxDynamicClassInfo::Create on an object other than wxDynamicObject") ) ;
@@ -610,13 +626,13 @@ void wxDynamicClassInfo::Create (wxObject *object, int paramCount, wxxVariant *p
 }
 
 // get number of parameters for constructor
-int wxDynamicClassInfo::GetCreateParamCount() const 
+int wxDynamicClassInfo::GetCreateParamCount() const
 {
     return GetParents()[0]->GetCreateParamCount() ;
 }
 
 // get i-th constructor parameter
-const wxChar* wxDynamicClassInfo::GetCreateParamName(int i) const 
+const wxChar* wxDynamicClassInfo::GetCreateParamName(int i) const
 {
     return GetParents()[0]->GetCreateParamName( i ) ;
 }
@@ -641,12 +657,12 @@ wxxVariant wxDynamicClassInfo::GetProperty(wxObject *object, const char *propert
         return GetParents()[0]->GetProperty( dynobj->GetSuperClassInstance() , propertyName ) ;
 }
 
-void wxDynamicClassInfo::AddProperty( const wxChar *propertyName , const wxTypeInfo* typeInfo ) 
+void wxDynamicClassInfo::AddProperty( const wxChar *propertyName , const wxTypeInfo* typeInfo )
 {
     new wxPropertyInfo( m_firstProperty , propertyName , typeInfo , new wxGenericPropertyAccessor( propertyName ) , wxxVariant() ) ;
 }
 
-void wxDynamicClassInfo::AddHandler( const wxChar *handlerName , wxObjectEventFunction address , const wxClassInfo* eventClassInfo ) 
+void wxDynamicClassInfo::AddHandler( const wxChar *handlerName , wxObjectEventFunction address , const wxClassInfo* eventClassInfo )
 {
     new wxHandlerInfo( m_firstHandler , handlerName , address , eventClassInfo ) ;
 }
@@ -657,44 +673,33 @@ void wxDynamicClassInfo::AddHandler( const wxChar *handlerName , wxObjectEventFu
 
 struct wxGenericPropertyAccessor::wxGenericPropertyAccessorInternal
 {
-    wxString m_propertyName ;
+    char filler ;
 } ;
 
-wxGenericPropertyAccessor::wxGenericPropertyAccessor( const wxChar* propertyName ) 
+wxGenericPropertyAccessor::wxGenericPropertyAccessor( const wxString& propertyName )
+: wxPropertyAccessor( NULL , NULL , NULL , NULL )
 {
     m_data = new wxGenericPropertyAccessorInternal ;
-    m_data->m_propertyName = propertyName ;
+    m_propertyName = propertyName ;
+    m_getterName = wxT("Get")+propertyName ;
+    m_setterName = wxT("Set")+propertyName ;
 }
 
 wxGenericPropertyAccessor::~wxGenericPropertyAccessor()
 {
     delete m_data ;
 }
-void wxGenericPropertyAccessor::SetProperty(wxObject *object, const wxxVariant &value) const 
+void wxGenericPropertyAccessor::SetProperty(wxObject *object, const wxxVariant &value) const
 {
     wxDynamicObject* dynobj = dynamic_cast< wxDynamicObject * >( object ) ;
     wxASSERT_MSG( dynobj , wxT("cannot call wxDynamicClassInfo::SetProperty on an object other than wxDynamicObject") ) ;
-    dynobj->SetProperty(m_data->m_propertyName , value ) ;
-}
-
-wxxVariant wxGenericPropertyAccessor::GetProperty(const wxObject *object) const 
-{
-    const wxDynamicObject* dynobj = dynamic_cast< const wxDynamicObject * >( object ) ;
-    wxASSERT_MSG( dynobj , wxT("cannot call wxDynamicClassInfo::SetProperty on an object other than wxDynamicObject") ) ;
-    return dynobj->GetProperty( m_data->m_propertyName ) ;
+    dynobj->SetProperty(m_propertyName , value ) ;
 }
 
-wxxVariant wxGenericPropertyAccessor::ReadValue( const wxString &value ) const 
-{
-    return wxxVariant(value) ;
-}
-
-void wxGenericPropertyAccessor::WriteValue( wxString& value , const wxObject *object ) const 
+void wxGenericPropertyAccessor::GetProperty(const wxObject *object, wxxVariant& value) const
 {
     const wxDynamicObject* dynobj = dynamic_cast< const wxDynamicObject * >( object ) ;
     wxASSERT_MSG( dynobj , wxT("cannot call wxDynamicClassInfo::SetProperty on an object other than wxDynamicObject") ) ;
-    wxxVariant val = dynobj->GetProperty( m_data->m_propertyName ) ;
-    value = val.GetAsString() ;
+    value = dynobj->GetProperty( m_propertyName ) ;
 }
-
 #endif
index daf4a126474ad8bafe083c5c00e9609e5a8a31f8..10dacef13f8507ccbc96cda84023bc24301d8763 100644 (file)
@@ -170,7 +170,8 @@ void wxWriter::WriteAllProperties( const wxObject * obj , const wxClassInfo* ci
             DoBeginWriteProperty( pi ) ;
             if ( pi->GetTypeInfo()->GetKind() == wxT_COLLECTION )
             {
-                wxxVariantArray data = pi->GetAccessor()->GetPropertyCollection(obj) ;
+                wxxVariantArray data ;
+                pi->GetAccessor()->GetPropertyCollection(obj, data) ;
                 const wxTypeInfo * elementType = dynamic_cast< const wxCollectionTypeInfo* >( pi->GetTypeInfo() )->GetElementType() ;
                 for ( size_t i = 0 ; i < data.GetCount() ; ++i )
                 {
@@ -216,7 +217,8 @@ void wxWriter::WriteAllProperties( const wxObject * obj , const wxClassInfo* ci
                 }
                 else
                 {
-                    wxxVariant value = pi->GetAccessor()->GetProperty(obj) ;
+                    wxxVariant value ;
+                    pi->GetAccessor()->GetProperty(obj, value) ;
                     if ( persister->BeforeWriteProperty( this , pi , value ) )
                     {
                         const wxClassTypeInfo* cti = dynamic_cast< const wxClassTypeInfo* > ( pi->GetTypeInfo() ) ;
@@ -534,7 +536,7 @@ int wxXmlReader::ReadComponent(wxXmlNode *node, wxDepersister *callbacks)
             else
             {
                 createParamOids[i] = wxInvalidObjectID ;
-                createParams[i] = ReadValue( prop , pi->GetAccessor() ) ;
+                createParams[i] = ReadValue( prop , pi->GetTypeInfo() ) ;
                 createClassInfos[i] = NULL ;
             }
 
@@ -591,7 +593,7 @@ int wxXmlReader::ReadComponent(wxXmlNode *node, wxDepersister *callbacks)
                         }
                         else
                         {
-                            wxxVariant elementValue = ReadValue( prop , pi->GetAccessor() ) ;
+                            wxxVariant elementValue = ReadValue( elementContent , elementType ) ;
                             if ( pi->GetAccessor()->HasAdder() )
                                 callbacks->AddToPropertyCollection( objectID , classInfo ,pi , elementValue ) ;
                         }
@@ -626,7 +628,8 @@ int wxXmlReader::ReadComponent(wxXmlNode *node, wxDepersister *callbacks)
                 }
                 else
                 {
-                    callbacks->SetProperty( objectID, classInfo ,pi , ReadValue( prop , pi->GetAccessor() ) ) ;
+                    wxxVariant nodeval ;
+                    callbacks->SetProperty( objectID, classInfo ,pi , ReadValue( prop , pi->GetTypeInfo() ) ) ;
                 }
             }
         }
@@ -640,12 +643,14 @@ int wxXmlReader::ReadComponent(wxXmlNode *node, wxDepersister *callbacks)
 }
 
 wxxVariant wxXmlReader::ReadValue(wxXmlNode *node,
-                                  wxPropertyAccessor *accessor )
+                                  const wxTypeInfo *type )
 {
     wxString content ;
     if ( node )
         content = node->GetContent() ;
-    return accessor->ReadValue(content) ;
+    wxxVariant result ;
+    type->ConvertFromString( content , result ) ;
+    return result ;
 }
 
 int wxXmlReader::ReadObject( const wxString &name , wxDepersister *callbacks)