moved to appropriate 'protected' sections all functions wrongly placed in 'public...
[wxWidgets.git] / interface / wx / richtext / richtextstyles.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: richtext/richtextstyles.h
3 // Purpose: interface of wxRichTextStyleListCtrl
4 // Author: wxWidgets team
5 // RCS-ID: $Id$
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
8
9 /**
10 @class wxRichTextStyleListCtrl
11
12 This class incorporates a wxRichTextStyleListBox and a choice control that
13 allows the user to select the category of style to view.
14
15 It is demonstrated in the wxRichTextCtrl sample in @c samples/richtext.
16
17 To use wxRichTextStyleListCtrl, add the control to your window hierarchy and
18 call wxRichTextStyleListCtrl::SetStyleType with one of
19 wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL,
20 wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH,
21 wxRichTextStyleListBox::wxRICHTEXT_STYLE_CHARACTER and
22 wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST to set the current view.
23
24 Associate the control with a style sheet and rich text control with
25 SetStyleSheet and SetRichTextCtrl, so that when a style is double-clicked,
26 it is applied to the selection.
27
28 @beginStyleTable
29 @style{wxRICHTEXTSTYLELIST_HIDE_TYPE_SELECTOR}
30 This style hides the category selection control.
31 @endStyleTable
32
33 @library{wxrichtext}
34 @category{richtext}
35 */
36 class wxRichTextStyleListCtrl : public wxControl
37 {
38 public:
39 //@{
40 /**
41 Constructors.
42 */
43 wxRichTextStyleListCtrl(wxWindow* parent,
44 wxWindowID id = wxID_ANY,
45 const wxPoint& pos = wxDefaultPosition,
46 const wxSize& size = wxDefaultSize,
47 long style = 0);
48 wxRichTextStyleListCtrl();
49 //@}
50
51 /**
52 Creates the windows.
53 */
54 bool Create(wxWindow* parent, wxWindowID id = wxID_ANY,
55 const wxPoint& pos = wxDefaultPosition,
56 const wxSize& size = wxDefaultSize,
57 long style = 0);
58
59 /**
60 Returns the associated rich text control, if any.
61 */
62 wxRichTextCtrl* GetRichTextCtrl() const;
63
64 /**
65 Returns the wxChoice control used for selecting the style category.
66 */
67 wxChoice* GetStyleChoice() const;
68
69 /**
70 Returns the wxListBox control used to view the style list.
71 */
72 wxRichTextStyleListBox* GetStyleListBox() const;
73
74 /**
75 Returns the associated style sheet, if any.
76 */
77 wxRichTextStyleSheet* GetStyleSheet() const;
78
79 /**
80 Returns the type of style to show in the list box.
81 */
82 wxRichTextStyleListBox::wxRichTextStyleType GetStyleType() const;
83
84 /**
85 Associates the control with a wxRichTextCtrl.
86 */
87 void SetRichTextCtrl(wxRichTextCtrl* ctrl);
88
89 /**
90 Associates the control with a style sheet.
91 */
92 void SetStyleSheet(wxRichTextStyleSheet* styleSheet);
93
94 /**
95 Sets the style type to display.
96
97 One of
98 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL,
99 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH,
100 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_CHARACTER
101 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST.
102 */
103 void SetStyleType(wxRichTextStyleListBox::wxRichTextStyleType styleType);
104
105 /**
106 Updates the style list box.
107 */
108 void UpdateStyles();
109 };
110
111
112
113 /**
114 @class wxRichTextStyleDefinition
115
116 This is a base class for paragraph and character styles.
117
118 @library{wxrichtext}
119 @category{richtext}
120 */
121 class wxRichTextStyleDefinition : public wxObject
122 {
123 public:
124 /**
125 Constructor.
126 */
127 wxRichTextStyleDefinition(const wxString& name = wxEmptyString);
128
129 /**
130 Destructor.
131 */
132 virtual ~wxRichTextStyleDefinition();
133
134 /**
135 Returns the style on which this style is based.
136 */
137 const wxString& GetBaseStyle() const;
138
139 /**
140 Returns the style's description.
141 */
142 const wxString& GetDescription() const;
143
144 /**
145 Returns the style name.
146 */
147 const wxString& GetName() const;
148
149 //@{
150 /**
151 Returns the attributes associated with this style.
152 */
153 wxTextAttr GetStyle() const;
154 const wxTextAttr GetStyle() const;
155 //@}
156
157 /**
158 Returns the style attributes combined with the attributes of the specified base
159 style, if any. This function works recursively.
160 */
161 virtual wxTextAttr GetStyleMergedWithBase(const wxRichTextStyleSheet* sheet) const;
162
163 /**
164 Sets the name of the style that this style is based on.
165 */
166 void SetBaseStyle(const wxString& name);
167
168 /**
169 Sets the style description.
170 */
171 void SetDescription(const wxString& descr);
172
173 /**
174 Sets the name of the style.
175 */
176 void SetName(const wxString& name);
177
178 /**
179 Sets the attributes for this style.
180 */
181 void SetStyle(const wxTextAttr& style);
182 };
183
184
185
186 /**
187 @class wxRichTextParagraphStyleDefinition
188
189 This class represents a paragraph style definition, usually added to a
190 wxRichTextStyleSheet.
191
192 @library{wxrichtext}
193 @category{richtext}
194 */
195 class wxRichTextParagraphStyleDefinition : public wxRichTextStyleDefinition
196 {
197 public:
198 /**
199 Constructor.
200 */
201 wxRichTextParagraphStyleDefinition(const wxString& name = wxEmptyString);
202
203 /**
204 Destructor.
205 */
206 virtual ~wxRichTextParagraphStyleDefinition();
207
208 /**
209 Returns the style that should normally follow this style.
210 */
211 const wxString& GetNextStyle() const;
212
213 /**
214 Sets the style that should normally follow this style.
215 */
216 void SetNextStyle(const wxString& name);
217 };
218
219
220
221 /**
222 @class wxRichTextStyleListBox
223
224 This is a listbox that can display the styles in a wxRichTextStyleSheet,
225 and apply the selection to an associated wxRichTextCtrl.
226
227 See @c samples/richtext for an example of how to use it.
228
229 @library{wxrichtext}
230 @category{richtext}
231
232 @see wxRichTextStyleComboCtrl, @ref overview_richtextctrl
233 */
234 class wxRichTextStyleListBox : public wxHtmlListBox
235 {
236 public:
237 /**
238 Constructor.
239 */
240 wxRichTextStyleListBox(wxWindow* parent,
241 wxWindowID id = wxID_ANY,
242 const wxPoint& pos = wxDefaultPosition,
243 const wxSize& size = wxDefaultSize,
244 long style = 0);
245
246 /**
247 Destructor.
248 */
249 virtual ~wxRichTextStyleListBox();
250
251 /**
252 Applies the @e ith style to the associated rich text control.
253 */
254 void ApplyStyle(int i);
255
256 /**
257 Converts units in tenths of a millimetre to device units.
258 */
259 int ConvertTenthsMMToPixels(wxDC& dc, int units) const;
260
261 /**
262 Creates a suitable HTML fragment for a definition.
263 */
264 wxString CreateHTML(wxRichTextStyleDefinition* def) const;
265
266 /**
267 If the return value is @true, clicking on a style name in the list will
268 immediately apply the style to the associated rich text control.
269 */
270 bool GetApplyOnSelection() const;
271
272 /**
273 Returns the wxRichTextCtrl associated with this listbox.
274 */
275 wxRichTextCtrl* GetRichTextCtrl() const;
276
277 /**
278 Gets a style for a listbox index.
279 */
280 wxRichTextStyleDefinition* GetStyle(size_t i) const;
281
282 /**
283 Returns the style sheet associated with this listbox.
284 */
285 wxRichTextStyleSheet* GetStyleSheet() const;
286
287 /**
288 Returns the type of style to show in the list box.
289 */
290 wxRichTextStyleListBox::wxRichTextStyleType GetStyleType() const;
291
292 /**
293 Implements left click behaviour, applying the clicked style to the
294 wxRichTextCtrl.
295 */
296 void OnLeftDown(wxMouseEvent& event);
297
298 /**
299 Reacts to selection.
300 */
301 void OnSelect(wxCommandEvent& event);
302
303 /**
304 If @a applyOnSelection is @true, clicking on a style name in the list will
305 immediately apply the style to the associated rich text control.
306 */
307 void SetApplyOnSelection(bool applyOnSelection);
308
309 /**
310 Associates the listbox with a wxRichTextCtrl.
311 */
312 void SetRichTextCtrl(wxRichTextCtrl* ctrl);
313
314 /**
315 Associates the control with a style sheet.
316 */
317 void SetStyleSheet(wxRichTextStyleSheet* styleSheet);
318
319 /**
320 Sets the style type to display. One of
321 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL,
322 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH,
323 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_CHARACTER
324 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST.
325 */
326 void SetStyleType(wxRichTextStyleListBox::wxRichTextStyleType styleType);
327
328 /**
329 Updates the list from the associated style sheet.
330 */
331 void UpdateStyles();
332
333 protected:
334
335 /**
336 Returns the HTML for this item.
337 */
338 virtual wxString OnGetItem(size_t n) const;
339 };
340
341
342
343 /**
344 @class wxRichTextStyleComboCtrl
345
346 This is a combo control that can display the styles in a wxRichTextStyleSheet,
347 and apply the selection to an associated wxRichTextCtrl.
348
349 See @c samples/richtext for an example of how to use it.
350
351 @library{wxrichtext}
352 @category{richtext}
353
354 @see wxRichTextStyleListBox, @ref overview_richtextctrl
355 */
356 class wxRichTextStyleComboCtrl : public wxComboCtrl
357 {
358 public:
359 /**
360 Constructor.
361 */
362 wxRichTextStyleComboCtrl(wxWindow* parent,
363 wxWindowID id = wxID_ANY,
364 const wxPoint& pos = wxDefaultPosition,
365 const wxSize& size = wxDefaultSize,
366 long style = 0);
367
368 /**
369 Destructor.
370 */
371 virtual ~wxRichTextStyleComboCtrl();
372
373 /**
374 Returns the wxRichTextCtrl associated with this control.
375 */
376 wxRichTextCtrl* GetRichTextCtrl() const;
377
378 /**
379 Returns the style sheet associated with this control.
380 */
381 wxRichTextStyleSheet* GetStyleSheet() const;
382
383 /**
384 Associates the control with a wxRichTextCtrl.
385 */
386 void SetRichTextCtrl(wxRichTextCtrl* ctrl);
387
388 /**
389 Associates the control with a style sheet.
390 */
391 void SetStyleSheet(wxRichTextStyleSheet* styleSheet);
392
393 /**
394 Updates the combo control from the associated style sheet.
395 */
396 void UpdateStyles();
397 };
398
399
400
401 /**
402 @class wxRichTextCharacterStyleDefinition
403
404 This class represents a character style definition, usually added to a
405 wxRichTextStyleSheet.
406
407 @library{wxrichtext}
408 @category{richtext}
409 */
410 class wxRichTextCharacterStyleDefinition : public wxRichTextStyleDefinition
411 {
412 public:
413 /**
414 Constructor.
415 */
416 wxRichTextCharacterStyleDefinition(const wxString& name = wxEmptyString);
417
418 /**
419 Destructor.
420 */
421 virtual ~wxRichTextCharacterStyleDefinition();
422 };
423
424
425
426 /**
427 @class wxRichTextListStyleDefinition
428
429 This class represents a list style definition, usually added to a
430 wxRichTextStyleSheet.
431
432 The class inherits paragraph attributes from wxRichTextStyleParagraphDefinition,
433 and adds 10 further attribute objects, one for each level of a list.
434 When applying a list style to a paragraph, the list style's base and
435 appropriate level attributes are merged with the paragraph's existing attributes.
436
437 You can apply a list style to one or more paragraphs using wxRichTextCtrl::SetListStyle.
438 You can also use the functions wxRichTextCtrl::NumberList, wxRichTextCtrl::PromoteList and
439 wxRichTextCtrl::ClearListStyle.
440
441 As usual, there are wxRichTextBuffer versions of these functions
442 so that you can apply them directly to a buffer without requiring a control.
443
444 @library{wxrichtext}
445 @category{richtext}
446 */
447 class wxRichTextListStyleDefinition : public wxRichTextParagraphStyleDefinition
448 {
449 public:
450 /**
451 Constructor.
452 */
453 wxRichTextListStyleDefinition(const wxString& name = wxEmptyString);
454
455 /**
456 Destructor.
457 */
458 virtual ~wxRichTextListStyleDefinition();
459
460 /**
461 This function combines the given paragraph style with the list style's base
462 attributes and level style matching the given indent, returning the combined attributes.
463
464 If @a styleSheet is specified, the base style for this definition will also be
465 included in the result.
466 */
467 wxTextAttr CombineWithParagraphStyle(int indent,
468 const wxTextAttr& paraStyle,
469 wxRichTextStyleSheet* styleSheet = NULL);
470
471 /**
472 This function finds the level (from 0 to 9) whose indentation attribute mostly
473 closely matches @a indent (expressed in tenths of a millimetre).
474 */
475 int FindLevelForIndent(int indent) const;
476
477 /**
478 This function combines the list style's base attributes and the level style
479 matching the given indent, returning the combined attributes.
480
481 If @a styleSheet is specified, the base style for this definition will also be
482 included in the result.
483 */
484 wxTextAttr GetCombinedStyle(int indent,
485 wxRichTextStyleSheet* styleSheet = NULL);
486
487 /**
488 This function combines the list style's base attributes and the style for the
489 specified level, returning the combined attributes.
490
491 If @a styleSheet is specified, the base style for this definition will also be
492 included in the result.
493 */
494 wxTextAttr GetCombinedStyleLevel(int level,
495 wxRichTextStyleSheet* styleSheet = NULL) const;
496
497 /**
498 Returns the style for the given level. @a level is a number between 0 and 9.
499 */
500 const wxTextAttr* GetLevelAttributes(int level) const;
501
502 /**
503 Returns the number of levels. This is hard-wired to 10.
504 Returns the style for the given level. @e level is a number between 0 and 9.
505 */
506 int GetLevelCount() const;
507
508 /**
509 Returns @true if the given level has numbered list attributes.
510 */
511 bool IsNumbered(int level) const;
512
513 //@{
514 /**
515 Sets the style for the given level. @a level is a number between 0 and 9.
516 The first and most flexible form uses a wxTextAttr object, while the second
517 form is for convenient setting of the most commonly-used attributes.
518 */
519 void SetLevelAttributes(int level, const wxTextAttr& attr);
520 void SetLevelAttributes(int level, int leftIndent,
521 int leftSubIndent,
522 int bulletStyle,
523 const wxString& bulletSymbol = wxEmptyString);
524 //@}
525 };
526
527
528
529 /**
530 @class wxRichTextStyleSheet
531
532 A style sheet contains named paragraph and character styles that make it
533 easy for a user to apply combinations of attributes to a wxRichTextCtrl.
534
535 You can use a wxRichTextStyleListBox in your user interface to show available
536 styles to the user, and allow application of styles to the control.
537
538 @library{wxrichtext}
539 @category{richtext}
540 */
541 class wxRichTextStyleSheet : public wxObject
542 {
543 public:
544 /**
545 Constructor.
546 */
547 wxRichTextStyleSheet();
548
549 /**
550 Destructor.
551 */
552 virtual ~wxRichTextStyleSheet();
553
554 /**
555 Adds a definition to the character style list.
556 */
557 bool AddCharacterStyle(wxRichTextCharacterStyleDefinition* def);
558
559 /**
560 Adds a definition to the list style list.
561 */
562 bool AddListStyle(wxRichTextListStyleDefinition* def);
563
564 /**
565 Adds a definition to the paragraph style list.
566 */
567 bool AddParagraphStyle(wxRichTextParagraphStyleDefinition* def);
568
569 /**
570 Adds a definition to the appropriate style list.
571 */
572 bool AddStyle(wxRichTextStyleDefinition* def);
573
574 /**
575 Deletes all styles.
576 */
577 void DeleteStyles();
578
579 /**
580 Finds a character definition by name.
581 */
582 wxRichTextCharacterStyleDefinition* FindCharacterStyle(const wxString& name,
583 bool recurse = true) const;
584
585 /**
586 Finds a list definition by name.
587 */
588 wxRichTextListStyleDefinition* FindListStyle(const wxString& name,
589 bool recurse = true) const;
590
591 /**
592 Finds a paragraph definition by name.
593 */
594 wxRichTextParagraphStyleDefinition* FindParagraphStyle(const wxString& name,
595 bool recurse = true) const;
596
597 /**
598 Finds a style definition by name.
599 */
600 wxRichTextStyleDefinition* FindStyle(const wxString& name) const;
601
602 /**
603 Returns the @e nth character style.
604 */
605 wxRichTextCharacterStyleDefinition* GetCharacterStyle(size_t n) const;
606
607 /**
608 Returns the number of character styles.
609 */
610 size_t GetCharacterStyleCount() const;
611
612 /**
613 Returns the style sheet's description.
614 */
615 const wxString& GetDescription() const;
616
617 /**
618 Returns the @e nth list style.
619 */
620 wxRichTextListStyleDefinition* GetListStyle(size_t n) const;
621
622 /**
623 Returns the number of list styles.
624 */
625 size_t GetListStyleCount() const;
626
627 /**
628 Returns the style sheet's name.
629 */
630 const wxString& GetName() const;
631
632 /**
633 Returns the @e nth paragraph style.
634 */
635 wxRichTextParagraphStyleDefinition* GetParagraphStyle(size_t n) const;
636
637 /**
638 Returns the number of paragraph styles.
639 */
640 size_t GetParagraphStyleCount() const;
641
642 /**
643 Removes a character style.
644 */
645 bool RemoveCharacterStyle(wxRichTextStyleDefinition* def,
646 bool deleteStyle = false);
647
648 /**
649 Removes a list style.
650 */
651 bool RemoveListStyle(wxRichTextStyleDefinition* def,
652 bool deleteStyle = false);
653
654 /**
655 Removes a paragraph style.
656 */
657 bool RemoveParagraphStyle(wxRichTextStyleDefinition* def,
658 bool deleteStyle = false);
659
660 /**
661 Removes a style.
662 */
663 bool RemoveStyle(wxRichTextStyleDefinition* def,
664 bool deleteStyle = false);
665
666 /**
667 Sets the style sheet's description.
668 */
669 void SetDescription(const wxString& descr);
670
671 /**
672 Sets the style sheet's name.
673 */
674 void SetName(const wxString& name);
675 };
676