1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/richtext/richeditxml.h
3 // Purpose:     XML and HTML I/O for wxRichTextCtrl
4 // Author:      Julian Smart
5 // Modified by:
6 // Created:     2005-09-30
7 // RCS-ID:      $Id: richtextxml.h 53135 2008-04-12 02:31:04Z VZ $
8 // Copyright:   (c) Julian Smart
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_RICHTEXTXML_H_
13 #define _WX_RICHTEXTXML_H_
14 
15 /*!
16  * Includes
17  */
18 
19 #include "wx/richtext/richtextbuffer.h"
20 #include "wx/richtext/richtextstyles.h"
21 
22 #if wxUSE_RICHTEXT && wxUSE_XML
23 
24 /*!
25  * wxRichTextXMLHandler
26  */
27 
28 class WXDLLIMPEXP_FWD_XML wxXmlNode;
29 
30 class WXDLLIMPEXP_RICHTEXT wxRichTextXMLHandler: public wxRichTextFileHandler
31 {
DECLARE_CLASS(wxRichTextXMLHandler)32     DECLARE_CLASS(wxRichTextXMLHandler)
33 public:
34     wxRichTextXMLHandler(const wxString& name = wxT("XML"), const wxString& ext = wxT("xml"), int type = wxRICHTEXT_TYPE_XML)
35         : wxRichTextFileHandler(name, ext, type)
36         { }
37 
38 #if wxUSE_STREAMS
39     /// Recursively export an object
40     bool ExportXML(wxOutputStream& stream, wxMBConv* convMem, wxMBConv* convFile, wxRichTextObject& obj, int level);
41     bool ExportStyleDefinition(wxOutputStream& stream, wxMBConv* convMem, wxMBConv* convFile, wxRichTextStyleDefinition* def, int level);
42 
43     /// Recursively import an object
44     bool ImportXML(wxRichTextBuffer* buffer, wxXmlNode* node);
45     bool ImportStyleDefinition(wxRichTextStyleSheet* sheet, wxXmlNode* node);
46 
47     /// Create style parameters
48     wxString CreateStyle(const wxTextAttrEx& attr, bool isPara = false);
49 
50     /// Get style parameters
51     bool GetStyle(wxTextAttrEx& attr, wxXmlNode* node, bool isPara = false);
52 #endif
53 
54     /// Can we save using this handler?
CanSave()55     virtual bool CanSave() const { return true; }
56 
57     /// Can we load using this handler?
CanLoad()58     virtual bool CanLoad() const { return true; }
59 
60 // Implementation
61 
62     bool HasParam(wxXmlNode* node, const wxString& param);
63     wxXmlNode *GetParamNode(wxXmlNode* node, const wxString& param);
64     wxString GetNodeContent(wxXmlNode *node);
65     wxString GetParamValue(wxXmlNode *node, const wxString& param);
66     wxString GetText(wxXmlNode *node, const wxString& param = wxEmptyString, bool translate = false);
67 
68 protected:
69 #if wxUSE_STREAMS
70     virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream);
71     virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream);
72 #endif
73 };
74 
75 #endif
76     // wxUSE_RICHTEXT && wxUSE_XML
77 
78 #endif
79     // _WX_RICHTEXTXML_H_
80