1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/xtixml.h
3 // Purpose:     xml streaming runtime metadata information (extended class info)
4 // Author:      Stefan Csomor
5 // Modified by:
6 // Created:     27/07/03
7 // RCS-ID:      $Id: xtixml.h 41020 2006-09-05 20:47:48Z VZ $
8 // Copyright:   (c) 2003 Stefan Csomor
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_XTIXMLH__
13 #define _WX_XTIXMLH__
14 
15 #include "wx/wx.h"
16 
17 #if wxUSE_EXTENDED_RTTI
18 
19 #include "wx/xtistrm.h"
20 
21 class WXDLLIMPEXP_XML wxXmlNode ;
22 
23 class WXDLLIMPEXP_XML wxXmlWriter : public wxWriter
24 {
25 public :
26 
27     wxXmlWriter( wxXmlNode * parent ) ;
28     virtual ~wxXmlWriter() ;
29 
30     //
31     // streaming callbacks
32     //
33     // these callbacks really write out the values in the stream format
34     //
35 
36     //
37     // streaming callbacks
38     //
39     // these callbacks really write out the values in the stream format
40 
41     // begins writing out a new toplevel entry which has the indicated unique name
42     virtual void DoBeginWriteTopLevelEntry( const wxString &name )  ;
43 
44     // ends writing out a new toplevel entry which has the indicated unique name
45     virtual void DoEndWriteTopLevelEntry( const wxString &name )  ;
46 
47     // start of writing an object having the passed in ID
48     virtual void DoBeginWriteObject(const wxObject *object, const wxClassInfo *classInfo, int objectID , wxxVariantArray &metadata ) ;
49 
50     // end of writing an toplevel object name param is used for unique identification within the container
51     virtual void DoEndWriteObject(const wxObject *object, const wxClassInfo *classInfo, int objectID ) ;
52 
53     // writes a simple property in the stream format
54     virtual void DoWriteSimpleType( wxxVariant &value )  ;
55 
56     // start of writing a complex property into the stream (
57     virtual void DoBeginWriteProperty( const wxPropertyInfo *propInfo )  ;
58 
59     // end of writing a complex property into the stream
60     virtual void DoEndWriteProperty( const wxPropertyInfo *propInfo ) ;
61 
62     virtual void DoBeginWriteElement() ;
63     virtual void DoEndWriteElement() ;
64 
65     // insert an object reference to an already written object
66     virtual void DoWriteRepeatedObject( int objectID )  ;
67 
68     // insert a null reference
69     virtual void DoWriteNullObject()  ;
70 
71     // writes a delegate in the stream format
72     virtual void DoWriteDelegate( const wxObject *object,  const wxClassInfo* classInfo , const wxPropertyInfo *propInfo ,
73         const wxObject *eventSink , int sinkObjectID , const wxClassInfo* eventSinkClassInfo , const wxHandlerInfo* handlerIndo ) ;
74 private :
75     struct wxXmlWriterInternal ;
76     wxXmlWriterInternal* m_data ;
77 } ;
78 
79 /*
80 wxXmlReader handles streaming in a class from XML
81 */
82 
83 class WXDLLIMPEXP_XML wxXmlReader : public wxReader
84 {
85 public:
wxXmlReader(wxXmlNode * parent)86     wxXmlReader(wxXmlNode *parent) { m_parent = parent ; }
~wxXmlReader()87     virtual ~wxXmlReader() {}
88 
89     // Reads a component from XML.  The return value is the root object ID, which can
90     // then be used to ask the depersister about that object
91 
92     virtual int ReadObject( const wxString &name , wxDepersister *depersist ) ;
93 
94 private :
95     int ReadComponent(wxXmlNode *parent, wxDepersister *callbacks);
96 
97     // read the content of this node (simple type) and return the corresponding value
98     wxxVariant ReadValue(wxXmlNode *Node,
99         const wxTypeInfo *type );
100 
101     wxXmlNode * m_parent ;
102 };
103 
104 #endif // wxUSE_EXTENDED_RTTI
105 
106 #endif
107