]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/richtext/richtextstyles.h
handle error in GetDataSize()
[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 */
328f5751 137 const wxString GetBaseStyle() const;
23324ae1
FM
138
139 /**
140 Returns the style's description.
141 */
328f5751 142 const wxString GetDescription() const;
23324ae1
FM
143
144 /**
145 Returns the style name.
146 */
328f5751 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 */
328f5751 161 wxTextAttr GetStyleMergedWithBase(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 */
328f5751 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
FM
291
292 /**
293 Returns the HTML for this item.
294 */
0004982c 295 virtual wxString OnGetItem(size_t n) const;
23324ae1
FM
296
297 /**
298 Implements left click behaviour, applying the clicked style to the
299 wxRichTextCtrl.
300 */
301 void OnLeftDown(wxMouseEvent& event);
302
303 /**
304 Reacts to selection.
305 */
306 void OnSelect(wxCommandEvent& event);
307
308 /**
4cc4bfaf 309 If @a applyOnSelection is @true, clicking on a style name in the list will
9e7ad1ca 310 immediately apply the style to the associated rich text control.
23324ae1
FM
311 */
312 void SetApplyOnSelection(bool applyOnSelection);
313
314 /**
315 Associates the listbox with a wxRichTextCtrl.
316 */
317 void SetRichTextCtrl(wxRichTextCtrl* ctrl);
318
319 /**
320 Associates the control with a style sheet.
321 */
322 void SetStyleSheet(wxRichTextStyleSheet* styleSheet);
323
324 /**
325 Sets the style type to display. One of
9e7ad1ca
FM
326 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL,
327 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH,
328 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_CHARACTER
329 - wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST.
23324ae1
FM
330 */
331 void SetStyleType(wxRichTextStyleListBox::wxRichTextStyleType styleType);
332
333 /**
334 Updates the list from the associated style sheet.
335 */
336 void UpdateStyles();
337};
338
339
e54c96f1 340
23324ae1
FM
341/**
342 @class wxRichTextStyleComboCtrl
7c913512 343
23324ae1
FM
344 This is a combo control that can display the styles in a wxRichTextStyleSheet,
345 and apply the selection to an associated wxRichTextCtrl.
7c913512 346
23324ae1 347 See @c samples/richtext for an example of how to use it.
7c913512 348
23324ae1 349 @library{wxrichtext}
21b447dc 350 @category{richtext}
7c913512 351
9e7ad1ca 352 @see wxRichTextStyleListBox, @ref overview_richtextctrl
23324ae1
FM
353*/
354class wxRichTextStyleComboCtrl : public wxComboCtrl
355{
356public:
357 /**
358 Constructor.
359 */
360 wxRichTextStyleComboCtrl(wxWindow* parent,
361 wxWindowID id = wxID_ANY,
362 const wxPoint& pos = wxDefaultPosition,
363 const wxSize& size = wxDefaultSize,
364 long style = 0);
365
366 /**
367 Destructor.
368 */
adaaa686 369 virtual ~wxRichTextStyleComboCtrl();
23324ae1
FM
370
371 /**
372 Returns the wxRichTextCtrl associated with this control.
373 */
328f5751 374 wxRichTextCtrl* GetRichTextCtrl() const;
23324ae1
FM
375
376 /**
377 Returns the style sheet associated with this control.
378 */
328f5751 379 wxRichTextStyleSheet* GetStyleSheet() const;
23324ae1
FM
380
381 /**
382 Associates the control with a wxRichTextCtrl.
383 */
384 void SetRichTextCtrl(wxRichTextCtrl* ctrl);
385
386 /**
387 Associates the control with a style sheet.
388 */
389 void SetStyleSheet(wxRichTextStyleSheet* styleSheet);
390
391 /**
392 Updates the combo control from the associated style sheet.
393 */
394 void UpdateStyles();
395};
396
397
e54c96f1 398
23324ae1
FM
399/**
400 @class wxRichTextCharacterStyleDefinition
7c913512 401
23324ae1
FM
402 This class represents a character style definition, usually added to a
403 wxRichTextStyleSheet.
7c913512 404
23324ae1 405 @library{wxrichtext}
21b447dc 406 @category{richtext}
23324ae1
FM
407*/
408class wxRichTextCharacterStyleDefinition : public wxRichTextStyleDefinition
409{
410public:
411 /**
412 Constructor.
413 */
414 wxRichTextCharacterStyleDefinition(const wxString& name = wxEmptyString);
415
416 /**
417 Destructor.
418 */
adaaa686 419 virtual ~wxRichTextCharacterStyleDefinition();
23324ae1
FM
420};
421
422
e54c96f1 423
23324ae1
FM
424/**
425 @class wxRichTextListStyleDefinition
7c913512 426
23324ae1
FM
427 This class represents a list style definition, usually added to a
428 wxRichTextStyleSheet.
7c913512 429
9e7ad1ca
FM
430 The class inherits paragraph attributes from wxRichTextStyleParagraphDefinition,
431 and adds 10 further attribute objects, one for each level of a list.
23324ae1 432 When applying a list style to a paragraph, the list style's base and
9e7ad1ca
FM
433 appropriate level attributes are merged with the paragraph's existing attributes.
434
435 You can apply a list style to one or more paragraphs using wxRichTextCtrl::SetListStyle.
436 You can also use the functions wxRichTextCtrl::NumberList, wxRichTextCtrl::PromoteList and
437 wxRichTextCtrl::ClearListStyle.
438
439 As usual, there are wxRichTextBuffer versions of these functions
23324ae1 440 so that you can apply them directly to a buffer without requiring a control.
7c913512 441
23324ae1 442 @library{wxrichtext}
21b447dc 443 @category{richtext}
23324ae1
FM
444*/
445class wxRichTextListStyleDefinition : public wxRichTextParagraphStyleDefinition
446{
447public:
448 /**
449 Constructor.
450 */
451 wxRichTextListStyleDefinition(const wxString& name = wxEmptyString);
452
453 /**
454 Destructor.
455 */
adaaa686 456 virtual ~wxRichTextListStyleDefinition();
23324ae1
FM
457
458 /**
459 This function combines the given paragraph style with the list style's base
460 attributes and level style matching the given indent, returning the combined attributes.
9e7ad1ca 461
4cc4bfaf 462 If @a styleSheet is specified, the base style for this definition will also be
23324ae1
FM
463 included in the result.
464 */
465 wxTextAttr CombineWithParagraphStyle(int indent,
466 const wxTextAttr& paraStyle,
4cc4bfaf 467 wxRichTextStyleSheet* styleSheet = NULL);
23324ae1
FM
468
469 /**
470 This function finds the level (from 0 to 9) whose indentation attribute mostly
4cc4bfaf 471 closely matches @a indent (expressed in tenths of a millimetre).
23324ae1 472 */
328f5751 473 int FindLevelForIndent(int indent) const;
23324ae1
FM
474
475 /**
476 This function combines the list style's base attributes and the level style
477 matching the given indent, returning the combined attributes.
9e7ad1ca 478
4cc4bfaf 479 If @a styleSheet is specified, the base style for this definition will also be
23324ae1
FM
480 included in the result.
481 */
482 wxTextAttr GetCombinedStyle(int indent,
328f5751 483 wxRichTextStyleSheet* styleSheet = NULL) const;
23324ae1
FM
484
485 /**
486 This function combines the list style's base attributes and the style for the
487 specified level, returning the combined attributes.
9e7ad1ca 488
4cc4bfaf 489 If @a styleSheet is specified, the base style for this definition will also be
23324ae1
FM
490 included in the result.
491 */
492 wxTextAttr GetCombinedStyleLevel(int level,
328f5751 493 wxRichTextStyleSheet* styleSheet = NULL) const;
23324ae1
FM
494
495 /**
4cc4bfaf 496 Returns the style for the given level. @a level is a number between 0 and 9.
23324ae1 497 */
328f5751 498 const wxTextAttr* GetLevelAttributes(int level) const;
23324ae1
FM
499
500 /**
501 Returns the number of levels. This is hard-wired to 10.
23324ae1
FM
502 Returns the style for the given level. @e level is a number between 0 and 9.
503 */
328f5751 504 int GetLevelCount() const;
23324ae1
FM
505
506 /**
507 Returns @true if the given level has numbered list attributes.
508 */
328f5751 509 int IsNumbered(int level) const;
23324ae1
FM
510
511 //@{
512 /**
4cc4bfaf 513 Sets the style for the given level. @a level is a number between 0 and 9.
23324ae1
FM
514 The first and most flexible form uses a wxTextAttr object, while the second
515 form is for convenient setting of the most commonly-used attributes.
516 */
517 void SetLevelAttributes(int level, const wxTextAttr& attr);
7c913512
FM
518 void SetLevelAttributes(int level, int leftIndent,
519 int leftSubIndent,
520 int bulletStyle,
521 const wxString& bulletSymbol = wxEmptyString);
23324ae1
FM
522 //@}
523};
524
525
e54c96f1 526
23324ae1
FM
527/**
528 @class wxRichTextStyleSheet
7c913512 529
23324ae1
FM
530 A style sheet contains named paragraph and character styles that make it
531 easy for a user to apply combinations of attributes to a wxRichTextCtrl.
7c913512 532
9e7ad1ca
FM
533 You can use a wxRichTextStyleListBox in your user interface to show available
534 styles to the user, and allow application of styles to the control.
7c913512 535
23324ae1 536 @library{wxrichtext}
21b447dc 537 @category{richtext}
23324ae1
FM
538*/
539class wxRichTextStyleSheet : public wxObject
540{
541public:
542 /**
543 Constructor.
544 */
545 wxRichTextStyleSheet();
546
547 /**
548 Destructor.
549 */
adaaa686 550 virtual ~wxRichTextStyleSheet();
23324ae1
FM
551
552 /**
553 Adds a definition to the character style list.
554 */
555 bool AddCharacterStyle(wxRichTextCharacterStyleDefinition* def);
556
557 /**
558 Adds a definition to the list style list.
559 */
560 bool AddListStyle(wxRichTextListStyleDefinition* def);
561
562 /**
563 Adds a definition to the paragraph style list.
564 */
565 bool AddParagraphStyle(wxRichTextParagraphStyleDefinition* def);
566
567 /**
568 Adds a definition to the appropriate style list.
569 */
570 bool AddStyle(wxRichTextStyleDefinition* def);
571
572 /**
573 Deletes all styles.
574 */
575 void DeleteStyles();
576
577 /**
578 Finds a character definition by name.
579 */
328f5751 580 wxRichTextCharacterStyleDefinition* FindCharacterStyle(const wxString& name) const;
23324ae1
FM
581
582 /**
583 Finds a list definition by name.
584 */
328f5751 585 wxRichTextListStyleDefinition* FindListStyle(const wxString& name) const;
23324ae1
FM
586
587 /**
588 Finds a paragraph definition by name.
589 */
328f5751 590 wxRichTextParagraphStyleDefinition* FindParagraphStyle(const wxString& name) const;
23324ae1
FM
591
592 /**
593 Finds a style definition by name.
594 */
328f5751 595 wxRichTextStyleDefinition* FindStyle(const wxString& name) const;
23324ae1
FM
596
597 /**
598 Returns the @e nth character style.
599 */
328f5751 600 wxRichTextCharacterStyleDefinition* GetCharacterStyle(size_t n) const;
23324ae1
FM
601
602 /**
603 Returns the number of character styles.
604 */
328f5751 605 size_t GetCharacterStyleCount() const;
23324ae1
FM
606
607 /**
608 Returns the style sheet's description.
609 */
328f5751 610 const wxString GetDescription() const;
23324ae1
FM
611
612 /**
613 Returns the @e nth list style.
614 */
328f5751 615 wxRichTextListStyleDefinition* GetListStyle(size_t n) const;
23324ae1
FM
616
617 /**
618 Returns the number of list styles.
619 */
328f5751 620 size_t GetListStyleCount() const;
23324ae1
FM
621
622 /**
623 Returns the style sheet's name.
624 */
328f5751 625 const wxString GetName() const;
23324ae1
FM
626
627 /**
628 Returns the @e nth paragraph style.
629 */
328f5751 630 wxRichTextParagraphStyleDefinition* GetParagraphStyle(size_t n) const;
23324ae1
FM
631
632 /**
633 Returns the number of paragraph styles.
634 */
328f5751 635 size_t GetParagraphStyleCount() const;
23324ae1
FM
636
637 /**
638 Removes a character style.
639 */
640 bool RemoveCharacterStyle(wxRichTextStyleDefinition* def,
4cc4bfaf 641 bool deleteStyle = false);
23324ae1
FM
642
643 /**
644 Removes a list style.
645 */
646 bool RemoveListStyle(wxRichTextStyleDefinition* def,
4cc4bfaf 647 bool deleteStyle = false);
23324ae1
FM
648
649 /**
650 Removes a paragraph style.
651 */
652 bool RemoveParagraphStyle(wxRichTextStyleDefinition* def,
4cc4bfaf 653 bool deleteStyle = false);
23324ae1
FM
654
655 /**
656 Removes a style.
657 */
658 bool RemoveStyle(wxRichTextStyleDefinition* def,
4cc4bfaf 659 bool deleteStyle = false);
23324ae1
FM
660
661 /**
662 Sets the style sheet's description.
663 */
664 void SetDescription(const wxString& descr);
665
666 /**
667 Sets the style sheet's name.
668 */
669 void SetName(const wxString& name);
670};
e54c96f1 671