]> git.saurik.com Git - wxWidgets.git/blame - include/wx/richtext/richtextstyles.h
Fix a couple of export declarations
[wxWidgets.git] / include / wx / richtext / richtextstyles.h
CommitLineData
5d7836c4
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: richtextstyles.h
3// Purpose: Style management for wxRichTextCtrl
4// Author: Julian Smart
5// Modified by:
6// Created: 2005-09-30
7// RCS-ID:
8// Copyright: (c) Julian Smart
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_RICHTEXTSTYLES_H_
13#define _WX_RICHTEXTSTYLES_H_
14
15/*!
16 * Includes
17 */
18
19#include "wx/defs.h"
20
21#if wxUSE_RICHTEXT
22
23#include "wx/richtext/richtextbuffer.h"
24
25#if wxUSE_HTML
26#include "wx/htmllbox.h"
27#endif
28
29/*!
30 * Forward declarations
31 */
32
33class WXDLLIMPEXP_ADV wxRichTextCtrl;
34class WXDLLIMPEXP_ADV wxRichTextBuffer;
35
36/*!
37 * wxRichTextStyleDefinition class declaration
38 * A base class for paragraph and character styles.
39 */
40
41class WXDLLIMPEXP_ADV wxRichTextStyleDefinition: public wxObject
42{
43 DECLARE_CLASS(wxRichTextStyleDefinition)
44public:
45
46// Constructors
47
48 wxRichTextStyleDefinition(const wxString& name = wxEmptyString) { Init(); m_name = name; }
49 ~wxRichTextStyleDefinition() {}
50
51 void Init() {}
52
53 /// The name of the style.
54 void SetName(const wxString& name) { m_name = name; }
55 const wxString& GetName() const { return m_name; }
56
57 /// The name of the style that this style is based on.
58 void SetBaseStyle(const wxString& name) { m_baseStyle = name; }
59 const wxString& GetBaseStyle() const { return m_baseStyle; }
60
61 /// The style.
62 void SetStyle(const wxRichTextAttr& style) { m_style = style; }
63 const wxRichTextAttr& GetStyle() const { return m_style; }
64 wxRichTextAttr& GetStyle() { return m_style; }
65
66protected:
67 wxString m_name;
68 wxString m_baseStyle;
69 wxRichTextAttr m_style;
70};
71
72/*!
73 * wxRichTextCharacterStyleDefinition class declaration
74 */
75
76class WXDLLIMPEXP_ADV wxRichTextCharacterStyleDefinition: public wxRichTextStyleDefinition
77{
78 DECLARE_DYNAMIC_CLASS(wxRichTextCharacterStyleDefinition)
79public:
80
81// Constructors
82
83 wxRichTextCharacterStyleDefinition(const wxString& name = wxEmptyString):
84 wxRichTextStyleDefinition(name) {}
85 ~wxRichTextCharacterStyleDefinition() {}
86
87protected:
88};
89
90/*!
91 * wxRichTextParagraphStyleDefinition class declaration
92 */
93
94class WXDLLIMPEXP_ADV wxRichTextParagraphStyleDefinition: public wxRichTextStyleDefinition
95{
96 DECLARE_DYNAMIC_CLASS(wxRichTextParagraphStyleDefinition)
97public:
98
99// Constructors
100
101 wxRichTextParagraphStyleDefinition(const wxString& name = wxEmptyString):
102 wxRichTextStyleDefinition(name) {}
103 ~wxRichTextParagraphStyleDefinition() {}
104
105 /// The next style.
106 void SetNextStyle(const wxString& name) { m_nextStyle = name; }
107 const wxString& GetNextStyle() const { return m_nextStyle; }
108
109protected:
110
111 /// The next style to use when adding a paragraph after this style.
112 wxString m_nextStyle;
113};
114
115/*!
116 * The style sheet
117 */
118
119class WXDLLIMPEXP_ADV wxRichTextStyleSheet: public wxObject
120{
121 DECLARE_CLASS( wxRichTextStyleSheet )
122
123public:
124 /// Constructors
125 wxRichTextStyleSheet() { Init(); }
126 ~wxRichTextStyleSheet() { DeleteStyles(); }
127
128 /// Initialisation
129 void Init();
130
131 /// Add a definition to the character style list
132 bool AddCharacterStyle(wxRichTextCharacterStyleDefinition* def) { return AddStyle(m_characterStyleDefinitions, def); }
133
134 /// Add a definition to the paragraph style list
135 bool AddParagraphStyle(wxRichTextParagraphStyleDefinition* def) { return AddStyle(m_paragraphStyleDefinitions, def); }
136
137 /// Remove a character style
138 bool RemoveCharacterStyle(wxRichTextStyleDefinition* def, bool deleteStyle = false) { return RemoveStyle(m_characterStyleDefinitions, def, deleteStyle); }
139
140 /// Remove a paragraph style
141 bool RemoveParagraphStyle(wxRichTextStyleDefinition* def, bool deleteStyle = false) { return RemoveStyle(m_characterStyleDefinitions, def, deleteStyle); }
142
143 /// Find a character definition by name
144 wxRichTextCharacterStyleDefinition* FindCharacterStyle(const wxString& name) const { return (wxRichTextCharacterStyleDefinition*) FindStyle(m_characterStyleDefinitions, name); }
145
146 /// Find a paragraph definition by name
147 wxRichTextParagraphStyleDefinition* FindParagraphStyle(const wxString& name) const { return (wxRichTextParagraphStyleDefinition*) FindStyle(m_characterStyleDefinitions, name); }
148
149 /// Return the number of character styes.
150 size_t GetCharacterStyleCount() const { return m_characterStyleDefinitions.GetCount(); }
151
152 /// Return the number of paragraph styes.
153 size_t GetParagraphStyleCount() const { return m_paragraphStyleDefinitions.GetCount(); }
154
155 /// Return the nth character style
156 wxRichTextCharacterStyleDefinition* GetCharacterStyle(size_t n) const { return (wxRichTextCharacterStyleDefinition*) m_characterStyleDefinitions.Item(n)->GetData(); }
157
158 /// Return the nth paragraph style
159 wxRichTextParagraphStyleDefinition* GetParagraphStyle(size_t n) const { return (wxRichTextParagraphStyleDefinition*) m_paragraphStyleDefinitions.Item(n)->GetData(); }
160
161 /// Delete all styles
162 void DeleteStyles();
163
164/// Implementation
165
166 /// Add a definition to one of the style lists
167 bool AddStyle(wxList& list, wxRichTextStyleDefinition* def);
168
169 /// Remove a style
170 bool RemoveStyle(wxList& list, wxRichTextStyleDefinition* def, bool deleteStyle);
171
172 /// Find a definition by name
173 wxRichTextStyleDefinition* FindStyle(const wxList& list, const wxString& name) const;
174
175protected:
176
177 wxList m_characterStyleDefinitions;
178 wxList m_paragraphStyleDefinitions;
179};
180
181#if wxUSE_HTML
182/*!
183 * wxRichTextStyleListBox class declaration
184 * A listbox to display styles.
185 */
186
187class WXDLLIMPEXP_ADV wxRichTextStyleListBox: public wxHtmlListBox
188{
189 DECLARE_CLASS(wxRichTextStyleListBox)
190 DECLARE_EVENT_TABLE()
191
192public:
193 wxRichTextStyleListBox(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition,
194 const wxSize& size = wxDefaultSize, long style = 0);
195 ~wxRichTextStyleListBox();
196
197 /// Returns the HTML for this item
198 virtual wxString OnGetItem(size_t n) const;
199
200 /// Creates a suitable HTML fragment for a definition
201 wxString CreateHTML(wxRichTextStyleDefinition* def) const;
202
203 /// Associates the control with a style manager
204 void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { m_styleSheet = styleSheet; }
205 wxRichTextStyleSheet* GetStyleSheet() const { return m_styleSheet; }
206
207 /// Associates the control with a wxRichTextCtrl
208 void SetRichTextCtrl(wxRichTextCtrl* ctrl) { m_richTextCtrl = ctrl; }
209 wxRichTextCtrl* GetRichTextCtrl() const { return m_richTextCtrl; }
210
211 // Get style for index
212 wxRichTextStyleDefinition* GetStyle(size_t i) const ;
213
214 /// Updates the list
215 void UpdateStyles();
216
217 /// React to selection
218 void OnSelect(wxCommandEvent& event);
219
220 /// Left click
221 void OnLeftDown(wxMouseEvent& event);
222
223#if 0
224 virtual wxColour GetSelectedTextColour(const wxColour& colFg) const;
225 virtual wxColour GetSelectedTextBgColour(const wxColour& colBg) const;
226#endif
227
228 // Convert units in tends of a millimetre to device units
229 int ConvertTenthsMMToPixels(wxDC& dc, int units) const;
230
231private:
232
233 wxRichTextStyleSheet* m_styleSheet;
234 wxRichTextCtrl* m_richTextCtrl;
235};
236#endif
237
238#endif
239 // wxUSE_RICHTEXT
240
241#endif
242 // _WX_RICHTEXTSTYLES_H_