]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/richtext/richtextstyles.h
Added native wxInfoBar implementation for wxGTK.
[wxWidgets.git] / interface / wx / richtext / richtextstyles.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: richtext/richtextstyles.h
21b447dc 3// Purpose: interface of wxRichTextStyleListCtrl
23324ae1
FM
4// Author: wxWidgets team
5// RCS-ID: $Id$
6// Licence: wxWindows license
7/////////////////////////////////////////////////////////////////////////////
8
9/**
10 @class wxRichTextStyleListCtrl
7c913512 11
9e7ad1ca
FM
12 This class incorporates a wxRichTextStyleListBox and a choice control that
13 allows the user to select the category of style to view.
14
23324ae1 15 It is demonstrated in the wxRichTextCtrl sample in @c samples/richtext.
7c913512 16
23324ae1 17 To use wxRichTextStyleListCtrl, add the control to your window hierarchy and
9e7ad1ca
FM
18 call wxRichTextStyleListCtrl::SetStyleType with one of
19 wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL,
23324ae1
FM
20 wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH,
21 wxRichTextStyleListBox::wxRICHTEXT_STYLE_CHARACTER and
22 wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST to set the current view.
9e7ad1ca 23
23324ae1 24 Associate the control with a style sheet and rich text control with
9e7ad1ca
FM
25 SetStyleSheet and SetRichTextCtrl, so that when a style is double-clicked,
26 it is applied to the selection.
7c913512 27
23324ae1 28 @beginStyleTable
8c6791e4 29 @style{wxRICHTEXTSTYLELIST_HIDE_TYPE_SELECTOR}
23324ae1
FM
30 This style hides the category selection control.
31 @endStyleTable
7c913512 32
23324ae1 33 @library{wxrichtext}
9e7ad1ca 34 @category{richtext}
23324ae1
FM
35*/
36class wxRichTextStyleListCtrl : public wxControl
37{
38public:
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);
7c913512 48 wxRichTextStyleListCtrl();
23324ae1
FM
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 */
328f5751 62 wxRichTextCtrl* GetRichTextCtrl() const;
23324ae1
FM
63
64 /**
65 Returns the wxChoice control used for selecting the style category.
66 */
328f5751 67 wxChoice* GetStyleChoice() const;
23324ae1
FM
68
69 /**
70 Returns the wxListBox control used to view the style list.
71 */
328f5751 72 wxRichTextStyleListBox* GetStyleListBox() const;
23324ae1
FM
73
74 /**
75 Returns the associated style sheet, if any.
76 */
328f5751 77 wxRichTextStyleSheet* GetStyleSheet() const;
23324ae1
FM
78
79 /**
80 Returns the type of style to show in the list box.
81 */
328f5751 82 wxRichTextStyleListBox::wxRichTextStyleType GetStyleType() const;
23324ae1
FM
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 /**
9e7ad1ca
FM
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.
23324ae1
FM
102 */
103 void SetStyleType(wxRichTextStyleListBox::wxRichTextStyleType styleType);
104
105 /**
106 Updates the style list box.
107 */
108 void UpdateStyles();
109};
110
111
e54c96f1 112
23324ae1
FM
113/**
114 @class wxRichTextStyleDefinition
7c913512 115
23324ae1 116 This is a base class for paragraph and character styles.
7c913512 117
23324ae1 118 @library{wxrichtext}
9e7ad1ca 119 @category{richtext}
23324ae1
FM
120*/
121class wxRichTextStyleDefinition : public wxObject
122{
123public:
124 /**
125 Constructor.
126 */
127 wxRichTextStyleDefinition(const wxString& name = wxEmptyString);
128
129 /**
130 Destructor.
131 */
adaaa686 132 virtual ~wxRichTextStyleDefinition();
23324ae1
FM
133
134 /**
135 Returns the style on which this style is based.
136 */
5267aefd 137 const wxString& GetBaseStyle() const;
23324ae1
FM
138
139 /**
140 Returns the style's description.
141 */
5267aefd 142 const wxString& GetDescription() const;
23324ae1
FM
143
144 /**
145 Returns the style name.
146 */
5267aefd 147 const wxString& GetName() const;
23324ae1
FM
148
149 //@{
150 /**
151 Returns the attributes associated with this style.
152 */
328f5751
FM
153 wxTextAttr GetStyle() const;
154 const wxTextAttr GetStyle() const;
23324ae1
FM
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 */
5267aefd 161 virtual wxTextAttr GetStyleMergedWithBase(const wxRichTextStyleSheet* sheet) const;
23324ae1
FM
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
e54c96f1 185
23324ae1
FM
186/**
187 @class wxRichTextParagraphStyleDefinition
7c913512 188
23324ae1
FM
189 This class represents a paragraph style definition, usually added to a
190 wxRichTextStyleSheet.
7c913512 191
23324ae1 192 @library{wxrichtext}
21b447dc 193 @category{richtext}
23324ae1
FM
194*/
195class wxRichTextParagraphStyleDefinition : public wxRichTextStyleDefinition
196{
197public:
198 /**
199 Constructor.
200 */
201 wxRichTextParagraphStyleDefinition(const wxString& name = wxEmptyString);
202
203 /**
204 Destructor.
205 */
adaaa686 206 virtual ~wxRichTextParagraphStyleDefinition();
23324ae1
FM
207
208 /**
209 Returns the style that should normally follow this style.
210 */
5267aefd 211 const wxString& GetNextStyle() const;
23324ae1
FM
212
213 /**
214 Sets the style that should normally follow this style.
215 */
216 void SetNextStyle(const wxString& name);
217};
218
219
e54c96f1 220
23324ae1
FM
221/**
222 @class wxRichTextStyleListBox
7c913512 223
23324ae1
FM
224 This is a listbox that can display the styles in a wxRichTextStyleSheet,
225 and apply the selection to an associated wxRichTextCtrl.
7c913512 226
23324ae1 227 See @c samples/richtext for an example of how to use it.
7c913512 228
23324ae1 229 @library{wxrichtext}
21b447dc 230 @category{richtext}
7c913512 231
9e7ad1ca 232 @see wxRichTextStyleComboCtrl, @ref overview_richtextctrl
23324ae1
FM
233*/
234class wxRichTextStyleListBox : public wxHtmlListBox
235{
236public:
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 */
adaaa686 249 virtual ~wxRichTextStyleListBox();
23324ae1
FM
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 */
328f5751 259 int ConvertTenthsMMToPixels(wxDC& dc, int units) const;
23324ae1
FM
260
261 /**
262 Creates a suitable HTML fragment for a definition.
263 */
328f5751 264 wxString CreateHTML(wxRichTextStyleDefinition* def) const;
23324ae1
FM
265
266 /**
267 If the return value is @true, clicking on a style name in the list will
9e7ad1ca 268 immediately apply the style to the associated rich text control.
23324ae1 269 */
328f5751 270 bool GetApplyOnSelection() const;
23324ae1
FM
271
272 /**
273 Returns the wxRichTextCtrl associated with this listbox.
274 */
328f5751 275 wxRichTextCtrl* GetRichTextCtrl() const;
23324ae1
FM
276
277 /**
278 Gets a style for a listbox index.
279 */
328f5751 280 wxRichTextStyleDefinition* GetStyle(size_t i) const;
23324ae1
FM
281
282 /**
283 Returns the style sheet associated with this listbox.
284 */
328f5751 285 wxRichTextStyleSheet* GetStyleSheet() const;
23324ae1
FM
286
287 /**
288 Returns the type of style to show in the list box.
289 */
328f5751 290 wxRichTextStyleListBox::wxRichTextStyleType GetStyleType() const;
23324ae1 291
23324ae1
FM
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 /**
4cc4bfaf 304 If @a applyOnSelection is @true, clicking on a style name in the list will
9e7ad1ca 305 immediately apply the style to the associated rich text control.
23324ae1
FM
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
9e7ad1ca
FM
321 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL,
322 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH,
323 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_CHARACTER
324 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST.
23324ae1
FM
325 */
326 void SetStyleType(wxRichTextStyleListBox::wxRichTextStyleType styleType);
327
328 /**
329 Updates the list from the associated style sheet.
330 */
331 void UpdateStyles();
5e6e278d
FM
332
333protected:
334
335 /**
336 Returns the HTML for this item.
337 */
338 virtual wxString OnGetItem(size_t n) const;
23324ae1
FM
339};
340
341
e54c96f1 342
23324ae1
FM
343/**
344 @class wxRichTextStyleComboCtrl
7c913512 345
23324ae1
FM
346 This is a combo control that can display the styles in a wxRichTextStyleSheet,
347 and apply the selection to an associated wxRichTextCtrl.
7c913512 348
23324ae1 349 See @c samples/richtext for an example of how to use it.
7c913512 350
23324ae1 351 @library{wxrichtext}
21b447dc 352 @category{richtext}
7c913512 353
9e7ad1ca 354 @see wxRichTextStyleListBox, @ref overview_richtextctrl
23324ae1
FM
355*/
356class wxRichTextStyleComboCtrl : public wxComboCtrl
357{
358public:
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 */
adaaa686 371 virtual ~wxRichTextStyleComboCtrl();
23324ae1
FM
372
373 /**
374 Returns the wxRichTextCtrl associated with this control.
375 */
328f5751 376 wxRichTextCtrl* GetRichTextCtrl() const;
23324ae1
FM
377
378 /**
379 Returns the style sheet associated with this control.
380 */
328f5751 381 wxRichTextStyleSheet* GetStyleSheet() const;
23324ae1
FM
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
e54c96f1 400
23324ae1
FM
401/**
402 @class wxRichTextCharacterStyleDefinition
7c913512 403
23324ae1
FM
404 This class represents a character style definition, usually added to a
405 wxRichTextStyleSheet.
7c913512 406
23324ae1 407 @library{wxrichtext}
21b447dc 408 @category{richtext}
23324ae1
FM
409*/
410class wxRichTextCharacterStyleDefinition : public wxRichTextStyleDefinition
411{
412public:
413 /**
414 Constructor.
415 */
416 wxRichTextCharacterStyleDefinition(const wxString& name = wxEmptyString);
417
418 /**
419 Destructor.
420 */
adaaa686 421 virtual ~wxRichTextCharacterStyleDefinition();
23324ae1
FM
422};
423
424
e54c96f1 425
23324ae1
FM
426/**
427 @class wxRichTextListStyleDefinition
7c913512 428
23324ae1
FM
429 This class represents a list style definition, usually added to a
430 wxRichTextStyleSheet.
7c913512 431
9e7ad1ca
FM
432 The class inherits paragraph attributes from wxRichTextStyleParagraphDefinition,
433 and adds 10 further attribute objects, one for each level of a list.
23324ae1 434 When applying a list style to a paragraph, the list style's base and
9e7ad1ca
FM
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
23324ae1 442 so that you can apply them directly to a buffer without requiring a control.
7c913512 443
23324ae1 444 @library{wxrichtext}
21b447dc 445 @category{richtext}
23324ae1
FM
446*/
447class wxRichTextListStyleDefinition : public wxRichTextParagraphStyleDefinition
448{
449public:
450 /**
451 Constructor.
452 */
453 wxRichTextListStyleDefinition(const wxString& name = wxEmptyString);
454
455 /**
456 Destructor.
457 */
adaaa686 458 virtual ~wxRichTextListStyleDefinition();
23324ae1
FM
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.
9e7ad1ca 463
4cc4bfaf 464 If @a styleSheet is specified, the base style for this definition will also be
23324ae1
FM
465 included in the result.
466 */
467 wxTextAttr CombineWithParagraphStyle(int indent,
468 const wxTextAttr& paraStyle,
4cc4bfaf 469 wxRichTextStyleSheet* styleSheet = NULL);
23324ae1
FM
470
471 /**
472 This function finds the level (from 0 to 9) whose indentation attribute mostly
4cc4bfaf 473 closely matches @a indent (expressed in tenths of a millimetre).
23324ae1 474 */
328f5751 475 int FindLevelForIndent(int indent) const;
23324ae1
FM
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.
9e7ad1ca 480
4cc4bfaf 481 If @a styleSheet is specified, the base style for this definition will also be
23324ae1
FM
482 included in the result.
483 */
484 wxTextAttr GetCombinedStyle(int indent,
fadc2df6 485 wxRichTextStyleSheet* styleSheet = NULL);
23324ae1
FM
486
487 /**
488 This function combines the list style's base attributes and the style for the
489 specified level, returning the combined attributes.
9e7ad1ca 490
4cc4bfaf 491 If @a styleSheet is specified, the base style for this definition will also be
23324ae1
FM
492 included in the result.
493 */
494 wxTextAttr GetCombinedStyleLevel(int level,
328f5751 495 wxRichTextStyleSheet* styleSheet = NULL) const;
23324ae1
FM
496
497 /**
4cc4bfaf 498 Returns the style for the given level. @a level is a number between 0 and 9.
23324ae1 499 */
328f5751 500 const wxTextAttr* GetLevelAttributes(int level) const;
23324ae1
FM
501
502 /**
503 Returns the number of levels. This is hard-wired to 10.
23324ae1
FM
504 Returns the style for the given level. @e level is a number between 0 and 9.
505 */
328f5751 506 int GetLevelCount() const;
23324ae1
FM
507
508 /**
509 Returns @true if the given level has numbered list attributes.
510 */
5267aefd 511 bool IsNumbered(int level) const;
23324ae1 512
23324ae1 513 /**
4cc4bfaf 514 Sets the style for the given level. @a level is a number between 0 and 9.
23324ae1
FM
515 The first and most flexible form uses a wxTextAttr object, while the second
516 form is for convenient setting of the most commonly-used attributes.
517 */
518 void SetLevelAttributes(int level, const wxTextAttr& attr);
23324ae1
FM
519};
520
521
e54c96f1 522
23324ae1
FM
523/**
524 @class wxRichTextStyleSheet
7c913512 525
23324ae1
FM
526 A style sheet contains named paragraph and character styles that make it
527 easy for a user to apply combinations of attributes to a wxRichTextCtrl.
7c913512 528
9e7ad1ca
FM
529 You can use a wxRichTextStyleListBox in your user interface to show available
530 styles to the user, and allow application of styles to the control.
7c913512 531
23324ae1 532 @library{wxrichtext}
21b447dc 533 @category{richtext}
23324ae1
FM
534*/
535class wxRichTextStyleSheet : public wxObject
536{
537public:
538 /**
539 Constructor.
540 */
541 wxRichTextStyleSheet();
542
543 /**
544 Destructor.
545 */
adaaa686 546 virtual ~wxRichTextStyleSheet();
23324ae1
FM
547
548 /**
549 Adds a definition to the character style list.
550 */
551 bool AddCharacterStyle(wxRichTextCharacterStyleDefinition* def);
552
553 /**
554 Adds a definition to the list style list.
555 */
556 bool AddListStyle(wxRichTextListStyleDefinition* def);
557
558 /**
559 Adds a definition to the paragraph style list.
560 */
561 bool AddParagraphStyle(wxRichTextParagraphStyleDefinition* def);
562
563 /**
564 Adds a definition to the appropriate style list.
565 */
566 bool AddStyle(wxRichTextStyleDefinition* def);
567
568 /**
569 Deletes all styles.
570 */
571 void DeleteStyles();
572
573 /**
574 Finds a character definition by name.
575 */
5267aefd
FM
576 wxRichTextCharacterStyleDefinition* FindCharacterStyle(const wxString& name,
577 bool recurse = true) const;
23324ae1
FM
578
579 /**
580 Finds a list definition by name.
581 */
5267aefd
FM
582 wxRichTextListStyleDefinition* FindListStyle(const wxString& name,
583 bool recurse = true) const;
23324ae1
FM
584
585 /**
586 Finds a paragraph definition by name.
587 */
5267aefd
FM
588 wxRichTextParagraphStyleDefinition* FindParagraphStyle(const wxString& name,
589 bool recurse = true) const;
23324ae1
FM
590
591 /**
592 Finds a style definition by name.
593 */
328f5751 594 wxRichTextStyleDefinition* FindStyle(const wxString& name) const;
23324ae1
FM
595
596 /**
597 Returns the @e nth character style.
598 */
328f5751 599 wxRichTextCharacterStyleDefinition* GetCharacterStyle(size_t n) const;
23324ae1
FM
600
601 /**
602 Returns the number of character styles.
603 */
328f5751 604 size_t GetCharacterStyleCount() const;
23324ae1
FM
605
606 /**
607 Returns the style sheet's description.
608 */
5267aefd 609 const wxString& GetDescription() const;
23324ae1
FM
610
611 /**
612 Returns the @e nth list style.
613 */
328f5751 614 wxRichTextListStyleDefinition* GetListStyle(size_t n) const;
23324ae1
FM
615
616 /**
617 Returns the number of list styles.
618 */
328f5751 619 size_t GetListStyleCount() const;
23324ae1
FM
620
621 /**
622 Returns the style sheet's name.
623 */
5267aefd 624 const wxString& GetName() const;
23324ae1
FM
625
626 /**
627 Returns the @e nth paragraph style.
628 */
328f5751 629 wxRichTextParagraphStyleDefinition* GetParagraphStyle(size_t n) const;
23324ae1
FM
630
631 /**
632 Returns the number of paragraph styles.
633 */
328f5751 634 size_t GetParagraphStyleCount() const;
23324ae1
FM
635
636 /**
637 Removes a character style.
638 */
639 bool RemoveCharacterStyle(wxRichTextStyleDefinition* def,
4cc4bfaf 640 bool deleteStyle = false);
23324ae1
FM
641
642 /**
643 Removes a list style.
644 */
645 bool RemoveListStyle(wxRichTextStyleDefinition* def,
4cc4bfaf 646 bool deleteStyle = false);
23324ae1
FM
647
648 /**
649 Removes a paragraph style.
650 */
651 bool RemoveParagraphStyle(wxRichTextStyleDefinition* def,
4cc4bfaf 652 bool deleteStyle = false);
23324ae1
FM
653
654 /**
655 Removes a style.
656 */
657 bool RemoveStyle(wxRichTextStyleDefinition* def,
4cc4bfaf 658 bool deleteStyle = false);
23324ae1
FM
659
660 /**
661 Sets the style sheet's description.
662 */
663 void SetDescription(const wxString& descr);
664
665 /**
666 Sets the style sheet's name.
667 */
668 void SetName(const wxString& name);
669};
e54c96f1 670