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
21class WXDLLIMPEXP_XML wxXmlNode ;
22
23class WXDLLIMPEXP_XML wxXmlWriter : public wxWriter
24{
25public :
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 ) ;
74private :
75    struct wxXmlWriterInternal ;
76    wxXmlWriterInternal* m_data ;
77} ;
78
79/*
80wxXmlReader handles streaming in a class from XML
81*/
82
83class WXDLLIMPEXP_XML wxXmlReader : public wxReader
84{
85public:
86    wxXmlReader(wxXmlNode *parent) { m_parent = parent ; }
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
94private :
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