]>
Commit | Line | Data |
---|---|---|
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 | Sets the style for the given level. @a level is a number between 0 and 9. | |
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); | |
519 | }; | |
520 | ||
521 | ||
522 | ||
523 | /** | |
524 | @class wxRichTextStyleSheet | |
525 | ||
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. | |
528 | ||
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. | |
531 | ||
532 | @library{wxrichtext} | |
533 | @category{richtext} | |
534 | */ | |
535 | class wxRichTextStyleSheet : public wxObject | |
536 | { | |
537 | public: | |
538 | /** | |
539 | Constructor. | |
540 | */ | |
541 | wxRichTextStyleSheet(); | |
542 | ||
543 | /** | |
544 | Destructor. | |
545 | */ | |
546 | virtual ~wxRichTextStyleSheet(); | |
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 | */ | |
576 | wxRichTextCharacterStyleDefinition* FindCharacterStyle(const wxString& name, | |
577 | bool recurse = true) const; | |
578 | ||
579 | /** | |
580 | Finds a list definition by name. | |
581 | */ | |
582 | wxRichTextListStyleDefinition* FindListStyle(const wxString& name, | |
583 | bool recurse = true) const; | |
584 | ||
585 | /** | |
586 | Finds a paragraph definition by name. | |
587 | */ | |
588 | wxRichTextParagraphStyleDefinition* FindParagraphStyle(const wxString& name, | |
589 | bool recurse = true) const; | |
590 | ||
591 | /** | |
592 | Finds a style definition by name. | |
593 | */ | |
594 | wxRichTextStyleDefinition* FindStyle(const wxString& name) const; | |
595 | ||
596 | /** | |
597 | Returns the @e nth character style. | |
598 | */ | |
599 | wxRichTextCharacterStyleDefinition* GetCharacterStyle(size_t n) const; | |
600 | ||
601 | /** | |
602 | Returns the number of character styles. | |
603 | */ | |
604 | size_t GetCharacterStyleCount() const; | |
605 | ||
606 | /** | |
607 | Returns the style sheet's description. | |
608 | */ | |
609 | const wxString& GetDescription() const; | |
610 | ||
611 | /** | |
612 | Returns the @e nth list style. | |
613 | */ | |
614 | wxRichTextListStyleDefinition* GetListStyle(size_t n) const; | |
615 | ||
616 | /** | |
617 | Returns the number of list styles. | |
618 | */ | |
619 | size_t GetListStyleCount() const; | |
620 | ||
621 | /** | |
622 | Returns the style sheet's name. | |
623 | */ | |
624 | const wxString& GetName() const; | |
625 | ||
626 | /** | |
627 | Returns the @e nth paragraph style. | |
628 | */ | |
629 | wxRichTextParagraphStyleDefinition* GetParagraphStyle(size_t n) const; | |
630 | ||
631 | /** | |
632 | Returns the number of paragraph styles. | |
633 | */ | |
634 | size_t GetParagraphStyleCount() const; | |
635 | ||
636 | /** | |
637 | Removes a character style. | |
638 | */ | |
639 | bool RemoveCharacterStyle(wxRichTextStyleDefinition* def, | |
640 | bool deleteStyle = false); | |
641 | ||
642 | /** | |
643 | Removes a list style. | |
644 | */ | |
645 | bool RemoveListStyle(wxRichTextStyleDefinition* def, | |
646 | bool deleteStyle = false); | |
647 | ||
648 | /** | |
649 | Removes a paragraph style. | |
650 | */ | |
651 | bool RemoveParagraphStyle(wxRichTextStyleDefinition* def, | |
652 | bool deleteStyle = false); | |
653 | ||
654 | /** | |
655 | Removes a style. | |
656 | */ | |
657 | bool RemoveStyle(wxRichTextStyleDefinition* def, | |
658 | bool deleteStyle = false); | |
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 | }; | |
670 |