1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/richtext/richtextbuffer.h
3 // Purpose: Buffer for wxRichTextCtrl
4 // Author: Julian Smart
7 // Copyright: (c) Julian Smart
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_RICHTEXTBUFFER_H_
12 #define _WX_RICHTEXTBUFFER_H_
19 Data is represented by a hierarchy of objects, all derived from
22 The top of the hierarchy is the buffer, a kind of wxRichTextParagraphLayoutBox.
23 These boxes will allow flexible placement of text boxes on a page, but
24 for now there is a single box representing the document, and this box is
25 a wxRichTextParagraphLayoutBox which contains further wxRichTextParagraph
26 objects, each of which can include text and images.
28 Each object maintains a range (start and end position) measured
29 from the start of the main parent box.
30 A paragraph object knows its range, and a text fragment knows its range
31 too. So, a character or image in a page has a position relative to the
32 start of the document, and a character in an embedded text box has
33 a position relative to that text box. For now, we will not be dealing with
34 embedded objects but it's something to bear in mind for later.
36 Note that internally, a range (5,5) represents a range of one character.
37 In the public wx[Rich]TextCtrl API, this would be passed to e.g. SetSelection
38 as (5,6). A paragraph with one character might have an internal range of (0, 1)
39 since the end of the paragraph takes up one position.
44 When Layout is called on an object, it is given a size which the object
45 must limit itself to, or one or more flexible directions (vertical
46 or horizontal). So for example a centered paragraph is given the page
47 width to play with (minus any margins), but can extend indefinitely
48 in the vertical direction. The implementation of Layout can then
49 cache the calculated size and position within the parent.
62 #include "wx/textctrl.h"
63 #include "wx/bitmap.h"
65 #include "wx/cmdproc.h"
66 #include "wx/txtstrm.h"
67 #include "wx/variant.h"
68 #include "wx/position.h"
71 #include "wx/dataobj.h"
75 //#define wxRichTextAttr wxTextAttr
76 #define wxTextAttrEx wxTextAttr
78 // Setting wxRICHTEXT_USE_OWN_CARET to 1 implements a
79 // caret reliably without using wxClientDC in case there
80 // are platform-specific problems with the generic caret.
81 #if defined(__WXGTK__) || defined(__WXMAC__)
82 #define wxRICHTEXT_USE_OWN_CARET 1
84 #define wxRICHTEXT_USE_OWN_CARET 0
87 // Switch off for binary compatibility, on for faster drawing
88 // Note: this seems to be buggy (overzealous use of extents) so
90 #define wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING 0
92 // The following two symbols determine whether an output implementation
93 // is present. To switch the relevant one on, set wxRICHTEXT_USE_XMLDOCUMENT_OUTPUT in
94 // richtextxml.cpp. By default, the faster direct output implementation is used.
96 // Include the wxXmlDocument implementation for output
97 #define wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT 1
99 // Include the faster, direct implementation for output
100 #define wxRICHTEXT_HAVE_DIRECT_OUTPUT 1
103 The line break character that can be embedded in content.
106 extern WXDLLIMPEXP_RICHTEXT
const wxChar wxRichTextLineBreakChar
;
109 File types in wxRichText context.
111 enum wxRichTextFileType
113 wxRICHTEXT_TYPE_ANY
= 0,
114 wxRICHTEXT_TYPE_TEXT
,
116 wxRICHTEXT_TYPE_HTML
,
122 * Forward declarations
125 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCtrl
;
126 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextObject
;
127 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextImage
;
128 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextPlainText
;
129 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCacheObject
;
130 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextObjectList
;
131 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextLine
;
132 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextParagraph
;
133 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextFileHandler
;
134 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextDrawingHandler
;
135 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextField
;
136 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextFieldType
;
137 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextStyleSheet
;
138 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextListStyleDefinition
;
139 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextEvent
;
140 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextRenderer
;
141 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextBuffer
;
142 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextXMLHandler
;
143 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextParagraphLayoutBox
;
144 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextImageBlock
;
145 class WXDLLIMPEXP_FWD_XML wxXmlNode
;
146 class wxRichTextFloatCollector
;
147 class WXDLLIMPEXP_FWD_BASE wxDataInputStream
;
148 class WXDLLIMPEXP_FWD_BASE wxDataOutputStream
;
151 Flags determining the available space, passed to Layout.
154 #define wxRICHTEXT_FIXED_WIDTH 0x01
155 #define wxRICHTEXT_FIXED_HEIGHT 0x02
156 #define wxRICHTEXT_VARIABLE_WIDTH 0x04
157 #define wxRICHTEXT_VARIABLE_HEIGHT 0x08
159 // Only lay out the part of the buffer that lies within
160 // the rect passed to Layout.
161 #define wxRICHTEXT_LAYOUT_SPECIFIED_RECT 0x10
164 Flags to pass to Draw
167 // Ignore paragraph cache optimization, e.g. for printing purposes
168 // where one line may be drawn higher (on the next page) compared
169 // with the previous line
170 #define wxRICHTEXT_DRAW_IGNORE_CACHE 0x01
171 #define wxRICHTEXT_DRAW_SELECTED 0x02
172 #define wxRICHTEXT_DRAW_PRINT 0x04
173 #define wxRICHTEXT_DRAW_GUIDELINES 0x08
176 Flags returned from hit-testing, or passed to hit-test function.
178 enum wxRichTextHitTestFlags
180 // The point was not on this object
181 wxRICHTEXT_HITTEST_NONE
= 0x01,
183 // The point was before the position returned from HitTest
184 wxRICHTEXT_HITTEST_BEFORE
= 0x02,
186 // The point was after the position returned from HitTest
187 wxRICHTEXT_HITTEST_AFTER
= 0x04,
189 // The point was on the position returned from HitTest
190 wxRICHTEXT_HITTEST_ON
= 0x08,
192 // The point was on space outside content
193 wxRICHTEXT_HITTEST_OUTSIDE
= 0x10,
195 // Only do hit-testing at the current level (don't traverse into top-level objects)
196 wxRICHTEXT_HITTEST_NO_NESTED_OBJECTS
= 0x20,
198 // Ignore floating objects
199 wxRICHTEXT_HITTEST_NO_FLOATING_OBJECTS
= 0x40,
201 // Don't recurse into objects marked as atomic
202 wxRICHTEXT_HITTEST_HONOUR_ATOMIC
= 0x80
206 Flags for GetRangeSize.
209 #define wxRICHTEXT_FORMATTED 0x01
210 #define wxRICHTEXT_UNFORMATTED 0x02
211 #define wxRICHTEXT_CACHE_SIZE 0x04
212 #define wxRICHTEXT_HEIGHT_ONLY 0x08
215 Flags for SetStyle/SetListStyle.
218 #define wxRICHTEXT_SETSTYLE_NONE 0x00
220 // Specifies that this operation should be undoable
221 #define wxRICHTEXT_SETSTYLE_WITH_UNDO 0x01
223 // Specifies that the style should not be applied if the
224 // combined style at this point is already the style in question.
225 #define wxRICHTEXT_SETSTYLE_OPTIMIZE 0x02
227 // Specifies that the style should only be applied to paragraphs,
228 // and not the content. This allows content styling to be
229 // preserved independently from that of e.g. a named paragraph style.
230 #define wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY 0x04
232 // Specifies that the style should only be applied to characters,
233 // and not the paragraph. This allows content styling to be
234 // preserved independently from that of e.g. a named paragraph style.
235 #define wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY 0x08
237 // For SetListStyle only: specifies starting from the given number, otherwise
238 // deduces number from existing attributes
239 #define wxRICHTEXT_SETSTYLE_RENUMBER 0x10
241 // For SetListStyle only: specifies the list level for all paragraphs, otherwise
242 // the current indentation will be used
243 #define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20
245 // Resets the existing style before applying the new style
246 #define wxRICHTEXT_SETSTYLE_RESET 0x40
248 // Removes the given style instead of applying it
249 #define wxRICHTEXT_SETSTYLE_REMOVE 0x80
252 Flags for SetProperties.
255 #define wxRICHTEXT_SETPROPERTIES_NONE 0x00
257 // Specifies that this operation should be undoable
258 #define wxRICHTEXT_SETPROPERTIES_WITH_UNDO 0x01
260 // Specifies that the properties should only be applied to paragraphs,
261 // and not the content.
262 #define wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY 0x02
264 // Specifies that the properties should only be applied to characters,
265 // and not the paragraph.
266 #define wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY 0x04
268 // Resets the existing properties before applying the new properties.
269 #define wxRICHTEXT_SETPROPERTIES_RESET 0x08
271 // Removes the given properties instead of applying them.
272 #define wxRICHTEXT_SETPROPERTIES_REMOVE 0x10
275 Flags for object insertion.
278 #define wxRICHTEXT_INSERT_NONE 0x00
279 #define wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE 0x01
280 #define wxRICHTEXT_INSERT_INTERACTIVE 0x02
282 // A special flag telling the buffer to keep the first paragraph style
283 // as-is, when deleting a paragraph marker. In future we might pass a
284 // flag to InsertFragment and DeleteRange to indicate the appropriate mode.
285 #define wxTEXT_ATTR_KEEP_FIRST_PARA_STYLE 0x20000000
288 Default superscript/subscript font multiplication factor.
291 #define wxSCRIPT_MUL_FACTOR 1.5
294 The type for wxTextAttrDimension flags.
296 typedef unsigned short wxTextAttrDimensionFlags
;
299 Miscellaneous text box flags
301 enum wxTextBoxAttrFlags
303 wxTEXT_BOX_ATTR_FLOAT
= 0x00000001,
304 wxTEXT_BOX_ATTR_CLEAR
= 0x00000002,
305 wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
= 0x00000004,
306 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
= 0x00000008,
307 wxTEXT_BOX_ATTR_BOX_STYLE_NAME
= 0x00000010
311 Whether a value is present, used in dimension flags.
313 enum wxTextAttrValueFlags
315 wxTEXT_ATTR_VALUE_VALID
= 0x1000,
316 wxTEXT_ATTR_VALUE_VALID_MASK
= 0x1000
320 Units, included in the dimension value.
324 wxTEXT_ATTR_UNITS_TENTHS_MM
= 0x0001,
325 wxTEXT_ATTR_UNITS_PIXELS
= 0x0002,
326 wxTEXT_ATTR_UNITS_PERCENTAGE
= 0x0004,
327 wxTEXT_ATTR_UNITS_POINTS
= 0x0008,
329 wxTEXT_ATTR_UNITS_MASK
= 0x000F
333 Position alternatives, included in the dimension flags.
335 enum wxTextBoxAttrPosition
337 wxTEXT_BOX_ATTR_POSITION_STATIC
= 0x0000, // Default is static, i.e. as per normal layout
338 wxTEXT_BOX_ATTR_POSITION_RELATIVE
= 0x0010, // Relative to the relevant edge
339 wxTEXT_BOX_ATTR_POSITION_ABSOLUTE
= 0x0020, // Relative to the parent
340 wxTEXT_BOX_ATTR_POSITION_FIXED
= 0x0040, // Relative to the top-level window
342 wxTEXT_BOX_ATTR_POSITION_MASK
= 0x00F0
346 @class wxTextAttrDimension
348 A class representing a rich text dimension, including units and position.
353 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimensions
356 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimension
362 wxTextAttrDimension() { Reset(); }
364 Constructor taking value and units flag.
366 wxTextAttrDimension(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { m_value
= value
; m_flags
= units
|wxTEXT_ATTR_VALUE_VALID
; }
369 Resets the dimension value and flags.
371 void Reset() { m_value
= 0; m_flags
= 0; }
374 Partial equality test. If @a weakTest is @true, attributes of this object do not
375 have to be present if those attributes of @a dim are present. If @a weakTest is
376 @false, the function will fail if an attribute is present in @a dim but not
379 bool EqPartial(const wxTextAttrDimension
& dim
, bool weakTest
= true) const;
381 /** Apply the dimension, but not those identical to @a compareWith if present.
383 bool Apply(const wxTextAttrDimension
& dim
, const wxTextAttrDimension
* compareWith
= NULL
);
385 /** Collects the attributes that are common to a range of content, building up a note of
386 which attributes are absent in some objects and which clash in some objects.
388 void CollectCommonAttributes(const wxTextAttrDimension
& attr
, wxTextAttrDimension
& clashingAttr
, wxTextAttrDimension
& absentAttr
);
393 bool operator==(const wxTextAttrDimension
& dim
) const { return m_value
== dim
.m_value
&& m_flags
== dim
.m_flags
; }
396 Returns the integer value of the dimension.
398 int GetValue() const { return m_value
; }
401 Returns the floating-pointing value of the dimension in mm.
404 float GetValueMM() const { return float(m_value
) / 10.0; }
407 Sets the value of the dimension in mm.
409 void SetValueMM(float value
) { m_value
= (int) ((value
* 10.0) + 0.5); m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
412 Sets the integer value of the dimension.
414 void SetValue(int value
) { m_value
= value
; m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
417 Sets the integer value of the dimension, passing dimension flags.
419 void SetValue(int value
, wxTextAttrDimensionFlags flags
) { SetValue(value
); m_flags
= flags
; }
422 Sets the integer value and units.
424 void SetValue(int value
, wxTextAttrUnits units
) { m_value
= value
; m_flags
= units
| wxTEXT_ATTR_VALUE_VALID
; }
429 void SetValue(const wxTextAttrDimension
& dim
) { (*this) = dim
; }
432 Gets the units of the dimension.
434 wxTextAttrUnits
GetUnits() const { return (wxTextAttrUnits
) (m_flags
& wxTEXT_ATTR_UNITS_MASK
); }
437 Sets the units of the dimension.
439 void SetUnits(wxTextAttrUnits units
) { m_flags
&= ~wxTEXT_ATTR_UNITS_MASK
; m_flags
|= units
; }
442 Gets the position flags.
444 wxTextBoxAttrPosition
GetPosition() const { return (wxTextBoxAttrPosition
) (m_flags
& wxTEXT_BOX_ATTR_POSITION_MASK
); }
447 Sets the position flags.
449 void SetPosition(wxTextBoxAttrPosition pos
) { m_flags
&= ~wxTEXT_BOX_ATTR_POSITION_MASK
; m_flags
|= pos
; }
452 Returns @true if the dimension is valid.
454 bool IsValid() const { return (m_flags
& wxTEXT_ATTR_VALUE_VALID
) != 0; }
459 void SetValid(bool b
) { m_flags
&= ~wxTEXT_ATTR_VALUE_VALID_MASK
; m_flags
|= (b
? wxTEXT_ATTR_VALUE_VALID
: 0); }
462 Gets the dimension flags.
464 wxTextAttrDimensionFlags
GetFlags() const { return m_flags
; }
467 Sets the dimension flags.
469 void SetFlags(wxTextAttrDimensionFlags flags
) { m_flags
= flags
; }
472 wxTextAttrDimensionFlags m_flags
;
476 @class wxTextAttrDimensions
477 A class for left, right, top and bottom dimensions.
482 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
485 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensions
491 wxTextAttrDimensions() {}
494 Resets the value and flags for all dimensions.
496 void Reset() { m_left
.Reset(); m_top
.Reset(); m_right
.Reset(); m_bottom
.Reset(); }
501 bool operator==(const wxTextAttrDimensions
& dims
) const { return m_left
== dims
.m_left
&& m_top
== dims
.m_top
&& m_right
== dims
.m_right
&& m_bottom
== dims
.m_bottom
; }
504 Partial equality test. If @a weakTest is @true, attributes of this object do not
505 have to be present if those attributes of @a dim sare present. If @a weakTest is
506 @false, the function will fail if an attribute is present in @a dims but not
510 bool EqPartial(const wxTextAttrDimensions
& dims
, bool weakTest
= true) const;
513 Apply to 'this', but not if the same as @a compareWith.
516 bool Apply(const wxTextAttrDimensions
& dims
, const wxTextAttrDimensions
* compareWith
= NULL
);
519 Collects the attributes that are common to a range of content, building up a note of
520 which attributes are absent in some objects and which clash in some objects.
523 void CollectCommonAttributes(const wxTextAttrDimensions
& attr
, wxTextAttrDimensions
& clashingAttr
, wxTextAttrDimensions
& absentAttr
);
526 Remove specified attributes from this object.
528 bool RemoveStyle(const wxTextAttrDimensions
& attr
);
531 Gets the left dimension.
533 const wxTextAttrDimension
& GetLeft() const { return m_left
; }
534 wxTextAttrDimension
& GetLeft() { return m_left
; }
537 Gets the right dimension.
540 const wxTextAttrDimension
& GetRight() const { return m_right
; }
541 wxTextAttrDimension
& GetRight() { return m_right
; }
544 Gets the top dimension.
547 const wxTextAttrDimension
& GetTop() const { return m_top
; }
548 wxTextAttrDimension
& GetTop() { return m_top
; }
551 Gets the bottom dimension.
554 const wxTextAttrDimension
& GetBottom() const { return m_bottom
; }
555 wxTextAttrDimension
& GetBottom() { return m_bottom
; }
558 Are all dimensions valid?
561 bool IsValid() const { return m_left
.IsValid() && m_top
.IsValid() && m_right
.IsValid() && m_bottom
.IsValid(); }
563 wxTextAttrDimension m_left
;
564 wxTextAttrDimension m_top
;
565 wxTextAttrDimension m_right
;
566 wxTextAttrDimension m_bottom
;
570 @class wxTextAttrSize
571 A class for representing width and height.
576 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
579 class WXDLLIMPEXP_RICHTEXT wxTextAttrSize
588 Resets the width and height dimensions.
590 void Reset() { m_width
.Reset(); m_height
.Reset(); }
595 bool operator==(const wxTextAttrSize
& size
) const { return m_width
== size
.m_width
&& m_height
== size
.m_height
; }
598 Partial equality test. If @a weakTest is @true, attributes of this object do not
599 have to be present if those attributes of @a size are present. If @a weakTest is
600 @false, the function will fail if an attribute is present in @a size but not
603 bool EqPartial(const wxTextAttrSize
& size
, bool weakTest
= true) const;
606 Apply to this object, but not if the same as @a compareWith.
608 bool Apply(const wxTextAttrSize
& dims
, const wxTextAttrSize
* compareWith
= NULL
);
611 Collects the attributes that are common to a range of content, building up a note of
612 which attributes are absent in some objects and which clash in some objects.
614 void CollectCommonAttributes(const wxTextAttrSize
& attr
, wxTextAttrSize
& clashingAttr
, wxTextAttrSize
& absentAttr
);
617 Removes the specified attributes from this object.
619 bool RemoveStyle(const wxTextAttrSize
& attr
);
624 wxTextAttrDimension
& GetWidth() { return m_width
; }
625 const wxTextAttrDimension
& GetWidth() const { return m_width
; }
630 void SetWidth(int value
, wxTextAttrDimensionFlags flags
) { m_width
.SetValue(value
, flags
); }
635 void SetWidth(int value
, wxTextAttrUnits units
) { m_width
.SetValue(value
, units
); }
640 void SetWidth(const wxTextAttrDimension
& dim
) { m_width
.SetValue(dim
); }
645 wxTextAttrDimension
& GetHeight() { return m_height
; }
646 const wxTextAttrDimension
& GetHeight() const { return m_height
; }
651 void SetHeight(int value
, wxTextAttrDimensionFlags flags
) { m_height
.SetValue(value
, flags
); }
656 void SetHeight(int value
, wxTextAttrUnits units
) { m_height
.SetValue(value
, units
); }
661 void SetHeight(const wxTextAttrDimension
& dim
) { m_height
.SetValue(dim
); }
666 bool IsValid() const { return m_width
.IsValid() && m_height
.IsValid(); }
668 wxTextAttrDimension m_width
;
669 wxTextAttrDimension m_height
;
673 @class wxTextAttrDimensionConverter
674 A class to make it easier to convert dimensions.
679 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
682 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensionConverter
688 wxTextAttrDimensionConverter(wxDC
& dc
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
692 wxTextAttrDimensionConverter(int ppi
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
695 Gets the pixel size for the given dimension.
697 int GetPixels(const wxTextAttrDimension
& dim
, int direction
= wxHORIZONTAL
) const;
699 Gets the mm size for the given dimension.
701 int GetTenthsMM(const wxTextAttrDimension
& dim
) const;
704 Converts tenths of a mm to pixels.
706 int ConvertTenthsMMToPixels(int units
) const;
708 Converts pixels to tenths of a mm.
710 int ConvertPixelsToTenthsMM(int pixels
) const;
718 Border styles, used with wxTextAttrBorder.
720 enum wxTextAttrBorderStyle
722 wxTEXT_BOX_ATTR_BORDER_NONE
= 0,
723 wxTEXT_BOX_ATTR_BORDER_SOLID
= 1,
724 wxTEXT_BOX_ATTR_BORDER_DOTTED
= 2,
725 wxTEXT_BOX_ATTR_BORDER_DASHED
= 3,
726 wxTEXT_BOX_ATTR_BORDER_DOUBLE
= 4,
727 wxTEXT_BOX_ATTR_BORDER_GROOVE
= 5,
728 wxTEXT_BOX_ATTR_BORDER_RIDGE
= 6,
729 wxTEXT_BOX_ATTR_BORDER_INSET
= 7,
730 wxTEXT_BOX_ATTR_BORDER_OUTSET
= 8
734 Border style presence flags, used with wxTextAttrBorder.
736 enum wxTextAttrBorderFlags
738 wxTEXT_BOX_ATTR_BORDER_STYLE
= 0x0001,
739 wxTEXT_BOX_ATTR_BORDER_COLOUR
= 0x0002
743 Border width symbols for qualitative widths, used with wxTextAttrBorder.
745 enum wxTextAttrBorderWidth
747 wxTEXT_BOX_ATTR_BORDER_THIN
= -1,
748 wxTEXT_BOX_ATTR_BORDER_MEDIUM
= -2,
749 wxTEXT_BOX_ATTR_BORDER_THICK
= -3
755 enum wxTextBoxAttrFloatStyle
757 wxTEXT_BOX_ATTR_FLOAT_NONE
= 0,
758 wxTEXT_BOX_ATTR_FLOAT_LEFT
= 1,
759 wxTEXT_BOX_ATTR_FLOAT_RIGHT
= 2
765 enum wxTextBoxAttrClearStyle
767 wxTEXT_BOX_ATTR_CLEAR_NONE
= 0,
768 wxTEXT_BOX_ATTR_CLEAR_LEFT
= 1,
769 wxTEXT_BOX_ATTR_CLEAR_RIGHT
= 2,
770 wxTEXT_BOX_ATTR_CLEAR_BOTH
= 3
774 Collapse mode styles. TODO: can they be switched on per side?
776 enum wxTextBoxAttrCollapseMode
778 wxTEXT_BOX_ATTR_COLLAPSE_NONE
= 0,
779 wxTEXT_BOX_ATTR_COLLAPSE_FULL
= 1
783 Vertical alignment values.
785 enum wxTextBoxAttrVerticalAlignment
787 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_NONE
= 0,
788 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_TOP
= 1,
789 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_CENTRE
= 2,
790 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_BOTTOM
= 3
794 @class wxTextAttrBorder
795 A class representing a rich text object border.
800 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorders
803 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorder
809 wxTextAttrBorder() { Reset(); }
814 bool operator==(const wxTextAttrBorder
& border
) const
816 return m_flags
== border
.m_flags
&& m_borderStyle
== border
.m_borderStyle
&&
817 m_borderColour
== border
.m_borderColour
&& m_borderWidth
== border
.m_borderWidth
;
821 Resets the border style, colour, width and flags.
823 void Reset() { m_borderStyle
= 0; m_borderColour
= 0; m_flags
= 0; m_borderWidth
.Reset(); }
826 Partial equality test. If @a weakTest is @true, attributes of this object do not
827 have to be present if those attributes of @a border are present. If @a weakTest is
828 @false, the function will fail if an attribute is present in @a border but not
831 bool EqPartial(const wxTextAttrBorder
& border
, bool weakTest
= true) const;
834 Applies the border to this object, but not if the same as @a compareWith.
837 bool Apply(const wxTextAttrBorder
& border
, const wxTextAttrBorder
* compareWith
= NULL
);
840 Removes the specified attributes from this object.
842 bool RemoveStyle(const wxTextAttrBorder
& attr
);
845 Collects the attributes that are common to a range of content, building up a note of
846 which attributes are absent in some objects and which clash in some objects.
848 void CollectCommonAttributes(const wxTextAttrBorder
& attr
, wxTextAttrBorder
& clashingAttr
, wxTextAttrBorder
& absentAttr
);
851 Sets the border style.
853 void SetStyle(int style
) { m_borderStyle
= style
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_STYLE
; }
856 Gets the border style.
859 int GetStyle() const { return m_borderStyle
; }
862 Sets the border colour.
864 void SetColour(unsigned long colour
) { m_borderColour
= colour
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
867 Sets the border colour.
869 void SetColour(const wxColour
& colour
) { m_borderColour
= colour
.GetRGB(); m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
872 Gets the colour as a long.
874 unsigned long GetColourLong() const { return m_borderColour
; }
879 wxColour
GetColour() const { return wxColour(m_borderColour
); }
882 Gets the border width.
884 wxTextAttrDimension
& GetWidth() { return m_borderWidth
; }
885 const wxTextAttrDimension
& GetWidth() const { return m_borderWidth
; }
888 Sets the border width.
890 void SetWidth(const wxTextAttrDimension
& width
) { m_borderWidth
= width
; }
892 Sets the border width.
894 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
897 True if the border has a valid style.
899 bool HasStyle() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_STYLE
) != 0; }
902 True if the border has a valid colour.
904 bool HasColour() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_COLOUR
) != 0; }
907 True if the border has a valid width.
909 bool HasWidth() const { return m_borderWidth
.IsValid(); }
912 True if the border is valid.
914 bool IsValid() const { return HasWidth(); }
917 Set the valid flag for this border.
919 void MakeValid() { m_borderWidth
.SetValid(true); }
922 Returns the border flags.
924 int GetFlags() const { return m_flags
; }
927 Sets the border flags.
929 void SetFlags(int flags
) { m_flags
= flags
; }
934 void AddFlag(int flag
) { m_flags
|= flag
; }
937 Removes a border flag.
939 void RemoveFlag(int flag
) { m_flags
&= ~flag
; }
942 unsigned long m_borderColour
;
943 wxTextAttrDimension m_borderWidth
;
948 @class wxTextAttrBorders
949 A class representing a rich text object's borders.
954 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorder
957 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorders
963 wxTextAttrBorders() { }
968 bool operator==(const wxTextAttrBorders
& borders
) const
970 return m_left
== borders
.m_left
&& m_right
== borders
.m_right
&&
971 m_top
== borders
.m_top
&& m_bottom
== borders
.m_bottom
;
975 Sets the style of all borders.
977 void SetStyle(int style
);
980 Sets colour of all borders.
982 void SetColour(unsigned long colour
);
985 Sets the colour for all borders.
987 void SetColour(const wxColour
& colour
);
990 Sets the width of all borders.
992 void SetWidth(const wxTextAttrDimension
& width
);
995 Sets the width of all borders.
997 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
1002 void Reset() { m_left
.Reset(); m_right
.Reset(); m_top
.Reset(); m_bottom
.Reset(); }
1005 Partial equality test. If @a weakTest is @true, attributes of this object do not
1006 have to be present if those attributes of @a borders are present. If @a weakTest is
1007 @false, the function will fail if an attribute is present in @a borders but not
1010 bool EqPartial(const wxTextAttrBorders
& borders
, bool weakTest
= true) const;
1013 Applies border to this object, but not if the same as @a compareWith.
1015 bool Apply(const wxTextAttrBorders
& borders
, const wxTextAttrBorders
* compareWith
= NULL
);
1018 Removes the specified attributes from this object.
1020 bool RemoveStyle(const wxTextAttrBorders
& attr
);
1023 Collects the attributes that are common to a range of content, building up a note of
1024 which attributes are absent in some objects and which clash in some objects.
1026 void CollectCommonAttributes(const wxTextAttrBorders
& attr
, wxTextAttrBorders
& clashingAttr
, wxTextAttrBorders
& absentAttr
);
1029 Returns @true if all borders are valid.
1031 bool IsValid() const { return m_left
.IsValid() || m_right
.IsValid() || m_top
.IsValid() || m_bottom
.IsValid(); }
1034 Returns the left border.
1036 const wxTextAttrBorder
& GetLeft() const { return m_left
; }
1037 wxTextAttrBorder
& GetLeft() { return m_left
; }
1040 Returns the right border.
1042 const wxTextAttrBorder
& GetRight() const { return m_right
; }
1043 wxTextAttrBorder
& GetRight() { return m_right
; }
1046 Returns the top border.
1048 const wxTextAttrBorder
& GetTop() const { return m_top
; }
1049 wxTextAttrBorder
& GetTop() { return m_top
; }
1052 Returns the bottom border.
1054 const wxTextAttrBorder
& GetBottom() const { return m_bottom
; }
1055 wxTextAttrBorder
& GetBottom() { return m_bottom
; }
1057 wxTextAttrBorder m_left
, m_right
, m_top
, m_bottom
;
1062 @class wxTextBoxAttr
1063 A class representing the box attributes of a rich text object.
1065 @library{wxrichtext}
1068 @see wxRichTextAttr, wxRichTextCtrl
1071 class WXDLLIMPEXP_RICHTEXT wxTextBoxAttr
1075 Default constructor.
1077 wxTextBoxAttr() { Init(); }
1082 wxTextBoxAttr(const wxTextBoxAttr
& attr
) { Init(); (*this) = attr
; }
1085 Initialises this object.
1087 void Init() { Reset(); }
1094 // Copy. Unnecessary since we let it do a binary copy
1095 //void Copy(const wxTextBoxAttr& attr);
1098 //void operator= (const wxTextBoxAttr& attr);
1103 bool operator== (const wxTextBoxAttr
& attr
) const;
1106 Partial equality test, ignoring unset attributes. If @a weakTest is @true, attributes of this object do not
1107 have to be present if those attributes of @a attr are present. If @a weakTest is
1108 @false, the function will fail if an attribute is present in @a attr but not
1112 bool EqPartial(const wxTextBoxAttr
& attr
, bool weakTest
= true) const;
1115 Merges the given attributes. If @a compareWith is non-NULL, then it will be used
1116 to mask out those attributes that are the same in style and @a compareWith, for
1117 situations where we don't want to explicitly set inherited attributes.
1119 bool Apply(const wxTextBoxAttr
& style
, const wxTextBoxAttr
* compareWith
= NULL
);
1122 Collects the attributes that are common to a range of content, building up a note of
1123 which attributes are absent in some objects and which clash in some objects.
1125 void CollectCommonAttributes(const wxTextBoxAttr
& attr
, wxTextBoxAttr
& clashingAttr
, wxTextBoxAttr
& absentAttr
);
1128 Removes the specified attributes from this object.
1130 bool RemoveStyle(const wxTextBoxAttr
& attr
);
1135 void SetFlags(int flags
) { m_flags
= flags
; }
1140 int GetFlags() const { return m_flags
; }
1143 Is this flag present?
1145 bool HasFlag(wxTextBoxAttrFlags flag
) const { return (m_flags
& flag
) != 0; }
1150 void RemoveFlag(wxTextBoxAttrFlags flag
) { m_flags
&= ~flag
; }
1155 void AddFlag(wxTextBoxAttrFlags flag
) { m_flags
|= flag
; }
1158 Returns @true if no attributes are set.
1160 bool IsDefault() const;
1163 Returns the float mode.
1165 wxTextBoxAttrFloatStyle
GetFloatMode() const { return m_floatMode
; }
1168 Sets the float mode.
1170 void SetFloatMode(wxTextBoxAttrFloatStyle mode
) { m_floatMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_FLOAT
; }
1173 Returns @true if float mode is active.
1175 bool HasFloatMode() const { return HasFlag(wxTEXT_BOX_ATTR_FLOAT
); }
1178 Returns @true if this object is floating.
1180 bool IsFloating() const { return HasFloatMode() && GetFloatMode() != wxTEXT_BOX_ATTR_FLOAT_NONE
; }
1183 Returns the clear mode - whether to wrap text after object. Currently unimplemented.
1185 wxTextBoxAttrClearStyle
GetClearMode() const { return m_clearMode
; }
1188 Set the clear mode. Currently unimplemented.
1190 void SetClearMode(wxTextBoxAttrClearStyle mode
) { m_clearMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_CLEAR
; }
1193 Returns @true if we have a clear flag.
1195 bool HasClearMode() const { return HasFlag(wxTEXT_BOX_ATTR_CLEAR
); }
1198 Returns the collapse mode - whether to collapse borders. Currently unimplemented.
1200 wxTextBoxAttrCollapseMode
GetCollapseBorders() const { return m_collapseMode
; }
1203 Sets the collapse mode - whether to collapse borders. Currently unimplemented.
1205 void SetCollapseBorders(wxTextBoxAttrCollapseMode collapse
) { m_collapseMode
= collapse
; m_flags
|= wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
; }
1208 Returns @true if the collapse borders flag is present.
1210 bool HasCollapseBorders() const { return HasFlag(wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
); }
1213 Returns the vertical alignment.
1215 wxTextBoxAttrVerticalAlignment
GetVerticalAlignment() const { return m_verticalAlignment
; }
1218 Sets the vertical alignment.
1220 void SetVerticalAlignment(wxTextBoxAttrVerticalAlignment verticalAlignment
) { m_verticalAlignment
= verticalAlignment
; m_flags
|= wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
; }
1223 Returns @true if a vertical alignment flag is present.
1225 bool HasVerticalAlignment() const { return HasFlag(wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
); }
1228 Returns the margin values.
1230 wxTextAttrDimensions
& GetMargins() { return m_margins
; }
1231 const wxTextAttrDimensions
& GetMargins() const { return m_margins
; }
1234 Returns the left margin.
1236 wxTextAttrDimension
& GetLeftMargin() { return m_margins
.m_left
; }
1237 const wxTextAttrDimension
& GetLeftMargin() const { return m_margins
.m_left
; }
1240 Returns the right margin.
1242 wxTextAttrDimension
& GetRightMargin() { return m_margins
.m_right
; }
1243 const wxTextAttrDimension
& GetRightMargin() const { return m_margins
.m_right
; }
1246 Returns the top margin.
1248 wxTextAttrDimension
& GetTopMargin() { return m_margins
.m_top
; }
1249 const wxTextAttrDimension
& GetTopMargin() const { return m_margins
.m_top
; }
1252 Returns the bottom margin.
1254 wxTextAttrDimension
& GetBottomMargin() { return m_margins
.m_bottom
; }
1255 const wxTextAttrDimension
& GetBottomMargin() const { return m_margins
.m_bottom
; }
1258 Returns the position.
1260 wxTextAttrDimensions
& GetPosition() { return m_position
; }
1261 const wxTextAttrDimensions
& GetPosition() const { return m_position
; }
1264 Returns the left position.
1266 wxTextAttrDimension
& GetLeft() { return m_position
.m_left
; }
1267 const wxTextAttrDimension
& GetLeft() const { return m_position
.m_left
; }
1270 Returns the right position.
1272 wxTextAttrDimension
& GetRight() { return m_position
.m_right
; }
1273 const wxTextAttrDimension
& GetRight() const { return m_position
.m_right
; }
1276 Returns the top position.
1278 wxTextAttrDimension
& GetTop() { return m_position
.m_top
; }
1279 const wxTextAttrDimension
& GetTop() const { return m_position
.m_top
; }
1282 Returns the bottom position.
1284 wxTextAttrDimension
& GetBottom() { return m_position
.m_bottom
; }
1285 const wxTextAttrDimension
& GetBottom() const { return m_position
.m_bottom
; }
1288 Returns the padding values.
1290 wxTextAttrDimensions
& GetPadding() { return m_padding
; }
1291 const wxTextAttrDimensions
& GetPadding() const { return m_padding
; }
1294 Returns the left padding value.
1296 wxTextAttrDimension
& GetLeftPadding() { return m_padding
.m_left
; }
1297 const wxTextAttrDimension
& GetLeftPadding() const { return m_padding
.m_left
; }
1300 Returns the right padding value.
1302 wxTextAttrDimension
& GetRightPadding() { return m_padding
.m_right
; }
1303 const wxTextAttrDimension
& GetRightPadding() const { return m_padding
.m_right
; }
1306 Returns the top padding value.
1308 wxTextAttrDimension
& GetTopPadding() { return m_padding
.m_top
; }
1309 const wxTextAttrDimension
& GetTopPadding() const { return m_padding
.m_top
; }
1312 Returns the bottom padding value.
1314 wxTextAttrDimension
& GetBottomPadding() { return m_padding
.m_bottom
; }
1315 const wxTextAttrDimension
& GetBottomPadding() const { return m_padding
.m_bottom
; }
1318 Returns the borders.
1320 wxTextAttrBorders
& GetBorder() { return m_border
; }
1321 const wxTextAttrBorders
& GetBorder() const { return m_border
; }
1324 Returns the left border.
1326 wxTextAttrBorder
& GetLeftBorder() { return m_border
.m_left
; }
1327 const wxTextAttrBorder
& GetLeftBorder() const { return m_border
.m_left
; }
1330 Returns the top border.
1332 wxTextAttrBorder
& GetTopBorder() { return m_border
.m_top
; }
1333 const wxTextAttrBorder
& GetTopBorder() const { return m_border
.m_top
; }
1336 Returns the right border.
1338 wxTextAttrBorder
& GetRightBorder() { return m_border
.m_right
; }
1339 const wxTextAttrBorder
& GetRightBorder() const { return m_border
.m_right
; }
1342 Returns the bottom border.
1344 wxTextAttrBorder
& GetBottomBorder() { return m_border
.m_bottom
; }
1345 const wxTextAttrBorder
& GetBottomBorder() const { return m_border
.m_bottom
; }
1348 Returns the outline.
1350 wxTextAttrBorders
& GetOutline() { return m_outline
; }
1351 const wxTextAttrBorders
& GetOutline() const { return m_outline
; }
1354 Returns the left outline.
1356 wxTextAttrBorder
& GetLeftOutline() { return m_outline
.m_left
; }
1357 const wxTextAttrBorder
& GetLeftOutline() const { return m_outline
.m_left
; }
1360 Returns the top outline.
1362 wxTextAttrBorder
& GetTopOutline() { return m_outline
.m_top
; }
1363 const wxTextAttrBorder
& GetTopOutline() const { return m_outline
.m_top
; }
1366 Returns the right outline.
1368 wxTextAttrBorder
& GetRightOutline() { return m_outline
.m_right
; }
1369 const wxTextAttrBorder
& GetRightOutline() const { return m_outline
.m_right
; }
1372 Returns the bottom outline.
1374 wxTextAttrBorder
& GetBottomOutline() { return m_outline
.m_bottom
; }
1375 const wxTextAttrBorder
& GetBottomOutline() const { return m_outline
.m_bottom
; }
1378 Returns the object size.
1380 wxTextAttrSize
& GetSize() { return m_size
; }
1381 const wxTextAttrSize
& GetSize() const { return m_size
; }
1384 Returns the object minimum size.
1387 wxTextAttrSize
& GetMinSize() { return m_minSize
; }
1388 const wxTextAttrSize
& GetMinSize() const { return m_minSize
; }
1391 Returns the object maximum size.
1394 wxTextAttrSize
& GetMaxSize() { return m_maxSize
; }
1395 const wxTextAttrSize
& GetMaxSize() const { return m_maxSize
; }
1398 Sets the object size.
1400 void SetSize(const wxTextAttrSize
& sz
) { m_size
= sz
; }
1403 Sets the object minimum size.
1405 void SetMinSize(const wxTextAttrSize
& sz
) { m_minSize
= sz
; }
1408 Sets the object maximum size.
1410 void SetMaxSize(const wxTextAttrSize
& sz
) { m_maxSize
= sz
; }
1413 Returns the object width.
1415 wxTextAttrDimension
& GetWidth() { return m_size
.m_width
; }
1416 const wxTextAttrDimension
& GetWidth() const { return m_size
.m_width
; }
1419 Returns the object height.
1421 wxTextAttrDimension
& GetHeight() { return m_size
.m_height
; }
1422 const wxTextAttrDimension
& GetHeight() const { return m_size
.m_height
; }
1425 Returns the box style name.
1427 const wxString
& GetBoxStyleName() const { return m_boxStyleName
; }
1430 Sets the box style name.
1432 void SetBoxStyleName(const wxString
& name
) { m_boxStyleName
= name
; AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1435 Returns @true if the box style name is present.
1437 bool HasBoxStyleName() const { return HasFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1443 wxTextAttrDimensions m_margins
;
1444 wxTextAttrDimensions m_padding
;
1445 wxTextAttrDimensions m_position
;
1447 wxTextAttrSize m_size
;
1448 wxTextAttrSize m_minSize
;
1449 wxTextAttrSize m_maxSize
;
1451 wxTextAttrBorders m_border
;
1452 wxTextAttrBorders m_outline
;
1454 wxTextBoxAttrFloatStyle m_floatMode
;
1455 wxTextBoxAttrClearStyle m_clearMode
;
1456 wxTextBoxAttrCollapseMode m_collapseMode
;
1457 wxTextBoxAttrVerticalAlignment m_verticalAlignment
;
1458 wxString m_boxStyleName
;
1462 @class wxRichTextAttr
1463 A class representing enhanced attributes for rich text objects.
1464 This adds a wxTextBoxAttr member to the basic wxTextAttr class.
1466 @library{wxrichtext}
1469 @see wxRichTextAttr, wxTextBoxAttr, wxRichTextCtrl
1472 class WXDLLIMPEXP_RICHTEXT wxRichTextAttr
: public wxTextAttr
1476 Constructor taking a wxTextAttr.
1478 wxRichTextAttr(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1483 wxRichTextAttr(const wxRichTextAttr
& attr
): wxTextAttr() { Copy(attr
); }
1486 Default constructor.
1493 void Copy(const wxRichTextAttr
& attr
);
1496 Assignment operator.
1498 void operator=(const wxRichTextAttr
& attr
) { Copy(attr
); }
1501 Assignment operator.
1503 void operator=(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1508 bool operator==(const wxRichTextAttr
& attr
) const;
1511 Partial equality test. If @a weakTest is @true, attributes of this object do not
1512 have to be present if those attributes of @a attr are present. If @a weakTest is
1513 @false, the function will fail if an attribute is present in @a attr but not
1516 bool EqPartial(const wxRichTextAttr
& attr
, bool weakTest
= true) const;
1519 Merges the given attributes. If @a compareWith
1520 is non-NULL, then it will be used to mask out those attributes that are the same in style
1521 and @a compareWith, for situations where we don't want to explicitly set inherited attributes.
1523 bool Apply(const wxRichTextAttr
& style
, const wxRichTextAttr
* compareWith
= NULL
);
1526 Collects the attributes that are common to a range of content, building up a note of
1527 which attributes are absent in some objects and which clash in some objects.
1529 void CollectCommonAttributes(const wxRichTextAttr
& attr
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
1532 Removes the specified attributes from this object.
1534 bool RemoveStyle(const wxRichTextAttr
& attr
);
1537 Returns the text box attributes.
1539 wxTextBoxAttr
& GetTextBoxAttr() { return m_textBoxAttr
; }
1540 const wxTextBoxAttr
& GetTextBoxAttr() const { return m_textBoxAttr
; }
1543 Set the text box attributes.
1545 void SetTextBoxAttr(const wxTextBoxAttr
& attr
) { m_textBoxAttr
= attr
; }
1548 Returns @true if no attributes are set.
1550 bool IsDefault() const { return (GetFlags() == 0) && m_textBoxAttr
.IsDefault(); }
1552 wxTextBoxAttr m_textBoxAttr
;
1555 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextAttr
, wxRichTextAttrArray
, WXDLLIMPEXP_RICHTEXT
);
1557 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxVariant
, wxRichTextVariantArray
, WXDLLIMPEXP_RICHTEXT
);
1559 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRect
, wxRichTextRectArray
, WXDLLIMPEXP_RICHTEXT
);
1562 @class wxRichTextProperties
1563 A simple property class using wxVariants. This is used to give each rich text object the
1564 ability to store custom properties that can be used by the application.
1566 @library{wxrichtext}
1569 @see wxRichTextBuffer, wxRichTextObject, wxRichTextCtrl
1572 class WXDLLIMPEXP_RICHTEXT wxRichTextProperties
: public wxObject
1574 DECLARE_DYNAMIC_CLASS(wxRichTextProperties
)
1578 Default constructor.
1580 wxRichTextProperties() {}
1585 wxRichTextProperties(const wxRichTextProperties
& props
): wxObject() { Copy(props
); }
1588 Assignment operator.
1590 void operator=(const wxRichTextProperties
& props
) { Copy(props
); }
1595 bool operator==(const wxRichTextProperties
& props
) const;
1598 Copies from @a props.
1600 void Copy(const wxRichTextProperties
& props
) { m_properties
= props
.m_properties
; }
1603 Returns the variant at the given index.
1605 const wxVariant
& operator[](size_t idx
) const { return m_properties
[idx
]; }
1608 Returns the variant at the given index.
1610 wxVariant
& operator[](size_t idx
) { return m_properties
[idx
]; }
1613 Clears the properties.
1615 void Clear() { m_properties
.Clear(); }
1618 Returns the array of variants implementing the properties.
1620 const wxRichTextVariantArray
& GetProperties() const { return m_properties
; }
1623 Returns the array of variants implementing the properties.
1625 wxRichTextVariantArray
& GetProperties() { return m_properties
; }
1628 Sets the array of variants.
1630 void SetProperties(const wxRichTextVariantArray
& props
) { m_properties
= props
; }
1633 Returns all the property names.
1635 wxArrayString
GetPropertyNames() const;
1638 Returns a count of the properties.
1640 size_t GetCount() const { return m_properties
.GetCount(); }
1643 Returns @true if the given property is found.
1645 bool HasProperty(const wxString
& name
) const { return Find(name
) != -1; }
1648 Finds the given property.
1650 int Find(const wxString
& name
) const;
1653 Removes the given property.
1655 bool Remove(const wxString
& name
);
1658 Gets the property variant by name.
1660 const wxVariant
& GetProperty(const wxString
& name
) const;
1663 Finds or creates a property with the given name, returning a pointer to the variant.
1665 wxVariant
* FindOrCreateProperty(const wxString
& name
);
1668 Gets the value of the named property as a string.
1670 wxString
GetPropertyString(const wxString
& name
) const;
1673 Gets the value of the named property as a long integer.
1675 long GetPropertyLong(const wxString
& name
) const;
1678 Gets the value of the named property as a boolean.
1680 bool GetPropertyBool(const wxString
& name
) const;
1683 Gets the value of the named property as a double.
1685 double GetPropertyDouble(const wxString
& name
) const;
1688 Sets the property by passing a variant which contains a name and value.
1690 void SetProperty(const wxVariant
& variant
);
1693 Sets a property by name and variant.
1695 void SetProperty(const wxString
& name
, const wxVariant
& variant
);
1698 Sets a property by name and string value.
1700 void SetProperty(const wxString
& name
, const wxString
& value
);
1703 Sets property by name and long integer value.
1705 void SetProperty(const wxString
& name
, long value
);
1708 Sets property by name and double value.
1710 void SetProperty(const wxString
& name
, double value
);
1713 Sets property by name and boolean value.
1715 void SetProperty(const wxString
& name
, bool value
);
1718 Removes the given properties from these properties.
1720 void RemoveProperties(const wxRichTextProperties
& properties
);
1723 Merges the given properties with these properties.
1725 void MergeProperties(const wxRichTextProperties
& properties
);
1728 wxRichTextVariantArray m_properties
;
1733 @class wxRichTextFontTable
1734 Manages quick access to a pool of fonts for rendering rich text.
1736 @library{wxrichtext}
1739 @see wxRichTextBuffer, wxRichTextCtrl
1742 class WXDLLIMPEXP_RICHTEXT wxRichTextFontTable
: public wxObject
1746 Default constructor.
1748 wxRichTextFontTable();
1753 wxRichTextFontTable(const wxRichTextFontTable
& table
);
1754 virtual ~wxRichTextFontTable();
1757 Returns @true if the font table is valid.
1759 bool IsOk() const { return m_refData
!= NULL
; }
1762 Finds a font for the given attribute object.
1764 wxFont
FindFont(const wxRichTextAttr
& fontSpec
);
1767 Clears the font table.
1772 Assignment operator.
1774 void operator= (const wxRichTextFontTable
& table
);
1779 bool operator == (const wxRichTextFontTable
& table
) const;
1782 Inequality operator.
1784 bool operator != (const wxRichTextFontTable
& table
) const { return !(*this == table
); }
1787 Set the font scale factor.
1789 void SetFontScale(double fontScale
);
1795 DECLARE_DYNAMIC_CLASS(wxRichTextFontTable
)
1799 @class wxRichTextRange
1801 This stores beginning and end positions for a range of data.
1803 @library{wxrichtext}
1806 @see wxRichTextBuffer, wxRichTextCtrl
1809 class WXDLLIMPEXP_RICHTEXT wxRichTextRange
1815 Default constructor.
1817 wxRichTextRange() { m_start
= 0; m_end
= 0; }
1820 Constructor taking start and end positions.
1822 wxRichTextRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1827 wxRichTextRange(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1828 ~wxRichTextRange() {}
1831 Assigns @a range to this range.
1833 void operator =(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1836 Equality operator. Returns @true if @a range is the same as this range.
1838 bool operator ==(const wxRichTextRange
& range
) const { return (m_start
== range
.m_start
&& m_end
== range
.m_end
); }
1841 Inequality operator.
1843 bool operator !=(const wxRichTextRange
& range
) const { return (m_start
!= range
.m_start
|| m_end
!= range
.m_end
); }
1846 Subtracts a range from this range.
1848 wxRichTextRange
operator -(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
- range
.m_start
, m_end
- range
.m_end
); }
1851 Adds a range to this range.
1853 wxRichTextRange
operator +(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
+ range
.m_start
, m_end
+ range
.m_end
); }
1856 Sets the range start and end positions.
1858 void SetRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1861 Sets the start position.
1863 void SetStart(long start
) { m_start
= start
; }
1866 Returns the start position.
1868 long GetStart() const { return m_start
; }
1871 Sets the end position.
1873 void SetEnd(long end
) { m_end
= end
; }
1876 Gets the end position.
1878 long GetEnd() const { return m_end
; }
1881 Returns true if this range is completely outside @a range.
1883 bool IsOutside(const wxRichTextRange
& range
) const { return range
.m_start
> m_end
|| range
.m_end
< m_start
; }
1886 Returns true if this range is completely within @a range.
1888 bool IsWithin(const wxRichTextRange
& range
) const { return m_start
>= range
.m_start
&& m_end
<= range
.m_end
; }
1891 Returns true if @a pos was within the range. Does not match if the range is empty.
1893 bool Contains(long pos
) const { return pos
>= m_start
&& pos
<= m_end
; }
1896 Limit this range to be within @a range.
1898 bool LimitTo(const wxRichTextRange
& range
) ;
1901 Gets the length of the range.
1903 long GetLength() const { return m_end
- m_start
+ 1; }
1906 Swaps the start and end.
1908 void Swap() { long tmp
= m_start
; m_start
= m_end
; m_end
= tmp
; }
1911 Converts the API-standard range, whose end is one past the last character in
1912 the range, to the internal form, which uses the first and last character
1913 positions of the range. In other words, one is subtracted from the end position.
1914 (n, n) is the range of a single character.
1916 wxRichTextRange
ToInternal() const { return wxRichTextRange(m_start
, m_end
-1); }
1919 Converts the internal range, which uses the first and last character positions
1920 of the range, to the API-standard range, whose end is one past the last
1921 character in the range. In other words, one is added to the end position.
1922 (n, n+1) is the range of a single character.
1924 wxRichTextRange
FromInternal() const { return wxRichTextRange(m_start
, m_end
+1); }
1931 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextRange
, wxRichTextRangeArray
, WXDLLIMPEXP_RICHTEXT
);
1933 #define wxRICHTEXT_ALL wxRichTextRange(-2, -2)
1934 #define wxRICHTEXT_NONE wxRichTextRange(-1, -1)
1936 #define wxRICHTEXT_NO_SELECTION wxRichTextRange(-2, -2)
1939 @class wxRichTextSelection
1941 Stores selection information. The selection does not have to be contiguous, though currently non-contiguous
1942 selections are only supported for a range of table cells (a geometric block of cells can consist
1943 of a set of non-contiguous positions).
1945 The selection consists of an array of ranges, and the container that is the context for the selection. It
1946 follows that a single selection object can only represent ranges with the same parent container.
1948 @library{wxrichtext}
1951 @see wxRichTextBuffer, wxRichTextCtrl
1954 class WXDLLIMPEXP_RICHTEXT wxRichTextSelection
1960 wxRichTextSelection(const wxRichTextSelection
& sel
) { Copy(sel
); }
1963 Creates a selection from a range and a container.
1965 wxRichTextSelection(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
) { m_ranges
.Add(range
); m_container
= container
; }
1968 Default constructor.
1970 wxRichTextSelection() { Reset(); }
1973 Resets the selection.
1975 void Reset() { m_ranges
.Clear(); m_container
= NULL
; }
1981 void Set(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
)
1982 { m_ranges
.Clear(); m_ranges
.Add(range
); m_container
= container
; }
1985 Adds a range to the selection.
1987 void Add(const wxRichTextRange
& range
)
1988 { m_ranges
.Add(range
); }
1991 Sets the selections from an array of ranges and a container object.
1993 void Set(const wxRichTextRangeArray
& ranges
, wxRichTextParagraphLayoutBox
* container
)
1994 { m_ranges
= ranges
; m_container
= container
; }
1999 void Copy(const wxRichTextSelection
& sel
)
2000 { m_ranges
= sel
.m_ranges
; m_container
= sel
.m_container
; }
2003 Assignment operator.
2005 void operator=(const wxRichTextSelection
& sel
) { Copy(sel
); }
2010 bool operator==(const wxRichTextSelection
& sel
) const;
2015 wxRichTextRange
operator[](size_t i
) const { return GetRange(i
); }
2018 Returns the selection ranges.
2020 wxRichTextRangeArray
& GetRanges() { return m_ranges
; }
2023 Returns the selection ranges.
2025 const wxRichTextRangeArray
& GetRanges() const { return m_ranges
; }
2028 Sets the selection ranges.
2030 void SetRanges(const wxRichTextRangeArray
& ranges
) { m_ranges
= ranges
; }
2033 Returns the number of ranges in the selection.
2035 size_t GetCount() const { return m_ranges
.GetCount(); }
2038 Returns the range at the given index.
2041 wxRichTextRange
GetRange(size_t i
) const { return m_ranges
[i
]; }
2044 Returns the first range if there is one, otherwise wxRICHTEXT_NO_SELECTION.
2046 wxRichTextRange
GetRange() const { return (m_ranges
.GetCount() > 0) ? (m_ranges
[0]) : wxRICHTEXT_NO_SELECTION
; }
2049 Sets a single range.
2051 void SetRange(const wxRichTextRange
& range
) { m_ranges
.Clear(); m_ranges
.Add(range
); }
2054 Returns the container for which the selection is valid.
2056 wxRichTextParagraphLayoutBox
* GetContainer() const { return m_container
; }
2059 Sets the container for which the selection is valid.
2061 void SetContainer(wxRichTextParagraphLayoutBox
* container
) { m_container
= container
; }
2064 Returns @true if the selection is valid.
2066 bool IsValid() const { return m_ranges
.GetCount() > 0 && GetContainer(); }
2069 Returns the selection appropriate to the specified object, if any; returns an empty array if none
2070 at the level of the object's container.
2072 wxRichTextRangeArray
GetSelectionForObject(wxRichTextObject
* obj
) const;
2075 Returns @true if the given position is within the selection.
2077 bool WithinSelection(long pos
, wxRichTextObject
* obj
) const;
2080 Returns @true if the given position is within the selection.
2083 bool WithinSelection(long pos
) const { return WithinSelection(pos
, m_ranges
); }
2086 Returns @true if the given position is within the selection range.
2088 static bool WithinSelection(long pos
, const wxRichTextRangeArray
& ranges
);
2091 Returns @true if the given range is within the selection range.
2093 static bool WithinSelection(const wxRichTextRange
& range
, const wxRichTextRangeArray
& ranges
);
2095 wxRichTextRangeArray m_ranges
;
2096 wxRichTextParagraphLayoutBox
* m_container
;
2100 @class wxRichTextDrawingContext
2102 A class for passing information to drawing and measuring functions.
2104 @library{wxrichtext}
2107 @see wxRichTextBuffer, wxRichTextCtrl
2110 class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingContext
: public wxObject
2112 DECLARE_CLASS(wxRichTextDrawingContext
)
2116 Pass the buffer to the context so the context can retrieve information
2117 such as virtual attributes.
2119 wxRichTextDrawingContext(wxRichTextBuffer
* buffer
);
2121 void Init() { m_buffer
= NULL
; m_enableVirtualAttributes
= true; }
2124 Does this object have virtual attributes?
2125 Virtual attributes can be provided for visual cues without
2126 affecting the actual styling.
2128 bool HasVirtualAttributes(wxRichTextObject
* obj
) const;
2131 Returns the virtual attributes for this object.
2132 Virtual attributes can be provided for visual cues without
2133 affecting the actual styling.
2135 wxRichTextAttr
GetVirtualAttributes(wxRichTextObject
* obj
) const;
2138 Applies any virtual attributes relevant to this object.
2140 bool ApplyVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const;
2143 Gets the count for mixed virtual attributes for individual positions within the object.
2144 For example, individual characters within a text object may require special highlighting.
2146 int GetVirtualSubobjectAttributesCount(wxRichTextObject
* obj
) const;
2149 Gets the mixed virtual attributes for individual positions within the object.
2150 For example, individual characters within a text object may require special highlighting.
2151 The function is passed the count returned by GetVirtualSubobjectAttributesCount.
2153 int GetVirtualSubobjectAttributes(wxRichTextObject
* obj
, wxArrayInt
& positions
, wxRichTextAttrArray
& attributes
) const;
2156 Do we have virtual text for this object? Virtual text allows an application
2157 to replace characters in an object for editing and display purposes, for example
2158 for highlighting special characters.
2160 bool HasVirtualText(const wxRichTextPlainText
* obj
) const;
2163 Gets the virtual text for this object.
2165 bool GetVirtualText(const wxRichTextPlainText
* obj
, wxString
& text
) const;
2168 Enables virtual attribute processing.
2171 void EnableVirtualAttributes(bool b
) { m_enableVirtualAttributes
= b
; }
2174 Returns @true if virtual attribute processing is enabled.
2177 bool GetVirtualAttributesEnabled() const { return m_enableVirtualAttributes
; }
2179 wxRichTextBuffer
* m_buffer
;
2180 bool m_enableVirtualAttributes
;
2184 @class wxRichTextObject
2186 This is the base for drawable rich text objects.
2188 @library{wxrichtext}
2191 @see wxRichTextBuffer, wxRichTextCtrl
2194 class WXDLLIMPEXP_RICHTEXT wxRichTextObject
: public wxObject
2196 DECLARE_CLASS(wxRichTextObject
)
2199 Constructor, taking an optional parent pointer.
2201 wxRichTextObject(wxRichTextObject
* parent
= NULL
);
2203 virtual ~wxRichTextObject();
2208 Draw the item, within the given range. Some objects may ignore the range (for
2209 example paragraphs) while others must obey it (lines, to implement wrapping)
2211 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
2214 Lay the item out at the specified position with the given size constraint.
2215 Layout must set the cached size. @rect is the available space for the object,
2216 and @a parentRect is the container that is used to determine a relative size
2217 or position (for example if a text box must be 50% of the parent text box).
2219 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
2222 Hit-testing: returns a flag indicating hit test details, plus
2223 information about position. @a contextObj is returned to specify what object
2224 position is relevant to, since otherwise there's an ambiguity.
2225 @ obj might not be a child of @a contextObj, since we may be referring to the container itself
2226 if we have no hit on a child - for example if we click outside an object.
2228 The function puts the position in @a textPosition if one is found.
2229 @a pt is in logical units (a zero y position is at the beginning of the buffer).
2231 Pass wxRICHTEXT_HITTEST_NO_NESTED_OBJECTS if you only want to consider objects
2232 directly under the object you are calling HitTest on. Otherwise, it will recurse
2233 and potentially find a nested object.
2235 @return One of the ::wxRichTextHitTestFlags values.
2238 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2241 Finds the absolute position and row height for the given character position.
2243 virtual bool FindPosition(wxDC
& WXUNUSED(dc
), wxRichTextDrawingContext
& WXUNUSED(context
), long WXUNUSED(index
), wxPoint
& WXUNUSED(pt
), int* WXUNUSED(height
), bool WXUNUSED(forceLineStart
)) { return false; }
2246 Returns the best size, i.e. the ideal starting size for this object irrespective
2247 of available space. For a short text string, it will be the size that exactly encloses
2248 the text. For a longer string, it might use the parent width for example.
2250 virtual wxSize
GetBestSize() const { return m_size
; }
2253 Returns the object size for the given range. Returns @false if the range
2254 is invalid for this object.
2257 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const = 0;
2260 Do a split from @a pos, returning an object containing the second part, and setting
2261 the first part in 'this'.
2263 virtual wxRichTextObject
* DoSplit(long WXUNUSED(pos
)) { return NULL
; }
2266 Calculates the range of the object. By default, guess that the object is 1 unit long.
2268 virtual void CalculateRange(long start
, long& end
) { end
= start
; m_range
.SetRange(start
, end
); }
2271 Deletes the given range.
2273 virtual bool DeleteRange(const wxRichTextRange
& WXUNUSED(range
)) { return false; }
2276 Returns @true if the object is empty.
2278 virtual bool IsEmpty() const { return false; }
2281 Returns @true if this class of object is floatable.
2283 virtual bool IsFloatable() const { return false; }
2286 Returns @true if this object is currently floating.
2288 virtual bool IsFloating() const { return GetAttributes().GetTextBoxAttr().IsFloating(); }
2291 Returns the floating direction.
2293 virtual int GetFloatDirection() const { return GetAttributes().GetTextBoxAttr().GetFloatMode(); }
2296 Returns any text in this object for the given range.
2298 virtual wxString
GetTextForRange(const wxRichTextRange
& WXUNUSED(range
)) const { return wxEmptyString
; }
2301 Returns @true if this object can merge itself with the given one.
2303 virtual bool CanMerge(wxRichTextObject
* WXUNUSED(object
), wxRichTextDrawingContext
& WXUNUSED(context
)) const { return false; }
2306 Returns @true if this object merged itself with the given one.
2307 The calling code will then delete the given object.
2309 virtual bool Merge(wxRichTextObject
* WXUNUSED(object
), wxRichTextDrawingContext
& WXUNUSED(context
)) { return false; }
2313 Returns @true if this object can potentially be split, by virtue of having
2314 different virtual attributes for individual sub-objects.
2316 virtual bool CanSplit(wxRichTextDrawingContext
& WXUNUSED(context
)) const { return false; }
2319 Returns the final object in the split objects if this object was split due to differences between sub-object virtual attributes.
2320 Returns itself if it was not split.
2322 virtual wxRichTextObject
* Split(wxRichTextDrawingContext
& WXUNUSED(context
)) { return this; }
2325 Dump object data to the given output stream for debugging.
2327 virtual void Dump(wxTextOutputStream
& stream
);
2330 Returns @true if we can edit the object's properties via a GUI.
2332 virtual bool CanEditProperties() const { return false; }
2335 Edits the object's properties via a GUI.
2337 virtual bool EditProperties(wxWindow
* WXUNUSED(parent
), wxRichTextBuffer
* WXUNUSED(buffer
)) { return false; }
2340 Returns the label to be used for the properties context menu item.
2342 virtual wxString
GetPropertiesMenuLabel() const { return wxEmptyString
; }
2345 Returns @true if objects of this class can accept the focus, i.e. a call to SetFocusObject
2346 is possible. For example, containers supporting text, such as a text box object, can accept the focus,
2347 but a table can't (set the focus to individual cells instead).
2349 virtual bool AcceptsFocus() const { return false; }
2353 Imports this object from XML.
2355 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2358 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2360 Exports this object directly to the given stream, bypassing the creation of a wxXmlNode hierarchy.
2361 This method is considerably faster than creating a tree first. However, both versions of ExportXML must be
2362 implemented so that if the tree method is made efficient in the future, we can deprecate the
2363 more verbose direct output method. Compiled only if wxRICHTEXT_HAVE_DIRECT_OUTPUT is defined (on by default).
2365 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2368 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2370 Exports this object to the given parent node, usually creating at least one child node.
2371 This method is less efficient than the direct-to-stream method but is retained to allow for
2372 switching to this method if we make it more efficient. Compiled only if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT is defined
2375 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2379 Returns @true if this object takes note of paragraph attributes (text and image objects don't).
2381 virtual bool UsesParagraphAttributes() const { return true; }
2384 Returns the XML node name of this object. This must be overridden for wxXmlNode-base XML export to work.
2386 virtual wxString
GetXMLNodeName() const { return wxT("unknown"); }
2389 Invalidates the object at the given range. With no argument, invalidates the whole object.
2391 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2394 Returns @true if this object can handle the selections of its children, fOr example a table.
2395 Required for composite selection handling to work.
2397 virtual bool HandlesChildSelections() const { return false; }
2400 Returns a selection object specifying the selections between start and end character positions.
2401 For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
2403 virtual wxRichTextSelection
GetSelection(long WXUNUSED(start
), long WXUNUSED(end
)) const { return wxRichTextSelection(); }
2408 Gets the cached object size as calculated by Layout.
2410 virtual wxSize
GetCachedSize() const { return m_size
; }
2413 Sets the cached object size as calculated by Layout.
2415 virtual void SetCachedSize(const wxSize
& sz
) { m_size
= sz
; }
2418 Gets the maximum object size as calculated by Layout. This allows
2419 us to fit an object to its contents or allocate extra space if required.
2421 virtual wxSize
GetMaxSize() const { return m_maxSize
; }
2424 Sets the maximum object size as calculated by Layout. This allows
2425 us to fit an object to its contents or allocate extra space if required.
2427 virtual void SetMaxSize(const wxSize
& sz
) { m_maxSize
= sz
; }
2430 Gets the minimum object size as calculated by Layout. This allows
2431 us to constrain an object to its absolute minimum size if necessary.
2433 virtual wxSize
GetMinSize() const { return m_minSize
; }
2436 Sets the minimum object size as calculated by Layout. This allows
2437 us to constrain an object to its absolute minimum size if necessary.
2439 virtual void SetMinSize(const wxSize
& sz
) { m_minSize
= sz
; }
2442 Gets the 'natural' size for an object. For an image, it would be the
2445 virtual wxTextAttrSize
GetNaturalSize() const { return wxTextAttrSize(); }
2448 Returns the object position in pixels.
2450 virtual wxPoint
GetPosition() const { return m_pos
; }
2453 Sets the object position in pixels.
2455 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
2458 Returns the absolute object position, by traversing up the child/parent hierarchy.
2459 TODO: may not be needed, if all object positions are in fact relative to the
2460 top of the coordinate space.
2462 virtual wxPoint
GetAbsolutePosition() const;
2465 Returns the rectangle enclosing the object.
2467 virtual wxRect
GetRect() const { return wxRect(GetPosition(), GetCachedSize()); }
2470 Sets the object's range within its container.
2472 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
2475 Returns the object's range.
2477 const wxRichTextRange
& GetRange() const { return m_range
; }
2480 Returns the object's range.
2482 wxRichTextRange
& GetRange() { return m_range
; }
2485 Set the object's own range, for a top-level object with its own position space.
2487 void SetOwnRange(const wxRichTextRange
& range
) { m_ownRange
= range
; }
2490 Returns the object's own range (valid if top-level).
2492 const wxRichTextRange
& GetOwnRange() const { return m_ownRange
; }
2495 Returns the object's own range (valid if top-level).
2497 wxRichTextRange
& GetOwnRange() { return m_ownRange
; }
2500 Returns the object's own range only if a top-level object.
2502 wxRichTextRange
GetOwnRangeIfTopLevel() const { return IsTopLevel() ? m_ownRange
: m_range
; }
2505 Returns @true if this object is composite.
2507 virtual bool IsComposite() const { return false; }
2510 Returns @true if no user editing can be done inside the object. This returns @true for simple objects,
2511 @false for most composite objects, but @true for fields, which if composite, should not be user-edited.
2513 virtual bool IsAtomic() const { return true; }
2516 Returns a pointer to the parent object.
2518 virtual wxRichTextObject
* GetParent() const { return m_parent
; }
2521 Sets the pointer to the parent object.
2523 virtual void SetParent(wxRichTextObject
* parent
) { m_parent
= parent
; }
2526 Returns the top-level container of this object.
2527 May return itself if it's a container; use GetParentContainer to return
2528 a different container.
2530 virtual wxRichTextParagraphLayoutBox
* GetContainer() const;
2533 Returns the top-level container of this object.
2534 Returns a different container than itself, unless there's no parent, in which case it will return NULL.
2536 virtual wxRichTextParagraphLayoutBox
* GetParentContainer() const { return GetParent() ? GetParent()->GetContainer() : GetContainer(); }
2539 Set the margin around the object, in pixels.
2541 virtual void SetMargins(int margin
);
2544 Set the margin around the object, in pixels.
2546 virtual void SetMargins(int leftMargin
, int rightMargin
, int topMargin
, int bottomMargin
);
2549 Returns the left margin of the object, in pixels.
2551 virtual int GetLeftMargin() const;
2554 Returns the right margin of the object, in pixels.
2556 virtual int GetRightMargin() const;
2559 Returns the top margin of the object, in pixels.
2561 virtual int GetTopMargin() const;
2564 Returns the bottom margin of the object, in pixels.
2566 virtual int GetBottomMargin() const;
2569 Calculates the available content space in the given rectangle, given the
2570 margins, border and padding specified in the object's attributes.
2572 virtual wxRect
GetAvailableContentArea(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& outerRect
) const;
2575 Lays out the object first with a given amount of space, and then if no width was specified in attr,
2576 lays out the object again using the minimum size. @a availableParentSpace is the maximum space
2577 for the object, whereas @a availableContainerSpace is the container with which relative positions and
2578 sizes should be computed. For example, a text box whose space has already been constrained
2579 in a previous layout pass to @a availableParentSpace, but should have a width of 50% of @a availableContainerSpace.
2580 (If these two rects were the same, a 2nd pass could see the object getting too small.)
2582 virtual bool LayoutToBestSize(wxDC
& dc
, wxRichTextDrawingContext
& context
, wxRichTextBuffer
* buffer
,
2583 const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& attr
,
2584 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
, int style
);
2587 Sets the object's attributes.
2589 void SetAttributes(const wxRichTextAttr
& attr
) { m_attributes
= attr
; }
2592 Returns the object's attributes.
2594 const wxRichTextAttr
& GetAttributes() const { return m_attributes
; }
2597 Returns the object's attributes.
2599 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
2602 Returns the object's properties.
2604 wxRichTextProperties
& GetProperties() { return m_properties
; }
2607 Returns the object's properties.
2609 const wxRichTextProperties
& GetProperties() const { return m_properties
; }
2612 Sets the object's properties.
2614 void SetProperties(const wxRichTextProperties
& props
) { m_properties
= props
; }
2617 Sets the stored descent value.
2619 void SetDescent(int descent
) { m_descent
= descent
; }
2622 Returns the stored descent value.
2624 int GetDescent() const { return m_descent
; }
2627 Returns the containing buffer.
2629 wxRichTextBuffer
* GetBuffer() const;
2632 Sets the identifying name for this object as a property using the "name" key.
2634 void SetName(const wxString
& name
) { m_properties
.SetProperty(wxT("name"), name
); }
2637 Returns the identifying name for this object from the properties, using the "name" key.
2639 wxString
GetName() const { return m_properties
.GetPropertyString(wxT("name")); }
2642 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
2644 virtual bool IsTopLevel() const { return false; }
2647 Returns @true if the object will be shown, @false otherwise.
2649 bool IsShown() const { return m_show
; }
2654 Call to show or hide this object. This function does not cause the content to be
2655 laid out or redrawn.
2657 virtual void Show(bool show
) { m_show
= show
; }
2662 virtual wxRichTextObject
* Clone() const { return NULL
; }
2667 void Copy(const wxRichTextObject
& obj
);
2670 Reference-counting allows us to use the same object in multiple
2671 lists (not yet used).
2674 void Reference() { m_refCount
++; }
2677 Reference-counting allows us to use the same object in multiple
2678 lists (not yet used).
2683 Moves the object recursively, by adding the offset from old to new.
2685 virtual void Move(const wxPoint
& pt
);
2688 Converts units in tenths of a millimetre to device units.
2690 int ConvertTenthsMMToPixels(wxDC
& dc
, int units
) const;
2693 Converts units in tenths of a millimetre to device units.
2695 static int ConvertTenthsMMToPixels(int ppi
, int units
, double scale
= 1.0);
2698 Convert units in pixels to tenths of a millimetre.
2700 int ConvertPixelsToTenthsMM(wxDC
& dc
, int pixels
) const;
2703 Convert units in pixels to tenths of a millimetre.
2705 static int ConvertPixelsToTenthsMM(int ppi
, int pixels
, double scale
= 1.0);
2708 Draws the borders and background for the given rectangle and attributes.
2709 @a boxRect is taken to be the outer margin box, not the box around the content.
2711 static bool DrawBoxAttributes(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, const wxRect
& boxRect
, int flags
= 0, wxRichTextObject
* obj
= NULL
);
2716 static bool DrawBorder(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxTextAttrBorders
& attr
, const wxRect
& rect
, int flags
= 0);
2719 Returns the various rectangles of the box model in pixels. You can either specify @a contentRect (inner)
2720 or @a marginRect (outer), and the other must be the default rectangle (no width or height).
2721 Note that the outline doesn't affect the position of the rectangle, it's drawn in whatever space
2724 static bool GetBoxRects(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, wxRect
& marginRect
, wxRect
& borderRect
, wxRect
& contentRect
, wxRect
& paddingRect
, wxRect
& outlineRect
);
2727 Returns the total margin for the object in pixels, taking into account margin, padding and border size.
2729 static bool GetTotalMargin(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, int& leftMargin
, int& rightMargin
,
2730 int& topMargin
, int& bottomMargin
);
2733 Returns the rectangle which the child has available to it given restrictions specified in the
2734 child attribute, e.g. 50% width of the parent, 400 pixels, x position 20% of the parent, etc.
2735 availableContainerSpace might be a parent that the cell has to compute its width relative to.
2736 E.g. a cell that's 50% of its parent.
2738 static wxRect
AdjustAvailableSpace(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& childAttr
,
2739 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
);
2746 int m_descent
; // Descent for this object (if any)
2749 wxRichTextObject
* m_parent
;
2751 // The range of this object (start position to end position)
2752 wxRichTextRange m_range
;
2754 // The internal range of this object, if it's a top-level object with its own range space
2755 wxRichTextRange m_ownRange
;
2758 wxRichTextAttr m_attributes
;
2761 wxRichTextProperties m_properties
;
2764 WX_DECLARE_LIST_WITH_DECL( wxRichTextObject
, wxRichTextObjectList
, class WXDLLIMPEXP_RICHTEXT
);
2767 @class wxRichTextCompositeObject
2769 Objects of this class can contain other objects.
2771 @library{wxrichtext}
2774 @see wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2777 class WXDLLIMPEXP_RICHTEXT wxRichTextCompositeObject
: public wxRichTextObject
2779 DECLARE_CLASS(wxRichTextCompositeObject
)
2783 wxRichTextCompositeObject(wxRichTextObject
* parent
= NULL
);
2784 virtual ~wxRichTextCompositeObject();
2788 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2790 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
2792 virtual void CalculateRange(long start
, long& end
);
2794 virtual bool DeleteRange(const wxRichTextRange
& range
);
2796 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2798 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
2800 virtual void Dump(wxTextOutputStream
& stream
);
2802 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2807 Returns the children.
2809 wxRichTextObjectList
& GetChildren() { return m_children
; }
2811 Returns the children.
2813 const wxRichTextObjectList
& GetChildren() const { return m_children
; }
2816 Returns the number of children.
2818 size_t GetChildCount() const ;
2821 Returns the nth child.
2823 wxRichTextObject
* GetChild(size_t n
) const ;
2826 Returns @true if this object is composite.
2828 virtual bool IsComposite() const { return true; }
2831 Returns @true if no user editing can be done inside the object. This returns @true for simple objects,
2832 @false for most composite objects, but @true for fields, which if composite, should not be user-edited.
2834 virtual bool IsAtomic() const { return false; }
2837 Returns true if the buffer is empty.
2839 virtual bool IsEmpty() const { return GetChildCount() == 0; }
2842 Returns the child object at the given character position.
2844 virtual wxRichTextObject
* GetChildAtPosition(long pos
) const;
2848 void Copy(const wxRichTextCompositeObject
& obj
);
2850 void operator= (const wxRichTextCompositeObject
& obj
) { Copy(obj
); }
2853 Appends a child, returning the position.
2855 size_t AppendChild(wxRichTextObject
* child
) ;
2858 Inserts the child in front of the given object, or at the beginning.
2860 bool InsertChild(wxRichTextObject
* child
, wxRichTextObject
* inFrontOf
) ;
2863 Removes and optionally deletes the specified child.
2865 bool RemoveChild(wxRichTextObject
* child
, bool deleteChild
= false) ;
2868 Deletes all the children.
2870 bool DeleteChildren() ;
2873 Recursively merges all pieces that can be merged.
2875 bool Defragment(wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
= wxRICHTEXT_ALL
);
2878 Moves the object recursively, by adding the offset from old to new.
2880 virtual void Move(const wxPoint
& pt
);
2883 wxRichTextObjectList m_children
;
2887 @class wxRichTextParagraphBox
2889 This class knows how to lay out paragraphs.
2891 @library{wxrichtext}
2894 @see wxRichTextCompositeObject, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2897 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraphLayoutBox
: public wxRichTextCompositeObject
2899 DECLARE_DYNAMIC_CLASS(wxRichTextParagraphLayoutBox
)
2903 wxRichTextParagraphLayoutBox(wxRichTextObject
* parent
= NULL
);
2904 wxRichTextParagraphLayoutBox(const wxRichTextParagraphLayoutBox
& obj
): wxRichTextCompositeObject() { Init(); Copy(obj
); }
2905 ~wxRichTextParagraphLayoutBox();
2909 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2911 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2913 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
2915 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
2917 virtual bool DeleteRange(const wxRichTextRange
& range
);
2919 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2922 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2925 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2926 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2929 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2930 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2933 virtual wxString
GetXMLNodeName() const { return wxT("paragraphlayout"); }
2935 virtual bool AcceptsFocus() const { return true; }
2940 Associates a control with the buffer, for operations that for example require refreshing the window.
2942 void SetRichTextCtrl(wxRichTextCtrl
* ctrl
) { m_ctrl
= ctrl
; }
2945 Returns the associated control.
2947 wxRichTextCtrl
* GetRichTextCtrl() const { return m_ctrl
; }
2950 Sets a flag indicating whether the last paragraph is partial or complete.
2952 void SetPartialParagraph(bool partialPara
) { m_partialParagraph
= partialPara
; }
2955 Returns a flag indicating whether the last paragraph is partial or complete.
2957 bool GetPartialParagraph() const { return m_partialParagraph
; }
2960 Returns the style sheet associated with the overall buffer.
2962 virtual wxRichTextStyleSheet
* GetStyleSheet() const;
2964 virtual bool IsTopLevel() const { return true; }
2969 Submits a command to insert paragraphs.
2971 bool InsertParagraphsWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2974 Submits a command to insert the given text.
2976 bool InsertTextWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2979 Submits a command to insert the given text.
2981 bool InsertNewlineWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2984 Submits a command to insert the given image.
2986 bool InsertImageWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextImageBlock
& imageBlock
,
2987 wxRichTextCtrl
* ctrl
, int flags
, const wxRichTextAttr
& textAttr
);
2990 Submits a command to insert the given field. Field data can be included in properties.
2992 @see wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
2994 wxRichTextField
* InsertFieldWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& fieldType
,
2995 const wxRichTextProperties
& properties
,
2996 wxRichTextCtrl
* ctrl
, int flags
,
2997 const wxRichTextAttr
& textAttr
);
3000 Returns the style that is appropriate for a new paragraph at this position.
3001 If the previous paragraph has a paragraph style name, looks up the next-paragraph
3004 wxRichTextAttr
GetStyleForNewParagraph(wxRichTextBuffer
* buffer
, long pos
, bool caretPosition
= false, bool lookUpNewParaStyle
=false) const;
3009 wxRichTextObject
* InsertObjectWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
= 0);
3012 Submits a command to delete this range.
3014 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
, wxRichTextBuffer
* buffer
);
3017 Draws the floating objects in this buffer.
3019 void DrawFloats(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3022 Moves an anchored object to another paragraph.
3024 void MoveAnchoredObjectToParagraph(wxRichTextParagraph
* from
, wxRichTextParagraph
* to
, wxRichTextObject
* obj
);
3027 Initializes the object.
3032 Clears all the children.
3034 virtual void Clear();
3037 Clears and initializes with one blank paragraph.
3039 virtual void Reset();
3042 Convenience function to add a paragraph of text.
3044 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
3047 Convenience function to add an image.
3049 virtual wxRichTextRange
AddImage(const wxImage
& image
, wxRichTextAttr
* paraStyle
= NULL
);
3052 Adds multiple paragraphs, based on newlines.
3054 virtual wxRichTextRange
AddParagraphs(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
3057 Returns the line at the given position. If @a caretPosition is true, the position is
3058 a caret position, which is normally a smaller number.
3060 virtual wxRichTextLine
* GetLineAtPosition(long pos
, bool caretPosition
= false) const;
3063 Returns the line at the given y pixel position, or the last line.
3065 virtual wxRichTextLine
* GetLineAtYPosition(int y
) const;
3068 Returns the paragraph at the given character or caret position.
3070 virtual wxRichTextParagraph
* GetParagraphAtPosition(long pos
, bool caretPosition
= false) const;
3073 Returns the line size at the given position.
3075 virtual wxSize
GetLineSizeAtPosition(long pos
, bool caretPosition
= false) const;
3078 Given a position, returns the number of the visible line (potentially many to a paragraph),
3079 starting from zero at the start of the buffer. We also have to pass a bool (@a startOfLine)
3080 that indicates whether the caret is being shown at the end of the previous line or at the start
3081 of the next, since the caret can be shown at two visible positions for the same underlying
3084 virtual long GetVisibleLineNumber(long pos
, bool caretPosition
= false, bool startOfLine
= false) const;
3087 Given a line number, returns the corresponding wxRichTextLine object.
3089 virtual wxRichTextLine
* GetLineForVisibleLineNumber(long lineNumber
) const;
3092 Returns the leaf object in a paragraph at this position.
3094 virtual wxRichTextObject
* GetLeafObjectAtPosition(long position
) const;
3097 Returns the paragraph by number.
3099 virtual wxRichTextParagraph
* GetParagraphAtLine(long paragraphNumber
) const;
3102 Returns the paragraph for a given line.
3104 virtual wxRichTextParagraph
* GetParagraphForLine(wxRichTextLine
* line
) const;
3107 Returns the length of the paragraph.
3109 virtual int GetParagraphLength(long paragraphNumber
) const;
3112 Returns the number of paragraphs.
3114 virtual int GetParagraphCount() const { return static_cast<int>(GetChildCount()); }
3117 Returns the number of visible lines.
3119 virtual int GetLineCount() const;
3122 Returns the text of the paragraph.
3124 virtual wxString
GetParagraphText(long paragraphNumber
) const;
3127 Converts zero-based line column and paragraph number to a position.
3129 virtual long XYToPosition(long x
, long y
) const;
3132 Converts a zero-based position to line column and paragraph number.
3134 virtual bool PositionToXY(long pos
, long* x
, long* y
) const;
3137 Sets the attributes for the given range. Pass flags to determine how the
3140 The end point of range is specified as the last character position of the span
3141 of text. So, for example, to set the style for a character at position 5,
3142 use the range (5,5).
3143 This differs from the wxRichTextCtrl API, where you would specify (5,6).
3145 @a flags may contain a bit list of the following values:
3146 - wxRICHTEXT_SETSTYLE_NONE: no style flag.
3147 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
3149 - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
3150 if the combined style at this point is already the style in question.
3151 - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
3152 applied to paragraphs, and not the content.
3153 This allows content styling to be preserved independently from that
3154 of e.g. a named paragraph style.
3155 - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
3156 applied to characters, and not the paragraph.
3157 This allows content styling to be preserved independently from that
3158 of e.g. a named paragraph style.
3159 - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
3161 - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style.
3162 Only the style flags are used in this operation.
3164 virtual bool SetStyle(const wxRichTextRange
& range
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3167 Sets the attributes for the given object only, for example the box attributes for a text box.
3169 virtual void SetStyle(wxRichTextObject
*obj
, const wxRichTextAttr
& textAttr
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3172 Returns the combined text attributes for this position.
3174 This function gets the @e uncombined style - that is, the attributes associated
3175 with the paragraph or character content, and not necessarily the combined
3176 attributes you see on the screen. To get the combined attributes, use GetStyle().
3177 If you specify (any) paragraph attribute in @e style's flags, this function
3178 will fetch the paragraph attributes.
3179 Otherwise, it will return the character attributes.
3181 virtual bool GetStyle(long position
, wxRichTextAttr
& style
);
3184 Returns the content (uncombined) attributes for this position.
3186 virtual bool GetUncombinedStyle(long position
, wxRichTextAttr
& style
);
3189 Implementation helper for GetStyle. If combineStyles is true, combine base, paragraph and
3192 virtual bool DoGetStyle(long position
, wxRichTextAttr
& style
, bool combineStyles
= true);
3195 This function gets a style representing the common, combined attributes in the
3197 Attributes which have different values within the specified range will not be
3198 included the style flags.
3200 The function is used to get the attributes to display in the formatting dialog:
3201 the user can edit the attributes common to the selection, and optionally specify the
3202 values of further attributes to be applied uniformly.
3204 To apply the edited attributes, you can use SetStyle() specifying
3205 the wxRICHTEXT_SETSTYLE_OPTIMIZE flag, which will only apply attributes that
3206 are different from the @e combined attributes within the range.
3207 So, the user edits the effective, displayed attributes for the range,
3208 but his choice won't be applied unnecessarily to content. As an example,
3209 say the style for a paragraph specifies bold, but the paragraph text doesn't
3211 The combined style is bold, and this is what the user will see on-screen and
3212 in the formatting dialog. The user now specifies red text, in addition to bold.
3213 When applying with SetStyle(), the content font weight attributes won't be
3214 changed to bold because this is already specified by the paragraph.
3215 However the text colour attributes @e will be changed to show red.
3217 virtual bool GetStyleForRange(const wxRichTextRange
& range
, wxRichTextAttr
& style
);
3220 Combines @a style with @a currentStyle for the purpose of summarising the attributes of a range of
3223 bool CollectStyle(wxRichTextAttr
& currentStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
3227 Sets the list attributes for the given range, passing flags to determine how
3228 the attributes are set.
3229 Either the style definition or the name of the style definition (in the current
3230 sheet) can be passed.
3232 @a flags is a bit list of the following:
3233 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3234 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3235 @a startFrom, otherwise existing attributes are used.
3236 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3237 as the level for all paragraphs, otherwise the current indentation will be used.
3239 @see NumberList(), PromoteList(), ClearListStyle().
3241 virtual bool SetListStyle(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3242 virtual bool SetListStyle(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3246 Clears the list style from the given range, clearing list-related attributes
3247 and applying any named paragraph style associated with each paragraph.
3249 @a flags is a bit list of the following:
3250 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3252 @see SetListStyle(), PromoteList(), NumberList()
3254 virtual bool ClearListStyle(const wxRichTextRange
& range
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3258 Numbers the paragraphs in the given range.
3260 Pass flags to determine how the attributes are set.
3261 Either the style definition or the name of the style definition (in the current
3262 sheet) can be passed.
3264 @a flags is a bit list of the following:
3265 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3266 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3267 @a startFrom, otherwise existing attributes are used.
3268 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3269 as the level for all paragraphs, otherwise the current indentation will be used.
3271 @a def can be NULL to indicate that the existing list style should be used.
3273 @see SetListStyle(), PromoteList(), ClearListStyle()
3275 virtual bool NumberList(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3276 virtual bool NumberList(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3281 Promotes the list items within the given range.
3282 A positive @a promoteBy produces a smaller indent, and a negative number
3283 produces a larger indent. Pass flags to determine how the attributes are set.
3284 Either the style definition or the name of the style definition (in the current
3285 sheet) can be passed.
3287 @a flags is a bit list of the following:
3288 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3289 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3290 @a startFrom, otherwise existing attributes are used.
3291 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3292 as the level for all paragraphs, otherwise the current indentation will be used.
3294 @see SetListStyle(), SetListStyle(), ClearListStyle()
3296 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3297 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3301 Helper for NumberList and PromoteList, that does renumbering and promotion simultaneously
3302 @a def can be NULL/empty to indicate that the existing list style should be used.
3304 virtual bool DoNumberList(const wxRichTextRange
& range
, const wxRichTextRange
& promotionRange
, int promoteBy
, wxRichTextListStyleDefinition
* def
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3307 Fills in the attributes for numbering a paragraph after previousParagraph.
3309 virtual bool FindNextParagraphNumber(wxRichTextParagraph
* previousParagraph
, wxRichTextAttr
& attr
) const;
3312 Sets the properties for the given range, passing flags to determine how the
3313 attributes are set. You can merge properties or replace them.
3315 The end point of range is specified as the last character position of the span
3316 of text, plus one. So, for example, to set the properties for a character at
3317 position 5, use the range (5,6).
3319 @a flags may contain a bit list of the following values:
3320 - wxRICHTEXT_SETPROPERTIES_NONE: no flag.
3321 - wxRICHTEXT_SETPROPERTIES_WITH_UNDO: specifies that this operation should be
3323 - wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY: specifies that the properties should only be
3324 applied to paragraphs, and not the content.
3325 - wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY: specifies that the properties should only be
3326 applied to characters, and not the paragraph.
3327 - wxRICHTEXT_SETPROPERTIES_RESET: resets (clears) the existing properties before applying
3329 - wxRICHTEXT_SETPROPERTIES_REMOVE: removes the specified properties.
3331 virtual bool SetProperties(const wxRichTextRange
& range
, const wxRichTextProperties
& properties
, int flags
= wxRICHTEXT_SETPROPERTIES_WITH_UNDO
);
3334 Test if this whole range has character attributes of the specified kind. If any
3335 of the attributes are different within the range, the test fails. You
3336 can use this to implement, for example, bold button updating. style must have
3337 flags indicating which attributes are of interest.
3339 virtual bool HasCharacterAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3342 Test if this whole range has paragraph attributes of the specified kind. If any
3343 of the attributes are different within the range, the test fails. You
3344 can use this to implement, for example, centering button updating. style must have
3345 flags indicating which attributes are of interest.
3347 virtual bool HasParagraphAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3349 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraphLayoutBox(*this); }
3352 Prepares the content just before insertion (or after buffer reset).
3353 Currently is only called if undo mode is on.
3355 virtual void PrepareContent(wxRichTextParagraphLayoutBox
& container
);
3358 Insert fragment into this box at the given position. If partialParagraph is true,
3359 it is assumed that the last (or only) paragraph is just a piece of data with no paragraph
3362 virtual bool InsertFragment(long position
, wxRichTextParagraphLayoutBox
& fragment
);
3365 Make a copy of the fragment corresponding to the given range, putting it in @a fragment.
3367 virtual bool CopyFragment(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
& fragment
);
3370 Apply the style sheet to the buffer, for example if the styles have changed.
3372 virtual bool ApplyStyleSheet(wxRichTextStyleSheet
* styleSheet
);
3374 void Copy(const wxRichTextParagraphLayoutBox
& obj
);
3376 void operator= (const wxRichTextParagraphLayoutBox
& obj
) { Copy(obj
); }
3381 virtual void UpdateRanges();
3386 virtual wxString
GetText() const;
3389 Sets the default style, affecting the style currently being applied
3390 (for example, setting the default style to bold will cause subsequently
3391 inserted text to be bold).
3393 This is not cumulative - setting the default style will replace the previous
3396 Setting it to a default attribute object makes new content take on the 'basic' style.
3398 virtual bool SetDefaultStyle(const wxRichTextAttr
& style
);
3401 Returns the current default style, affecting the style currently being applied
3402 (for example, setting the default style to bold will cause subsequently
3403 inserted text to be bold).
3405 virtual const wxRichTextAttr
& GetDefaultStyle() const { return m_defaultAttributes
; }
3408 Sets the basic (overall) style. This is the style of the whole
3409 buffer before further styles are applied, unlike the default style, which
3410 only affects the style currently being applied (for example, setting the default
3411 style to bold will cause subsequently inserted text to be bold).
3413 virtual void SetBasicStyle(const wxRichTextAttr
& style
) { m_attributes
= style
; }
3416 Returns the basic (overall) style.
3418 This is the style of the whole buffer before further styles are applied,
3419 unlike the default style, which only affects the style currently being
3420 applied (for example, setting the default style to bold will cause
3421 subsequently inserted text to be bold).
3423 virtual const wxRichTextAttr
& GetBasicStyle() const { return m_attributes
; }
3426 Invalidates the buffer. With no argument, invalidates whole buffer.
3428 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3431 Do the (in)validation for this object only.
3433 virtual void DoInvalidate(const wxRichTextRange
& invalidRange
);
3436 Do the (in)validation both up and down the hierarchy.
3438 virtual void InvalidateHierarchy(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3441 Gather information about floating objects. If untilObj is non-NULL,
3442 will stop getting information if the current object is this, since we
3443 will collect the rest later.
3445 virtual bool UpdateFloatingObjects(const wxRect
& availableRect
, wxRichTextObject
* untilObj
= NULL
);
3448 Get invalid range, rounding to entire paragraphs if argument is true.
3450 wxRichTextRange
GetInvalidRange(bool wholeParagraphs
= false) const;
3453 Returns @true if this object needs layout.
3455 bool IsDirty() const { return m_invalidRange
!= wxRICHTEXT_NONE
; }
3458 Returns the wxRichTextFloatCollector of this object.
3460 wxRichTextFloatCollector
* GetFloatCollector() { return m_floatCollector
; }
3463 Returns the number of floating objects at this level.
3465 int GetFloatingObjectCount() const;
3468 Returns a list of floating objects.
3470 bool GetFloatingObjects(wxRichTextObjectList
& objects
) const;
3473 wxRichTextCtrl
* m_ctrl
;
3474 wxRichTextAttr m_defaultAttributes
;
3476 // The invalidated range that will need full layout
3477 wxRichTextRange m_invalidRange
;
3479 // Is the last paragraph partial or complete?
3480 bool m_partialParagraph
;
3482 // The floating layout state
3483 wxRichTextFloatCollector
* m_floatCollector
;
3487 @class wxRichTextBox
3489 This class implements a floating or inline text box, containing paragraphs.
3491 @library{wxrichtext}
3494 @see wxRichTextParagraphLayoutBox, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
3497 class WXDLLIMPEXP_RICHTEXT wxRichTextBox
: public wxRichTextParagraphLayoutBox
3499 DECLARE_DYNAMIC_CLASS(wxRichTextBox
)
3504 Default constructor; optionally pass the parent object.
3507 wxRichTextBox(wxRichTextObject
* parent
= NULL
);
3513 wxRichTextBox(const wxRichTextBox
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3517 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3519 virtual wxString
GetXMLNodeName() const { return wxT("textbox"); }
3521 virtual bool CanEditProperties() const { return true; }
3523 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3525 virtual wxString
GetPropertiesMenuLabel() const { return wxGetTranslation("&Box"); }
3531 virtual wxRichTextObject
* Clone() const { return new wxRichTextBox(*this); }
3533 void Copy(const wxRichTextBox
& obj
);
3539 @class wxRichTextField
3541 This class implements the general concept of a field, an object that represents
3542 additional functionality such as a footnote, a bookmark, a page number, a table
3543 of contents, and so on. Extra information (such as a bookmark name) can be stored
3544 in the object properties.
3546 Drawing, layout, and property editing is delegated to classes derived
3547 from wxRichTextFieldType, such as instances of wxRichTextFieldTypeStandard; this makes
3548 the use of fields an efficient method of introducing extra functionality, since
3549 most of the information required to draw a field (such as a bitmap) is kept centrally
3550 in a single field type definition.
3552 The FieldType property, accessed by SetFieldType/GetFieldType, is used to retrieve
3553 the field type definition. So be careful not to overwrite this property.
3555 wxRichTextField is derived from wxRichTextParagraphLayoutBox, which means that it
3556 can contain its own read-only content, refreshed when the application calls the UpdateField
3557 function. Whether a field is treated as a composite or a single graphic is determined
3558 by the field type definition. If using wxRichTextFieldTypeStandard, passing the display
3559 type wxRICHTEXT_FIELD_STYLE_COMPOSITE to the field type definition causes the field
3560 to behave like a composite; the other display styles display a simple graphic.
3561 When implementing a composite field, you will still need to derive from wxRichTextFieldTypeStandard
3562 or wxRichTextFieldType, if only to implement UpdateField to refresh the field content
3563 appropriately. wxRichTextFieldTypeStandard is only one possible implementation, but
3564 covers common needs especially for simple, static fields using text or a bitmap.
3566 Register field types on application initialisation with the static function
3567 wxRichTextBuffer::AddFieldType. They will be deleted automatically on
3570 An application can write a field to a control with wxRichTextCtrl::WriteField,
3571 taking a field type, the properties for the field, and optional attributes.
3573 @library{wxrichtext}
3576 @see wxRichTextFieldTypeStandard, wxRichTextFieldType, wxRichTextParagraphLayoutBox, wxRichTextProperties, wxRichTextCtrl
3579 class WXDLLIMPEXP_RICHTEXT wxRichTextField
: public wxRichTextParagraphLayoutBox
3581 DECLARE_DYNAMIC_CLASS(wxRichTextField
)
3586 Default constructor; optionally pass the parent object.
3589 wxRichTextField(const wxString
& fieldType
= wxEmptyString
, wxRichTextObject
* parent
= NULL
);
3595 wxRichTextField(const wxRichTextField
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3599 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3601 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3603 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
3605 virtual wxString
GetXMLNodeName() const { return wxT("field"); }
3607 virtual bool CanEditProperties() const;
3609 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3611 virtual wxString
GetPropertiesMenuLabel() const;
3613 virtual bool AcceptsFocus() const { return false; }
3615 virtual void CalculateRange(long start
, long& end
);
3618 If a field has children, we don't want the user to be able to edit it.
3620 virtual bool IsAtomic() const { return true; }
3622 virtual bool IsEmpty() const { return false; }
3624 virtual bool IsTopLevel() const;
3628 void SetFieldType(const wxString
& fieldType
) { GetProperties().SetProperty(wxT("FieldType"), fieldType
); }
3629 wxString
GetFieldType() const { return GetProperties().GetPropertyString(wxT("FieldType")); }
3634 Update the field; delegated to the associated field type. This would typically expand the field to its value,
3635 if this is a dynamically changing and/or composite field.
3637 virtual bool UpdateField(wxRichTextBuffer
* buffer
);
3639 virtual wxRichTextObject
* Clone() const { return new wxRichTextField(*this); }
3641 void Copy(const wxRichTextField
& obj
);
3647 @class wxRichTextFieldType
3649 The base class for custom field types. Each type definition handles one
3650 field type. Override functions to provide drawing, layout, updating and
3651 property editing functionality for a field.
3653 Register field types on application initialisation with the static function
3654 wxRichTextBuffer::AddFieldType. They will be deleted automatically on
3657 @library{wxrichtext}
3660 @see wxRichTextFieldTypeStandard, wxRichTextField, wxRichTextCtrl
3663 class WXDLLIMPEXP_RICHTEXT wxRichTextFieldType
: public wxObject
3665 DECLARE_CLASS(wxRichTextFieldType
)
3668 Creates a field type definition.
3670 wxRichTextFieldType(const wxString
& name
= wxEmptyString
)
3677 wxRichTextFieldType(const wxRichTextFieldType
& fieldType
)
3678 : wxObject(fieldType
)
3679 { Copy(fieldType
); }
3681 void Copy(const wxRichTextFieldType
& fieldType
) { m_name
= fieldType
.m_name
; }
3684 Draw the item, within the given range. Some objects may ignore the range (for
3685 example paragraphs) while others must obey it (lines, to implement wrapping)
3687 virtual bool Draw(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
3690 Lay the item out at the specified position with the given size constraint.
3691 Layout must set the cached size. @rect is the available space for the object,
3692 and @a parentRect is the container that is used to determine a relative size
3693 or position (for example if a text box must be 50% of the parent text box).
3695 virtual bool Layout(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
3698 Returns the object size for the given range. Returns @false if the range
3699 is invalid for this object.
3701 virtual bool GetRangeSize(wxRichTextField
* obj
, const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const = 0;
3704 Returns @true if we can edit the object's properties via a GUI.
3706 virtual bool CanEditProperties(wxRichTextField
* WXUNUSED(obj
)) const { return false; }
3709 Edits the object's properties via a GUI.
3711 virtual bool EditProperties(wxRichTextField
* WXUNUSED(obj
), wxWindow
* WXUNUSED(parent
), wxRichTextBuffer
* WXUNUSED(buffer
)) { return false; }
3714 Returns the label to be used for the properties context menu item.
3716 virtual wxString
GetPropertiesMenuLabel(wxRichTextField
* WXUNUSED(obj
)) const { return wxEmptyString
; }
3719 Update the field. This would typically expand the field to its value,
3720 if this is a dynamically changing and/or composite field.
3722 virtual bool UpdateField(wxRichTextBuffer
* WXUNUSED(buffer
), wxRichTextField
* WXUNUSED(obj
)) { return false; }
3725 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
3727 virtual bool IsTopLevel(wxRichTextField
* WXUNUSED(obj
)) const { return true; }
3730 Sets the field type name. There should be a unique name per field type object.
3732 void SetName(const wxString
& name
) { m_name
= name
; }
3735 Returns the field type name. There should be a unique name per field type object.
3737 wxString
GetName() const { return m_name
; }
3744 WX_DECLARE_STRING_HASH_MAP(wxRichTextFieldType
*, wxRichTextFieldTypeHashMap
);
3747 @class wxRichTextFieldTypeStandard
3749 A field type that can handle fields with text or bitmap labels, with a small range
3750 of styles for implementing rectangular fields and fields that can be used for start
3753 The border, text and background colours can be customised; the default is
3754 white text on a black background.
3756 The following display styles can be used.
3759 @style{wxRICHTEXT_FIELD_STYLE_COMPOSITE}
3760 Creates a composite field; you will probably need to derive a new class to implement UpdateField.
3761 @style{wxRICHTEXT_FIELD_STYLE_RECTANGLE}
3762 Shows a rounded rectangle background.
3763 @style{wxRICHTEXT_FIELD_STYLE_NO_BORDER}
3764 Suppresses the background and border; mostly used with a bitmap label.
3765 @style{wxRICHTEXT_FIELD_STYLE_START_TAG}
3766 Shows a start tag background, with the pointy end facing right.
3767 @style{wxRICHTEXT_FIELD_STYLE_END_TAG}
3768 Shows an end tag background, with the pointy end facing left.
3771 @library{wxrichtext}
3774 @see wxRichTextFieldType, wxRichTextField, wxRichTextBuffer, wxRichTextCtrl
3777 class WXDLLIMPEXP_RICHTEXT wxRichTextFieldTypeStandard
: public wxRichTextFieldType
3779 DECLARE_CLASS(wxRichTextFieldTypeStandard
)
3782 // Display style types
3783 enum { wxRICHTEXT_FIELD_STYLE_COMPOSITE
= 0x01,
3784 wxRICHTEXT_FIELD_STYLE_RECTANGLE
= 0x02,
3785 wxRICHTEXT_FIELD_STYLE_NO_BORDER
= 0x04,
3786 wxRICHTEXT_FIELD_STYLE_START_TAG
= 0x08,
3787 wxRICHTEXT_FIELD_STYLE_END_TAG
= 0x10
3791 Constructor, creating a field type definition with a text label.
3794 The name of the type definition. This must be unique, and is the type
3795 name used when adding a field to a control.
3797 The text label to be shown on the field.
3799 The display style: one of wxRICHTEXT_FIELD_STYLE_RECTANGLE,
3800 wxRICHTEXT_FIELD_STYLE_NO_BORDER, wxRICHTEXT_FIELD_STYLE_START_TAG,
3801 wxRICHTEXT_FIELD_STYLE_END_TAG.
3804 wxRichTextFieldTypeStandard(const wxString
& name
, const wxString
& label
, int displayStyle
= wxRICHTEXT_FIELD_STYLE_RECTANGLE
);
3807 Constructor, creating a field type definition with a bitmap label.
3810 The name of the type definition. This must be unique, and is the type
3811 name used when adding a field to a control.
3813 The bitmap label to be shown on the field.
3815 The display style: one of wxRICHTEXT_FIELD_STYLE_RECTANGLE,
3816 wxRICHTEXT_FIELD_STYLE_NO_BORDER, wxRICHTEXT_FIELD_STYLE_START_TAG,
3817 wxRICHTEXT_FIELD_STYLE_END_TAG.
3820 wxRichTextFieldTypeStandard(const wxString
& name
, const wxBitmap
& bitmap
, int displayStyle
= wxRICHTEXT_FIELD_STYLE_NO_BORDER
);
3823 The default constructor.
3826 wxRichTextFieldTypeStandard() { Init(); }
3829 The copy constructor.
3832 wxRichTextFieldTypeStandard(const wxRichTextFieldTypeStandard
& field
)
3833 : wxRichTextFieldType(field
)
3837 Initialises the object.
3844 void Copy(const wxRichTextFieldTypeStandard
& field
);
3847 The assignment operator.
3849 void operator=(const wxRichTextFieldTypeStandard
& field
) { Copy(field
); }
3852 Draw the item, within the given range. Some objects may ignore the range (for
3853 example paragraphs) while others must obey it (lines, to implement wrapping)
3855 virtual bool Draw(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3858 Lay the item out at the specified position with the given size constraint.
3859 Layout must set the cached size. @rect is the available space for the object,
3860 and @a parentRect is the container that is used to determine a relative size
3861 or position (for example if a text box must be 50% of the parent text box).
3863 virtual bool Layout(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3866 Returns the object size for the given range. Returns @false if the range
3867 is invalid for this object.
3869 virtual bool GetRangeSize(wxRichTextField
* obj
, const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
3872 Get the size of the field, given the label, font size, and so on.
3874 wxSize
GetSize(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int style
) const;
3877 Returns @true if the display type is wxRICHTEXT_FIELD_STYLE_COMPOSITE, @false otherwise.
3879 virtual bool IsTopLevel(wxRichTextField
* WXUNUSED(obj
)) const { return (GetDisplayStyle() & wxRICHTEXT_FIELD_STYLE_COMPOSITE
) != 0; }
3882 Sets the text label for fields of this type.
3884 void SetLabel(const wxString
& label
) { m_label
= label
; }
3887 Returns the text label for fields of this type.
3889 const wxString
& GetLabel() const { return m_label
; }
3892 Sets the bitmap label for fields of this type.
3894 void SetBitmap(const wxBitmap
& bitmap
) { m_bitmap
= bitmap
; }
3897 Gets the bitmap label for fields of this type.
3899 const wxBitmap
& GetBitmap() const { return m_bitmap
; }
3902 Gets the display style for fields of this type.
3904 int GetDisplayStyle() const { return m_displayStyle
; }
3907 Sets the display style for fields of this type.
3909 void SetDisplayStyle(int displayStyle
) { m_displayStyle
= displayStyle
; }
3912 Gets the font used for drawing the text label.
3914 const wxFont
& GetFont() const { return m_font
; }
3917 Sets the font used for drawing the text label.
3919 void SetFont(const wxFont
& font
) { m_font
= font
; }
3922 Gets the colour used for drawing the text label.
3924 const wxColour
& GetTextColour() const { return m_textColour
; }
3927 Sets the colour used for drawing the text label.
3929 void SetTextColour(const wxColour
& colour
) { m_textColour
= colour
; }
3932 Gets the colour used for drawing the field border.
3934 const wxColour
& GetBorderColour() const { return m_borderColour
; }
3937 Sets the colour used for drawing the field border.
3939 void SetBorderColour(const wxColour
& colour
) { m_borderColour
= colour
; }
3942 Gets the colour used for drawing the field background.
3944 const wxColour
& GetBackgroundColour() const { return m_backgroundColour
; }
3947 Sets the colour used for drawing the field background.
3949 void SetBackgroundColour(const wxColour
& colour
) { m_backgroundColour
= colour
; }
3952 Sets the vertical padding (the distance between the border and the text).
3954 void SetVerticalPadding(int padding
) { m_verticalPadding
= padding
; }
3957 Gets the vertical padding (the distance between the border and the text).
3959 int GetVerticalPadding() const { return m_verticalPadding
; }
3962 Sets the horizontal padding (the distance between the border and the text).
3964 void SetHorizontalPadding(int padding
) { m_horizontalPadding
= padding
; }
3967 Sets the horizontal padding (the distance between the border and the text).
3969 int GetHorizontalPadding() const { return m_horizontalPadding
; }
3972 Sets the horizontal margin surrounding the field object.
3974 void SetHorizontalMargin(int margin
) { m_horizontalMargin
= margin
; }
3977 Gets the horizontal margin surrounding the field object.
3979 int GetHorizontalMargin() const { return m_horizontalMargin
; }
3982 Sets the vertical margin surrounding the field object.
3984 void SetVerticalMargin(int margin
) { m_verticalMargin
= margin
; }
3987 Gets the vertical margin surrounding the field object.
3989 int GetVerticalMargin() const { return m_verticalMargin
; }
3996 wxColour m_textColour
;
3997 wxColour m_borderColour
;
3998 wxColour m_backgroundColour
;
3999 int m_verticalPadding
;
4000 int m_horizontalPadding
;
4001 int m_horizontalMargin
;
4002 int m_verticalMargin
;
4007 @class wxRichTextLine
4009 This object represents a line in a paragraph, and stores
4010 offsets from the start of the paragraph representing the
4011 start and end positions of the line.
4013 @library{wxrichtext}
4016 @see wxRichTextBuffer, wxRichTextCtrl
4019 class WXDLLIMPEXP_RICHTEXT wxRichTextLine
4024 wxRichTextLine(wxRichTextParagraph
* parent
);
4025 wxRichTextLine(const wxRichTextLine
& obj
) { Init( NULL
); Copy(obj
); }
4026 virtual ~wxRichTextLine() {}
4033 Sets the range associated with this line.
4035 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
4037 Sets the range associated with this line.
4039 void SetRange(long from
, long to
) { m_range
= wxRichTextRange(from
, to
); }
4042 Returns the parent paragraph.
4044 wxRichTextParagraph
* GetParent() { return m_parent
; }
4049 const wxRichTextRange
& GetRange() const { return m_range
; }
4053 wxRichTextRange
& GetRange() { return m_range
; }
4056 Returns the absolute range.
4058 wxRichTextRange
GetAbsoluteRange() const;
4061 Returns the line size as calculated by Layout.
4063 virtual wxSize
GetSize() const { return m_size
; }
4066 Sets the line size as calculated by Layout.
4068 virtual void SetSize(const wxSize
& sz
) { m_size
= sz
; }
4071 Returns the object position relative to the parent.
4073 virtual wxPoint
GetPosition() const { return m_pos
; }
4076 Sets the object position relative to the parent.
4078 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
4081 Returns the absolute object position.
4083 virtual wxPoint
GetAbsolutePosition() const;
4086 Returns the rectangle enclosing the line.
4088 virtual wxRect
GetRect() const { return wxRect(GetAbsolutePosition(), GetSize()); }
4091 Sets the stored descent.
4093 void SetDescent(int descent
) { m_descent
= descent
; }
4096 Returns the stored descent.
4098 int GetDescent() const { return m_descent
; }
4100 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
4101 wxArrayInt
& GetObjectSizes() { return m_objectSizes
; }
4102 const wxArrayInt
& GetObjectSizes() const { return m_objectSizes
; }
4108 Initialises the object.
4110 void Init(wxRichTextParagraph
* parent
);
4115 void Copy(const wxRichTextLine
& obj
);
4117 virtual wxRichTextLine
* Clone() const { return new wxRichTextLine(*this); }
4121 // The range of the line (start position to end position)
4122 // This is relative to the parent paragraph.
4123 wxRichTextRange m_range
;
4125 // Size and position measured relative to top of paragraph
4129 // Maximum descent for this line (location of text baseline)
4132 // The parent object
4133 wxRichTextParagraph
* m_parent
;
4135 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
4136 wxArrayInt m_objectSizes
;
4140 WX_DECLARE_LIST_WITH_DECL( wxRichTextLine
, wxRichTextLineList
, class WXDLLIMPEXP_RICHTEXT
);
4143 @class wxRichTextParagraph
4145 This object represents a single paragraph containing various objects such as text content, images, and further paragraph layout objects.
4147 @library{wxrichtext}
4150 @see wxRichTextBuffer, wxRichTextCtrl
4153 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraph
: public wxRichTextCompositeObject
4155 DECLARE_DYNAMIC_CLASS(wxRichTextParagraph
)
4160 Constructor taking a parent and style.
4162 wxRichTextParagraph(wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
4164 Constructor taking a text string, a parent and paragraph and character attributes.
4166 wxRichTextParagraph(const wxString
& text
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* paraStyle
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4167 virtual ~wxRichTextParagraph();
4168 wxRichTextParagraph(const wxRichTextParagraph
& obj
): wxRichTextCompositeObject() { Copy(obj
); }
4172 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4174 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4176 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
4178 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
4180 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
4182 virtual void CalculateRange(long start
, long& end
);
4184 virtual wxString
GetXMLNodeName() const { return wxT("paragraph"); }
4189 Returns the cached lines.
4191 wxRichTextLineList
& GetLines() { return m_cachedLines
; }
4198 void Copy(const wxRichTextParagraph
& obj
);
4200 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraph(*this); }
4203 Clears the cached lines.
4210 Applies paragraph styles such as centering to the wrapped lines.
4212 virtual void ApplyParagraphStyle(wxRichTextLine
* line
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxDC
& dc
);
4215 Inserts text at the given position.
4217 virtual bool InsertText(long pos
, const wxString
& text
);
4220 Splits an object at this position if necessary, and returns
4221 the previous object, or NULL if inserting at the beginning.
4223 virtual wxRichTextObject
* SplitAt(long pos
, wxRichTextObject
** previousObject
= NULL
);
4226 Moves content to a list from this point.
4228 virtual void MoveToList(wxRichTextObject
* obj
, wxList
& list
);
4231 Adds content back from a list.
4233 virtual void MoveFromList(wxList
& list
);
4236 Returns the plain text searching from the start or end of the range.
4237 The resulting string may be shorter than the range given.
4239 bool GetContiguousPlainText(wxString
& text
, const wxRichTextRange
& range
, bool fromStart
= true);
4242 Finds a suitable wrap position. @a wrapPosition is the last position in the line to the left
4245 bool FindWrapPosition(const wxRichTextRange
& range
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int availableSpace
, long& wrapPosition
, wxArrayInt
* partialExtents
);
4248 Finds the object at the given position.
4250 wxRichTextObject
* FindObjectAtPosition(long position
);
4253 Returns the bullet text for this paragraph.
4255 wxString
GetBulletText();
4258 Allocates or reuses a line object.
4260 wxRichTextLine
* AllocateLine(int pos
);
4263 Clears remaining unused line objects, if any.
4265 bool ClearUnusedLines(int lineCount
);
4268 Returns combined attributes of the base style, paragraph style and character style. We use this to dynamically
4269 retrieve the actual style.
4271 wxRichTextAttr
GetCombinedAttributes(const wxRichTextAttr
& contentStyle
, bool includingBoxAttr
= false) const;
4274 Returns the combined attributes of the base style and paragraph style.
4276 wxRichTextAttr
GetCombinedAttributes(bool includingBoxAttr
= false) const;
4279 Returns the first position from pos that has a line break character.
4281 long GetFirstLineBreakPosition(long pos
);
4284 Creates a default tabstop array.
4286 static void InitDefaultTabs();
4289 Clears the default tabstop array.
4291 static void ClearDefaultTabs();
4294 Returns the default tabstop array.
4296 static const wxArrayInt
& GetDefaultTabs() { return sm_defaultTabs
; }
4299 Lays out the floating objects.
4301 void LayoutFloat(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
, wxRichTextFloatCollector
* floatCollector
);
4305 // The lines that make up the wrapped paragraph
4306 wxRichTextLineList m_cachedLines
;
4309 static wxArrayInt sm_defaultTabs
;
4311 friend class wxRichTextFloatCollector
;
4315 @class wxRichTextPlainText
4317 This object represents a single piece of text.
4319 @library{wxrichtext}
4322 @see wxRichTextBuffer, wxRichTextCtrl
4325 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainText
: public wxRichTextObject
4327 DECLARE_DYNAMIC_CLASS(wxRichTextPlainText
)
4334 wxRichTextPlainText(const wxString
& text
= wxEmptyString
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
4339 wxRichTextPlainText(const wxRichTextPlainText
& obj
): wxRichTextObject() { Copy(obj
); }
4343 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4345 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4347 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
4349 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
4351 virtual wxRichTextObject
* DoSplit(long pos
);
4353 virtual void CalculateRange(long start
, long& end
);
4355 virtual bool DeleteRange(const wxRichTextRange
& range
);
4357 virtual bool IsEmpty() const { return m_text
.empty(); }
4359 virtual bool CanMerge(wxRichTextObject
* object
, wxRichTextDrawingContext
& context
) const;
4361 virtual bool Merge(wxRichTextObject
* object
, wxRichTextDrawingContext
& context
);
4363 virtual void Dump(wxTextOutputStream
& stream
);
4365 virtual bool CanSplit(wxRichTextDrawingContext
& context
) const;
4367 virtual wxRichTextObject
* Split(wxRichTextDrawingContext
& context
);
4370 Get the first position from pos that has a line break character.
4372 long GetFirstLineBreakPosition(long pos
);
4374 /// Does this object take note of paragraph attributes? Text and image objects don't.
4375 virtual bool UsesParagraphAttributes() const { return false; }
4378 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4381 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4382 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4385 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4386 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4389 virtual wxString
GetXMLNodeName() const { return wxT("text"); }
4396 const wxString
& GetText() const { return m_text
; }
4401 void SetText(const wxString
& text
) { m_text
= text
; }
4405 // Copies the text object,
4406 void Copy(const wxRichTextPlainText
& obj
);
4408 // Clones the text object.
4409 virtual wxRichTextObject
* Clone() const { return new wxRichTextPlainText(*this); }
4412 bool DrawTabbedString(wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxString
& str
, wxCoord
& x
, wxCoord
& y
, bool selected
);
4419 @class wxRichTextImageBlock
4421 This class stores information about an image, in binary in-memory form.
4423 @library{wxrichtext}
4426 @see wxRichTextBuffer, wxRichTextCtrl
4429 class WXDLLIMPEXP_RICHTEXT wxRichTextImageBlock
: public wxObject
4435 wxRichTextImageBlock();
4440 wxRichTextImageBlock(const wxRichTextImageBlock
& block
);
4441 virtual ~wxRichTextImageBlock();
4444 Initialises the block.
4455 Load the original image into a memory block.
4456 If the image is not a JPEG, we must convert it into a JPEG
4458 If it's not a JPEG we can make use of @a image, already scaled, so we don't have to
4459 load the image a second time.
4461 virtual bool MakeImageBlock(const wxString
& filename
, wxBitmapType imageType
,
4462 wxImage
& image
, bool convertToJPEG
= true);
4465 Make an image block from the wxImage in the given
4468 virtual bool MakeImageBlock(wxImage
& image
, wxBitmapType imageType
, int quality
= 80);
4471 Uses a const wxImage for efficiency, but can't set quality (only relevant for JPEG)
4473 virtual bool MakeImageBlockDefaultQuality(const wxImage
& image
, wxBitmapType imageType
);
4476 Makes the image block.
4478 virtual bool DoMakeImageBlock(const wxImage
& image
, wxBitmapType imageType
);
4481 Writes the block to a file.
4483 bool Write(const wxString
& filename
);
4486 Writes the data in hex to a stream.
4488 bool WriteHex(wxOutputStream
& stream
);
4491 Reads the data in hex from a stream.
4493 bool ReadHex(wxInputStream
& stream
, int length
, wxBitmapType imageType
);
4498 void Copy(const wxRichTextImageBlock
& block
);
4500 // Load a wxImage from the block
4503 bool Load(wxImage
& image
);
4508 Assignment operation.
4510 void operator=(const wxRichTextImageBlock
& block
);
4515 Returns the raw data.
4517 unsigned char* GetData() const { return m_data
; }
4520 Returns the data size in bytes.
4522 size_t GetDataSize() const { return m_dataSize
; }
4525 Returns the image type.
4527 wxBitmapType
GetImageType() const { return m_imageType
; }
4531 void SetData(unsigned char* image
) { m_data
= image
; }
4536 void SetDataSize(size_t size
) { m_dataSize
= size
; }
4539 Sets the image type.
4541 void SetImageType(wxBitmapType imageType
) { m_imageType
= imageType
; }
4544 Returns @true if the data is non-NULL.
4546 bool IsOk() const { return GetData() != NULL
; }
4547 bool Ok() const { return IsOk(); }
4550 Gets the extension for the block's type.
4552 wxString
GetExtension() const;
4557 Allocates and reads from a stream as a block of memory.
4559 static unsigned char* ReadBlock(wxInputStream
& stream
, size_t size
);
4562 Allocates and reads from a file as a block of memory.
4564 static unsigned char* ReadBlock(const wxString
& filename
, size_t size
);
4567 Writes a memory block to stream.
4569 static bool WriteBlock(wxOutputStream
& stream
, unsigned char* block
, size_t size
);
4572 Writes a memory block to a file.
4574 static bool WriteBlock(const wxString
& filename
, unsigned char* block
, size_t size
);
4577 // Size in bytes of the image stored.
4578 // This is in the raw, original form such as a JPEG file.
4579 unsigned char* m_data
;
4581 wxBitmapType m_imageType
;
4585 @class wxRichTextImage
4587 This class implements a graphic object.
4589 @library{wxrichtext}
4592 @see wxRichTextBuffer, wxRichTextCtrl, wxRichTextImageBlock
4595 class WXDLLIMPEXP_RICHTEXT wxRichTextImage
: public wxRichTextObject
4597 DECLARE_DYNAMIC_CLASS(wxRichTextImage
)
4602 Default constructor.
4604 wxRichTextImage(wxRichTextObject
* parent
= NULL
): wxRichTextObject(parent
) { Init(); }
4607 Creates a wxRichTextImage from a wxImage.
4609 wxRichTextImage(const wxImage
& image
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4612 Creates a wxRichTextImage from an image block.
4614 wxRichTextImage(const wxRichTextImageBlock
& imageBlock
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4619 wxRichTextImage(const wxRichTextImage
& obj
): wxRichTextObject(obj
) { Copy(obj
); }
4633 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4635 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4637 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
4640 Returns the 'natural' size for this object - the image size.
4642 virtual wxTextAttrSize
GetNaturalSize() const;
4644 virtual bool IsEmpty() const { return false; /* !m_imageBlock.IsOk(); */ }
4646 virtual bool CanEditProperties() const { return true; }
4648 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
4650 virtual wxString
GetPropertiesMenuLabel() const { return wxGetTranslation("&Picture"); }
4652 virtual bool UsesParagraphAttributes() const { return false; }
4655 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4658 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4659 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4662 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4663 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4666 // Images can be floatable (optionally).
4667 virtual bool IsFloatable() const { return true; }
4669 virtual wxString
GetXMLNodeName() const { return wxT("image"); }
4674 Returns the image cache (a scaled bitmap).
4676 const wxBitmap
& GetImageCache() const { return m_imageCache
; }
4679 Sets the image cache.
4681 void SetImageCache(const wxBitmap
& bitmap
) { m_imageCache
= bitmap
; m_originalImageSize
= wxSize(bitmap
.GetWidth(), bitmap
.GetHeight()); }
4684 Resets the image cache.
4686 void ResetImageCache() { m_imageCache
= wxNullBitmap
; m_originalImageSize
= wxSize(-1, -1); }
4689 Returns the image block containing the raw data.
4691 wxRichTextImageBlock
& GetImageBlock() { return m_imageBlock
; }
4696 Copies the image object.
4698 void Copy(const wxRichTextImage
& obj
);
4701 Clones the image object.
4703 virtual wxRichTextObject
* Clone() const { return new wxRichTextImage(*this); }
4706 Creates a cached image at the required size.
4708 virtual bool LoadImageCache(wxDC
& dc
, bool resetCache
= false, const wxSize
& parentSize
= wxDefaultSize
);
4711 Gets the original image size.
4713 wxSize
GetOriginalImageSize() const { return m_originalImageSize
; }
4716 Sets the original image size.
4718 void SetOriginalImageSize(const wxSize
& sz
) { m_originalImageSize
= sz
; }
4721 wxRichTextImageBlock m_imageBlock
;
4722 wxBitmap m_imageCache
;
4723 wxSize m_originalImageSize
;
4726 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCommand
;
4727 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
4730 @class wxRichTextBuffer
4732 This is a kind of paragraph layout box, used to represent the whole buffer.
4734 @library{wxrichtext}
4737 @see wxRichTextParagraphLayoutBox, wxRichTextCtrl
4740 class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer
: public wxRichTextParagraphLayoutBox
4742 DECLARE_DYNAMIC_CLASS(wxRichTextBuffer
)
4747 Default constructor.
4749 wxRichTextBuffer() { Init(); }
4754 wxRichTextBuffer(const wxRichTextBuffer
& obj
): wxRichTextParagraphLayoutBox() { Init(); Copy(obj
); }
4756 virtual ~wxRichTextBuffer() ;
4761 Returns the command processor.
4762 A text buffer always creates its own command processor when it is initialized.
4764 wxCommandProcessor
* GetCommandProcessor() const { return m_commandProcessor
; }
4767 Sets style sheet, if any. This will allow the application to use named character and paragraph
4768 styles found in the style sheet.
4770 Neither the buffer nor the control owns the style sheet so must be deleted by the application.
4772 void SetStyleSheet(wxRichTextStyleSheet
* styleSheet
) { m_styleSheet
= styleSheet
; }
4775 Returns the style sheet.
4777 virtual wxRichTextStyleSheet
* GetStyleSheet() const { return m_styleSheet
; }
4780 Sets the style sheet and sends a notification of the change.
4782 bool SetStyleSheetAndNotify(wxRichTextStyleSheet
* sheet
);
4785 Pushes the style sheet to the top of the style sheet stack.
4787 bool PushStyleSheet(wxRichTextStyleSheet
* styleSheet
);
4790 Pops the style sheet from the top of the style sheet stack.
4792 wxRichTextStyleSheet
* PopStyleSheet();
4795 Returns the table storing fonts, for quick access and font reuse.
4797 wxRichTextFontTable
& GetFontTable() { return m_fontTable
; }
4800 Returns the table storing fonts, for quick access and font reuse.
4802 const wxRichTextFontTable
& GetFontTable() const { return m_fontTable
; }
4805 Sets table storing fonts, for quick access and font reuse.
4807 void SetFontTable(const wxRichTextFontTable
& table
) { m_fontTable
= table
; }
4810 Sets the scale factor for displaying fonts, for example for more comfortable
4813 void SetFontScale(double fontScale
);
4816 Returns the scale factor for displaying fonts, for example for more comfortable
4819 double GetFontScale() const { return m_fontScale
; }
4822 Sets the scale factor for displaying certain dimensions such as indentation and
4823 inter-paragraph spacing. This can be useful when editing in a small control
4824 where you still want legible text, but a minimum of wasted white space.
4826 void SetDimensionScale(double dimScale
);
4829 Returns the scale factor for displaying certain dimensions such as indentation
4830 and inter-paragraph spacing.
4832 double GetDimensionScale() const { return m_dimensionScale
; }
4842 Clears the buffer, adds an empty paragraph, and clears the command processor.
4844 virtual void ResetAndClearCommands();
4846 #if wxUSE_FFILE && wxUSE_STREAMS
4849 Loads content from a file.
4850 Not all handlers will implement file loading.
4852 virtual bool LoadFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4857 Saves content to a file.
4858 Not all handlers will implement file saving.
4860 virtual bool SaveFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4862 #endif // wxUSE_FFILE
4867 Loads content from a stream.
4868 Not all handlers will implement loading from a stream.
4870 virtual bool LoadFile(wxInputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4875 Saves content to a stream.
4876 Not all handlers will implement saving to a stream.
4878 virtual bool SaveFile(wxOutputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4880 #endif // wxUSE_STREAMS
4883 Sets the handler flags, controlling loading and saving.
4885 void SetHandlerFlags(int flags
) { m_handlerFlags
= flags
; }
4888 Gets the handler flags, controlling loading and saving.
4890 int GetHandlerFlags() const { return m_handlerFlags
; }
4893 Convenience function to add a paragraph of text.
4895 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
) { Modify(); return wxRichTextParagraphLayoutBox::AddParagraph(text
, paraStyle
); }
4898 Begin collapsing undo/redo commands. Note that this may not work properly
4899 if combining commands that delete or insert content, changing ranges for
4902 @a cmdName should be the name of the combined command that will appear
4903 next to Undo and Redo in the edit menu.
4905 virtual bool BeginBatchUndo(const wxString
& cmdName
);
4908 End collapsing undo/redo commands.
4910 virtual bool EndBatchUndo();
4913 Returns @true if we are collapsing commands.
4915 virtual bool BatchingUndo() const { return m_batchedCommandDepth
> 0; }
4918 Submit the action immediately, or delay according to whether collapsing is on.
4920 virtual bool SubmitAction(wxRichTextAction
* action
);
4923 Returns the collapsed command.
4925 virtual wxRichTextCommand
* GetBatchedCommand() const { return m_batchedCommand
; }
4928 Begin suppressing undo/redo commands. The way undo is suppressed may be implemented
4929 differently by each command. If not dealt with by a command implementation, then
4930 it will be implemented automatically by not storing the command in the undo history
4931 when the action is submitted to the command processor.
4933 virtual bool BeginSuppressUndo();
4936 End suppressing undo/redo commands.
4938 virtual bool EndSuppressUndo();
4941 Are we suppressing undo??
4943 virtual bool SuppressingUndo() const { return m_suppressUndo
> 0; }
4946 Copy the range to the clipboard.
4948 virtual bool CopyToClipboard(const wxRichTextRange
& range
);
4951 Paste the clipboard content to the buffer.
4953 virtual bool PasteFromClipboard(long position
);
4956 Returns @true if we can paste from the clipboard.
4958 virtual bool CanPasteFromClipboard() const;
4961 Begin using a style.
4963 virtual bool BeginStyle(const wxRichTextAttr
& style
);
4968 virtual bool EndStyle();
4973 virtual bool EndAllStyles();
4976 Clears the style stack.
4978 virtual void ClearStyleStack();
4981 Returns the size of the style stack, for example to check correct nesting.
4983 virtual size_t GetStyleStackSize() const { return m_attributeStack
.GetCount(); }
4993 bool EndBold() { return EndStyle(); }
4996 Begins using italic.
5003 bool EndItalic() { return EndStyle(); }
5006 Begins using underline.
5008 bool BeginUnderline();
5011 Ends using underline.
5013 bool EndUnderline() { return EndStyle(); }
5016 Begins using point size.
5018 bool BeginFontSize(int pointSize
);
5021 Ends using point size.
5023 bool EndFontSize() { return EndStyle(); }
5026 Begins using this font.
5028 bool BeginFont(const wxFont
& font
);
5033 bool EndFont() { return EndStyle(); }
5036 Begins using this colour.
5038 bool BeginTextColour(const wxColour
& colour
);
5041 Ends using a colour.
5043 bool EndTextColour() { return EndStyle(); }
5046 Begins using alignment.
5048 bool BeginAlignment(wxTextAttrAlignment alignment
);
5053 bool EndAlignment() { return EndStyle(); }
5056 Begins using @a leftIndent for the left indent, and optionally @a leftSubIndent for
5057 the sub-indent. Both are expressed in tenths of a millimetre.
5059 The sub-indent is an offset from the left of the paragraph, and is used for all
5060 but the first line in a paragraph. A positive value will cause the first line to appear
5061 to the left of the subsequent lines, and a negative value will cause the first line to be
5062 indented relative to the subsequent lines.
5064 bool BeginLeftIndent(int leftIndent
, int leftSubIndent
= 0);
5069 bool EndLeftIndent() { return EndStyle(); }
5072 Begins a right indent, specified in tenths of a millimetre.
5074 bool BeginRightIndent(int rightIndent
);
5079 bool EndRightIndent() { return EndStyle(); }
5082 Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
5083 in tenths of a millimetre.
5085 bool BeginParagraphSpacing(int before
, int after
);
5088 Ends paragraph spacing.
5090 bool EndParagraphSpacing() { return EndStyle(); }
5093 Begins line spacing using the specified value. @e spacing is a multiple, where
5094 10 means single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
5096 The ::wxTextAttrLineSpacing enumeration values are defined for convenience.
5098 bool BeginLineSpacing(int lineSpacing
);
5103 bool EndLineSpacing() { return EndStyle(); }
5106 Begins numbered bullet.
5108 This call will be needed for each item in the list, and the
5109 application should take care of incrementing the numbering.
5111 @a bulletNumber is a number, usually starting with 1.
5112 @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
5113 @a bulletStyle is a bitlist of the following values:
5115 wxRichTextBuffer uses indentation to render a bulleted item.
5116 The left indent is the distance between the margin and the bullet.
5117 The content of the paragraph, including the first line, starts
5118 at leftMargin + leftSubIndent.
5119 So the distance between the left edge of the bullet and the
5120 left of the actual paragraph is leftSubIndent.
5122 bool BeginNumberedBullet(int bulletNumber
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_ARABIC
|wxTEXT_ATTR_BULLET_STYLE_PERIOD
);
5125 Ends numbered bullet.
5127 bool EndNumberedBullet() { return EndStyle(); }
5130 Begins applying a symbol bullet, using a character from the current font.
5132 See BeginNumberedBullet() for an explanation of how indentation is used
5133 to render the bulleted paragraph.
5135 bool BeginSymbolBullet(const wxString
& symbol
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_SYMBOL
);
5140 bool EndSymbolBullet() { return EndStyle(); }
5143 Begins applying a standard bullet, using one of the standard bullet names
5144 (currently @c standard/circle or @c standard/square.
5146 See BeginNumberedBullet() for an explanation of how indentation is used to
5147 render the bulleted paragraph.
5149 bool BeginStandardBullet(const wxString
& bulletName
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_STANDARD
);
5152 Ends standard bullet.
5154 bool EndStandardBullet() { return EndStyle(); }
5157 Begins named character style.
5159 bool BeginCharacterStyle(const wxString
& characterStyle
);
5162 Ends named character style.
5164 bool EndCharacterStyle() { return EndStyle(); }
5167 Begins named paragraph style.
5169 bool BeginParagraphStyle(const wxString
& paragraphStyle
);
5172 Ends named character style.
5174 bool EndParagraphStyle() { return EndStyle(); }
5177 Begins named list style.
5179 Optionally, you can also pass a level and a number.
5181 bool BeginListStyle(const wxString
& listStyle
, int level
= 1, int number
= 1);
5184 Ends named character style.
5186 bool EndListStyle() { return EndStyle(); }
5189 Begins applying wxTEXT_ATTR_URL to the content.
5191 Pass a URL and optionally, a character style to apply, since it is common
5192 to mark a URL with a familiar style such as blue text with underlining.
5194 bool BeginURL(const wxString
& url
, const wxString
& characterStyle
= wxEmptyString
);
5199 bool EndURL() { return EndStyle(); }
5204 Adds an event handler.
5206 A buffer associated with a control has the control as the only event handler,
5207 but the application is free to add more if further notification is required.
5208 All handlers are notified of an event originating from the buffer, such as
5209 the replacement of a style sheet during loading.
5211 The buffer never deletes any of the event handlers, unless RemoveEventHandler()
5212 is called with @true as the second argument.
5214 bool AddEventHandler(wxEvtHandler
* handler
);
5217 Removes an event handler from the buffer's list of handlers, deleting the
5218 object if @a deleteHandler is @true.
5220 bool RemoveEventHandler(wxEvtHandler
* handler
, bool deleteHandler
= false);
5223 Clear event handlers.
5225 void ClearEventHandlers();
5228 Send event to event handlers. If sendToAll is true, will send to all event handlers,
5229 otherwise will stop at the first successful one.
5231 bool SendEvent(wxEvent
& event
, bool sendToAll
= true);
5235 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
5240 void Copy(const wxRichTextBuffer
& obj
);
5243 Assignment operator.
5245 void operator= (const wxRichTextBuffer
& obj
) { Copy(obj
); }
5250 virtual wxRichTextObject
* Clone() const { return new wxRichTextBuffer(*this); }
5253 Submits a command to insert paragraphs.
5255 bool InsertParagraphsWithUndo(long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
5258 Submits a command to insert the given text.
5260 bool InsertTextWithUndo(long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
5263 Submits a command to insert a newline.
5265 bool InsertNewlineWithUndo(long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
5268 Submits a command to insert the given image.
5270 bool InsertImageWithUndo(long pos
, const wxRichTextImageBlock
& imageBlock
, wxRichTextCtrl
* ctrl
, int flags
= 0,
5271 const wxRichTextAttr
& textAttr
= wxRichTextAttr());
5274 Submits a command to insert an object.
5276 wxRichTextObject
* InsertObjectWithUndo(long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
);
5279 Submits a command to delete this range.
5281 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
);
5286 void Modify(bool modify
= true) { m_modified
= modify
; }
5289 Returns @true if the buffer was modified.
5291 bool IsModified() const { return m_modified
; }
5295 Dumps contents of buffer for debugging purposes.
5297 virtual void Dump();
5298 virtual void Dump(wxTextOutputStream
& stream
) { wxRichTextParagraphLayoutBox::Dump(stream
); }
5302 Returns the file handlers.
5304 static wxList
& GetHandlers() { return sm_handlers
; }
5307 Adds a file handler to the end.
5309 static void AddHandler(wxRichTextFileHandler
*handler
);
5312 Inserts a file handler at the front.
5314 static void InsertHandler(wxRichTextFileHandler
*handler
);
5317 Removes a file handler.
5319 static bool RemoveHandler(const wxString
& name
);
5322 Finds a file handler by name.
5324 static wxRichTextFileHandler
*FindHandler(const wxString
& name
);
5327 Finds a file handler by extension and type.
5329 static wxRichTextFileHandler
*FindHandler(const wxString
& extension
, wxRichTextFileType imageType
);
5332 Finds a handler by filename or, if supplied, type.
5334 static wxRichTextFileHandler
*FindHandlerFilenameOrType(const wxString
& filename
,
5335 wxRichTextFileType imageType
);
5338 Finds a handler by type.
5340 static wxRichTextFileHandler
*FindHandler(wxRichTextFileType imageType
);
5343 Gets a wildcard incorporating all visible handlers. If @a types is present,
5344 it will be filled with the file type corresponding to each filter. This can be
5345 used to determine the type to pass to LoadFile given a selected filter.
5347 static wxString
GetExtWildcard(bool combine
= false, bool save
= false, wxArrayInt
* types
= NULL
);
5350 Clean up file handlers.
5352 static void CleanUpHandlers();
5355 Initialise the standard file handlers.
5356 Currently, only the plain text loading/saving handler is initialised by default.
5358 static void InitStandardHandlers();
5361 Returns the drawing handlers.
5363 static wxList
& GetDrawingHandlers() { return sm_drawingHandlers
; }
5366 Adds a drawing handler to the end.
5368 static void AddDrawingHandler(wxRichTextDrawingHandler
*handler
);
5371 Inserts a drawing handler at the front.
5373 static void InsertDrawingHandler(wxRichTextDrawingHandler
*handler
);
5376 Removes a drawing handler.
5378 static bool RemoveDrawingHandler(const wxString
& name
);
5381 Finds a drawing handler by name.
5383 static wxRichTextDrawingHandler
*FindDrawingHandler(const wxString
& name
);
5386 Clean up drawing handlers.
5388 static void CleanUpDrawingHandlers();
5391 Returns the field types.
5393 static wxRichTextFieldTypeHashMap
& GetFieldTypes() { return sm_fieldTypes
; }
5398 @see RemoveFieldType(), FindFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5401 static void AddFieldType(wxRichTextFieldType
*fieldType
);
5404 Removes a field type by name.
5406 @see AddFieldType(), FindFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5408 static bool RemoveFieldType(const wxString
& name
);
5411 Finds a field type by name.
5413 @see RemoveFieldType(), AddFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5415 static wxRichTextFieldType
*FindFieldType(const wxString
& name
);
5418 Cleans up field types.
5420 static void CleanUpFieldTypes();
5423 Returns the renderer object.
5425 static wxRichTextRenderer
* GetRenderer() { return sm_renderer
; }
5428 Sets @a renderer as the object to be used to render certain aspects of the
5429 content, such as bullets.
5431 You can override default rendering by deriving a new class from
5432 wxRichTextRenderer or wxRichTextStdRenderer, overriding one or more
5433 virtual functions, and setting an instance of the class using this function.
5435 static void SetRenderer(wxRichTextRenderer
* renderer
);
5438 Returns the minimum margin between bullet and paragraph in 10ths of a mm.
5440 static int GetBulletRightMargin() { return sm_bulletRightMargin
; }
5443 Sets the minimum margin between bullet and paragraph in 10ths of a mm.
5445 static void SetBulletRightMargin(int margin
) { sm_bulletRightMargin
= margin
; }
5448 Returns the factor to multiply by character height to get a reasonable bullet size.
5450 static float GetBulletProportion() { return sm_bulletProportion
; }
5453 Sets the factor to multiply by character height to get a reasonable bullet size.
5455 static void SetBulletProportion(float prop
) { sm_bulletProportion
= prop
; }
5458 Returns the scale factor for calculating dimensions.
5460 double GetScale() const { return m_scale
; }
5463 Sets the scale factor for calculating dimensions.
5465 void SetScale(double scale
) { m_scale
= scale
; }
5468 Sets the floating layout mode. Pass @false to speed up editing by not performing
5469 floating layout. This setting affects all buffers.
5472 static void SetFloatingLayoutMode(bool mode
) { sm_floatingLayoutMode
= mode
; }
5475 Returns the floating layout mode. The default is @true, where objects
5476 are laid out according to their floating status.
5478 static bool GetFloatingLayoutMode() { return sm_floatingLayoutMode
; }
5482 /// Command processor
5483 wxCommandProcessor
* m_commandProcessor
;
5485 /// Table storing fonts
5486 wxRichTextFontTable m_fontTable
;
5488 /// Has been modified?
5491 /// Collapsed command stack
5492 int m_batchedCommandDepth
;
5494 /// Name for collapsed command
5495 wxString m_batchedCommandsName
;
5497 /// Current collapsed command accumulating actions
5498 wxRichTextCommand
* m_batchedCommand
;
5500 /// Whether to suppress undo
5503 /// Style sheet, if any
5504 wxRichTextStyleSheet
* m_styleSheet
;
5506 /// List of event handlers that will be notified of events
5507 wxList m_eventHandlers
;
5509 /// Stack of attributes for convenience functions
5510 wxList m_attributeStack
;
5512 /// Flags to be passed to handlers
5516 static wxList sm_handlers
;
5518 /// Drawing handlers
5519 static wxList sm_drawingHandlers
;
5522 static wxRichTextFieldTypeHashMap sm_fieldTypes
;
5525 static wxRichTextRenderer
* sm_renderer
;
5527 /// Minimum margin between bullet and paragraph in 10ths of a mm
5528 static int sm_bulletRightMargin
;
5530 /// Factor to multiply by character height to get a reasonable bullet size
5531 static float sm_bulletProportion
;
5533 /// Floating layout mode, @true by default
5534 static bool sm_floatingLayoutMode
;
5536 /// Scaling factor in use: needed to calculate correct dimensions when printing
5539 /// Font scale for adjusting the text size when editing
5542 /// Dimension scale for reducing redundant whitespace when editing
5543 double m_dimensionScale
;
5547 @class wxRichTextCell
5549 wxRichTextCell is the cell in a table.
5552 class WXDLLIMPEXP_RICHTEXT wxRichTextCell
: public wxRichTextBox
5554 DECLARE_DYNAMIC_CLASS(wxRichTextCell
)
5559 Default constructor; optionally pass the parent object.
5562 wxRichTextCell(wxRichTextObject
* parent
= NULL
);
5568 wxRichTextCell(const wxRichTextCell
& obj
): wxRichTextBox() { Copy(obj
); }
5572 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
5574 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
5576 virtual wxString
GetXMLNodeName() const { return wxT("cell"); }
5578 virtual bool CanEditProperties() const { return true; }
5580 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
5582 virtual wxString
GetPropertiesMenuLabel() const { return wxGetTranslation("&Cell"); }
5586 int GetColspan() const;
5588 void SetColspan(long span
) { GetProperties().SetProperty(wxT("colspan"), span
); }
5590 int GetRowspan() const;
5592 void SetRowspan(long span
) { GetProperties().SetProperty(wxT("rowspan"), span
); }
5596 virtual wxRichTextObject
* Clone() const { return new wxRichTextCell(*this); }
5598 void Copy(const wxRichTextCell
& obj
);
5604 @class wxRichTextTable
5606 wxRichTextTable represents a table with arbitrary columns and rows.
5609 WX_DEFINE_ARRAY_PTR(wxRichTextObject
*, wxRichTextObjectPtrArray
);
5610 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextObjectPtrArray
, wxRichTextObjectPtrArrayArray
, WXDLLIMPEXP_RICHTEXT
);
5612 class WXDLLIMPEXP_RICHTEXT wxRichTextTable
: public wxRichTextBox
5614 DECLARE_DYNAMIC_CLASS(wxRichTextTable
)
5620 Default constructor; optionally pass the parent object.
5623 wxRichTextTable(wxRichTextObject
* parent
= NULL
);
5629 wxRichTextTable(const wxRichTextTable
& obj
): wxRichTextBox() { Copy(obj
); }
5633 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
5635 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
5637 virtual wxString
GetXMLNodeName() const { return wxT("table"); }
5639 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
5641 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
5643 virtual bool DeleteRange(const wxRichTextRange
& range
);
5645 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
5648 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
5651 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
5652 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
5655 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
5656 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
5659 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
5661 virtual void CalculateRange(long start
, long& end
);
5663 // Can this object handle the selections of its children? FOr example, a table.
5664 virtual bool HandlesChildSelections() const { return true; }
5666 /// Returns a selection object specifying the selections between start and end character positions.
5667 /// For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
5668 virtual wxRichTextSelection
GetSelection(long start
, long end
) const;
5670 virtual bool CanEditProperties() const { return true; }
5672 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
5674 virtual wxString
GetPropertiesMenuLabel() const { return wxGetTranslation("&Table"); }
5676 // Returns true if objects of this class can accept the focus, i.e. a call to SetFocusObject
5677 // is possible. For example, containers supporting text, such as a text box object, can accept the focus,
5678 // but a table can't (set the focus to individual cells instead).
5679 virtual bool AcceptsFocus() const { return false; }
5684 Returns the cells array.
5686 const wxRichTextObjectPtrArrayArray
& GetCells() const { return m_cells
; }
5689 Returns the cells array.
5691 wxRichTextObjectPtrArrayArray
& GetCells() { return m_cells
; }
5694 Returns the row count.
5696 int GetRowCount() const { return m_rowCount
; }
5701 void SetRowCount(int count
) { m_rowCount
= count
; }
5704 Returns the column count.
5706 int GetColumnCount() const { return m_colCount
; }
5709 Sets the column count.
5711 void SetColumnCount(int count
) { m_colCount
= count
; }
5714 Returns the cell at the given row/column position.
5716 virtual wxRichTextCell
* GetCell(int row
, int col
) const;
5719 Returns the cell at the given character position (in the range of the table).
5721 virtual wxRichTextCell
* GetCell(long pos
) const;
5724 Returns the row/column for a given character position.
5726 virtual bool GetCellRowColumnPosition(long pos
, int& row
, int& col
) const;
5729 Returns the coordinates of the cell with keyboard focus, or (-1,-1) if none.
5731 virtual wxPosition
GetFocusedCell() const;
5739 virtual void ClearTable();
5742 Creates a table of the given dimensions.
5745 virtual bool CreateTable(int rows
, int cols
);
5748 Sets the attributes for the cells specified by the selection.
5751 virtual bool SetCellStyle(const wxRichTextSelection
& selection
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
5754 Deletes rows from the given row position.
5757 virtual bool DeleteRows(int startRow
, int noRows
= 1);
5760 Deletes columns from the given column position.
5763 virtual bool DeleteColumns(int startCol
, int noCols
= 1);
5766 Adds rows from the given row position.
5769 virtual bool AddRows(int startRow
, int noRows
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
5772 Adds columns from the given column position.
5775 virtual bool AddColumns(int startCol
, int noCols
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
5777 // Makes a clone of this object.
5778 virtual wxRichTextObject
* Clone() const { return new wxRichTextTable(*this); }
5780 // Copies this object.
5781 void Copy(const wxRichTextTable
& obj
);
5788 // An array of rows, each of which is a wxRichTextObjectPtrArray containing
5789 // the cell objects. The cell objects are also children of this object.
5790 // Problem: if boxes are immediate children of a box, this will cause problems
5791 // with wxRichTextParagraphLayoutBox functions (and functions elsewhere) that
5792 // expect to find just paragraphs. May have to adjust the way we handle the
5793 // hierarchy to accept non-paragraph objects in a paragraph layout box.
5794 // We'll be overriding much wxRichTextParagraphLayoutBox functionality so this
5795 // may not be such a problem. Perhaps the table should derive from a different
5797 wxRichTextObjectPtrArrayArray m_cells
;
5800 /** @class wxRichTextTableBlock
5802 Stores the coordinates for a block of cells.
5805 class WXDLLIMPEXP_RICHTEXT wxRichTextTableBlock
5808 wxRichTextTableBlock() { Init(); }
5809 wxRichTextTableBlock(int colStart
, int colEnd
, int rowStart
, int rowEnd
)
5810 { Init(); m_colStart
= colStart
; m_colEnd
= colEnd
; m_rowStart
= rowStart
; m_rowEnd
= rowEnd
; }
5811 wxRichTextTableBlock(const wxRichTextTableBlock
& block
) { Copy(block
); }
5813 void Init() { m_colStart
= 0; m_colEnd
= 0; m_rowStart
= 0; m_rowEnd
= 0; }
5815 void Copy(const wxRichTextTableBlock
& block
)
5817 m_colStart
= block
.m_colStart
; m_colEnd
= block
.m_colEnd
; m_rowStart
= block
.m_rowStart
; m_rowEnd
= block
.m_rowEnd
;
5819 void operator=(const wxRichTextTableBlock
& block
) { Copy(block
); }
5820 bool operator==(const wxRichTextTableBlock
& block
)
5821 { return m_colStart
== block
.m_colStart
&& m_colEnd
== block
.m_colEnd
&& m_rowStart
== block
.m_rowStart
&& m_rowEnd
== block
.m_rowEnd
; }
5823 /// Computes the block given a table (perhaps about to be edited) and a rich text control
5824 /// that may have a selection. If no selection, the whole table is used. If just the whole content
5825 /// of one cell is selected, this cell only is used. If the cell contents is not selected and
5826 /// requireCellSelection is @false, the focused cell will count as a selected cell.
5827 bool ComputeBlockForSelection(wxRichTextTable
* table
, wxRichTextCtrl
* ctrl
, bool requireCellSelection
= true);
5829 /// Does this block represent the whole table?
5830 bool IsWholeTable(wxRichTextTable
* table
) const;
5832 /// Returns the cell focused in the table, if any
5833 static wxRichTextCell
* GetFocusedCell(wxRichTextCtrl
* ctrl
);
5835 int& ColStart() { return m_colStart
; }
5836 int ColStart() const { return m_colStart
; }
5838 int& ColEnd() { return m_colEnd
; }
5839 int ColEnd() const { return m_colEnd
; }
5841 int& RowStart() { return m_rowStart
; }
5842 int RowStart() const { return m_rowStart
; }
5844 int& RowEnd() { return m_rowEnd
; }
5845 int RowEnd() const { return m_rowEnd
; }
5847 int m_colStart
, m_colEnd
, m_rowStart
, m_rowEnd
;
5851 The command identifiers for Do/Undo.
5854 enum wxRichTextCommandId
5858 wxRICHTEXT_CHANGE_ATTRIBUTES
,
5859 wxRICHTEXT_CHANGE_STYLE
,
5860 wxRICHTEXT_CHANGE_PROPERTIES
,
5861 wxRICHTEXT_CHANGE_OBJECT
5865 @class wxRichTextObjectAddress
5867 A class for specifying an object anywhere in an object hierarchy,
5868 without using a pointer, necessary since wxRTC commands may delete
5869 and recreate sub-objects so physical object addresses change. An array
5870 of positions (one per hierarchy level) is used.
5872 @library{wxrichtext}
5875 @see wxRichTextCommand
5878 class WXDLLIMPEXP_RICHTEXT wxRichTextObjectAddress
5882 Creates the address given a container and an object.
5884 wxRichTextObjectAddress(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
) { Create(topLevelContainer
, obj
); }
5887 wxRichTextObjectAddress() { Init(); }
5890 wxRichTextObjectAddress(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5897 void Copy(const wxRichTextObjectAddress
& address
) { m_address
= address
.m_address
; }
5900 Assignment operator.
5902 void operator=(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5905 Returns the object specified by the address, given a top level container.
5907 wxRichTextObject
* GetObject(wxRichTextParagraphLayoutBox
* topLevelContainer
) const;
5910 Creates the address given a container and an object.
5912 bool Create(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
);
5915 Returns the array of integers representing the object address.
5917 wxArrayInt
& GetAddress() { return m_address
; }
5920 Returns the array of integers representing the object address.
5922 const wxArrayInt
& GetAddress() const { return m_address
; }
5925 Sets the address from an array of integers.
5927 void SetAddress(const wxArrayInt
& address
) { m_address
= address
; }
5931 wxArrayInt m_address
;
5934 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
5937 @class wxRichTextCommand
5939 Implements a command on the undo/redo stack. A wxRichTextCommand object contains one or more wxRichTextAction
5940 objects, allowing aggregation of a number of operations into one command.
5942 @library{wxrichtext}
5945 @see wxRichTextAction
5948 class WXDLLIMPEXP_RICHTEXT wxRichTextCommand
: public wxCommand
5952 Constructor for one action.
5954 wxRichTextCommand(const wxString
& name
, wxRichTextCommandId id
, wxRichTextBuffer
* buffer
,
5955 wxRichTextParagraphLayoutBox
* container
, wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5958 Constructor for multiple actions.
5960 wxRichTextCommand(const wxString
& name
);
5962 virtual ~wxRichTextCommand();
5965 Performs the command.
5975 Adds an action to the action list.
5977 void AddAction(wxRichTextAction
* action
);
5980 Clears the action list.
5982 void ClearActions();
5985 Returns the action list.
5987 wxList
& GetActions() { return m_actions
; }
5995 @class wxRichTextAction
5997 Implements a part of a command.
5999 @library{wxrichtext}
6002 @see wxRichTextCommand
6005 class WXDLLIMPEXP_RICHTEXT wxRichTextAction
: public wxObject
6009 Constructor. @a buffer is the top-level buffer, while @a container is the object within
6010 which the action is taking place. In the simplest case, they are the same.
6012 wxRichTextAction(wxRichTextCommand
* cmd
, const wxString
& name
, wxRichTextCommandId id
,
6013 wxRichTextBuffer
* buffer
, wxRichTextParagraphLayoutBox
* container
,
6014 wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
6016 virtual ~wxRichTextAction();
6019 Performs the action.
6029 Updates the control appearance, optimizing if possible given information from the call to Layout.
6031 void UpdateAppearance(long caretPosition
, bool sendUpdateEvent
= false,
6032 wxArrayInt
* optimizationLineCharPositions
= NULL
, wxArrayInt
* optimizationLineYPositions
= NULL
, bool isDoCmd
= true);
6035 Replaces the buffer paragraphs with the given fragment.
6037 void ApplyParagraphs(const wxRichTextParagraphLayoutBox
& fragment
);
6040 Returns the new fragments.
6042 wxRichTextParagraphLayoutBox
& GetNewParagraphs() { return m_newParagraphs
; }
6045 Returns the old fragments.
6047 wxRichTextParagraphLayoutBox
& GetOldParagraphs() { return m_oldParagraphs
; }
6050 Returns the attributes, for single-object commands.
6052 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
6055 Returns the object to replace the one at the position defined by the container address
6056 and the action's range start position.
6058 wxRichTextObject
* GetObject() const { return m_object
; }
6061 Stores the object to replace the one at the position defined by the container address
6062 without making an address for it (cf SetObject() and MakeObject()).
6064 void StoreObject(wxRichTextObject
* obj
) { m_object
= obj
; }
6067 Sets the object to replace the one at the position defined by the container address
6068 and the action's range start position.
6070 void SetObject(wxRichTextObject
* obj
) { m_object
= obj
; m_objectAddress
.Create(m_buffer
, m_object
); }
6073 Makes an address from the given object.
6075 void MakeObject(wxRichTextObject
* obj
) { m_objectAddress
.Create(m_buffer
, obj
); }
6078 Sets the existing and new objects, for use with wxRICHTEXT_CHANGE_OBJECT.
6080 void SetOldAndNewObjects(wxRichTextObject
* oldObj
, wxRichTextObject
* newObj
) { SetObject(oldObj
); StoreObject(newObj
); }
6083 Calculate arrays for refresh optimization.
6085 void CalculateRefreshOptimizations(wxArrayInt
& optimizationLineCharPositions
, wxArrayInt
& optimizationLineYPositions
);
6088 Sets the position used for e.g. insertion.
6090 void SetPosition(long pos
) { m_position
= pos
; }
6093 Returns the position used for e.g. insertion.
6095 long GetPosition() const { return m_position
; }
6098 Sets the range for e.g. deletion.
6100 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
6103 Returns the range for e.g. deletion.
6105 const wxRichTextRange
& GetRange() const { return m_range
; }
6108 Returns the address (nested position) of the container within the buffer being manipulated.
6110 wxRichTextObjectAddress
& GetContainerAddress() { return m_containerAddress
; }
6113 Returns the address (nested position) of the container within the buffer being manipulated.
6115 const wxRichTextObjectAddress
& GetContainerAddress() const { return m_containerAddress
; }
6118 Sets the address (nested position) of the container within the buffer being manipulated.
6120 void SetContainerAddress(const wxRichTextObjectAddress
& address
) { m_containerAddress
= address
; }
6123 Sets the address (nested position) of the container within the buffer being manipulated.
6125 void SetContainerAddress(wxRichTextParagraphLayoutBox
* container
, wxRichTextObject
* obj
) { m_containerAddress
.Create(container
, obj
); }
6128 Returns the container that this action refers to, using the container address and top-level buffer.
6130 wxRichTextParagraphLayoutBox
* GetContainer() const;
6133 Returns the action name.
6135 const wxString
& GetName() const { return m_name
; }
6142 wxRichTextBuffer
* m_buffer
;
6144 // The address (nested position) of the container being manipulated.
6145 // This is necessary because objects are deleted, and we can't
6146 // therefore store actual pointers.
6147 wxRichTextObjectAddress m_containerAddress
;
6150 wxRichTextCtrl
* m_ctrl
;
6152 // Stores the new paragraphs
6153 wxRichTextParagraphLayoutBox m_newParagraphs
;
6155 // Stores the old paragraphs
6156 wxRichTextParagraphLayoutBox m_oldParagraphs
;
6158 // Stores an object to replace the one at the position
6159 // defined by the container address and the action's range start position.
6160 wxRichTextObject
* m_object
;
6162 // Stores the attributes
6163 wxRichTextAttr m_attributes
;
6165 // The address of the object being manipulated (used for changing an individual object or its attributes)
6166 wxRichTextObjectAddress m_objectAddress
;
6168 // Stores the old attributes
6169 // wxRichTextAttr m_oldAttributes;
6171 // The affected range
6172 wxRichTextRange m_range
;
6174 // The insertion point for this command
6177 // Ignore 1st 'Do' operation because we already did it
6180 // The command identifier
6181 wxRichTextCommandId m_cmdId
;
6188 // Include style sheet when loading and saving
6189 #define wxRICHTEXT_HANDLER_INCLUDE_STYLESHEET 0x0001
6191 // Save images to memory file system in HTML handler
6192 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY 0x0010
6194 // Save images to files in HTML handler
6195 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_FILES 0x0020
6197 // Save images as inline base64 data in HTML handler
6198 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_BASE64 0x0040
6200 // Don't write header and footer (or BODY), so we can include the fragment
6201 // in a larger document
6202 #define wxRICHTEXT_HANDLER_NO_HEADER_FOOTER 0x0080
6204 // Convert the more common face names to names that will work on the current platform
6205 // in a larger document
6206 #define wxRICHTEXT_HANDLER_CONVERT_FACENAMES 0x0100
6209 @class wxRichTextFileHandler
6211 The base class for file handlers.
6213 @library{wxrichtext}
6216 @see wxRichTextBuffer, wxRichTextCtrl
6219 class WXDLLIMPEXP_RICHTEXT wxRichTextFileHandler
: public wxObject
6221 DECLARE_CLASS(wxRichTextFileHandler
)
6224 Creates a file handler object.
6226 wxRichTextFileHandler(const wxString
& name
= wxEmptyString
, const wxString
& ext
= wxEmptyString
, int type
= 0)
6227 : m_name(name
), m_extension(ext
), m_type(type
), m_flags(0), m_visible(true)
6232 Loads the buffer from a stream.
6233 Not all handlers will implement file loading.
6235 bool LoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
)
6236 { return DoLoadFile(buffer
, stream
); }
6239 Saves the buffer to a stream.
6240 Not all handlers will implement file saving.
6242 bool SaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
)
6243 { return DoSaveFile(buffer
, stream
); }
6246 #if wxUSE_FFILE && wxUSE_STREAMS
6248 Loads the buffer from a file.
6250 virtual bool LoadFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
6253 Saves the buffer to a file.
6255 virtual bool SaveFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
6256 #endif // wxUSE_STREAMS && wxUSE_STREAMS
6259 Returns @true if we handle this filename (if using files). By default, checks the extension.
6261 virtual bool CanHandle(const wxString
& filename
) const;
6264 Returns @true if we can save using this handler.
6266 virtual bool CanSave() const { return false; }
6269 Returns @true if we can load using this handler.
6271 virtual bool CanLoad() const { return false; }
6274 Returns @true if this handler should be visible to the user.
6276 virtual bool IsVisible() const { return m_visible
; }
6279 Sets whether the handler should be visible to the user (via the application's
6280 load and save dialogs).
6282 virtual void SetVisible(bool visible
) { m_visible
= visible
; }
6285 Sets the name of the handler.
6287 void SetName(const wxString
& name
) { m_name
= name
; }
6290 Returns the name of the handler.
6292 wxString
GetName() const { return m_name
; }
6295 Sets the default extension to recognise.
6297 void SetExtension(const wxString
& ext
) { m_extension
= ext
; }
6300 Returns the default extension to recognise.
6302 wxString
GetExtension() const { return m_extension
; }
6305 Sets the handler type.
6307 void SetType(int type
) { m_type
= type
; }
6310 Returns the handler type.
6312 int GetType() const { return m_type
; }
6315 Sets flags that change the behaviour of loading or saving.
6316 See the documentation for each handler class to see what flags are relevant
6319 You call this function directly if you are using a file handler explicitly
6320 (without going through the text control or buffer LoadFile/SaveFile API).
6321 Or, you can call the control or buffer's SetHandlerFlags function to set
6322 the flags that will be used for subsequent load and save operations.
6324 void SetFlags(int flags
) { m_flags
= flags
; }
6327 Returns flags controlling how loading and saving is done.
6329 int GetFlags() const { return m_flags
; }
6332 Sets the encoding to use when saving a file. If empty, a suitable encoding is chosen.
6334 void SetEncoding(const wxString
& encoding
) { m_encoding
= encoding
; }
6337 Returns the encoding to use when saving a file. If empty, a suitable encoding is chosen.
6339 const wxString
& GetEncoding() const { return m_encoding
; }
6345 Override to load content from @a stream into @a buffer.
6347 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
) = 0;
6350 Override to save content to @a stream from @a buffer.
6352 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
) = 0;
6356 wxString m_encoding
;
6357 wxString m_extension
;
6364 @class wxRichTextPlainTextHandler
6366 Implements saving a buffer to plain text.
6368 @library{wxrichtext}
6371 @see wxRichTextFileHandler, wxRichTextBuffer, wxRichTextCtrl
6374 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainTextHandler
: public wxRichTextFileHandler
6376 DECLARE_CLASS(wxRichTextPlainTextHandler
)
6378 wxRichTextPlainTextHandler(const wxString
& name
= wxT("Text"),
6379 const wxString
& ext
= wxT("txt"),
6380 wxRichTextFileType type
= wxRICHTEXT_TYPE_TEXT
)
6381 : wxRichTextFileHandler(name
, ext
, type
)
6384 // Can we save using this handler?
6385 virtual bool CanSave() const { return true; }
6387 // Can we load using this handler?
6388 virtual bool CanLoad() const { return true; }
6393 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
);
6394 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
);
6400 @class wxRichTextDrawingHandler
6402 The base class for custom drawing handlers.
6403 Currently, drawing handlers can provide virtual attributes.
6405 @library{wxrichtext}
6408 @see wxRichTextBuffer, wxRichTextCtrl
6411 class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingHandler
: public wxObject
6413 DECLARE_CLASS(wxRichTextDrawingHandler
)
6416 Creates a drawing handler object.
6418 wxRichTextDrawingHandler(const wxString
& name
= wxEmptyString
)
6423 Returns @true if this object has virtual attributes that we can provide.
6425 virtual bool HasVirtualAttributes(wxRichTextObject
* obj
) const = 0;
6428 Provides virtual attributes that we can provide.
6430 virtual bool GetVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const = 0;
6433 Gets the count for mixed virtual attributes for individual positions within the object.
6434 For example, individual characters within a text object may require special highlighting.
6436 virtual int GetVirtualSubobjectAttributesCount(wxRichTextObject
* obj
) const = 0;
6439 Gets the mixed virtual attributes for individual positions within the object.
6440 For example, individual characters within a text object may require special highlighting.
6441 Returns the number of virtual attributes found.
6443 virtual int GetVirtualSubobjectAttributes(wxRichTextObject
* obj
, wxArrayInt
& positions
, wxRichTextAttrArray
& attributes
) const = 0;
6446 Do we have virtual text for this object? Virtual text allows an application
6447 to replace characters in an object for editing and display purposes, for example
6448 for highlighting special characters.
6450 virtual bool HasVirtualText(const wxRichTextPlainText
* obj
) const = 0;
6453 Gets the virtual text for this object.
6455 virtual bool GetVirtualText(const wxRichTextPlainText
* obj
, wxString
& text
) const = 0;
6458 Sets the name of the handler.
6460 void SetName(const wxString
& name
) { m_name
= name
; }
6463 Returns the name of the handler.
6465 wxString
GetName() const { return m_name
; }
6475 @class wxRichTextBufferDataObject
6477 Implements a rich text data object for clipboard transfer.
6479 @library{wxrichtext}
6482 @see wxDataObjectSimple, wxRichTextBuffer, wxRichTextCtrl
6485 class WXDLLIMPEXP_RICHTEXT wxRichTextBufferDataObject
: public wxDataObjectSimple
6489 The constructor doesn't copy the pointer, so it shouldn't go away while this object
6492 wxRichTextBufferDataObject(wxRichTextBuffer
* richTextBuffer
= NULL
);
6493 virtual ~wxRichTextBufferDataObject();
6496 After a call to this function, the buffer is owned by the caller and it
6497 is responsible for deleting it.
6499 wxRichTextBuffer
* GetRichTextBuffer();
6502 Returns the id for the new data format.
6504 static const wxChar
* GetRichTextBufferFormatId() { return ms_richTextBufferFormatId
; }
6506 // base class pure virtuals
6508 virtual wxDataFormat
GetPreferredFormat(Direction dir
) const;
6509 virtual size_t GetDataSize() const;
6510 virtual bool GetDataHere(void *pBuf
) const;
6511 virtual bool SetData(size_t len
, const void *buf
);
6515 virtual size_t GetDataSize(const wxDataFormat
&) const { return GetDataSize(); }
6516 virtual bool GetDataHere(const wxDataFormat
&, void *buf
) const { return GetDataHere(buf
); }
6517 virtual bool SetData(const wxDataFormat
&, size_t len
, const void *buf
) { return SetData(len
, buf
); }
6520 wxDataFormat m_formatRichTextBuffer
; // our custom format
6521 wxRichTextBuffer
* m_richTextBuffer
; // our data
6522 static const wxChar
* ms_richTextBufferFormatId
; // our format id
6528 @class wxRichTextRenderer
6530 This class isolates some common drawing functionality.
6532 @library{wxrichtext}
6535 @see wxRichTextBuffer, wxRichTextCtrl
6538 class WXDLLIMPEXP_RICHTEXT wxRichTextRenderer
: public wxObject
6544 wxRichTextRenderer() {}
6545 virtual ~wxRichTextRenderer() {}
6548 Draws a standard bullet, as specified by the value of GetBulletName. This function should be overridden.
6550 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
6553 Draws a bullet that can be described by text, such as numbered or symbol bullets. This function should be overridden.
6555 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
) = 0;
6558 Draws a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName. This function should be overridden.
6560 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
6563 Enumerate the standard bullet names currently supported. This function should be overridden.
6565 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
) = 0;
6569 @class wxRichTextStdRenderer
6571 The standard renderer for drawing bullets.
6573 @library{wxrichtext}
6576 @see wxRichTextRenderer, wxRichTextBuffer, wxRichTextCtrl
6579 class WXDLLIMPEXP_RICHTEXT wxRichTextStdRenderer
: public wxRichTextRenderer
6585 wxRichTextStdRenderer() {}
6587 // Draw a standard bullet, as specified by the value of GetBulletName
6588 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
6590 // Draw a bullet that can be described by text, such as numbered or symbol bullets
6591 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
);
6593 // Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
6594 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
6596 // Enumerate the standard bullet names currently supported
6597 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
);
6605 inline bool wxRichTextHasStyle(int flags
, int style
)
6607 return ((flags
& style
) == style
);
6610 /// Compare two attribute objects
6611 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6612 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6614 /// Apply one style to another
6615 WXDLLIMPEXP_RICHTEXT
bool wxRichTextApplyStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
* compareWith
= NULL
);
6617 // Remove attributes
6618 WXDLLIMPEXP_RICHTEXT
bool wxRichTextRemoveStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
);
6620 /// Combine two bitlists
6621 WXDLLIMPEXP_RICHTEXT
bool wxRichTextCombineBitlists(int& valueA
, int valueB
, int& flagsA
, int flagsB
);
6623 /// Compare two bitlists
6624 WXDLLIMPEXP_RICHTEXT
bool wxRichTextBitlistsEqPartial(int valueA
, int valueB
, int flags
);
6626 /// Split into paragraph and character styles
6627 WXDLLIMPEXP_RICHTEXT
bool wxRichTextSplitParaCharStyles(const wxRichTextAttr
& style
, wxRichTextAttr
& parStyle
, wxRichTextAttr
& charStyle
);
6630 WXDLLIMPEXP_RICHTEXT
bool wxRichTextTabsEq(const wxArrayInt
& tabs1
, const wxArrayInt
& tabs2
);
6632 /// Convert a decimal to Roman numerals
6633 WXDLLIMPEXP_RICHTEXT wxString
wxRichTextDecimalToRoman(long n
);
6635 // Collects the attributes that are common to a range of content, building up a note of
6636 // which attributes are absent in some objects and which clash in some objects.
6637 WXDLLIMPEXP_RICHTEXT
void wxTextAttrCollectCommonAttributes(wxTextAttr
& currentStyle
, const wxTextAttr
& attr
, wxTextAttr
& clashingAttr
, wxTextAttr
& absentAttr
);
6639 WXDLLIMPEXP_RICHTEXT
void wxRichTextModuleInit();
6645 // _WX_RICHTEXTBUFFER_H_