]> git.saurik.com Git - wxWidgets.git/blob - include/wx/richtext/richtexthtml.h
change grow box implementation - was incorrectly getting the focus in panels before
[wxWidgets.git] / include / wx / richtext / richtexthtml.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/richtext/richtexthtml.h
3 // Purpose: HTML I/O for wxRichTextCtrl
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 2005-09-30
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_RICHTEXTHTML_H_
13 #define _WX_RICHTEXTHTML_H_
14
15 /*!
16 * Includes
17 */
18
19 #include "wx/richtext/richtextbuffer.h"
20
21 // Use CSS styles where applicable, otherwise use non-CSS workarounds
22 #define wxRICHTEXT_HANDLER_USE_CSS 0x1000
23
24 /*!
25 * wxRichTextHTMLHandler
26 */
27
28 class WXDLLIMPEXP_RICHTEXT wxRichTextHTMLHandler: public wxRichTextFileHandler
29 {
30 DECLARE_CLASS(wxRichTextHTMLHandler)
31 public:
32 wxRichTextHTMLHandler(const wxString& name = wxT("HTML"), const wxString& ext = wxT("html"), int type = wxRICHTEXT_TYPE_HTML);
33
34 /// Can we save using this handler?
35 virtual bool CanSave() const { return true; }
36
37 /// Can we load using this handler?
38 virtual bool CanLoad() const { return false; }
39
40 /// Can we handle this filename (if using files)? By default, checks the extension.
41 virtual bool CanHandle(const wxString& filename) const;
42
43 // Accessors and operations unique to this handler
44
45 /// Set and get the list of image locations generated by the last operation
46 void SetTemporaryImageLocations(const wxArrayString& locations) { m_imageLocations = locations; }
47 const wxArrayString& GetTemporaryImageLocations() const { return m_imageLocations; }
48
49 /// Clear the image locations generated by the last operation
50 void ClearTemporaryImageLocations() { m_imageLocations.Clear(); }
51
52 /// Delete the in-memory or temporary files generated by the last operation
53 bool DeleteTemporaryImages();
54
55 /// Delete the in-memory or temporary files generated by the last operation. This is a static
56 /// function that can be used to delete the saved locations from an earlier operation,
57 /// for example after the user has viewed the HTML file.
58 static bool DeleteTemporaryImages(int flags, const wxArrayString& imageLocations);
59
60 /// Reset the file counter, in case, for example, the same names are required each time
61 static void SetFileCounter(int counter) { sm_fileCounter = counter; }
62
63 /// Set and get the directory for storing temporary files. If empty, the system
64 /// temporary directory will be used.
65 void SetTempDir(const wxString& tempDir) { m_tempDir = tempDir; }
66 const wxString& GetTempDir() const { return m_tempDir; }
67
68 /// Set and get mapping from point size to HTML font size. There should be 7 elements,
69 /// one for each HTML font size, each element specifying the maximum point size for that
70 /// HTML font size. E.g. 8, 10, 13, 17, 22, 29, 100
71 void SetFontSizeMapping(const wxArrayInt& fontSizeMapping) { m_fontSizeMapping = fontSizeMapping; }
72 wxArrayInt GetFontSizeMapping() const { return m_fontSizeMapping; }
73
74 protected:
75
76 // Implementation
77
78 #if wxUSE_STREAMS
79 virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream);
80 virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream);
81
82 /// Output character formatting
83 void BeginCharacterFormatting(const wxTextAttr& currentStyle, const wxTextAttr& thisStyle, const wxTextAttr& paraStyle, wxTextOutputStream& stream );
84 void EndCharacterFormatting(const wxTextAttr& currentStyle, const wxTextAttr& thisStyle, const wxTextAttr& paraStyle, wxTextOutputStream& stream );
85
86 /// Output paragraph formatting
87 void BeginParagraphFormatting(const wxTextAttr& currentStyle, const wxTextAttr& thisStyle, wxTextOutputStream& stream);
88 void EndParagraphFormatting(const wxTextAttr& currentStyle, const wxTextAttr& thisStyle, wxTextOutputStream& stream);
89
90 /// Output font tag
91 void OutputFont(const wxTextAttr& style, wxTextOutputStream& stream);
92
93 /// Closes lists to level (-1 means close all)
94 void CloseLists(int level, wxTextOutputStream& str);
95
96 /// Writes an image to its base64 equivalent, or to the memory filesystem, or to a file
97 void WriteImage(wxRichTextImage* image, wxOutputStream& stream);
98
99 /// Converts from pt to size property compatible height
100 long PtToSize(long size);
101
102 /// Typical base64 encoder
103 wxChar* b64enc(unsigned char* input, size_t in_len);
104
105 /// Gets the mime type of the given wxBITMAP_TYPE
106 const wxChar* GetMimeType(int imageType);
107
108 /// Gets the html equivalent of the specified value
109 wxString GetAlignment(const wxTextAttr& thisStyle);
110
111 /// Generates   array for indentations
112 wxString SymbolicIndent(long indent);
113
114 /// Finds the html equivalent of the specified bullet
115 int TypeOfList(const wxTextAttr& thisStyle, wxString& tag);
116 #endif
117
118 // Data members
119
120 wxRichTextBuffer* m_buffer;
121
122 /// Indentation values of the table tags
123 wxArrayInt m_indents;
124
125 /// Stack of list types: 0 = ol, 1 = ul
126 wxArrayInt m_listTypes;
127
128 /// Is there any opened font tag?
129 bool m_font;
130
131 /// Are we in a table?
132 bool m_inTable;
133
134 /// A list of the image files or in-memory images created by the last operation.
135 wxArrayString m_imageLocations;
136
137 /// A location for the temporary files
138 wxString m_tempDir;
139
140 /// A mapping from point size to HTML font size
141 wxArrayInt m_fontSizeMapping;
142
143 /// A counter for generating filenames
144 static int sm_fileCounter;
145 };
146
147 #endif
148 // _WX_RICHTEXTXML_H_