1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/richtext/richtextbuffer.h
3 // Purpose: Buffer for wxRichTextCtrl
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_RICHTEXTBUFFER_H_
13 #define _WX_RICHTEXTBUFFER_H_
20 Data is represented by a hierarchy of objects, all derived from
23 The top of the hierarchy is the buffer, a kind of wxRichTextParagraphLayoutBox.
24 These boxes will allow flexible placement of text boxes on a page, but
25 for now there is a single box representing the document, and this box is
26 a wxRichTextParagraphLayoutBox which contains further wxRichTextParagraph
27 objects, each of which can include text and images.
29 Each object maintains a range (start and end position) measured
30 from the start of the main parent box.
31 A paragraph object knows its range, and a text fragment knows its range
32 too. So, a character or image in a page has a position relative to the
33 start of the document, and a character in an embedded text box has
34 a position relative to that text box. For now, we will not be dealing with
35 embedded objects but it's something to bear in mind for later.
37 Note that internally, a range (5,5) represents a range of one character.
38 In the public wx[Rich]TextCtrl API, this would be passed to e.g. SetSelection
39 as (5,6). A paragraph with one character might have an internal range of (0, 1)
40 since the end of the paragraph takes up one position.
45 When Layout is called on an object, it is given a size which the object
46 must limit itself to, or one or more flexible directions (vertical
47 or horizontal). So for example a centered paragraph is given the page
48 width to play with (minus any margins), but can extend indefinitely
49 in the vertical direction. The implementation of Layout can then
50 cache the calculated size and position within the parent.
63 #include "wx/textctrl.h"
64 #include "wx/bitmap.h"
66 #include "wx/cmdproc.h"
67 #include "wx/txtstrm.h"
68 #include "wx/variant.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 wxRichTextCacheObject
;
129 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextObjectList
;
130 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextLine
;
131 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextParagraph
;
132 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextFileHandler
;
133 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextDrawingHandler
;
134 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextField
;
135 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextFieldType
;
136 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextStyleSheet
;
137 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextListStyleDefinition
;
138 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextEvent
;
139 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextRenderer
;
140 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextBuffer
;
141 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextXMLHandler
;
142 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextParagraphLayoutBox
;
143 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextImageBlock
;
144 class WXDLLIMPEXP_FWD_XML wxXmlNode
;
145 class wxRichTextFloatCollector
;
146 class WXDLLIMPEXP_FWD_BASE wxDataInputStream
;
147 class WXDLLIMPEXP_FWD_BASE wxDataOutputStream
;
150 Flags determining the available space, passed to Layout.
153 #define wxRICHTEXT_FIXED_WIDTH 0x01
154 #define wxRICHTEXT_FIXED_HEIGHT 0x02
155 #define wxRICHTEXT_VARIABLE_WIDTH 0x04
156 #define wxRICHTEXT_VARIABLE_HEIGHT 0x08
158 // Only lay out the part of the buffer that lies within
159 // the rect passed to Layout.
160 #define wxRICHTEXT_LAYOUT_SPECIFIED_RECT 0x10
163 Flags to pass to Draw
166 // Ignore paragraph cache optimization, e.g. for printing purposes
167 // where one line may be drawn higher (on the next page) compared
168 // with the previous line
169 #define wxRICHTEXT_DRAW_IGNORE_CACHE 0x01
170 #define wxRICHTEXT_DRAW_SELECTED 0x02
171 #define wxRICHTEXT_DRAW_PRINT 0x04
172 #define wxRICHTEXT_DRAW_GUIDELINES 0x08
175 Flags returned from hit-testing, or passed to hit-test function.
177 enum wxRichTextHitTestFlags
179 // The point was not on this object
180 wxRICHTEXT_HITTEST_NONE
= 0x01,
182 // The point was before the position returned from HitTest
183 wxRICHTEXT_HITTEST_BEFORE
= 0x02,
185 // The point was after the position returned from HitTest
186 wxRICHTEXT_HITTEST_AFTER
= 0x04,
188 // The point was on the position returned from HitTest
189 wxRICHTEXT_HITTEST_ON
= 0x08,
191 // The point was on space outside content
192 wxRICHTEXT_HITTEST_OUTSIDE
= 0x10,
194 // Only do hit-testing at the current level (don't traverse into top-level objects)
195 wxRICHTEXT_HITTEST_NO_NESTED_OBJECTS
= 0x20,
197 // Ignore floating objects
198 wxRICHTEXT_HITTEST_NO_FLOATING_OBJECTS
= 0x40,
200 // Don't recurse into objects marked as atomic
201 wxRICHTEXT_HITTEST_HONOUR_ATOMIC
= 0x80
205 Flags for GetRangeSize.
208 #define wxRICHTEXT_FORMATTED 0x01
209 #define wxRICHTEXT_UNFORMATTED 0x02
210 #define wxRICHTEXT_CACHE_SIZE 0x04
211 #define wxRICHTEXT_HEIGHT_ONLY 0x08
214 Flags for SetStyle/SetListStyle.
217 #define wxRICHTEXT_SETSTYLE_NONE 0x00
219 // Specifies that this operation should be undoable
220 #define wxRICHTEXT_SETSTYLE_WITH_UNDO 0x01
222 // Specifies that the style should not be applied if the
223 // combined style at this point is already the style in question.
224 #define wxRICHTEXT_SETSTYLE_OPTIMIZE 0x02
226 // Specifies that the style should only be applied to paragraphs,
227 // and not the content. This allows content styling to be
228 // preserved independently from that of e.g. a named paragraph style.
229 #define wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY 0x04
231 // Specifies that the style should only be applied to characters,
232 // and not the paragraph. This allows content styling to be
233 // preserved independently from that of e.g. a named paragraph style.
234 #define wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY 0x08
236 // For SetListStyle only: specifies starting from the given number, otherwise
237 // deduces number from existing attributes
238 #define wxRICHTEXT_SETSTYLE_RENUMBER 0x10
240 // For SetListStyle only: specifies the list level for all paragraphs, otherwise
241 // the current indentation will be used
242 #define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20
244 // Resets the existing style before applying the new style
245 #define wxRICHTEXT_SETSTYLE_RESET 0x40
247 // Removes the given style instead of applying it
248 #define wxRICHTEXT_SETSTYLE_REMOVE 0x80
251 Flags for SetProperties.
254 #define wxRICHTEXT_SETPROPERTIES_NONE 0x00
256 // Specifies that this operation should be undoable
257 #define wxRICHTEXT_SETPROPERTIES_WITH_UNDO 0x01
259 // Specifies that the properties should only be applied to paragraphs,
260 // and not the content.
261 #define wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY 0x02
263 // Specifies that the properties should only be applied to characters,
264 // and not the paragraph.
265 #define wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY 0x04
267 // Resets the existing properties before applying the new properties.
268 #define wxRICHTEXT_SETPROPERTIES_RESET 0x08
270 // Removes the given properties instead of applying them.
271 #define wxRICHTEXT_SETPROPERTIES_REMOVE 0x10
274 Flags for object insertion.
277 #define wxRICHTEXT_INSERT_NONE 0x00
278 #define wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE 0x01
279 #define wxRICHTEXT_INSERT_INTERACTIVE 0x02
281 // A special flag telling the buffer to keep the first paragraph style
282 // as-is, when deleting a paragraph marker. In future we might pass a
283 // flag to InsertFragment and DeleteRange to indicate the appropriate mode.
284 #define wxTEXT_ATTR_KEEP_FIRST_PARA_STYLE 0x20000000
287 Default superscript/subscript font multiplication factor.
290 #define wxSCRIPT_MUL_FACTOR 1.5
293 The type for wxTextAttrDimension flags.
295 typedef unsigned short wxTextAttrDimensionFlags
;
298 Miscellaneous text box flags
300 enum wxTextBoxAttrFlags
302 wxTEXT_BOX_ATTR_FLOAT
= 0x00000001,
303 wxTEXT_BOX_ATTR_CLEAR
= 0x00000002,
304 wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
= 0x00000004,
305 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
= 0x00000008,
306 wxTEXT_BOX_ATTR_BOX_STYLE_NAME
= 0x00000010
310 Whether a value is present, used in dimension flags.
312 enum wxTextAttrValueFlags
314 wxTEXT_ATTR_VALUE_VALID
= 0x1000,
315 wxTEXT_ATTR_VALUE_VALID_MASK
= 0x1000
319 Units, included in the dimension value.
323 wxTEXT_ATTR_UNITS_TENTHS_MM
= 0x0001,
324 wxTEXT_ATTR_UNITS_PIXELS
= 0x0002,
325 wxTEXT_ATTR_UNITS_PERCENTAGE
= 0x0004,
326 wxTEXT_ATTR_UNITS_POINTS
= 0x0008,
328 wxTEXT_ATTR_UNITS_MASK
= 0x000F
332 Position alternatives, included in the dimension flags.
334 enum wxTextBoxAttrPosition
336 wxTEXT_BOX_ATTR_POSITION_STATIC
= 0x0000, // Default is static, i.e. as per normal layout
337 wxTEXT_BOX_ATTR_POSITION_RELATIVE
= 0x0010, // Relative to the relevant edge
338 wxTEXT_BOX_ATTR_POSITION_ABSOLUTE
= 0x0020, // Relative to the parent
339 wxTEXT_BOX_ATTR_POSITION_FIXED
= 0x0040, // Relative to the top-level window
341 wxTEXT_BOX_ATTR_POSITION_MASK
= 0x00F0
345 @class wxTextAttrDimension
347 A class representing a rich text dimension, including units and position.
352 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimensions
355 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimension
361 wxTextAttrDimension() { Reset(); }
363 Constructor taking value and units flag.
365 wxTextAttrDimension(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { m_value
= value
; m_flags
= units
|wxTEXT_ATTR_VALUE_VALID
; }
368 Resets the dimension value and flags.
370 void Reset() { m_value
= 0; m_flags
= 0; }
373 Partial equality test. If @a weakTest is @true, attributes of this object do not
374 have to be present if those attributes of @a dim are present. If @a weakTest is
375 @false, the function will fail if an attribute is present in @a dim but not
378 bool EqPartial(const wxTextAttrDimension
& dim
, bool weakTest
= true) const;
380 /** Apply the dimension, but not those identical to @a compareWith if present.
382 bool Apply(const wxTextAttrDimension
& dim
, const wxTextAttrDimension
* compareWith
= NULL
);
384 /** Collects the attributes that are common to a range of content, building up a note of
385 which attributes are absent in some objects and which clash in some objects.
387 void CollectCommonAttributes(const wxTextAttrDimension
& attr
, wxTextAttrDimension
& clashingAttr
, wxTextAttrDimension
& absentAttr
);
392 bool operator==(const wxTextAttrDimension
& dim
) const { return m_value
== dim
.m_value
&& m_flags
== dim
.m_flags
; }
395 Returns the integer value of the dimension.
397 int GetValue() const { return m_value
; }
400 Returns the floating-pointing value of the dimension in mm.
403 float GetValueMM() const { return float(m_value
) / 10.0; }
406 Sets the value of the dimension in mm.
408 void SetValueMM(float value
) { m_value
= (int) ((value
* 10.0) + 0.5); m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
411 Sets the integer value of the dimension.
413 void SetValue(int value
) { m_value
= value
; m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
416 Sets the integer value of the dimension, passing dimension flags.
418 void SetValue(int value
, wxTextAttrDimensionFlags flags
) { SetValue(value
); m_flags
= flags
; }
421 Sets the integer value and units.
423 void SetValue(int value
, wxTextAttrUnits units
) { m_value
= value
; m_flags
= units
| wxTEXT_ATTR_VALUE_VALID
; }
428 void SetValue(const wxTextAttrDimension
& dim
) { (*this) = dim
; }
431 Gets the units of the dimension.
433 wxTextAttrUnits
GetUnits() const { return (wxTextAttrUnits
) (m_flags
& wxTEXT_ATTR_UNITS_MASK
); }
436 Sets the units of the dimension.
438 void SetUnits(wxTextAttrUnits units
) { m_flags
&= ~wxTEXT_ATTR_UNITS_MASK
; m_flags
|= units
; }
441 Gets the position flags.
443 wxTextBoxAttrPosition
GetPosition() const { return (wxTextBoxAttrPosition
) (m_flags
& wxTEXT_BOX_ATTR_POSITION_MASK
); }
446 Sets the position flags.
448 void SetPosition(wxTextBoxAttrPosition pos
) { m_flags
&= ~wxTEXT_BOX_ATTR_POSITION_MASK
; m_flags
|= pos
; }
451 Returns @true if the dimension is valid.
453 bool IsValid() const { return (m_flags
& wxTEXT_ATTR_VALUE_VALID
) != 0; }
458 void SetValid(bool b
) { m_flags
&= ~wxTEXT_ATTR_VALUE_VALID_MASK
; m_flags
|= (b
? wxTEXT_ATTR_VALUE_VALID
: 0); }
461 Gets the dimension flags.
463 wxTextAttrDimensionFlags
GetFlags() const { return m_flags
; }
466 Sets the dimension flags.
468 void SetFlags(wxTextAttrDimensionFlags flags
) { m_flags
= flags
; }
471 wxTextAttrDimensionFlags m_flags
;
475 @class wxTextAttrDimensions
476 A class for left, right, top and bottom dimensions.
481 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
484 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensions
490 wxTextAttrDimensions() {}
493 Resets the value and flags for all dimensions.
495 void Reset() { m_left
.Reset(); m_top
.Reset(); m_right
.Reset(); m_bottom
.Reset(); }
500 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
; }
503 Partial equality test. If @a weakTest is @true, attributes of this object do not
504 have to be present if those attributes of @a dim sare present. If @a weakTest is
505 @false, the function will fail if an attribute is present in @a dims but not
509 bool EqPartial(const wxTextAttrDimensions
& dims
, bool weakTest
= true) const;
512 Apply to 'this', but not if the same as @a compareWith.
515 bool Apply(const wxTextAttrDimensions
& dims
, const wxTextAttrDimensions
* compareWith
= NULL
);
518 Collects the attributes that are common to a range of content, building up a note of
519 which attributes are absent in some objects and which clash in some objects.
522 void CollectCommonAttributes(const wxTextAttrDimensions
& attr
, wxTextAttrDimensions
& clashingAttr
, wxTextAttrDimensions
& absentAttr
);
525 Remove specified attributes from this object.
527 bool RemoveStyle(const wxTextAttrDimensions
& attr
);
530 Gets the left dimension.
532 const wxTextAttrDimension
& GetLeft() const { return m_left
; }
533 wxTextAttrDimension
& GetLeft() { return m_left
; }
536 Gets the right dimension.
539 const wxTextAttrDimension
& GetRight() const { return m_right
; }
540 wxTextAttrDimension
& GetRight() { return m_right
; }
543 Gets the top dimension.
546 const wxTextAttrDimension
& GetTop() const { return m_top
; }
547 wxTextAttrDimension
& GetTop() { return m_top
; }
550 Gets the bottom dimension.
553 const wxTextAttrDimension
& GetBottom() const { return m_bottom
; }
554 wxTextAttrDimension
& GetBottom() { return m_bottom
; }
557 Are all dimensions valid?
560 bool IsValid() const { return m_left
.IsValid() && m_top
.IsValid() && m_right
.IsValid() && m_bottom
.IsValid(); }
562 wxTextAttrDimension m_left
;
563 wxTextAttrDimension m_top
;
564 wxTextAttrDimension m_right
;
565 wxTextAttrDimension m_bottom
;
569 @class wxTextAttrSize
570 A class for representing width and height.
575 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
578 class WXDLLIMPEXP_RICHTEXT wxTextAttrSize
587 Resets the width and height dimensions.
589 void Reset() { m_width
.Reset(); m_height
.Reset(); }
594 bool operator==(const wxTextAttrSize
& size
) const { return m_width
== size
.m_width
&& m_height
== size
.m_height
; }
597 Partial equality test. If @a weakTest is @true, attributes of this object do not
598 have to be present if those attributes of @a size are present. If @a weakTest is
599 @false, the function will fail if an attribute is present in @a size but not
602 bool EqPartial(const wxTextAttrSize
& size
, bool weakTest
= true) const;
605 Apply to this object, but not if the same as @a compareWith.
607 bool Apply(const wxTextAttrSize
& dims
, const wxTextAttrSize
* compareWith
= NULL
);
610 Collects the attributes that are common to a range of content, building up a note of
611 which attributes are absent in some objects and which clash in some objects.
613 void CollectCommonAttributes(const wxTextAttrSize
& attr
, wxTextAttrSize
& clashingAttr
, wxTextAttrSize
& absentAttr
);
616 Removes the specified attributes from this object.
618 bool RemoveStyle(const wxTextAttrSize
& attr
);
623 wxTextAttrDimension
& GetWidth() { return m_width
; }
624 const wxTextAttrDimension
& GetWidth() const { return m_width
; }
629 void SetWidth(int value
, wxTextAttrDimensionFlags flags
) { m_width
.SetValue(value
, flags
); }
634 void SetWidth(int value
, wxTextAttrUnits units
) { m_width
.SetValue(value
, units
); }
639 void SetWidth(const wxTextAttrDimension
& dim
) { m_width
.SetValue(dim
); }
644 wxTextAttrDimension
& GetHeight() { return m_height
; }
645 const wxTextAttrDimension
& GetHeight() const { return m_height
; }
650 void SetHeight(int value
, wxTextAttrDimensionFlags flags
) { m_height
.SetValue(value
, flags
); }
655 void SetHeight(int value
, wxTextAttrUnits units
) { m_height
.SetValue(value
, units
); }
660 void SetHeight(const wxTextAttrDimension
& dim
) { m_height
.SetValue(dim
); }
665 bool IsValid() const { return m_width
.IsValid() && m_height
.IsValid(); }
667 wxTextAttrDimension m_width
;
668 wxTextAttrDimension m_height
;
672 @class wxTextAttrDimensionConverter
673 A class to make it easier to convert dimensions.
678 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
681 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensionConverter
687 wxTextAttrDimensionConverter(wxDC
& dc
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
691 wxTextAttrDimensionConverter(int ppi
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
694 Gets the pixel size for the given dimension.
696 int GetPixels(const wxTextAttrDimension
& dim
, int direction
= wxHORIZONTAL
) const;
698 Gets the mm size for the given dimension.
700 int GetTenthsMM(const wxTextAttrDimension
& dim
) const;
703 Converts tenths of a mm to pixels.
705 int ConvertTenthsMMToPixels(int units
) const;
707 Converts pixels to tenths of a mm.
709 int ConvertPixelsToTenthsMM(int pixels
) const;
717 Border styles, used with wxTextAttrBorder.
719 enum wxTextAttrBorderStyle
721 wxTEXT_BOX_ATTR_BORDER_NONE
= 0,
722 wxTEXT_BOX_ATTR_BORDER_SOLID
= 1,
723 wxTEXT_BOX_ATTR_BORDER_DOTTED
= 2,
724 wxTEXT_BOX_ATTR_BORDER_DASHED
= 3,
725 wxTEXT_BOX_ATTR_BORDER_DOUBLE
= 4,
726 wxTEXT_BOX_ATTR_BORDER_GROOVE
= 5,
727 wxTEXT_BOX_ATTR_BORDER_RIDGE
= 6,
728 wxTEXT_BOX_ATTR_BORDER_INSET
= 7,
729 wxTEXT_BOX_ATTR_BORDER_OUTSET
= 8
733 Border style presence flags, used with wxTextAttrBorder.
735 enum wxTextAttrBorderFlags
737 wxTEXT_BOX_ATTR_BORDER_STYLE
= 0x0001,
738 wxTEXT_BOX_ATTR_BORDER_COLOUR
= 0x0002
742 Border width symbols for qualitative widths, used with wxTextAttrBorder.
744 enum wxTextAttrBorderWidth
746 wxTEXT_BOX_ATTR_BORDER_THIN
= -1,
747 wxTEXT_BOX_ATTR_BORDER_MEDIUM
= -2,
748 wxTEXT_BOX_ATTR_BORDER_THICK
= -3
754 enum wxTextBoxAttrFloatStyle
756 wxTEXT_BOX_ATTR_FLOAT_NONE
= 0,
757 wxTEXT_BOX_ATTR_FLOAT_LEFT
= 1,
758 wxTEXT_BOX_ATTR_FLOAT_RIGHT
= 2
764 enum wxTextBoxAttrClearStyle
766 wxTEXT_BOX_ATTR_CLEAR_NONE
= 0,
767 wxTEXT_BOX_ATTR_CLEAR_LEFT
= 1,
768 wxTEXT_BOX_ATTR_CLEAR_RIGHT
= 2,
769 wxTEXT_BOX_ATTR_CLEAR_BOTH
= 3
773 Collapse mode styles. TODO: can they be switched on per side?
775 enum wxTextBoxAttrCollapseMode
777 wxTEXT_BOX_ATTR_COLLAPSE_NONE
= 0,
778 wxTEXT_BOX_ATTR_COLLAPSE_FULL
= 1
782 Vertical alignment values.
784 enum wxTextBoxAttrVerticalAlignment
786 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_NONE
= 0,
787 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_TOP
= 1,
788 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_CENTRE
= 2,
789 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_BOTTOM
= 3
793 @class wxTextAttrBorder
794 A class representing a rich text object border.
799 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorders
802 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorder
808 wxTextAttrBorder() { Reset(); }
813 bool operator==(const wxTextAttrBorder
& border
) const
815 return m_flags
== border
.m_flags
&& m_borderStyle
== border
.m_borderStyle
&&
816 m_borderColour
== border
.m_borderColour
&& m_borderWidth
== border
.m_borderWidth
;
820 Resets the border style, colour, width and flags.
822 void Reset() { m_borderStyle
= 0; m_borderColour
= 0; m_flags
= 0; m_borderWidth
.Reset(); }
825 Partial equality test. If @a weakTest is @true, attributes of this object do not
826 have to be present if those attributes of @a border are present. If @a weakTest is
827 @false, the function will fail if an attribute is present in @a border but not
830 bool EqPartial(const wxTextAttrBorder
& border
, bool weakTest
= true) const;
833 Applies the border to this object, but not if the same as @a compareWith.
836 bool Apply(const wxTextAttrBorder
& border
, const wxTextAttrBorder
* compareWith
= NULL
);
839 Removes the specified attributes from this object.
841 bool RemoveStyle(const wxTextAttrBorder
& attr
);
844 Collects the attributes that are common to a range of content, building up a note of
845 which attributes are absent in some objects and which clash in some objects.
847 void CollectCommonAttributes(const wxTextAttrBorder
& attr
, wxTextAttrBorder
& clashingAttr
, wxTextAttrBorder
& absentAttr
);
850 Sets the border style.
852 void SetStyle(int style
) { m_borderStyle
= style
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_STYLE
; }
855 Gets the border style.
858 int GetStyle() const { return m_borderStyle
; }
861 Sets the border colour.
863 void SetColour(unsigned long colour
) { m_borderColour
= colour
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
866 Sets the border colour.
868 void SetColour(const wxColour
& colour
) { m_borderColour
= colour
.GetRGB(); m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
871 Gets the colour as a long.
873 unsigned long GetColourLong() const { return m_borderColour
; }
878 wxColour
GetColour() const { return wxColour(m_borderColour
); }
881 Gets the border width.
883 wxTextAttrDimension
& GetWidth() { return m_borderWidth
; }
884 const wxTextAttrDimension
& GetWidth() const { return m_borderWidth
; }
887 Sets the border width.
889 void SetWidth(const wxTextAttrDimension
& width
) { m_borderWidth
= width
; }
891 Sets the border width.
893 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
896 True if the border has a valid style.
898 bool HasStyle() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_STYLE
) != 0; }
901 True if the border has a valid colour.
903 bool HasColour() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_COLOUR
) != 0; }
906 True if the border has a valid width.
908 bool HasWidth() const { return m_borderWidth
.IsValid(); }
911 True if the border is valid.
913 bool IsValid() const { return HasWidth(); }
916 Set the valid flag for this border.
918 void MakeValid() { m_borderWidth
.SetValid(true); }
921 Returns the border flags.
923 int GetFlags() const { return m_flags
; }
926 Sets the border flags.
928 void SetFlags(int flags
) { m_flags
= flags
; }
933 void AddFlag(int flag
) { m_flags
|= flag
; }
936 Removes a border flag.
938 void RemoveFlag(int flag
) { m_flags
&= ~flag
; }
941 unsigned long m_borderColour
;
942 wxTextAttrDimension m_borderWidth
;
947 @class wxTextAttrBorders
948 A class representing a rich text object's borders.
953 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorder
956 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorders
962 wxTextAttrBorders() { }
967 bool operator==(const wxTextAttrBorders
& borders
) const
969 return m_left
== borders
.m_left
&& m_right
== borders
.m_right
&&
970 m_top
== borders
.m_top
&& m_bottom
== borders
.m_bottom
;
974 Sets the style of all borders.
976 void SetStyle(int style
);
979 Sets colour of all borders.
981 void SetColour(unsigned long colour
);
984 Sets the colour for all borders.
986 void SetColour(const wxColour
& colour
);
989 Sets the width of all borders.
991 void SetWidth(const wxTextAttrDimension
& width
);
994 Sets the width of all borders.
996 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
1001 void Reset() { m_left
.Reset(); m_right
.Reset(); m_top
.Reset(); m_bottom
.Reset(); }
1004 Partial equality test. If @a weakTest is @true, attributes of this object do not
1005 have to be present if those attributes of @a borders are present. If @a weakTest is
1006 @false, the function will fail if an attribute is present in @a borders but not
1009 bool EqPartial(const wxTextAttrBorders
& borders
, bool weakTest
= true) const;
1012 Applies border to this object, but not if the same as @a compareWith.
1014 bool Apply(const wxTextAttrBorders
& borders
, const wxTextAttrBorders
* compareWith
= NULL
);
1017 Removes the specified attributes from this object.
1019 bool RemoveStyle(const wxTextAttrBorders
& attr
);
1022 Collects the attributes that are common to a range of content, building up a note of
1023 which attributes are absent in some objects and which clash in some objects.
1025 void CollectCommonAttributes(const wxTextAttrBorders
& attr
, wxTextAttrBorders
& clashingAttr
, wxTextAttrBorders
& absentAttr
);
1028 Returns @true if all borders are valid.
1030 bool IsValid() const { return m_left
.IsValid() || m_right
.IsValid() || m_top
.IsValid() || m_bottom
.IsValid(); }
1033 Returns the left border.
1035 const wxTextAttrBorder
& GetLeft() const { return m_left
; }
1036 wxTextAttrBorder
& GetLeft() { return m_left
; }
1039 Returns the right border.
1041 const wxTextAttrBorder
& GetRight() const { return m_right
; }
1042 wxTextAttrBorder
& GetRight() { return m_right
; }
1045 Returns the top border.
1047 const wxTextAttrBorder
& GetTop() const { return m_top
; }
1048 wxTextAttrBorder
& GetTop() { return m_top
; }
1051 Returns the bottom border.
1053 const wxTextAttrBorder
& GetBottom() const { return m_bottom
; }
1054 wxTextAttrBorder
& GetBottom() { return m_bottom
; }
1056 wxTextAttrBorder m_left
, m_right
, m_top
, m_bottom
;
1061 @class wxTextBoxAttr
1062 A class representing the box attributes of a rich text object.
1064 @library{wxrichtext}
1067 @see wxRichTextAttr, wxRichTextCtrl
1070 class WXDLLIMPEXP_RICHTEXT wxTextBoxAttr
1074 Default constructor.
1076 wxTextBoxAttr() { Init(); }
1081 wxTextBoxAttr(const wxTextBoxAttr
& attr
) { Init(); (*this) = attr
; }
1084 Initialises this object.
1086 void Init() { Reset(); }
1093 // Copy. Unnecessary since we let it do a binary copy
1094 //void Copy(const wxTextBoxAttr& attr);
1097 //void operator= (const wxTextBoxAttr& attr);
1102 bool operator== (const wxTextBoxAttr
& attr
) const;
1105 Partial equality test, ignoring unset attributes. If @a weakTest is @true, attributes of this object do not
1106 have to be present if those attributes of @a attr are present. If @a weakTest is
1107 @false, the function will fail if an attribute is present in @a attr but not
1111 bool EqPartial(const wxTextBoxAttr
& attr
, bool weakTest
= true) const;
1114 Merges the given attributes. If @a compareWith is non-NULL, then it will be used
1115 to mask out those attributes that are the same in style and @a compareWith, for
1116 situations where we don't want to explicitly set inherited attributes.
1118 bool Apply(const wxTextBoxAttr
& style
, const wxTextBoxAttr
* compareWith
= NULL
);
1121 Collects the attributes that are common to a range of content, building up a note of
1122 which attributes are absent in some objects and which clash in some objects.
1124 void CollectCommonAttributes(const wxTextBoxAttr
& attr
, wxTextBoxAttr
& clashingAttr
, wxTextBoxAttr
& absentAttr
);
1127 Removes the specified attributes from this object.
1129 bool RemoveStyle(const wxTextBoxAttr
& attr
);
1134 void SetFlags(int flags
) { m_flags
= flags
; }
1139 int GetFlags() const { return m_flags
; }
1142 Is this flag present?
1144 bool HasFlag(wxTextBoxAttrFlags flag
) const { return (m_flags
& flag
) != 0; }
1149 void RemoveFlag(wxTextBoxAttrFlags flag
) { m_flags
&= ~flag
; }
1154 void AddFlag(wxTextBoxAttrFlags flag
) { m_flags
|= flag
; }
1157 Returns @true if no attributes are set.
1159 bool IsDefault() const;
1162 Returns the float mode.
1164 wxTextBoxAttrFloatStyle
GetFloatMode() const { return m_floatMode
; }
1167 Sets the float mode.
1169 void SetFloatMode(wxTextBoxAttrFloatStyle mode
) { m_floatMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_FLOAT
; }
1172 Returns @true if float mode is active.
1174 bool HasFloatMode() const { return HasFlag(wxTEXT_BOX_ATTR_FLOAT
); }
1177 Returns @true if this object is floating.
1179 bool IsFloating() const { return HasFloatMode() && GetFloatMode() != wxTEXT_BOX_ATTR_FLOAT_NONE
; }
1182 Returns the clear mode - whether to wrap text after object. Currently unimplemented.
1184 wxTextBoxAttrClearStyle
GetClearMode() const { return m_clearMode
; }
1187 Set the clear mode. Currently unimplemented.
1189 void SetClearMode(wxTextBoxAttrClearStyle mode
) { m_clearMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_CLEAR
; }
1192 Returns @true if we have a clear flag.
1194 bool HasClearMode() const { return HasFlag(wxTEXT_BOX_ATTR_CLEAR
); }
1197 Returns the collapse mode - whether to collapse borders. Currently unimplemented.
1199 wxTextBoxAttrCollapseMode
GetCollapseBorders() const { return m_collapseMode
; }
1202 Sets the collapse mode - whether to collapse borders. Currently unimplemented.
1204 void SetCollapseBorders(wxTextBoxAttrCollapseMode collapse
) { m_collapseMode
= collapse
; m_flags
|= wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
; }
1207 Returns @true if the collapse borders flag is present.
1209 bool HasCollapseBorders() const { return HasFlag(wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
); }
1212 Returns the vertical alignment.
1214 wxTextBoxAttrVerticalAlignment
GetVerticalAlignment() const { return m_verticalAlignment
; }
1217 Sets the vertical alignment.
1219 void SetVerticalAlignment(wxTextBoxAttrVerticalAlignment verticalAlignment
) { m_verticalAlignment
= verticalAlignment
; m_flags
|= wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
; }
1222 Returns @true if a vertical alignment flag is present.
1224 bool HasVerticalAlignment() const { return HasFlag(wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
); }
1227 Returns the margin values.
1229 wxTextAttrDimensions
& GetMargins() { return m_margins
; }
1230 const wxTextAttrDimensions
& GetMargins() const { return m_margins
; }
1233 Returns the left margin.
1235 wxTextAttrDimension
& GetLeftMargin() { return m_margins
.m_left
; }
1236 const wxTextAttrDimension
& GetLeftMargin() const { return m_margins
.m_left
; }
1239 Returns the right margin.
1241 wxTextAttrDimension
& GetRightMargin() { return m_margins
.m_right
; }
1242 const wxTextAttrDimension
& GetRightMargin() const { return m_margins
.m_right
; }
1245 Returns the top margin.
1247 wxTextAttrDimension
& GetTopMargin() { return m_margins
.m_top
; }
1248 const wxTextAttrDimension
& GetTopMargin() const { return m_margins
.m_top
; }
1251 Returns the bottom margin.
1253 wxTextAttrDimension
& GetBottomMargin() { return m_margins
.m_bottom
; }
1254 const wxTextAttrDimension
& GetBottomMargin() const { return m_margins
.m_bottom
; }
1257 Returns the position.
1259 wxTextAttrDimensions
& GetPosition() { return m_position
; }
1260 const wxTextAttrDimensions
& GetPosition() const { return m_position
; }
1263 Returns the left position.
1265 wxTextAttrDimension
& GetLeft() { return m_position
.m_left
; }
1266 const wxTextAttrDimension
& GetLeft() const { return m_position
.m_left
; }
1269 Returns the right position.
1271 wxTextAttrDimension
& GetRight() { return m_position
.m_right
; }
1272 const wxTextAttrDimension
& GetRight() const { return m_position
.m_right
; }
1275 Returns the top position.
1277 wxTextAttrDimension
& GetTop() { return m_position
.m_top
; }
1278 const wxTextAttrDimension
& GetTop() const { return m_position
.m_top
; }
1281 Returns the bottom position.
1283 wxTextAttrDimension
& GetBottom() { return m_position
.m_bottom
; }
1284 const wxTextAttrDimension
& GetBottom() const { return m_position
.m_bottom
; }
1287 Returns the padding values.
1289 wxTextAttrDimensions
& GetPadding() { return m_padding
; }
1290 const wxTextAttrDimensions
& GetPadding() const { return m_padding
; }
1293 Returns the left padding value.
1295 wxTextAttrDimension
& GetLeftPadding() { return m_padding
.m_left
; }
1296 const wxTextAttrDimension
& GetLeftPadding() const { return m_padding
.m_left
; }
1299 Returns the right padding value.
1301 wxTextAttrDimension
& GetRightPadding() { return m_padding
.m_right
; }
1302 const wxTextAttrDimension
& GetRightPadding() const { return m_padding
.m_right
; }
1305 Returns the top padding value.
1307 wxTextAttrDimension
& GetTopPadding() { return m_padding
.m_top
; }
1308 const wxTextAttrDimension
& GetTopPadding() const { return m_padding
.m_top
; }
1311 Returns the bottom padding value.
1313 wxTextAttrDimension
& GetBottomPadding() { return m_padding
.m_bottom
; }
1314 const wxTextAttrDimension
& GetBottomPadding() const { return m_padding
.m_bottom
; }
1317 Returns the borders.
1319 wxTextAttrBorders
& GetBorder() { return m_border
; }
1320 const wxTextAttrBorders
& GetBorder() const { return m_border
; }
1323 Returns the left border.
1325 wxTextAttrBorder
& GetLeftBorder() { return m_border
.m_left
; }
1326 const wxTextAttrBorder
& GetLeftBorder() const { return m_border
.m_left
; }
1329 Returns the top border.
1331 wxTextAttrBorder
& GetTopBorder() { return m_border
.m_top
; }
1332 const wxTextAttrBorder
& GetTopBorder() const { return m_border
.m_top
; }
1335 Returns the right border.
1337 wxTextAttrBorder
& GetRightBorder() { return m_border
.m_right
; }
1338 const wxTextAttrBorder
& GetRightBorder() const { return m_border
.m_right
; }
1341 Returns the bottom border.
1343 wxTextAttrBorder
& GetBottomBorder() { return m_border
.m_bottom
; }
1344 const wxTextAttrBorder
& GetBottomBorder() const { return m_border
.m_bottom
; }
1347 Returns the outline.
1349 wxTextAttrBorders
& GetOutline() { return m_outline
; }
1350 const wxTextAttrBorders
& GetOutline() const { return m_outline
; }
1353 Returns the left outline.
1355 wxTextAttrBorder
& GetLeftOutline() { return m_outline
.m_left
; }
1356 const wxTextAttrBorder
& GetLeftOutline() const { return m_outline
.m_left
; }
1359 Returns the top outline.
1361 wxTextAttrBorder
& GetTopOutline() { return m_outline
.m_top
; }
1362 const wxTextAttrBorder
& GetTopOutline() const { return m_outline
.m_top
; }
1365 Returns the right outline.
1367 wxTextAttrBorder
& GetRightOutline() { return m_outline
.m_right
; }
1368 const wxTextAttrBorder
& GetRightOutline() const { return m_outline
.m_right
; }
1371 Returns the bottom outline.
1373 wxTextAttrBorder
& GetBottomOutline() { return m_outline
.m_bottom
; }
1374 const wxTextAttrBorder
& GetBottomOutline() const { return m_outline
.m_bottom
; }
1377 Returns the object size.
1379 wxTextAttrSize
& GetSize() { return m_size
; }
1380 const wxTextAttrSize
& GetSize() const { return m_size
; }
1383 Returns the object minimum size.
1386 wxTextAttrSize
& GetMinSize() { return m_minSize
; }
1387 const wxTextAttrSize
& GetMinSize() const { return m_minSize
; }
1390 Returns the object maximum size.
1393 wxTextAttrSize
& GetMaxSize() { return m_maxSize
; }
1394 const wxTextAttrSize
& GetMaxSize() const { return m_maxSize
; }
1397 Sets the object size.
1399 void SetSize(const wxTextAttrSize
& sz
) { m_size
= sz
; }
1402 Sets the object minimum size.
1404 void SetMinSize(const wxTextAttrSize
& sz
) { m_minSize
= sz
; }
1407 Sets the object maximum size.
1409 void SetMaxSize(const wxTextAttrSize
& sz
) { m_maxSize
= sz
; }
1412 Returns the object width.
1414 wxTextAttrDimension
& GetWidth() { return m_size
.m_width
; }
1415 const wxTextAttrDimension
& GetWidth() const { return m_size
.m_width
; }
1418 Returns the object height.
1420 wxTextAttrDimension
& GetHeight() { return m_size
.m_height
; }
1421 const wxTextAttrDimension
& GetHeight() const { return m_size
.m_height
; }
1424 Returns the box style name.
1426 const wxString
& GetBoxStyleName() const { return m_boxStyleName
; }
1429 Sets the box style name.
1431 void SetBoxStyleName(const wxString
& name
) { m_boxStyleName
= name
; AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1434 Returns @true if the box style name is present.
1436 bool HasBoxStyleName() const { return HasFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1442 wxTextAttrDimensions m_margins
;
1443 wxTextAttrDimensions m_padding
;
1444 wxTextAttrDimensions m_position
;
1446 wxTextAttrSize m_size
;
1447 wxTextAttrSize m_minSize
;
1448 wxTextAttrSize m_maxSize
;
1450 wxTextAttrBorders m_border
;
1451 wxTextAttrBorders m_outline
;
1453 wxTextBoxAttrFloatStyle m_floatMode
;
1454 wxTextBoxAttrClearStyle m_clearMode
;
1455 wxTextBoxAttrCollapseMode m_collapseMode
;
1456 wxTextBoxAttrVerticalAlignment m_verticalAlignment
;
1457 wxString m_boxStyleName
;
1461 @class wxRichTextAttr
1462 A class representing enhanced attributes for rich text objects.
1463 This adds a wxTextBoxAttr member to the basic wxTextAttr class.
1465 @library{wxrichtext}
1468 @see wxRichTextAttr, wxTextBoxAttr, wxRichTextCtrl
1471 class WXDLLIMPEXP_RICHTEXT wxRichTextAttr
: public wxTextAttr
1475 Constructor taking a wxTextAttr.
1477 wxRichTextAttr(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1482 wxRichTextAttr(const wxRichTextAttr
& attr
): wxTextAttr() { Copy(attr
); }
1485 Default constructor.
1492 void Copy(const wxRichTextAttr
& attr
);
1495 Assignment operator.
1497 void operator=(const wxRichTextAttr
& attr
) { Copy(attr
); }
1500 Assignment operator.
1502 void operator=(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1507 bool operator==(const wxRichTextAttr
& attr
) const;
1510 Partial equality test. If @a weakTest is @true, attributes of this object do not
1511 have to be present if those attributes of @a attr are present. If @a weakTest is
1512 @false, the function will fail if an attribute is present in @a attr but not
1515 bool EqPartial(const wxRichTextAttr
& attr
, bool weakTest
= true) const;
1518 Merges the given attributes. If @a compareWith
1519 is non-NULL, then it will be used to mask out those attributes that are the same in style
1520 and @a compareWith, for situations where we don't want to explicitly set inherited attributes.
1522 bool Apply(const wxRichTextAttr
& style
, const wxRichTextAttr
* compareWith
= NULL
);
1525 Collects the attributes that are common to a range of content, building up a note of
1526 which attributes are absent in some objects and which clash in some objects.
1528 void CollectCommonAttributes(const wxRichTextAttr
& attr
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
1531 Removes the specified attributes from this object.
1533 bool RemoveStyle(const wxRichTextAttr
& attr
);
1536 Returns the text box attributes.
1538 wxTextBoxAttr
& GetTextBoxAttr() { return m_textBoxAttr
; }
1539 const wxTextBoxAttr
& GetTextBoxAttr() const { return m_textBoxAttr
; }
1542 Set the text box attributes.
1544 void SetTextBoxAttr(const wxTextBoxAttr
& attr
) { m_textBoxAttr
= attr
; }
1546 wxTextBoxAttr m_textBoxAttr
;
1549 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxVariant
, wxRichTextVariantArray
, WXDLLIMPEXP_RICHTEXT
);
1552 @class wxRichTextProperties
1553 A simple property class using wxVariants. This is used to give each rich text object the
1554 ability to store custom properties that can be used by the application.
1556 @library{wxrichtext}
1559 @see wxRichTextBuffer, wxRichTextObject, wxRichTextCtrl
1562 class WXDLLIMPEXP_RICHTEXT wxRichTextProperties
: public wxObject
1564 DECLARE_DYNAMIC_CLASS(wxRichTextProperties
)
1568 Default constructor.
1570 wxRichTextProperties() {}
1575 wxRichTextProperties(const wxRichTextProperties
& props
): wxObject() { Copy(props
); }
1578 Assignment operator.
1580 void operator=(const wxRichTextProperties
& props
) { Copy(props
); }
1585 bool operator==(const wxRichTextProperties
& props
) const;
1588 Copies from @a props.
1590 void Copy(const wxRichTextProperties
& props
) { m_properties
= props
.m_properties
; }
1593 Returns the variant at the given index.
1595 const wxVariant
& operator[](size_t idx
) const { return m_properties
[idx
]; }
1598 Returns the variant at the given index.
1600 wxVariant
& operator[](size_t idx
) { return m_properties
[idx
]; }
1603 Clears the properties.
1605 void Clear() { m_properties
.Clear(); }
1608 Returns the array of variants implementing the properties.
1610 const wxRichTextVariantArray
& GetProperties() const { return m_properties
; }
1613 Returns the array of variants implementing the properties.
1615 wxRichTextVariantArray
& GetProperties() { return m_properties
; }
1618 Sets the array of variants.
1620 void SetProperties(const wxRichTextVariantArray
& props
) { m_properties
= props
; }
1623 Returns all the property names.
1625 wxArrayString
GetPropertyNames() const;
1628 Returns a count of the properties.
1630 size_t GetCount() const { return m_properties
.GetCount(); }
1633 Returns @true if the given property is found.
1635 bool HasProperty(const wxString
& name
) const { return Find(name
) != -1; }
1638 Finds the given property.
1640 int Find(const wxString
& name
) const;
1643 Removes the given property.
1645 bool Remove(const wxString
& name
);
1648 Gets the property variant by name.
1650 const wxVariant
& GetProperty(const wxString
& name
) const;
1653 Finds or creates a property with the given name, returning a pointer to the variant.
1655 wxVariant
* FindOrCreateProperty(const wxString
& name
);
1658 Gets the value of the named property as a string.
1660 wxString
GetPropertyString(const wxString
& name
) const;
1663 Gets the value of the named property as a long integer.
1665 long GetPropertyLong(const wxString
& name
) const;
1668 Gets the value of the named property as a boolean.
1670 bool GetPropertyBool(const wxString
& name
) const;
1673 Gets the value of the named property as a double.
1675 double GetPropertyDouble(const wxString
& name
) const;
1678 Sets the property by passing a variant which contains a name and value.
1680 void SetProperty(const wxVariant
& variant
);
1683 Sets a property by name and variant.
1685 void SetProperty(const wxString
& name
, const wxVariant
& variant
);
1688 Sets a property by name and string value.
1690 void SetProperty(const wxString
& name
, const wxString
& value
);
1693 Sets property by name and long integer value.
1695 void SetProperty(const wxString
& name
, long value
);
1698 Sets property by name and double value.
1700 void SetProperty(const wxString
& name
, double value
);
1703 Sets property by name and boolean value.
1705 void SetProperty(const wxString
& name
, bool value
);
1708 Removes the given properties from these properties.
1710 void RemoveProperties(const wxRichTextProperties
& properties
);
1713 Merges the given properties with these properties.
1715 void MergeProperties(const wxRichTextProperties
& properties
);
1718 wxRichTextVariantArray m_properties
;
1723 @class wxRichTextFontTable
1724 Manages quick access to a pool of fonts for rendering rich text.
1726 @library{wxrichtext}
1729 @see wxRichTextBuffer, wxRichTextCtrl
1732 class WXDLLIMPEXP_RICHTEXT wxRichTextFontTable
: public wxObject
1736 Default constructor.
1738 wxRichTextFontTable();
1743 wxRichTextFontTable(const wxRichTextFontTable
& table
);
1744 virtual ~wxRichTextFontTable();
1747 Returns @true if the font table is valid.
1749 bool IsOk() const { return m_refData
!= NULL
; }
1752 Finds a font for the given attribute object.
1754 wxFont
FindFont(const wxRichTextAttr
& fontSpec
);
1757 Clears the font table.
1762 Assignment operator.
1764 void operator= (const wxRichTextFontTable
& table
);
1769 bool operator == (const wxRichTextFontTable
& table
) const;
1772 Inequality operator.
1774 bool operator != (const wxRichTextFontTable
& table
) const { return !(*this == table
); }
1777 Set the font scale factor.
1779 void SetFontScale(double fontScale
);
1785 DECLARE_DYNAMIC_CLASS(wxRichTextFontTable
)
1789 @class wxRichTextRange
1791 This stores beginning and end positions for a range of data.
1793 @library{wxrichtext}
1796 @see wxRichTextBuffer, wxRichTextCtrl
1799 class WXDLLIMPEXP_RICHTEXT wxRichTextRange
1805 Default constructor.
1807 wxRichTextRange() { m_start
= 0; m_end
= 0; }
1810 Constructor taking start and end positions.
1812 wxRichTextRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1817 wxRichTextRange(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1818 ~wxRichTextRange() {}
1821 Assigns @a range to this range.
1823 void operator =(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1826 Equality operator. Returns @true if @a range is the same as this range.
1828 bool operator ==(const wxRichTextRange
& range
) const { return (m_start
== range
.m_start
&& m_end
== range
.m_end
); }
1831 Inequality operator.
1833 bool operator !=(const wxRichTextRange
& range
) const { return (m_start
!= range
.m_start
|| m_end
!= range
.m_end
); }
1836 Subtracts a range from this range.
1838 wxRichTextRange
operator -(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
- range
.m_start
, m_end
- range
.m_end
); }
1841 Adds a range to this range.
1843 wxRichTextRange
operator +(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
+ range
.m_start
, m_end
+ range
.m_end
); }
1846 Sets the range start and end positions.
1848 void SetRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1851 Sets the start position.
1853 void SetStart(long start
) { m_start
= start
; }
1856 Returns the start position.
1858 long GetStart() const { return m_start
; }
1861 Sets the end position.
1863 void SetEnd(long end
) { m_end
= end
; }
1866 Gets the end position.
1868 long GetEnd() const { return m_end
; }
1871 Returns true if this range is completely outside @a range.
1873 bool IsOutside(const wxRichTextRange
& range
) const { return range
.m_start
> m_end
|| range
.m_end
< m_start
; }
1876 Returns true if this range is completely within @a range.
1878 bool IsWithin(const wxRichTextRange
& range
) const { return m_start
>= range
.m_start
&& m_end
<= range
.m_end
; }
1881 Returns true if @a pos was within the range. Does not match if the range is empty.
1883 bool Contains(long pos
) const { return pos
>= m_start
&& pos
<= m_end
; }
1886 Limit this range to be within @a range.
1888 bool LimitTo(const wxRichTextRange
& range
) ;
1891 Gets the length of the range.
1893 long GetLength() const { return m_end
- m_start
+ 1; }
1896 Swaps the start and end.
1898 void Swap() { long tmp
= m_start
; m_start
= m_end
; m_end
= tmp
; }
1901 Converts the API-standard range, whose end is one past the last character in
1902 the range, to the internal form, which uses the first and last character
1903 positions of the range. In other words, one is subtracted from the end position.
1904 (n, n) is the range of a single character.
1906 wxRichTextRange
ToInternal() const { return wxRichTextRange(m_start
, m_end
-1); }
1909 Converts the internal range, which uses the first and last character positions
1910 of the range, to the API-standard range, whose end is one past the last
1911 character in the range. In other words, one is added to the end position.
1912 (n, n+1) is the range of a single character.
1914 wxRichTextRange
FromInternal() const { return wxRichTextRange(m_start
, m_end
+1); }
1921 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextRange
, wxRichTextRangeArray
, WXDLLIMPEXP_RICHTEXT
);
1923 #define wxRICHTEXT_ALL wxRichTextRange(-2, -2)
1924 #define wxRICHTEXT_NONE wxRichTextRange(-1, -1)
1926 #define wxRICHTEXT_NO_SELECTION wxRichTextRange(-2, -2)
1929 @class wxRichTextSelection
1931 Stores selection information. The selection does not have to be contiguous, though currently non-contiguous
1932 selections are only supported for a range of table cells (a geometric block of cells can consist
1933 of a set of non-contiguous positions).
1935 The selection consists of an array of ranges, and the container that is the context for the selection. It
1936 follows that a single selection object can only represent ranges with the same parent container.
1938 @library{wxrichtext}
1941 @see wxRichTextBuffer, wxRichTextCtrl
1944 class WXDLLIMPEXP_RICHTEXT wxRichTextSelection
1950 wxRichTextSelection(const wxRichTextSelection
& sel
) { Copy(sel
); }
1953 Creates a selection from a range and a container.
1955 wxRichTextSelection(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
) { m_ranges
.Add(range
); m_container
= container
; }
1958 Default constructor.
1960 wxRichTextSelection() { Reset(); }
1963 Resets the selection.
1965 void Reset() { m_ranges
.Clear(); m_container
= NULL
; }
1971 void Set(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
)
1972 { m_ranges
.Clear(); m_ranges
.Add(range
); m_container
= container
; }
1975 Adds a range to the selection.
1977 void Add(const wxRichTextRange
& range
)
1978 { m_ranges
.Add(range
); }
1981 Sets the selections from an array of ranges and a container object.
1983 void Set(const wxRichTextRangeArray
& ranges
, wxRichTextParagraphLayoutBox
* container
)
1984 { m_ranges
= ranges
; m_container
= container
; }
1989 void Copy(const wxRichTextSelection
& sel
)
1990 { m_ranges
= sel
.m_ranges
; m_container
= sel
.m_container
; }
1993 Assignment operator.
1995 void operator=(const wxRichTextSelection
& sel
) { Copy(sel
); }
2000 bool operator==(const wxRichTextSelection
& sel
) const;
2005 wxRichTextRange
operator[](size_t i
) const { return GetRange(i
); }
2008 Returns the selection ranges.
2010 wxRichTextRangeArray
& GetRanges() { return m_ranges
; }
2013 Returns the selection ranges.
2015 const wxRichTextRangeArray
& GetRanges() const { return m_ranges
; }
2018 Sets the selection ranges.
2020 void SetRanges(const wxRichTextRangeArray
& ranges
) { m_ranges
= ranges
; }
2023 Returns the number of ranges in the selection.
2025 size_t GetCount() const { return m_ranges
.GetCount(); }
2028 Returns the range at the given index.
2031 wxRichTextRange
GetRange(size_t i
) const { return m_ranges
[i
]; }
2034 Returns the first range if there is one, otherwise wxRICHTEXT_NO_SELECTION.
2036 wxRichTextRange
GetRange() const { return (m_ranges
.GetCount() > 0) ? (m_ranges
[0]) : wxRICHTEXT_NO_SELECTION
; }
2039 Sets a single range.
2041 void SetRange(const wxRichTextRange
& range
) { m_ranges
.Clear(); m_ranges
.Add(range
); }
2044 Returns the container for which the selection is valid.
2046 wxRichTextParagraphLayoutBox
* GetContainer() const { return m_container
; }
2049 Sets the container for which the selection is valid.
2051 void SetContainer(wxRichTextParagraphLayoutBox
* container
) { m_container
= container
; }
2054 Returns @true if the selection is valid.
2056 bool IsValid() const { return m_ranges
.GetCount() > 0 && GetContainer(); }
2059 Returns the selection appropriate to the specified object, if any; returns an empty array if none
2060 at the level of the object's container.
2062 wxRichTextRangeArray
GetSelectionForObject(wxRichTextObject
* obj
) const;
2065 Returns @true if the given position is within the selection.
2067 bool WithinSelection(long pos
, wxRichTextObject
* obj
) const;
2070 Returns @true if the given position is within the selection.
2073 bool WithinSelection(long pos
) const { return WithinSelection(pos
, m_ranges
); }
2076 Returns @true if the given position is within the selection range.
2078 static bool WithinSelection(long pos
, const wxRichTextRangeArray
& ranges
);
2081 Returns @true if the given range is within the selection range.
2083 static bool WithinSelection(const wxRichTextRange
& range
, const wxRichTextRangeArray
& ranges
);
2085 wxRichTextRangeArray m_ranges
;
2086 wxRichTextParagraphLayoutBox
* m_container
;
2090 @class wxRichTextDrawingContext
2092 A class for passing information to drawing and measuring functions.
2094 @library{wxrichtext}
2097 @see wxRichTextBuffer, wxRichTextCtrl
2100 class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingContext
: public wxObject
2102 DECLARE_CLASS(wxRichTextDrawingContext
)
2106 Pass the buffer to the context so the context can retrieve information
2107 such as virtual attributes.
2109 wxRichTextDrawingContext(wxRichTextBuffer
* buffer
) { Init(); m_buffer
= buffer
; }
2111 void Init() { m_buffer
= NULL
; }
2114 Does this object have virtual attributes?
2115 Virtual attributes can be provided for visual cues without
2116 affecting the actual styling.
2118 bool HasVirtualAttributes(wxRichTextObject
* obj
) const;
2121 Returns the virtual attributes for this object.
2122 Virtual attributes can be provided for visual cues without
2123 affecting the actual styling.
2125 wxRichTextAttr
GetVirtualAttributes(wxRichTextObject
* obj
) const;
2128 Applies any virtual attributes relevant to this object.
2130 bool ApplyVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const;
2132 wxRichTextBuffer
* m_buffer
;
2136 @class wxRichTextObject
2138 This is the base for drawable rich text objects.
2140 @library{wxrichtext}
2143 @see wxRichTextBuffer, wxRichTextCtrl
2146 class WXDLLIMPEXP_RICHTEXT wxRichTextObject
: public wxObject
2148 DECLARE_CLASS(wxRichTextObject
)
2151 Constructor, taking an optional parent pointer.
2153 wxRichTextObject(wxRichTextObject
* parent
= NULL
);
2155 virtual ~wxRichTextObject();
2160 Draw the item, within the given range. Some objects may ignore the range (for
2161 example paragraphs) while others must obey it (lines, to implement wrapping)
2163 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
2166 Lay the item out at the specified position with the given size constraint.
2167 Layout must set the cached size. @rect is the available space for the object,
2168 and @a parentRect is the container that is used to determine a relative size
2169 or position (for example if a text box must be 50% of the parent text box).
2171 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
2174 Hit-testing: returns a flag indicating hit test details, plus
2175 information about position. @a contextObj is returned to specify what object
2176 position is relevant to, since otherwise there's an ambiguity.
2177 @ obj might not be a child of @a contextObj, since we may be referring to the container itself
2178 if we have no hit on a child - for example if we click outside an object.
2180 The function puts the position in @a textPosition if one is found.
2181 @a pt is in logical units (a zero y position is at the beginning of the buffer).
2183 Pass wxRICHTEXT_HITTEST_NO_NESTED_OBJECTS if you only want to consider objects
2184 directly under the object you are calling HitTest on. Otherwise, it will recurse
2185 and potentially find a nested object.
2187 @return One of the ::wxRichTextHitTestFlags values.
2190 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2193 Finds the absolute position and row height for the given character position.
2195 virtual bool FindPosition(wxDC
& WXUNUSED(dc
), wxRichTextDrawingContext
& WXUNUSED(context
), long WXUNUSED(index
), wxPoint
& WXUNUSED(pt
), int* WXUNUSED(height
), bool WXUNUSED(forceLineStart
)) { return false; }
2198 Returns the best size, i.e. the ideal starting size for this object irrespective
2199 of available space. For a short text string, it will be the size that exactly encloses
2200 the text. For a longer string, it might use the parent width for example.
2202 virtual wxSize
GetBestSize() const { return m_size
; }
2205 Returns the object size for the given range. Returns @false if the range
2206 is invalid for this object.
2209 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const = 0;
2212 Do a split from @a pos, returning an object containing the second part, and setting
2213 the first part in 'this'.
2215 virtual wxRichTextObject
* DoSplit(long WXUNUSED(pos
)) { return NULL
; }
2218 Calculates the range of the object. By default, guess that the object is 1 unit long.
2220 virtual void CalculateRange(long start
, long& end
) { end
= start
; m_range
.SetRange(start
, end
); }
2223 Deletes the given range.
2225 virtual bool DeleteRange(const wxRichTextRange
& WXUNUSED(range
)) { return false; }
2228 Returns @true if the object is empty.
2230 virtual bool IsEmpty() const { return false; }
2233 Returns @true if this class of object is floatable.
2235 virtual bool IsFloatable() const { return false; }
2238 Returns @true if this object is currently floating.
2240 virtual bool IsFloating() const { return GetAttributes().GetTextBoxAttr().IsFloating(); }
2243 Returns the floating direction.
2245 virtual int GetFloatDirection() const { return GetAttributes().GetTextBoxAttr().GetFloatMode(); }
2248 Returns any text in this object for the given range.
2250 virtual wxString
GetTextForRange(const wxRichTextRange
& WXUNUSED(range
)) const { return wxEmptyString
; }
2253 Returns @true if this object can merge itself with the given one.
2255 virtual bool CanMerge(wxRichTextObject
* WXUNUSED(object
)) const { return false; }
2258 Returns @true if this object merged itself with the given one.
2259 The calling code will then delete the given object.
2261 virtual bool Merge(wxRichTextObject
* WXUNUSED(object
)) { return false; }
2264 Dump object data to the given output stream for debugging.
2266 virtual void Dump(wxTextOutputStream
& stream
);
2269 Returns @true if we can edit the object's properties via a GUI.
2271 virtual bool CanEditProperties() const { return false; }
2274 Edits the object's properties via a GUI.
2276 virtual bool EditProperties(wxWindow
* WXUNUSED(parent
), wxRichTextBuffer
* WXUNUSED(buffer
)) { return false; }
2279 Returns the label to be used for the properties context menu item.
2281 virtual wxString
GetPropertiesMenuLabel() const { return wxEmptyString
; }
2284 Returns @true if objects of this class can accept the focus, i.e. a call to SetFocusObject
2285 is possible. For example, containers supporting text, such as a text box object, can accept the focus,
2286 but a table can't (set the focus to individual cells instead).
2288 virtual bool AcceptsFocus() const { return false; }
2292 Imports this object from XML.
2294 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2297 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2299 Exports this object directly to the given stream, bypassing the creation of a wxXmlNode hierarchy.
2300 This method is considerably faster than creating a tree first. However, both versions of ExportXML must be
2301 implemented so that if the tree method is made efficient in the future, we can deprecate the
2302 more verbose direct output method. Compiled only if wxRICHTEXT_HAVE_DIRECT_OUTPUT is defined (on by default).
2304 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2307 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2309 Exports this object to the given parent node, usually creating at least one child node.
2310 This method is less efficient than the direct-to-stream method but is retained to allow for
2311 switching to this method if we make it more efficient. Compiled only if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT is defined
2314 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2318 Returns @true if this object takes note of paragraph attributes (text and image objects don't).
2320 virtual bool UsesParagraphAttributes() const { return true; }
2323 Returns the XML node name of this object. This must be overridden for wxXmlNode-base XML export to work.
2325 virtual wxString
GetXMLNodeName() const { return wxT("unknown"); }
2328 Invalidates the object at the given range. With no argument, invalidates the whole object.
2330 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2333 Returns @true if this object can handle the selections of its children, fOr example a table.
2334 Required for composite selection handling to work.
2336 virtual bool HandlesChildSelections() const { return false; }
2339 Returns a selection object specifying the selections between start and end character positions.
2340 For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
2342 virtual wxRichTextSelection
GetSelection(long WXUNUSED(start
), long WXUNUSED(end
)) const { return wxRichTextSelection(); }
2347 Gets the cached object size as calculated by Layout.
2349 virtual wxSize
GetCachedSize() const { return m_size
; }
2352 Sets the cached object size as calculated by Layout.
2354 virtual void SetCachedSize(const wxSize
& sz
) { m_size
= sz
; }
2357 Gets the maximum object size as calculated by Layout. This allows
2358 us to fit an object to its contents or allocate extra space if required.
2360 virtual wxSize
GetMaxSize() const { return m_maxSize
; }
2363 Sets the maximum object size as calculated by Layout. This allows
2364 us to fit an object to its contents or allocate extra space if required.
2366 virtual void SetMaxSize(const wxSize
& sz
) { m_maxSize
= sz
; }
2369 Gets the minimum object size as calculated by Layout. This allows
2370 us to constrain an object to its absolute minimum size if necessary.
2372 virtual wxSize
GetMinSize() const { return m_minSize
; }
2375 Sets the minimum object size as calculated by Layout. This allows
2376 us to constrain an object to its absolute minimum size if necessary.
2378 virtual void SetMinSize(const wxSize
& sz
) { m_minSize
= sz
; }
2381 Gets the 'natural' size for an object. For an image, it would be the
2384 virtual wxTextAttrSize
GetNaturalSize() const { return wxTextAttrSize(); }
2387 Returns the object position in pixels.
2389 virtual wxPoint
GetPosition() const { return m_pos
; }
2392 Sets the object position in pixels.
2394 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
2397 Returns the absolute object position, by traversing up the child/parent hierarchy.
2398 TODO: may not be needed, if all object positions are in fact relative to the
2399 top of the coordinate space.
2401 virtual wxPoint
GetAbsolutePosition() const;
2404 Returns the rectangle enclosing the object.
2406 virtual wxRect
GetRect() const { return wxRect(GetPosition(), GetCachedSize()); }
2409 Sets the object's range within its container.
2411 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
2414 Returns the object's range.
2416 const wxRichTextRange
& GetRange() const { return m_range
; }
2419 Returns the object's range.
2421 wxRichTextRange
& GetRange() { return m_range
; }
2424 Set the object's own range, for a top-level object with its own position space.
2426 void SetOwnRange(const wxRichTextRange
& range
) { m_ownRange
= range
; }
2429 Returns the object's own range (valid if top-level).
2431 const wxRichTextRange
& GetOwnRange() const { return m_ownRange
; }
2434 Returns the object's own range (valid if top-level).
2436 wxRichTextRange
& GetOwnRange() { return m_ownRange
; }
2439 Returns the object's own range only if a top-level object.
2441 wxRichTextRange
GetOwnRangeIfTopLevel() const { return IsTopLevel() ? m_ownRange
: m_range
; }
2444 Returns @true if this object is composite.
2446 virtual bool IsComposite() const { return false; }
2449 Returns @true if no user editing can be done inside the object. This returns @true for simple objects,
2450 @false for most composite objects, but @true for fields, which if composite, should not be user-edited.
2452 virtual bool IsAtomic() const { return true; }
2455 Returns a pointer to the parent object.
2457 virtual wxRichTextObject
* GetParent() const { return m_parent
; }
2460 Sets the pointer to the parent object.
2462 virtual void SetParent(wxRichTextObject
* parent
) { m_parent
= parent
; }
2465 Returns the top-level container of this object.
2466 May return itself if it's a container; use GetParentContainer to return
2467 a different container.
2469 virtual wxRichTextParagraphLayoutBox
* GetContainer() const;
2472 Returns the top-level container of this object.
2473 Returns a different container than itself, unless there's no parent, in which case it will return NULL.
2475 virtual wxRichTextParagraphLayoutBox
* GetParentContainer() const { return GetParent() ? GetParent()->GetContainer() : GetContainer(); }
2478 Set the margin around the object, in pixels.
2480 virtual void SetMargins(int margin
);
2483 Set the margin around the object, in pixels.
2485 virtual void SetMargins(int leftMargin
, int rightMargin
, int topMargin
, int bottomMargin
);
2488 Returns the left margin of the object, in pixels.
2490 virtual int GetLeftMargin() const;
2493 Returns the right margin of the object, in pixels.
2495 virtual int GetRightMargin() const;
2498 Returns the top margin of the object, in pixels.
2500 virtual int GetTopMargin() const;
2503 Returns the bottom margin of the object, in pixels.
2505 virtual int GetBottomMargin() const;
2508 Calculates the available content space in the given rectangle, given the
2509 margins, border and padding specified in the object's attributes.
2511 virtual wxRect
GetAvailableContentArea(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& outerRect
) const;
2514 Lays out the object first with a given amount of space, and then if no width was specified in attr,
2515 lays out the object again using the minimum size. @a availableParentSpace is the maximum space
2516 for the object, whereas @a availableContainerSpace is the container with which relative positions and
2517 sizes should be computed. For example, a text box whose space has already been constrained
2518 in a previous layout pass to @a availableParentSpace, but should have a width of 50% of @a availableContainerSpace.
2519 (If these two rects were the same, a 2nd pass could see the object getting too small.)
2521 virtual bool LayoutToBestSize(wxDC
& dc
, wxRichTextDrawingContext
& context
, wxRichTextBuffer
* buffer
,
2522 const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& attr
,
2523 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
, int style
);
2526 Sets the object's attributes.
2528 void SetAttributes(const wxRichTextAttr
& attr
) { m_attributes
= attr
; }
2531 Returns the object's attributes.
2533 const wxRichTextAttr
& GetAttributes() const { return m_attributes
; }
2536 Returns the object's attributes.
2538 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
2541 Returns the object's properties.
2543 wxRichTextProperties
& GetProperties() { return m_properties
; }
2546 Returns the object's properties.
2548 const wxRichTextProperties
& GetProperties() const { return m_properties
; }
2551 Sets the object's properties.
2553 void SetProperties(const wxRichTextProperties
& props
) { m_properties
= props
; }
2556 Sets the stored descent value.
2558 void SetDescent(int descent
) { m_descent
= descent
; }
2561 Returns the stored descent value.
2563 int GetDescent() const { return m_descent
; }
2566 Returns the containing buffer.
2568 wxRichTextBuffer
* GetBuffer() const;
2571 Sets the identifying name for this object as a property using the "name" key.
2573 void SetName(const wxString
& name
) { m_properties
.SetProperty(wxT("name"), name
); }
2576 Returns the identifying name for this object from the properties, using the "name" key.
2578 wxString
GetName() const { return m_properties
.GetPropertyString(wxT("name")); }
2581 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
2583 virtual bool IsTopLevel() const { return false; }
2586 Returns @true if the object will be shown, @false otherwise.
2588 bool IsShown() const { return m_show
; }
2593 Call to show or hide this object. This function does not cause the content to be
2594 laid out or redrawn.
2596 virtual void Show(bool show
) { m_show
= show
; }
2601 virtual wxRichTextObject
* Clone() const { return NULL
; }
2606 void Copy(const wxRichTextObject
& obj
);
2609 Reference-counting allows us to use the same object in multiple
2610 lists (not yet used).
2613 void Reference() { m_refCount
++; }
2616 Reference-counting allows us to use the same object in multiple
2617 lists (not yet used).
2622 Moves the object recursively, by adding the offset from old to new.
2624 virtual void Move(const wxPoint
& pt
);
2627 Converts units in tenths of a millimetre to device units.
2629 int ConvertTenthsMMToPixels(wxDC
& dc
, int units
) const;
2632 Converts units in tenths of a millimetre to device units.
2634 static int ConvertTenthsMMToPixels(int ppi
, int units
, double scale
= 1.0);
2637 Convert units in pixels to tenths of a millimetre.
2639 int ConvertPixelsToTenthsMM(wxDC
& dc
, int pixels
) const;
2642 Convert units in pixels to tenths of a millimetre.
2644 static int ConvertPixelsToTenthsMM(int ppi
, int pixels
, double scale
= 1.0);
2647 Draws the borders and background for the given rectangle and attributes.
2648 @a boxRect is taken to be the outer margin box, not the box around the content.
2650 static bool DrawBoxAttributes(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, const wxRect
& boxRect
, int flags
= 0);
2655 static bool DrawBorder(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxTextAttrBorders
& attr
, const wxRect
& rect
, int flags
= 0);
2658 Returns the various rectangles of the box model in pixels. You can either specify @a contentRect (inner)
2659 or @a marginRect (outer), and the other must be the default rectangle (no width or height).
2660 Note that the outline doesn't affect the position of the rectangle, it's drawn in whatever space
2663 static bool GetBoxRects(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, wxRect
& marginRect
, wxRect
& borderRect
, wxRect
& contentRect
, wxRect
& paddingRect
, wxRect
& outlineRect
);
2666 Returns the total margin for the object in pixels, taking into account margin, padding and border size.
2668 static bool GetTotalMargin(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, int& leftMargin
, int& rightMargin
,
2669 int& topMargin
, int& bottomMargin
);
2672 Returns the rectangle which the child has available to it given restrictions specified in the
2673 child attribute, e.g. 50% width of the parent, 400 pixels, x position 20% of the parent, etc.
2674 availableContainerSpace might be a parent that the cell has to compute its width relative to.
2675 E.g. a cell that's 50% of its parent.
2677 static wxRect
AdjustAvailableSpace(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& childAttr
,
2678 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
);
2685 int m_descent
; // Descent for this object (if any)
2688 wxRichTextObject
* m_parent
;
2690 // The range of this object (start position to end position)
2691 wxRichTextRange m_range
;
2693 // The internal range of this object, if it's a top-level object with its own range space
2694 wxRichTextRange m_ownRange
;
2697 wxRichTextAttr m_attributes
;
2700 wxRichTextProperties m_properties
;
2703 WX_DECLARE_LIST_WITH_DECL( wxRichTextObject
, wxRichTextObjectList
, class WXDLLIMPEXP_RICHTEXT
);
2706 @class wxRichTextCompositeObject
2708 Objects of this class can contain other objects.
2710 @library{wxrichtext}
2713 @see wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2716 class WXDLLIMPEXP_RICHTEXT wxRichTextCompositeObject
: public wxRichTextObject
2718 DECLARE_CLASS(wxRichTextCompositeObject
)
2722 wxRichTextCompositeObject(wxRichTextObject
* parent
= NULL
);
2723 virtual ~wxRichTextCompositeObject();
2727 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2729 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
2731 virtual void CalculateRange(long start
, long& end
);
2733 virtual bool DeleteRange(const wxRichTextRange
& range
);
2735 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2737 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
2739 virtual void Dump(wxTextOutputStream
& stream
);
2741 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2746 Returns the children.
2748 wxRichTextObjectList
& GetChildren() { return m_children
; }
2750 Returns the children.
2752 const wxRichTextObjectList
& GetChildren() const { return m_children
; }
2755 Returns the number of children.
2757 size_t GetChildCount() const ;
2760 Returns the nth child.
2762 wxRichTextObject
* GetChild(size_t n
) const ;
2765 Returns @true if this object is composite.
2767 virtual bool IsComposite() const { return true; }
2770 Returns @true if no user editing can be done inside the object. This returns @true for simple objects,
2771 @false for most composite objects, but @true for fields, which if composite, should not be user-edited.
2773 virtual bool IsAtomic() const { return false; }
2776 Returns true if the buffer is empty.
2778 virtual bool IsEmpty() const { return GetChildCount() == 0; }
2781 Returns the child object at the given character position.
2783 virtual wxRichTextObject
* GetChildAtPosition(long pos
) const;
2787 void Copy(const wxRichTextCompositeObject
& obj
);
2789 void operator= (const wxRichTextCompositeObject
& obj
) { Copy(obj
); }
2792 Appends a child, returning the position.
2794 size_t AppendChild(wxRichTextObject
* child
) ;
2797 Inserts the child in front of the given object, or at the beginning.
2799 bool InsertChild(wxRichTextObject
* child
, wxRichTextObject
* inFrontOf
) ;
2802 Removes and optionally deletes the specified child.
2804 bool RemoveChild(wxRichTextObject
* child
, bool deleteChild
= false) ;
2807 Deletes all the children.
2809 bool DeleteChildren() ;
2812 Recursively merges all pieces that can be merged.
2814 bool Defragment(const wxRichTextRange
& range
= wxRICHTEXT_ALL
);
2817 Moves the object recursively, by adding the offset from old to new.
2819 virtual void Move(const wxPoint
& pt
);
2822 wxRichTextObjectList m_children
;
2826 @class wxRichTextParagraphBox
2828 This class knows how to lay out paragraphs.
2830 @library{wxrichtext}
2833 @see wxRichTextCompositeObject, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2836 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraphLayoutBox
: public wxRichTextCompositeObject
2838 DECLARE_DYNAMIC_CLASS(wxRichTextParagraphLayoutBox
)
2842 wxRichTextParagraphLayoutBox(wxRichTextObject
* parent
= NULL
);
2843 wxRichTextParagraphLayoutBox(const wxRichTextParagraphLayoutBox
& obj
): wxRichTextCompositeObject() { Init(); Copy(obj
); }
2844 ~wxRichTextParagraphLayoutBox();
2848 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2850 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2852 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
2854 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
2856 virtual bool DeleteRange(const wxRichTextRange
& range
);
2858 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2861 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2864 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2865 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2868 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2869 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2872 virtual wxString
GetXMLNodeName() const { return wxT("paragraphlayout"); }
2874 virtual bool AcceptsFocus() const { return true; }
2879 Associates a control with the buffer, for operations that for example require refreshing the window.
2881 void SetRichTextCtrl(wxRichTextCtrl
* ctrl
) { m_ctrl
= ctrl
; }
2884 Returns the associated control.
2886 wxRichTextCtrl
* GetRichTextCtrl() const { return m_ctrl
; }
2889 Sets a flag indicating whether the last paragraph is partial or complete.
2891 void SetPartialParagraph(bool partialPara
) { m_partialParagraph
= partialPara
; }
2894 Returns a flag indicating whether the last paragraph is partial or complete.
2896 bool GetPartialParagraph() const { return m_partialParagraph
; }
2899 Returns the style sheet associated with the overall buffer.
2901 virtual wxRichTextStyleSheet
* GetStyleSheet() const;
2903 virtual bool IsTopLevel() const { return true; }
2908 Submits a command to insert paragraphs.
2910 bool InsertParagraphsWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2913 Submits a command to insert the given text.
2915 bool InsertTextWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2918 Submits a command to insert the given text.
2920 bool InsertNewlineWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2923 Submits a command to insert the given image.
2925 bool InsertImageWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextImageBlock
& imageBlock
,
2926 wxRichTextCtrl
* ctrl
, int flags
, const wxRichTextAttr
& textAttr
);
2929 Submits a command to insert the given field. Field data can be included in properties.
2931 @see wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
2933 wxRichTextField
* InsertFieldWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& fieldType
,
2934 const wxRichTextProperties
& properties
,
2935 wxRichTextCtrl
* ctrl
, int flags
,
2936 const wxRichTextAttr
& textAttr
);
2939 Returns the style that is appropriate for a new paragraph at this position.
2940 If the previous paragraph has a paragraph style name, looks up the next-paragraph
2943 wxRichTextAttr
GetStyleForNewParagraph(wxRichTextBuffer
* buffer
, long pos
, bool caretPosition
= false, bool lookUpNewParaStyle
=false) const;
2948 wxRichTextObject
* InsertObjectWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2951 Submits a command to delete this range.
2953 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
, wxRichTextBuffer
* buffer
);
2956 Draws the floating objects in this buffer.
2958 void DrawFloats(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2961 Moves an anchored object to another paragraph.
2963 void MoveAnchoredObjectToParagraph(wxRichTextParagraph
* from
, wxRichTextParagraph
* to
, wxRichTextObject
* obj
);
2966 Initializes the object.
2971 Clears all the children.
2973 virtual void Clear();
2976 Clears and initializes with one blank paragraph.
2978 virtual void Reset();
2981 Convenience function to add a paragraph of text.
2983 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2986 Convenience function to add an image.
2988 virtual wxRichTextRange
AddImage(const wxImage
& image
, wxRichTextAttr
* paraStyle
= NULL
);
2991 Adds multiple paragraphs, based on newlines.
2993 virtual wxRichTextRange
AddParagraphs(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2996 Returns the line at the given position. If @a caretPosition is true, the position is
2997 a caret position, which is normally a smaller number.
2999 virtual wxRichTextLine
* GetLineAtPosition(long pos
, bool caretPosition
= false) const;
3002 Returns the line at the given y pixel position, or the last line.
3004 virtual wxRichTextLine
* GetLineAtYPosition(int y
) const;
3007 Returns the paragraph at the given character or caret position.
3009 virtual wxRichTextParagraph
* GetParagraphAtPosition(long pos
, bool caretPosition
= false) const;
3012 Returns the line size at the given position.
3014 virtual wxSize
GetLineSizeAtPosition(long pos
, bool caretPosition
= false) const;
3017 Given a position, returns the number of the visible line (potentially many to a paragraph),
3018 starting from zero at the start of the buffer. We also have to pass a bool (@a startOfLine)
3019 that indicates whether the caret is being shown at the end of the previous line or at the start
3020 of the next, since the caret can be shown at two visible positions for the same underlying
3023 virtual long GetVisibleLineNumber(long pos
, bool caretPosition
= false, bool startOfLine
= false) const;
3026 Given a line number, returns the corresponding wxRichTextLine object.
3028 virtual wxRichTextLine
* GetLineForVisibleLineNumber(long lineNumber
) const;
3031 Returns the leaf object in a paragraph at this position.
3033 virtual wxRichTextObject
* GetLeafObjectAtPosition(long position
) const;
3036 Returns the paragraph by number.
3038 virtual wxRichTextParagraph
* GetParagraphAtLine(long paragraphNumber
) const;
3041 Returns the paragraph for a given line.
3043 virtual wxRichTextParagraph
* GetParagraphForLine(wxRichTextLine
* line
) const;
3046 Returns the length of the paragraph.
3048 virtual int GetParagraphLength(long paragraphNumber
) const;
3051 Returns the number of paragraphs.
3053 virtual int GetParagraphCount() const { return static_cast<int>(GetChildCount()); }
3056 Returns the number of visible lines.
3058 virtual int GetLineCount() const;
3061 Returns the text of the paragraph.
3063 virtual wxString
GetParagraphText(long paragraphNumber
) const;
3066 Converts zero-based line column and paragraph number to a position.
3068 virtual long XYToPosition(long x
, long y
) const;
3071 Converts a zero-based position to line column and paragraph number.
3073 virtual bool PositionToXY(long pos
, long* x
, long* y
) const;
3076 Sets the attributes for the given range. Pass flags to determine how the
3079 The end point of range is specified as the last character position of the span
3080 of text. So, for example, to set the style for a character at position 5,
3081 use the range (5,5).
3082 This differs from the wxRichTextCtrl API, where you would specify (5,6).
3084 @a flags may contain a bit list of the following values:
3085 - wxRICHTEXT_SETSTYLE_NONE: no style flag.
3086 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
3088 - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
3089 if the combined style at this point is already the style in question.
3090 - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
3091 applied to paragraphs, and not the content.
3092 This allows content styling to be preserved independently from that
3093 of e.g. a named paragraph style.
3094 - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
3095 applied to characters, and not the paragraph.
3096 This allows content styling to be preserved independently from that
3097 of e.g. a named paragraph style.
3098 - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
3100 - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style.
3101 Only the style flags are used in this operation.
3103 virtual bool SetStyle(const wxRichTextRange
& range
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3106 Sets the attributes for the given object only, for example the box attributes for a text box.
3108 virtual void SetStyle(wxRichTextObject
*obj
, const wxRichTextAttr
& textAttr
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3111 Returns the combined text attributes for this position.
3113 This function gets the @e uncombined style - that is, the attributes associated
3114 with the paragraph or character content, and not necessarily the combined
3115 attributes you see on the screen. To get the combined attributes, use GetStyle().
3116 If you specify (any) paragraph attribute in @e style's flags, this function
3117 will fetch the paragraph attributes.
3118 Otherwise, it will return the character attributes.
3120 virtual bool GetStyle(long position
, wxRichTextAttr
& style
);
3123 Returns the content (uncombined) attributes for this position.
3125 virtual bool GetUncombinedStyle(long position
, wxRichTextAttr
& style
);
3128 Implementation helper for GetStyle. If combineStyles is true, combine base, paragraph and
3131 virtual bool DoGetStyle(long position
, wxRichTextAttr
& style
, bool combineStyles
= true);
3134 This function gets a style representing the common, combined attributes in the
3136 Attributes which have different values within the specified range will not be
3137 included the style flags.
3139 The function is used to get the attributes to display in the formatting dialog:
3140 the user can edit the attributes common to the selection, and optionally specify the
3141 values of further attributes to be applied uniformly.
3143 To apply the edited attributes, you can use SetStyle() specifying
3144 the wxRICHTEXT_SETSTYLE_OPTIMIZE flag, which will only apply attributes that
3145 are different from the @e combined attributes within the range.
3146 So, the user edits the effective, displayed attributes for the range,
3147 but his choice won't be applied unnecessarily to content. As an example,
3148 say the style for a paragraph specifies bold, but the paragraph text doesn't
3150 The combined style is bold, and this is what the user will see on-screen and
3151 in the formatting dialog. The user now specifies red text, in addition to bold.
3152 When applying with SetStyle(), the content font weight attributes won't be
3153 changed to bold because this is already specified by the paragraph.
3154 However the text colour attributes @e will be changed to show red.
3156 virtual bool GetStyleForRange(const wxRichTextRange
& range
, wxRichTextAttr
& style
);
3159 Combines @a style with @a currentStyle for the purpose of summarising the attributes of a range of
3162 bool CollectStyle(wxRichTextAttr
& currentStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
3166 Sets the list attributes for the given range, passing flags to determine how
3167 the attributes are set.
3168 Either the style definition or the name of the style definition (in the current
3169 sheet) can be passed.
3171 @a flags is a bit list of the following:
3172 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3173 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3174 @a startFrom, otherwise existing attributes are used.
3175 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3176 as the level for all paragraphs, otherwise the current indentation will be used.
3178 @see NumberList(), PromoteList(), ClearListStyle().
3180 virtual bool SetListStyle(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3181 virtual bool SetListStyle(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3185 Clears the list style from the given range, clearing list-related attributes
3186 and applying any named paragraph style associated with each paragraph.
3188 @a flags is a bit list of the following:
3189 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3191 @see SetListStyle(), PromoteList(), NumberList()
3193 virtual bool ClearListStyle(const wxRichTextRange
& range
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3197 Numbers the paragraphs in the given range.
3199 Pass flags to determine how the attributes are set.
3200 Either the style definition or the name of the style definition (in the current
3201 sheet) can be passed.
3203 @a flags is a bit list of the following:
3204 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3205 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3206 @a startFrom, otherwise existing attributes are used.
3207 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3208 as the level for all paragraphs, otherwise the current indentation will be used.
3210 @a def can be NULL to indicate that the existing list style should be used.
3212 @see SetListStyle(), PromoteList(), ClearListStyle()
3214 virtual bool NumberList(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3215 virtual bool NumberList(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3220 Promotes the list items within the given range.
3221 A positive @a promoteBy produces a smaller indent, and a negative number
3222 produces a larger indent. Pass flags to determine how the attributes are set.
3223 Either the style definition or the name of the style definition (in the current
3224 sheet) can be passed.
3226 @a flags is a bit list of the following:
3227 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3228 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3229 @a startFrom, otherwise existing attributes are used.
3230 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3231 as the level for all paragraphs, otherwise the current indentation will be used.
3233 @see SetListStyle(), SetListStyle(), ClearListStyle()
3235 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3236 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3240 Helper for NumberList and PromoteList, that does renumbering and promotion simultaneously
3241 @a def can be NULL/empty to indicate that the existing list style should be used.
3243 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);
3246 Fills in the attributes for numbering a paragraph after previousParagraph.
3248 virtual bool FindNextParagraphNumber(wxRichTextParagraph
* previousParagraph
, wxRichTextAttr
& attr
) const;
3251 Sets the properties for the given range, passing flags to determine how the
3252 attributes are set. You can merge properties or replace them.
3254 The end point of range is specified as the last character position of the span
3255 of text, plus one. So, for example, to set the properties for a character at
3256 position 5, use the range (5,6).
3258 @a flags may contain a bit list of the following values:
3259 - wxRICHTEXT_SETPROPERTIES_NONE: no flag.
3260 - wxRICHTEXT_SETPROPERTIES_WITH_UNDO: specifies that this operation should be
3262 - wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY: specifies that the properties should only be
3263 applied to paragraphs, and not the content.
3264 - wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY: specifies that the properties should only be
3265 applied to characters, and not the paragraph.
3266 - wxRICHTEXT_SETPROPERTIES_RESET: resets (clears) the existing properties before applying
3268 - wxRICHTEXT_SETPROPERTIES_REMOVE: removes the specified properties.
3270 virtual bool SetProperties(const wxRichTextRange
& range
, const wxRichTextProperties
& properties
, int flags
= wxRICHTEXT_SETPROPERTIES_WITH_UNDO
);
3273 Test if this whole range has character attributes of the specified kind. If any
3274 of the attributes are different within the range, the test fails. You
3275 can use this to implement, for example, bold button updating. style must have
3276 flags indicating which attributes are of interest.
3278 virtual bool HasCharacterAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3281 Test if this whole range has paragraph attributes of the specified kind. If any
3282 of the attributes are different within the range, the test fails. You
3283 can use this to implement, for example, centering button updating. style must have
3284 flags indicating which attributes are of interest.
3286 virtual bool HasParagraphAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3288 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraphLayoutBox(*this); }
3291 Prepares the content just before insertion (or after buffer reset).
3292 Currently is only called if undo mode is on.
3294 virtual void PrepareContent(wxRichTextParagraphLayoutBox
& container
);
3297 Insert fragment into this box at the given position. If partialParagraph is true,
3298 it is assumed that the last (or only) paragraph is just a piece of data with no paragraph
3301 virtual bool InsertFragment(long position
, wxRichTextParagraphLayoutBox
& fragment
);
3304 Make a copy of the fragment corresponding to the given range, putting it in @a fragment.
3306 virtual bool CopyFragment(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
& fragment
);
3309 Apply the style sheet to the buffer, for example if the styles have changed.
3311 virtual bool ApplyStyleSheet(wxRichTextStyleSheet
* styleSheet
);
3313 void Copy(const wxRichTextParagraphLayoutBox
& obj
);
3315 void operator= (const wxRichTextParagraphLayoutBox
& obj
) { Copy(obj
); }
3320 virtual void UpdateRanges();
3325 virtual wxString
GetText() const;
3328 Sets the default style, affecting the style currently being applied
3329 (for example, setting the default style to bold will cause subsequently
3330 inserted text to be bold).
3332 This is not cumulative - setting the default style will replace the previous
3335 Setting it to a default attribute object makes new content take on the 'basic' style.
3337 virtual bool SetDefaultStyle(const wxRichTextAttr
& style
);
3340 Returns the current default style, affecting the style currently being applied
3341 (for example, setting the default style to bold will cause subsequently
3342 inserted text to be bold).
3344 virtual const wxRichTextAttr
& GetDefaultStyle() const { return m_defaultAttributes
; }
3347 Sets the basic (overall) style. This is the style of the whole
3348 buffer before further styles are applied, unlike the default style, which
3349 only affects the style currently being applied (for example, setting the default
3350 style to bold will cause subsequently inserted text to be bold).
3352 virtual void SetBasicStyle(const wxRichTextAttr
& style
) { m_attributes
= style
; }
3355 Returns the basic (overall) style.
3357 This is the style of the whole buffer before further styles are applied,
3358 unlike the default style, which only affects the style currently being
3359 applied (for example, setting the default style to bold will cause
3360 subsequently inserted text to be bold).
3362 virtual const wxRichTextAttr
& GetBasicStyle() const { return m_attributes
; }
3365 Invalidates the buffer. With no argument, invalidates whole buffer.
3367 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3370 Do the (in)validation for this object only.
3372 virtual void DoInvalidate(const wxRichTextRange
& invalidRange
);
3375 Do the (in)validation both up and down the hierarchy.
3377 virtual void InvalidateHierarchy(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3380 Gather information about floating objects. If untilObj is non-NULL,
3381 will stop getting information if the current object is this, since we
3382 will collect the rest later.
3384 virtual bool UpdateFloatingObjects(const wxRect
& availableRect
, wxRichTextObject
* untilObj
= NULL
);
3387 Get invalid range, rounding to entire paragraphs if argument is true.
3389 wxRichTextRange
GetInvalidRange(bool wholeParagraphs
= false) const;
3392 Returns @true if this object needs layout.
3394 bool IsDirty() const { return m_invalidRange
!= wxRICHTEXT_NONE
; }
3397 Returns the wxRichTextFloatCollector of this object.
3399 wxRichTextFloatCollector
* GetFloatCollector() { return m_floatCollector
; }
3402 Returns the number of floating objects at this level.
3404 int GetFloatingObjectCount() const;
3407 Returns a list of floating objects.
3409 bool GetFloatingObjects(wxRichTextObjectList
& objects
) const;
3412 wxRichTextCtrl
* m_ctrl
;
3413 wxRichTextAttr m_defaultAttributes
;
3415 // The invalidated range that will need full layout
3416 wxRichTextRange m_invalidRange
;
3418 // Is the last paragraph partial or complete?
3419 bool m_partialParagraph
;
3421 // The floating layout state
3422 wxRichTextFloatCollector
* m_floatCollector
;
3426 @class wxRichTextBox
3428 This class implements a floating or inline text box, containing paragraphs.
3430 @library{wxrichtext}
3433 @see wxRichTextParagraphLayoutBox, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
3436 class WXDLLIMPEXP_RICHTEXT wxRichTextBox
: public wxRichTextParagraphLayoutBox
3438 DECLARE_DYNAMIC_CLASS(wxRichTextBox
)
3443 Default constructor; optionally pass the parent object.
3446 wxRichTextBox(wxRichTextObject
* parent
= NULL
);
3452 wxRichTextBox(const wxRichTextBox
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3456 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3458 virtual wxString
GetXMLNodeName() const { return wxT("textbox"); }
3460 virtual bool CanEditProperties() const { return true; }
3462 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3464 virtual wxString
GetPropertiesMenuLabel() const { return _("&Box"); }
3470 virtual wxRichTextObject
* Clone() const { return new wxRichTextBox(*this); }
3472 void Copy(const wxRichTextBox
& obj
);
3478 @class wxRichTextField
3480 This class implements the general concept of a field, an object that represents
3481 additional functionality such as a footnote, a bookmark, a page number, a table
3482 of contents, and so on. Extra information (such as a bookmark name) can be stored
3483 in the object properties.
3485 Drawing, layout, and property editing is delegated to classes derived
3486 from wxRichTextFieldType, such as instances of wxRichTextFieldTypeStandard; this makes
3487 the use of fields an efficient method of introducing extra functionality, since
3488 most of the information required to draw a field (such as a bitmap) is kept centrally
3489 in a single field type definition.
3491 The FieldType property, accessed by SetFieldType/GetFieldType, is used to retrieve
3492 the field type definition. So be careful not to overwrite this property.
3494 wxRichTextField is derived from wxRichTextParagraphLayoutBox, which means that it
3495 can contain its own read-only content, refreshed when the application calls the UpdateField
3496 function. Whether a field is treated as a composite or a single graphic is determined
3497 by the field type definition. If using wxRichTextFieldTypeStandard, passing the display
3498 type wxRICHTEXT_FIELD_STYLE_COMPOSITE to the field type definition causes the field
3499 to behave like a composite; the other display styles display a simple graphic.
3500 When implementing a composite field, you will still need to derive from wxRichTextFieldTypeStandard
3501 or wxRichTextFieldType, if only to implement UpdateField to refresh the field content
3502 appropriately. wxRichTextFieldTypeStandard is only one possible implementation, but
3503 covers common needs especially for simple, static fields using text or a bitmap.
3505 Register field types on application initialisation with the static function
3506 wxRichTextParagraphLayoutBox::AddFieldType. They will be deleted automatically
3507 on application exit.
3509 An application can write a field to a control with wxRichTextCtrl::WriteField,
3510 taking a field type, the properties for the field, and optional attributes.
3512 @library{wxrichtext}
3515 @see wxRichTextFieldTypeStandard, wxRichTextFieldType, wxRichTextParagraphLayoutBox, wxRichTextProperties, wxRichTextCtrl
3518 class WXDLLIMPEXP_RICHTEXT wxRichTextField
: public wxRichTextParagraphLayoutBox
3520 DECLARE_DYNAMIC_CLASS(wxRichTextField
)
3525 Default constructor; optionally pass the parent object.
3528 wxRichTextField(const wxString
& fieldType
= wxEmptyString
, wxRichTextObject
* parent
= NULL
);
3534 wxRichTextField(const wxRichTextField
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3538 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3540 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3542 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3544 virtual wxString
GetXMLNodeName() const { return wxT("field"); }
3546 virtual bool CanEditProperties() const;
3548 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3550 virtual wxString
GetPropertiesMenuLabel() const;
3552 virtual bool AcceptsFocus() const { return false; }
3554 virtual void CalculateRange(long start
, long& end
);
3557 If a field has children, we don't want the user to be able to edit it.
3559 virtual bool IsAtomic() const { return true; }
3561 virtual bool IsEmpty() const { return false; }
3563 virtual bool IsTopLevel() const;
3567 void SetFieldType(const wxString
& fieldType
) { GetProperties().SetProperty(wxT("FieldType"), fieldType
); }
3568 wxString
GetFieldType() const { return GetProperties().GetPropertyString(wxT("FieldType")); }
3573 Update the field; delegated to the associated field type. This would typically expand the field to its value,
3574 if this is a dynamically changing and/or composite field.
3576 virtual bool UpdateField(wxRichTextBuffer
* buffer
);
3578 virtual wxRichTextObject
* Clone() const { return new wxRichTextField(*this); }
3580 void Copy(const wxRichTextField
& obj
);
3586 @class wxRichTextFieldType
3588 The base class for custom field types. Each type definition handles one
3589 field type. Override functions to provide drawing, layout, updating and
3590 property editing functionality for a field.
3592 Register field types on application initialisation with the static function
3593 wxRichTextParagraphLayoutBox::AddFieldType. They will be deleted automatically
3594 on application exit.
3596 @library{wxrichtext}
3599 @see wxRichTextFieldTypeStandard, wxRichTextField, wxRichTextCtrl
3602 class WXDLLIMPEXP_RICHTEXT wxRichTextFieldType
: public wxObject
3604 DECLARE_CLASS(wxRichTextFieldType
)
3607 Creates a field type definition.
3609 wxRichTextFieldType(const wxString
& name
= wxEmptyString
)
3616 wxRichTextFieldType(const wxRichTextFieldType
& fieldType
)
3617 : wxObject(fieldType
)
3618 { Copy(fieldType
); }
3620 void Copy(const wxRichTextFieldType
& fieldType
) { m_name
= fieldType
.m_name
; }
3623 Draw the item, within the given range. Some objects may ignore the range (for
3624 example paragraphs) while others must obey it (lines, to implement wrapping)
3626 virtual bool Draw(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
3629 Lay the item out at the specified position with the given size constraint.
3630 Layout must set the cached size. @rect is the available space for the object,
3631 and @a parentRect is the container that is used to determine a relative size
3632 or position (for example if a text box must be 50% of the parent text box).
3634 virtual bool Layout(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
3637 Returns the object size for the given range. Returns @false if the range
3638 is invalid for this object.
3640 virtual bool GetRangeSize(wxRichTextField
* obj
, const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const = 0;
3643 Returns @true if we can edit the object's properties via a GUI.
3645 virtual bool CanEditProperties(wxRichTextField
* WXUNUSED(obj
)) const { return false; }
3648 Edits the object's properties via a GUI.
3650 virtual bool EditProperties(wxRichTextField
* WXUNUSED(obj
), wxWindow
* WXUNUSED(parent
), wxRichTextBuffer
* WXUNUSED(buffer
)) { return false; }
3653 Returns the label to be used for the properties context menu item.
3655 virtual wxString
GetPropertiesMenuLabel(wxRichTextField
* WXUNUSED(obj
)) const { return wxEmptyString
; }
3658 Update the field. This would typically expand the field to its value,
3659 if this is a dynamically changing and/or composite field.
3661 virtual bool UpdateField(wxRichTextBuffer
* WXUNUSED(buffer
), wxRichTextField
* WXUNUSED(obj
)) { return false; }
3664 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
3666 virtual bool IsTopLevel(wxRichTextField
* WXUNUSED(obj
)) const { return true; }
3669 Sets the field type name. There should be a unique name per field type object.
3671 void SetName(const wxString
& name
) { m_name
= name
; }
3674 Returns the field type name. There should be a unique name per field type object.
3676 wxString
GetName() const { return m_name
; }
3683 WX_DECLARE_STRING_HASH_MAP(wxRichTextFieldType
*, wxRichTextFieldTypeHashMap
);
3686 @class wxRichTextFieldTypeStandard
3688 A field type that can handle fields with text or bitmap labels, with a small range
3689 of styles for implementing rectangular fields and fields that can be used for start
3692 The border, text and background colours can be customised; the default is
3693 white text on a black background.
3695 The following display styles can be used.
3698 @style{wxRICHTEXT_FIELD_STYLE_COMPOSITE}
3699 Creates a composite field; you will probably need to derive a new class to implement UpdateField.
3700 @style{wxRICHTEXT_FIELD_STYLE_RECTANGLE}
3701 Shows a rounded rectangle background.
3702 @style{wxRICHTEXT_FIELD_STYLE_NO_BORDER}
3703 Suppresses the background and border; mostly used with a bitmap label.
3704 @style{wxRICHTEXT_FIELD_STYLE_START_TAG}
3705 Shows a start tag background, with the pointy end facing right.
3706 @style{wxRICHTEXT_FIELD_STYLE_END_TAG}
3707 Shows an end tag background, with the pointy end facing left.
3710 @library{wxrichtext}
3713 @see wxRichTextFieldType, wxRichTextField, wxRichTextBuffer, wxRichTextCtrl
3716 class WXDLLIMPEXP_RICHTEXT wxRichTextFieldTypeStandard
: public wxRichTextFieldType
3718 DECLARE_CLASS(wxRichTextFieldTypeStandard
)
3721 // Display style types
3722 enum { wxRICHTEXT_FIELD_STYLE_COMPOSITE
= 0x01,
3723 wxRICHTEXT_FIELD_STYLE_RECTANGLE
= 0x02,
3724 wxRICHTEXT_FIELD_STYLE_NO_BORDER
= 0x04,
3725 wxRICHTEXT_FIELD_STYLE_START_TAG
= 0x08,
3726 wxRICHTEXT_FIELD_STYLE_END_TAG
= 0x10
3730 Constructor, creating a field type definition with a text label.
3733 The name of the type definition. This must be unique, and is the type
3734 name used when adding a field to a control.
3736 The text label to be shown on the field.
3738 The display style: one of wxRICHTEXT_FIELD_STYLE_RECTANGLE,
3739 wxRICHTEXT_FIELD_STYLE_NO_BORDER, wxRICHTEXT_FIELD_STYLE_START_TAG,
3740 wxRICHTEXT_FIELD_STYLE_END_TAG.
3743 wxRichTextFieldTypeStandard(const wxString
& name
, const wxString
& label
, int displayStyle
= wxRICHTEXT_FIELD_STYLE_RECTANGLE
);
3746 Constructor, creating a field type definition with a bitmap label.
3749 The name of the type definition. This must be unique, and is the type
3750 name used when adding a field to a control.
3752 The bitmap label to be shown on the field.
3754 The display style: one of wxRICHTEXT_FIELD_STYLE_RECTANGLE,
3755 wxRICHTEXT_FIELD_STYLE_NO_BORDER, wxRICHTEXT_FIELD_STYLE_START_TAG,
3756 wxRICHTEXT_FIELD_STYLE_END_TAG.
3759 wxRichTextFieldTypeStandard(const wxString
& name
, const wxBitmap
& bitmap
, int displayStyle
= wxRICHTEXT_FIELD_STYLE_NO_BORDER
);
3762 The default constructor.
3765 wxRichTextFieldTypeStandard() { Init(); }
3768 The copy constructor.
3771 wxRichTextFieldTypeStandard(const wxRichTextFieldTypeStandard
& field
)
3772 : wxRichTextFieldType(field
)
3776 Initialises the object.
3783 void Copy(const wxRichTextFieldTypeStandard
& field
);
3786 The assignment operator.
3788 void operator=(const wxRichTextFieldTypeStandard
& field
) { Copy(field
); }
3791 Draw the item, within the given range. Some objects may ignore the range (for
3792 example paragraphs) while others must obey it (lines, to implement wrapping)
3794 virtual bool Draw(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3797 Lay the item out at the specified position with the given size constraint.
3798 Layout must set the cached size. @rect is the available space for the object,
3799 and @a parentRect is the container that is used to determine a relative size
3800 or position (for example if a text box must be 50% of the parent text box).
3802 virtual bool Layout(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3805 Returns the object size for the given range. Returns @false if the range
3806 is invalid for this object.
3808 virtual bool GetRangeSize(wxRichTextField
* obj
, const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3811 Get the size of the field, given the label, font size, and so on.
3813 wxSize
GetSize(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int style
) const;
3816 Returns @true if the display type is wxRICHTEXT_FIELD_STYLE_COMPOSITE, @false otherwise.
3818 virtual bool IsTopLevel(wxRichTextField
* WXUNUSED(obj
)) const { return (GetDisplayStyle() & wxRICHTEXT_FIELD_STYLE_COMPOSITE
) != 0; }
3821 Sets the text label for fields of this type.
3823 void SetLabel(const wxString
& label
) { m_label
= label
; }
3826 Returns the text label for fields of this type.
3828 const wxString
& GetLabel() const { return m_label
; }
3831 Sets the bitmap label for fields of this type.
3833 void SetBitmap(const wxBitmap
& bitmap
) { m_bitmap
= bitmap
; }
3836 Gets the bitmap label for fields of this type.
3838 const wxBitmap
& GetBitmap() const { return m_bitmap
; }
3841 Gets the display style for fields of this type.
3843 int GetDisplayStyle() const { return m_displayStyle
; }
3846 Sets the display style for fields of this type.
3848 void SetDisplayStyle(int displayStyle
) { m_displayStyle
= displayStyle
; }
3851 Gets the font used for drawing the text label.
3853 const wxFont
& GetFont() const { return m_font
; }
3856 Sets the font used for drawing the text label.
3858 void SetFont(const wxFont
& font
) { m_font
= font
; }
3861 Gets the colour used for drawing the text label.
3863 const wxColour
& GetTextColour() const { return m_textColour
; }
3866 Sets the colour used for drawing the text label.
3868 void SetTextColour(const wxColour
& colour
) { m_textColour
= colour
; }
3871 Gets the colour used for drawing the field border.
3873 const wxColour
& GetBorderColour() const { return m_borderColour
; }
3876 Sets the colour used for drawing the field border.
3878 void SetBorderColour(const wxColour
& colour
) { m_borderColour
= colour
; }
3881 Gets the colour used for drawing the field background.
3883 const wxColour
& GetBackgroundColour() const { return m_backgroundColour
; }
3886 Sets the colour used for drawing the field background.
3888 void SetBackgroundColour(const wxColour
& colour
) { m_backgroundColour
= colour
; }
3891 Sets the vertical padding (the distance between the border and the text).
3893 void SetVerticalPadding(int padding
) { m_verticalPadding
= padding
; }
3896 Gets the vertical padding (the distance between the border and the text).
3898 int GetVerticalPadding() const { return m_verticalPadding
; }
3901 Sets the horizontal padding (the distance between the border and the text).
3903 void SetHorizontalPadding(int padding
) { m_horizontalPadding
= padding
; }
3906 Sets the horizontal padding (the distance between the border and the text).
3908 int GetHorizontalPadding() const { return m_horizontalPadding
; }
3911 Sets the horizontal margin surrounding the field object.
3913 void SetHorizontalMargin(int margin
) { m_horizontalMargin
= margin
; }
3916 Gets the horizontal margin surrounding the field object.
3918 int GetHorizontalMargin() const { return m_horizontalMargin
; }
3921 Sets the vertical margin surrounding the field object.
3923 void SetVerticalMargin(int margin
) { m_verticalMargin
= margin
; }
3926 Gets the vertical margin surrounding the field object.
3928 int GetVerticalMargin() const { return m_verticalMargin
; }
3935 wxColour m_textColour
;
3936 wxColour m_borderColour
;
3937 wxColour m_backgroundColour
;
3938 int m_verticalPadding
;
3939 int m_horizontalPadding
;
3940 int m_horizontalMargin
;
3941 int m_verticalMargin
;
3946 @class wxRichTextLine
3948 This object represents a line in a paragraph, and stores
3949 offsets from the start of the paragraph representing the
3950 start and end positions of the line.
3952 @library{wxrichtext}
3955 @see wxRichTextBuffer, wxRichTextCtrl
3958 class WXDLLIMPEXP_RICHTEXT wxRichTextLine
3963 wxRichTextLine(wxRichTextParagraph
* parent
);
3964 wxRichTextLine(const wxRichTextLine
& obj
) { Init( NULL
); Copy(obj
); }
3965 virtual ~wxRichTextLine() {}
3972 Sets the range associated with this line.
3974 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
3976 Sets the range associated with this line.
3978 void SetRange(long from
, long to
) { m_range
= wxRichTextRange(from
, to
); }
3981 Returns the parent paragraph.
3983 wxRichTextParagraph
* GetParent() { return m_parent
; }
3988 const wxRichTextRange
& GetRange() const { return m_range
; }
3992 wxRichTextRange
& GetRange() { return m_range
; }
3995 Returns the absolute range.
3997 wxRichTextRange
GetAbsoluteRange() const;
4000 Returns the line size as calculated by Layout.
4002 virtual wxSize
GetSize() const { return m_size
; }
4005 Sets the line size as calculated by Layout.
4007 virtual void SetSize(const wxSize
& sz
) { m_size
= sz
; }
4010 Returns the object position relative to the parent.
4012 virtual wxPoint
GetPosition() const { return m_pos
; }
4015 Sets the object position relative to the parent.
4017 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
4020 Returns the absolute object position.
4022 virtual wxPoint
GetAbsolutePosition() const;
4025 Returns the rectangle enclosing the line.
4027 virtual wxRect
GetRect() const { return wxRect(GetAbsolutePosition(), GetSize()); }
4030 Sets the stored descent.
4032 void SetDescent(int descent
) { m_descent
= descent
; }
4035 Returns the stored descent.
4037 int GetDescent() const { return m_descent
; }
4039 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
4040 wxArrayInt
& GetObjectSizes() { return m_objectSizes
; }
4041 const wxArrayInt
& GetObjectSizes() const { return m_objectSizes
; }
4047 Initialises the object.
4049 void Init(wxRichTextParagraph
* parent
);
4054 void Copy(const wxRichTextLine
& obj
);
4056 virtual wxRichTextLine
* Clone() const { return new wxRichTextLine(*this); }
4060 // The range of the line (start position to end position)
4061 // This is relative to the parent paragraph.
4062 wxRichTextRange m_range
;
4064 // Size and position measured relative to top of paragraph
4068 // Maximum descent for this line (location of text baseline)
4071 // The parent object
4072 wxRichTextParagraph
* m_parent
;
4074 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
4075 wxArrayInt m_objectSizes
;
4079 WX_DECLARE_LIST_WITH_DECL( wxRichTextLine
, wxRichTextLineList
, class WXDLLIMPEXP_RICHTEXT
);
4082 @class wxRichTextParagraph
4084 This object represents a single paragraph containing various objects such as text content, images, and further paragraph layout objects.
4086 @library{wxrichtext}
4089 @see wxRichTextBuffer, wxRichTextCtrl
4092 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraph
: public wxRichTextCompositeObject
4094 DECLARE_DYNAMIC_CLASS(wxRichTextParagraph
)
4099 Constructor taking a parent and style.
4101 wxRichTextParagraph(wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
4103 Constructor taking a text string, a parent and paragraph and character attributes.
4105 wxRichTextParagraph(const wxString
& text
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* paraStyle
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4106 virtual ~wxRichTextParagraph();
4107 wxRichTextParagraph(const wxRichTextParagraph
& obj
): wxRichTextCompositeObject() { Copy(obj
); }
4111 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4113 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4115 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
4117 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
4119 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
4121 virtual void CalculateRange(long start
, long& end
);
4123 virtual wxString
GetXMLNodeName() const { return wxT("paragraph"); }
4128 Returns the cached lines.
4130 wxRichTextLineList
& GetLines() { return m_cachedLines
; }
4137 void Copy(const wxRichTextParagraph
& obj
);
4139 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraph(*this); }
4142 Clears the cached lines.
4149 Applies paragraph styles such as centering to the wrapped lines.
4151 virtual void ApplyParagraphStyle(wxRichTextLine
* line
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxDC
& dc
);
4154 Inserts text at the given position.
4156 virtual bool InsertText(long pos
, const wxString
& text
);
4159 Splits an object at this position if necessary, and returns
4160 the previous object, or NULL if inserting at the beginning.
4162 virtual wxRichTextObject
* SplitAt(long pos
, wxRichTextObject
** previousObject
= NULL
);
4165 Moves content to a list from this point.
4167 virtual void MoveToList(wxRichTextObject
* obj
, wxList
& list
);
4170 Adds content back from a list.
4172 virtual void MoveFromList(wxList
& list
);
4175 Returns the plain text searching from the start or end of the range.
4176 The resulting string may be shorter than the range given.
4178 bool GetContiguousPlainText(wxString
& text
, const wxRichTextRange
& range
, bool fromStart
= true);
4181 Finds a suitable wrap position. @a wrapPosition is the last position in the line to the left
4184 bool FindWrapPosition(const wxRichTextRange
& range
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int availableSpace
, long& wrapPosition
, wxArrayInt
* partialExtents
);
4187 Finds the object at the given position.
4189 wxRichTextObject
* FindObjectAtPosition(long position
);
4192 Returns the bullet text for this paragraph.
4194 wxString
GetBulletText();
4197 Allocates or reuses a line object.
4199 wxRichTextLine
* AllocateLine(int pos
);
4202 Clears remaining unused line objects, if any.
4204 bool ClearUnusedLines(int lineCount
);
4207 Returns combined attributes of the base style, paragraph style and character style. We use this to dynamically
4208 retrieve the actual style.
4210 wxRichTextAttr
GetCombinedAttributes(const wxRichTextAttr
& contentStyle
, bool includingBoxAttr
= false) const;
4213 Returns the combined attributes of the base style and paragraph style.
4215 wxRichTextAttr
GetCombinedAttributes(bool includingBoxAttr
= false) const;
4218 Returns the first position from pos that has a line break character.
4220 long GetFirstLineBreakPosition(long pos
);
4223 Creates a default tabstop array.
4225 static void InitDefaultTabs();
4228 Clears the default tabstop array.
4230 static void ClearDefaultTabs();
4233 Returns the default tabstop array.
4235 static const wxArrayInt
& GetDefaultTabs() { return sm_defaultTabs
; }
4238 Lays out the floating objects.
4240 void LayoutFloat(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
, wxRichTextFloatCollector
* floatCollector
);
4244 // The lines that make up the wrapped paragraph
4245 wxRichTextLineList m_cachedLines
;
4248 static wxArrayInt sm_defaultTabs
;
4250 friend class wxRichTextFloatCollector
;
4254 @class wxRichTextPlainText
4256 This object represents a single piece of text.
4258 @library{wxrichtext}
4261 @see wxRichTextBuffer, wxRichTextCtrl
4264 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainText
: public wxRichTextObject
4266 DECLARE_DYNAMIC_CLASS(wxRichTextPlainText
)
4273 wxRichTextPlainText(const wxString
& text
= wxEmptyString
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
4278 wxRichTextPlainText(const wxRichTextPlainText
& obj
): wxRichTextObject() { Copy(obj
); }
4282 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4284 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4286 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
4288 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
4290 virtual wxRichTextObject
* DoSplit(long pos
);
4292 virtual void CalculateRange(long start
, long& end
);
4294 virtual bool DeleteRange(const wxRichTextRange
& range
);
4296 virtual bool IsEmpty() const { return m_text
.empty(); }
4298 virtual bool CanMerge(wxRichTextObject
* object
) const;
4300 virtual bool Merge(wxRichTextObject
* object
);
4302 virtual void Dump(wxTextOutputStream
& stream
);
4305 Get the first position from pos that has a line break character.
4307 long GetFirstLineBreakPosition(long pos
);
4309 /// Does this object take note of paragraph attributes? Text and image objects don't.
4310 virtual bool UsesParagraphAttributes() const { return false; }
4313 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4316 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4317 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4320 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4321 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4324 virtual wxString
GetXMLNodeName() const { return wxT("text"); }
4331 const wxString
& GetText() const { return m_text
; }
4336 void SetText(const wxString
& text
) { m_text
= text
; }
4340 // Copies the text object,
4341 void Copy(const wxRichTextPlainText
& obj
);
4343 // Clones the text object.
4344 virtual wxRichTextObject
* Clone() const { return new wxRichTextPlainText(*this); }
4347 bool DrawTabbedString(wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxString
& str
, wxCoord
& x
, wxCoord
& y
, bool selected
);
4354 @class wxRichTextImageBlock
4356 This class stores information about an image, in binary in-memory form.
4358 @library{wxrichtext}
4361 @see wxRichTextBuffer, wxRichTextCtrl
4364 class WXDLLIMPEXP_RICHTEXT wxRichTextImageBlock
: public wxObject
4370 wxRichTextImageBlock();
4375 wxRichTextImageBlock(const wxRichTextImageBlock
& block
);
4376 virtual ~wxRichTextImageBlock();
4379 Initialises the block.
4390 Load the original image into a memory block.
4391 If the image is not a JPEG, we must convert it into a JPEG
4393 If it's not a JPEG we can make use of @a image, already scaled, so we don't have to
4394 load the image a second time.
4396 virtual bool MakeImageBlock(const wxString
& filename
, wxBitmapType imageType
,
4397 wxImage
& image
, bool convertToJPEG
= true);
4400 Make an image block from the wxImage in the given
4403 virtual bool MakeImageBlock(wxImage
& image
, wxBitmapType imageType
, int quality
= 80);
4406 Uses a const wxImage for efficiency, but can't set quality (only relevant for JPEG)
4408 virtual bool MakeImageBlockDefaultQuality(const wxImage
& image
, wxBitmapType imageType
);
4411 Makes the image block.
4413 virtual bool DoMakeImageBlock(const wxImage
& image
, wxBitmapType imageType
);
4416 Writes the block to a file.
4418 bool Write(const wxString
& filename
);
4421 Writes the data in hex to a stream.
4423 bool WriteHex(wxOutputStream
& stream
);
4426 Reads the data in hex from a stream.
4428 bool ReadHex(wxInputStream
& stream
, int length
, wxBitmapType imageType
);
4433 void Copy(const wxRichTextImageBlock
& block
);
4435 // Load a wxImage from the block
4438 bool Load(wxImage
& image
);
4443 Assignment operation.
4445 void operator=(const wxRichTextImageBlock
& block
);
4450 Returns the raw data.
4452 unsigned char* GetData() const { return m_data
; }
4455 Returns the data size in bytes.
4457 size_t GetDataSize() const { return m_dataSize
; }
4460 Returns the image type.
4462 wxBitmapType
GetImageType() const { return m_imageType
; }
4466 void SetData(unsigned char* image
) { m_data
= image
; }
4471 void SetDataSize(size_t size
) { m_dataSize
= size
; }
4474 Sets the image type.
4476 void SetImageType(wxBitmapType imageType
) { m_imageType
= imageType
; }
4479 Returns @true if the data is non-NULL.
4481 bool IsOk() const { return GetData() != NULL
; }
4482 bool Ok() const { return IsOk(); }
4485 Gets the extension for the block's type.
4487 wxString
GetExtension() const;
4492 Allocates and reads from a stream as a block of memory.
4494 static unsigned char* ReadBlock(wxInputStream
& stream
, size_t size
);
4497 Allocates and reads from a file as a block of memory.
4499 static unsigned char* ReadBlock(const wxString
& filename
, size_t size
);
4502 Writes a memory block to stream.
4504 static bool WriteBlock(wxOutputStream
& stream
, unsigned char* block
, size_t size
);
4507 Writes a memory block to a file.
4509 static bool WriteBlock(const wxString
& filename
, unsigned char* block
, size_t size
);
4512 // Size in bytes of the image stored.
4513 // This is in the raw, original form such as a JPEG file.
4514 unsigned char* m_data
;
4516 wxBitmapType m_imageType
;
4520 @class wxRichTextImage
4522 This class implements a graphic object.
4524 @library{wxrichtext}
4527 @see wxRichTextBuffer, wxRichTextCtrl, wxRichTextImageBlock
4530 class WXDLLIMPEXP_RICHTEXT wxRichTextImage
: public wxRichTextObject
4532 DECLARE_DYNAMIC_CLASS(wxRichTextImage
)
4537 Default constructor.
4539 wxRichTextImage(wxRichTextObject
* parent
= NULL
): wxRichTextObject(parent
) { Init(); }
4542 Creates a wxRichTextImage from a wxImage.
4544 wxRichTextImage(const wxImage
& image
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4547 Creates a wxRichTextImage from an image block.
4549 wxRichTextImage(const wxRichTextImageBlock
& imageBlock
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4554 wxRichTextImage(const wxRichTextImage
& obj
): wxRichTextObject(obj
) { Copy(obj
); }
4563 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4565 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4567 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
4570 Returns the 'natural' size for this object - the image size.
4572 virtual wxTextAttrSize
GetNaturalSize() const;
4574 virtual bool IsEmpty() const { return false; /* !m_imageBlock.IsOk(); */ }
4576 virtual bool CanEditProperties() const { return true; }
4578 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
4580 virtual wxString
GetPropertiesMenuLabel() const { return _("&Picture"); }
4582 virtual bool UsesParagraphAttributes() const { return false; }
4585 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4588 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4589 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4592 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4593 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4596 // Images can be floatable (optionally).
4597 virtual bool IsFloatable() const { return true; }
4599 virtual wxString
GetXMLNodeName() const { return wxT("image"); }
4604 Returns the image cache (a scaled bitmap).
4606 const wxBitmap
& GetImageCache() const { return m_imageCache
; }
4609 Sets the image cache.
4611 void SetImageCache(const wxBitmap
& bitmap
) { m_imageCache
= bitmap
; m_originalImageSize
= wxSize(bitmap
.GetWidth(), bitmap
.GetHeight()); }
4614 Resets the image cache.
4616 void ResetImageCache() { m_imageCache
= wxNullBitmap
; m_originalImageSize
= wxSize(-1, -1); }
4619 Returns the image block containing the raw data.
4621 wxRichTextImageBlock
& GetImageBlock() { return m_imageBlock
; }
4626 Copies the image object.
4628 void Copy(const wxRichTextImage
& obj
);
4631 Clones the image object.
4633 virtual wxRichTextObject
* Clone() const { return new wxRichTextImage(*this); }
4636 Creates a cached image at the required size.
4638 virtual bool LoadImageCache(wxDC
& dc
, bool resetCache
= false);
4641 Gets the original image size.
4643 wxSize
GetOriginalImageSize() const { return m_originalImageSize
; }
4646 Sets the original image size.
4648 void SetOriginalImageSize(const wxSize
& sz
) { m_originalImageSize
= sz
; }
4651 wxRichTextImageBlock m_imageBlock
;
4652 wxBitmap m_imageCache
;
4653 wxSize m_originalImageSize
;
4656 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCommand
;
4657 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
4660 @class wxRichTextBuffer
4662 This is a kind of paragraph layout box, used to represent the whole buffer.
4664 @library{wxrichtext}
4667 @see wxRichTextParagraphLayoutBox, wxRichTextCtrl
4670 class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer
: public wxRichTextParagraphLayoutBox
4672 DECLARE_DYNAMIC_CLASS(wxRichTextBuffer
)
4677 Default constructor.
4679 wxRichTextBuffer() { Init(); }
4684 wxRichTextBuffer(const wxRichTextBuffer
& obj
): wxRichTextParagraphLayoutBox() { Init(); Copy(obj
); }
4686 virtual ~wxRichTextBuffer() ;
4691 Returns the command processor.
4692 A text buffer always creates its own command processor when it is initialized.
4694 wxCommandProcessor
* GetCommandProcessor() const { return m_commandProcessor
; }
4697 Sets style sheet, if any. This will allow the application to use named character and paragraph
4698 styles found in the style sheet.
4700 Neither the buffer nor the control owns the style sheet so must be deleted by the application.
4702 void SetStyleSheet(wxRichTextStyleSheet
* styleSheet
) { m_styleSheet
= styleSheet
; }
4705 Returns the style sheet.
4707 virtual wxRichTextStyleSheet
* GetStyleSheet() const { return m_styleSheet
; }
4710 Sets the style sheet and sends a notification of the change.
4712 bool SetStyleSheetAndNotify(wxRichTextStyleSheet
* sheet
);
4715 Pushes the style sheet to the top of the style sheet stack.
4717 bool PushStyleSheet(wxRichTextStyleSheet
* styleSheet
);
4720 Pops the style sheet from the top of the style sheet stack.
4722 wxRichTextStyleSheet
* PopStyleSheet();
4725 Returns the table storing fonts, for quick access and font reuse.
4727 wxRichTextFontTable
& GetFontTable() { return m_fontTable
; }
4730 Returns the table storing fonts, for quick access and font reuse.
4732 const wxRichTextFontTable
& GetFontTable() const { return m_fontTable
; }
4735 Sets table storing fonts, for quick access and font reuse.
4737 void SetFontTable(const wxRichTextFontTable
& table
) { m_fontTable
= table
; }
4740 Sets the scale factor for displaying fonts, for example for more comfortable
4743 void SetFontScale(double fontScale
);
4746 Returns the scale factor for displaying fonts, for example for more comfortable
4749 double GetFontScale() const { return m_fontScale
; }
4752 Sets the scale factor for displaying certain dimensions such as indentation and
4753 inter-paragraph spacing. This can be useful when editing in a small control
4754 where you still want legible text, but a minimum of wasted white space.
4756 void SetDimensionScale(double dimScale
);
4759 Returns the scale factor for displaying certain dimensions such as indentation
4760 and inter-paragraph spacing.
4762 double GetDimensionScale() const { return m_dimensionScale
; }
4772 Clears the buffer, adds an empty paragraph, and clears the command processor.
4774 virtual void ResetAndClearCommands();
4778 Loads content from a stream or file.
4779 Not all handlers will implement file loading.
4781 virtual bool LoadFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4782 virtual bool LoadFile(wxInputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4787 Saves content to a stream or file.
4788 Not all handlers will implement file saving.
4790 virtual bool SaveFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4791 virtual bool SaveFile(wxOutputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4795 Sets the handler flags, controlling loading and saving.
4797 void SetHandlerFlags(int flags
) { m_handlerFlags
= flags
; }
4800 Gets the handler flags, controlling loading and saving.
4802 int GetHandlerFlags() const { return m_handlerFlags
; }
4805 Convenience function to add a paragraph of text.
4807 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
) { Modify(); return wxRichTextParagraphLayoutBox::AddParagraph(text
, paraStyle
); }
4810 Begin collapsing undo/redo commands. Note that this may not work properly
4811 if combining commands that delete or insert content, changing ranges for
4814 @a cmdName should be the name of the combined command that will appear
4815 next to Undo and Redo in the edit menu.
4817 virtual bool BeginBatchUndo(const wxString
& cmdName
);
4820 End collapsing undo/redo commands.
4822 virtual bool EndBatchUndo();
4825 Returns @true if we are collapsing commands.
4827 virtual bool BatchingUndo() const { return m_batchedCommandDepth
> 0; }
4830 Submit the action immediately, or delay according to whether collapsing is on.
4832 virtual bool SubmitAction(wxRichTextAction
* action
);
4835 Returns the collapsed command.
4837 virtual wxRichTextCommand
* GetBatchedCommand() const { return m_batchedCommand
; }
4840 Begin suppressing undo/redo commands. The way undo is suppressed may be implemented
4841 differently by each command. If not dealt with by a command implementation, then
4842 it will be implemented automatically by not storing the command in the undo history
4843 when the action is submitted to the command processor.
4845 virtual bool BeginSuppressUndo();
4848 End suppressing undo/redo commands.
4850 virtual bool EndSuppressUndo();
4853 Are we suppressing undo??
4855 virtual bool SuppressingUndo() const { return m_suppressUndo
> 0; }
4858 Copy the range to the clipboard.
4860 virtual bool CopyToClipboard(const wxRichTextRange
& range
);
4863 Paste the clipboard content to the buffer.
4865 virtual bool PasteFromClipboard(long position
);
4868 Returns @true if we can paste from the clipboard.
4870 virtual bool CanPasteFromClipboard() const;
4873 Begin using a style.
4875 virtual bool BeginStyle(const wxRichTextAttr
& style
);
4880 virtual bool EndStyle();
4885 virtual bool EndAllStyles();
4888 Clears the style stack.
4890 virtual void ClearStyleStack();
4893 Returns the size of the style stack, for example to check correct nesting.
4895 virtual size_t GetStyleStackSize() const { return m_attributeStack
.GetCount(); }
4905 bool EndBold() { return EndStyle(); }
4908 Begins using italic.
4915 bool EndItalic() { return EndStyle(); }
4918 Begins using underline.
4920 bool BeginUnderline();
4923 Ends using underline.
4925 bool EndUnderline() { return EndStyle(); }
4928 Begins using point size.
4930 bool BeginFontSize(int pointSize
);
4933 Ends using point size.
4935 bool EndFontSize() { return EndStyle(); }
4938 Begins using this font.
4940 bool BeginFont(const wxFont
& font
);
4945 bool EndFont() { return EndStyle(); }
4948 Begins using this colour.
4950 bool BeginTextColour(const wxColour
& colour
);
4953 Ends using a colour.
4955 bool EndTextColour() { return EndStyle(); }
4958 Begins using alignment.
4960 bool BeginAlignment(wxTextAttrAlignment alignment
);
4965 bool EndAlignment() { return EndStyle(); }
4968 Begins using @a leftIndent for the left indent, and optionally @a leftSubIndent for
4969 the sub-indent. Both are expressed in tenths of a millimetre.
4971 The sub-indent is an offset from the left of the paragraph, and is used for all
4972 but the first line in a paragraph. A positive value will cause the first line to appear
4973 to the left of the subsequent lines, and a negative value will cause the first line to be
4974 indented relative to the subsequent lines.
4976 bool BeginLeftIndent(int leftIndent
, int leftSubIndent
= 0);
4981 bool EndLeftIndent() { return EndStyle(); }
4984 Begins a right indent, specified in tenths of a millimetre.
4986 bool BeginRightIndent(int rightIndent
);
4991 bool EndRightIndent() { return EndStyle(); }
4994 Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
4995 in tenths of a millimetre.
4997 bool BeginParagraphSpacing(int before
, int after
);
5000 Ends paragraph spacing.
5002 bool EndParagraphSpacing() { return EndStyle(); }
5005 Begins line spacing using the specified value. @e spacing is a multiple, where
5006 10 means single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
5008 The ::wxTextAttrLineSpacing enumeration values are defined for convenience.
5010 bool BeginLineSpacing(int lineSpacing
);
5015 bool EndLineSpacing() { return EndStyle(); }
5018 Begins numbered bullet.
5020 This call will be needed for each item in the list, and the
5021 application should take care of incrementing the numbering.
5023 @a bulletNumber is a number, usually starting with 1.
5024 @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
5025 @a bulletStyle is a bitlist of the following values:
5027 wxRichTextBuffer uses indentation to render a bulleted item.
5028 The left indent is the distance between the margin and the bullet.
5029 The content of the paragraph, including the first line, starts
5030 at leftMargin + leftSubIndent.
5031 So the distance between the left edge of the bullet and the
5032 left of the actual paragraph is leftSubIndent.
5034 bool BeginNumberedBullet(int bulletNumber
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_ARABIC
|wxTEXT_ATTR_BULLET_STYLE_PERIOD
);
5037 Ends numbered bullet.
5039 bool EndNumberedBullet() { return EndStyle(); }
5042 Begins applying a symbol bullet, using a character from the current font.
5044 See BeginNumberedBullet() for an explanation of how indentation is used
5045 to render the bulleted paragraph.
5047 bool BeginSymbolBullet(const wxString
& symbol
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_SYMBOL
);
5052 bool EndSymbolBullet() { return EndStyle(); }
5055 Begins applying a standard bullet, using one of the standard bullet names
5056 (currently @c standard/circle or @c standard/square.
5058 See BeginNumberedBullet() for an explanation of how indentation is used to
5059 render the bulleted paragraph.
5061 bool BeginStandardBullet(const wxString
& bulletName
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_STANDARD
);
5064 Ends standard bullet.
5066 bool EndStandardBullet() { return EndStyle(); }
5069 Begins named character style.
5071 bool BeginCharacterStyle(const wxString
& characterStyle
);
5074 Ends named character style.
5076 bool EndCharacterStyle() { return EndStyle(); }
5079 Begins named paragraph style.
5081 bool BeginParagraphStyle(const wxString
& paragraphStyle
);
5084 Ends named character style.
5086 bool EndParagraphStyle() { return EndStyle(); }
5089 Begins named list style.
5091 Optionally, you can also pass a level and a number.
5093 bool BeginListStyle(const wxString
& listStyle
, int level
= 1, int number
= 1);
5096 Ends named character style.
5098 bool EndListStyle() { return EndStyle(); }
5101 Begins applying wxTEXT_ATTR_URL to the content.
5103 Pass a URL and optionally, a character style to apply, since it is common
5104 to mark a URL with a familiar style such as blue text with underlining.
5106 bool BeginURL(const wxString
& url
, const wxString
& characterStyle
= wxEmptyString
);
5111 bool EndURL() { return EndStyle(); }
5116 Adds an event handler.
5118 A buffer associated with a control has the control as the only event handler,
5119 but the application is free to add more if further notification is required.
5120 All handlers are notified of an event originating from the buffer, such as
5121 the replacement of a style sheet during loading.
5123 The buffer never deletes any of the event handlers, unless RemoveEventHandler()
5124 is called with @true as the second argument.
5126 bool AddEventHandler(wxEvtHandler
* handler
);
5129 Removes an event handler from the buffer's list of handlers, deleting the
5130 object if @a deleteHandler is @true.
5132 bool RemoveEventHandler(wxEvtHandler
* handler
, bool deleteHandler
= false);
5135 Clear event handlers.
5137 void ClearEventHandlers();
5140 Send event to event handlers. If sendToAll is true, will send to all event handlers,
5141 otherwise will stop at the first successful one.
5143 bool SendEvent(wxEvent
& event
, bool sendToAll
= true);
5147 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
5152 void Copy(const wxRichTextBuffer
& obj
);
5155 Assignment operator.
5157 void operator= (const wxRichTextBuffer
& obj
) { Copy(obj
); }
5162 virtual wxRichTextObject
* Clone() const { return new wxRichTextBuffer(*this); }
5165 Submits a command to insert paragraphs.
5167 bool InsertParagraphsWithUndo(long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
5170 Submits a command to insert the given text.
5172 bool InsertTextWithUndo(long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
5175 Submits a command to insert a newline.
5177 bool InsertNewlineWithUndo(long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
5180 Submits a command to insert the given image.
5182 bool InsertImageWithUndo(long pos
, const wxRichTextImageBlock
& imageBlock
, wxRichTextCtrl
* ctrl
, int flags
= 0,
5183 const wxRichTextAttr
& textAttr
= wxRichTextAttr());
5186 Submits a command to insert an object.
5188 wxRichTextObject
* InsertObjectWithUndo(long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
);
5191 Submits a command to delete this range.
5193 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
);
5198 void Modify(bool modify
= true) { m_modified
= modify
; }
5201 Returns @true if the buffer was modified.
5203 bool IsModified() const { return m_modified
; }
5207 Dumps contents of buffer for debugging purposes.
5209 virtual void Dump();
5210 virtual void Dump(wxTextOutputStream
& stream
) { wxRichTextParagraphLayoutBox::Dump(stream
); }
5214 Returns the file handlers.
5216 static wxList
& GetHandlers() { return sm_handlers
; }
5219 Adds a file handler to the end.
5221 static void AddHandler(wxRichTextFileHandler
*handler
);
5224 Inserts a file handler at the front.
5226 static void InsertHandler(wxRichTextFileHandler
*handler
);
5229 Removes a file handler.
5231 static bool RemoveHandler(const wxString
& name
);
5234 Finds a file handler by name.
5236 static wxRichTextFileHandler
*FindHandler(const wxString
& name
);
5239 Finds a file handler by extension and type.
5241 static wxRichTextFileHandler
*FindHandler(const wxString
& extension
, wxRichTextFileType imageType
);
5244 Finds a handler by filename or, if supplied, type.
5246 static wxRichTextFileHandler
*FindHandlerFilenameOrType(const wxString
& filename
,
5247 wxRichTextFileType imageType
);
5250 Finds a handler by type.
5252 static wxRichTextFileHandler
*FindHandler(wxRichTextFileType imageType
);
5255 Gets a wildcard incorporating all visible handlers. If @a types is present,
5256 it will be filled with the file type corresponding to each filter. This can be
5257 used to determine the type to pass to LoadFile given a selected filter.
5259 static wxString
GetExtWildcard(bool combine
= false, bool save
= false, wxArrayInt
* types
= NULL
);
5262 Clean up file handlers.
5264 static void CleanUpHandlers();
5267 Initialise the standard file handlers.
5268 Currently, only the plain text loading/saving handler is initialised by default.
5270 static void InitStandardHandlers();
5273 Returns the drawing handlers.
5275 static wxList
& GetDrawingHandlers() { return sm_drawingHandlers
; }
5278 Adds a drawing handler to the end.
5280 static void AddDrawingHandler(wxRichTextDrawingHandler
*handler
);
5283 Inserts a drawing handler at the front.
5285 static void InsertDrawingHandler(wxRichTextDrawingHandler
*handler
);
5288 Removes a drawing handler.
5290 static bool RemoveDrawingHandler(const wxString
& name
);
5293 Finds a drawing handler by name.
5295 static wxRichTextDrawingHandler
*FindDrawingHandler(const wxString
& name
);
5298 Clean up drawing handlers.
5300 static void CleanUpDrawingHandlers();
5303 Returns the field types.
5305 static wxRichTextFieldTypeHashMap
& GetFieldTypes() { return sm_fieldTypes
; }
5310 @see RemoveFieldType(), FindFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5313 static void AddFieldType(wxRichTextFieldType
*fieldType
);
5316 Removes a field type by name.
5318 @see AddFieldType(), FindFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5320 static bool RemoveFieldType(const wxString
& name
);
5323 Finds a field type by name.
5325 @see RemoveFieldType(), AddFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5327 static wxRichTextFieldType
*FindFieldType(const wxString
& name
);
5330 Cleans up field types.
5332 static void CleanUpFieldTypes();
5335 Returns the renderer object.
5337 static wxRichTextRenderer
* GetRenderer() { return sm_renderer
; }
5340 Sets @a renderer as the object to be used to render certain aspects of the
5341 content, such as bullets.
5343 You can override default rendering by deriving a new class from
5344 wxRichTextRenderer or wxRichTextStdRenderer, overriding one or more
5345 virtual functions, and setting an instance of the class using this function.
5347 static void SetRenderer(wxRichTextRenderer
* renderer
);
5350 Returns the minimum margin between bullet and paragraph in 10ths of a mm.
5352 static int GetBulletRightMargin() { return sm_bulletRightMargin
; }
5355 Sets the minimum margin between bullet and paragraph in 10ths of a mm.
5357 static void SetBulletRightMargin(int margin
) { sm_bulletRightMargin
= margin
; }
5360 Returns the factor to multiply by character height to get a reasonable bullet size.
5362 static float GetBulletProportion() { return sm_bulletProportion
; }
5365 Sets the factor to multiply by character height to get a reasonable bullet size.
5367 static void SetBulletProportion(float prop
) { sm_bulletProportion
= prop
; }
5370 Returns the scale factor for calculating dimensions.
5372 double GetScale() const { return m_scale
; }
5375 Sets the scale factor for calculating dimensions.
5377 void SetScale(double scale
) { m_scale
= scale
; }
5380 Sets the floating layout mode. Pass @false to speed up editing by not performing
5381 floating layout. This setting affects all buffers.
5384 static void SetFloatingLayoutMode(bool mode
) { sm_floatingLayoutMode
= mode
; }
5387 Returns the floating layout mode. The default is @true, where objects
5388 are laid out according to their floating status.
5390 static bool GetFloatingLayoutMode() { return sm_floatingLayoutMode
; }
5394 /// Command processor
5395 wxCommandProcessor
* m_commandProcessor
;
5397 /// Table storing fonts
5398 wxRichTextFontTable m_fontTable
;
5400 /// Has been modified?
5403 /// Collapsed command stack
5404 int m_batchedCommandDepth
;
5406 /// Name for collapsed command
5407 wxString m_batchedCommandsName
;
5409 /// Current collapsed command accumulating actions
5410 wxRichTextCommand
* m_batchedCommand
;
5412 /// Whether to suppress undo
5415 /// Style sheet, if any
5416 wxRichTextStyleSheet
* m_styleSheet
;
5418 /// List of event handlers that will be notified of events
5419 wxList m_eventHandlers
;
5421 /// Stack of attributes for convenience functions
5422 wxList m_attributeStack
;
5424 /// Flags to be passed to handlers
5428 static wxList sm_handlers
;
5430 /// Drawing handlers
5431 static wxList sm_drawingHandlers
;
5434 static wxRichTextFieldTypeHashMap sm_fieldTypes
;
5437 static wxRichTextRenderer
* sm_renderer
;
5439 /// Minimum margin between bullet and paragraph in 10ths of a mm
5440 static int sm_bulletRightMargin
;
5442 /// Factor to multiply by character height to get a reasonable bullet size
5443 static float sm_bulletProportion
;
5445 /// Floating layout mode, @true by default
5446 static bool sm_floatingLayoutMode
;
5448 /// Scaling factor in use: needed to calculate correct dimensions when printing
5451 /// Font scale for adjusting the text size when editing
5454 /// Dimension scale for reducing redundant whitespace when editing
5455 double m_dimensionScale
;
5459 @class wxRichTextCell
5461 wxRichTextCell is the cell in a table.
5464 class WXDLLIMPEXP_RICHTEXT wxRichTextCell
: public wxRichTextBox
5466 DECLARE_DYNAMIC_CLASS(wxRichTextCell
)
5471 Default constructor; optionally pass the parent object.
5474 wxRichTextCell(wxRichTextObject
* parent
= NULL
);
5480 wxRichTextCell(const wxRichTextCell
& obj
): wxRichTextBox() { Copy(obj
); }
5484 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
5486 virtual wxString
GetXMLNodeName() const { return wxT("cell"); }
5488 virtual bool CanEditProperties() const { return true; }
5490 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
5492 virtual wxString
GetPropertiesMenuLabel() const { return _("&Cell"); }
5498 virtual wxRichTextObject
* Clone() const { return new wxRichTextCell(*this); }
5500 void Copy(const wxRichTextCell
& obj
);
5506 @class wxRichTextTable
5508 wxRichTextTable represents a table with arbitrary columns and rows.
5511 WX_DEFINE_ARRAY_PTR(wxRichTextObject
*, wxRichTextObjectPtrArray
);
5512 WX_DECLARE_OBJARRAY(wxRichTextObjectPtrArray
, wxRichTextObjectPtrArrayArray
);
5514 class WXDLLIMPEXP_RICHTEXT wxRichTextTable
: public wxRichTextBox
5516 DECLARE_DYNAMIC_CLASS(wxRichTextTable
)
5522 Default constructor; optionally pass the parent object.
5525 wxRichTextTable(wxRichTextObject
* parent
= NULL
);
5531 wxRichTextTable(const wxRichTextTable
& obj
): wxRichTextBox() { Copy(obj
); }
5535 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
5537 virtual wxString
GetXMLNodeName() const { return wxT("table"); }
5539 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
5541 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
5543 virtual bool DeleteRange(const wxRichTextRange
& range
);
5545 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
5548 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
5551 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
5552 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
5555 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
5556 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
5559 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
5561 virtual void CalculateRange(long start
, long& end
);
5563 // Can this object handle the selections of its children? FOr example, a table.
5564 virtual bool HandlesChildSelections() const { return true; }
5566 /// Returns a selection object specifying the selections between start and end character positions.
5567 /// For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
5568 virtual wxRichTextSelection
GetSelection(long start
, long end
) const;
5570 virtual bool CanEditProperties() const { return true; }
5572 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
5574 virtual wxString
GetPropertiesMenuLabel() const { return _("&Table"); }
5576 // Returns true if objects of this class can accept the focus, i.e. a call to SetFocusObject
5577 // is possible. For example, containers supporting text, such as a text box object, can accept the focus,
5578 // but a table can't (set the focus to individual cells instead).
5579 virtual bool AcceptsFocus() const { return false; }
5584 Returns the cells array.
5586 const wxRichTextObjectPtrArrayArray
& GetCells() const { return m_cells
; }
5589 Returns the cells array.
5591 wxRichTextObjectPtrArrayArray
& GetCells() { return m_cells
; }
5594 Returns the row count.
5596 int GetRowCount() const { return m_rowCount
; }
5599 Returns the column count.
5601 int GetColumnCount() const { return m_colCount
; }
5604 Returns the cell at the given row/column position.
5606 virtual wxRichTextCell
* GetCell(int row
, int col
) const;
5609 Returns the cell at the given character position (in the range of the table).
5611 virtual wxRichTextCell
* GetCell(long pos
) const;
5614 Returns the row/column for a given character position.
5616 virtual bool GetCellRowColumnPosition(long pos
, int& row
, int& col
) const;
5624 virtual void ClearTable();
5627 Creates a table of the given dimensions.
5630 virtual bool CreateTable(int rows
, int cols
);
5633 Sets the attributes for the cells specified by the selection.
5636 virtual bool SetCellStyle(const wxRichTextSelection
& selection
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
5639 Deletes rows from the given row position.
5642 virtual bool DeleteRows(int startRow
, int noRows
= 1);
5645 Deletes columns from the given column position.
5648 virtual bool DeleteColumns(int startCol
, int noCols
= 1);
5651 Adds rows from the given row position.
5654 virtual bool AddRows(int startRow
, int noRows
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
5657 Adds columns from the given column position.
5660 virtual bool AddColumns(int startCol
, int noCols
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
5662 // Makes a clone of this object.
5663 virtual wxRichTextObject
* Clone() const { return new wxRichTextTable(*this); }
5665 // Copies this object.
5666 void Copy(const wxRichTextTable
& obj
);
5673 // An array of rows, each of which is a wxRichTextObjectPtrArray containing
5674 // the cell objects. The cell objects are also children of this object.
5675 // Problem: if boxes are immediate children of a box, this will cause problems
5676 // with wxRichTextParagraphLayoutBox functions (and functions elsewhere) that
5677 // expect to find just paragraphs. May have to adjust the way we handle the
5678 // hierarchy to accept non-paragraph objects in a paragraph layout box.
5679 // We'll be overriding much wxRichTextParagraphLayoutBox functionality so this
5680 // may not be such a problem. Perhaps the table should derive from a different
5682 wxRichTextObjectPtrArrayArray m_cells
;
5687 The command identifiers for Do/Undo.
5690 enum wxRichTextCommandId
5694 wxRICHTEXT_CHANGE_ATTRIBUTES
,
5695 wxRICHTEXT_CHANGE_STYLE
,
5696 wxRICHTEXT_CHANGE_PROPERTIES
,
5697 wxRICHTEXT_CHANGE_OBJECT
5701 @class wxRichTextObjectAddress
5703 A class for specifying an object anywhere in an object hierarchy,
5704 without using a pointer, necessary since wxRTC commands may delete
5705 and recreate sub-objects so physical object addresses change. An array
5706 of positions (one per hierarchy level) is used.
5708 @library{wxrichtext}
5711 @see wxRichTextCommand
5714 class WXDLLIMPEXP_RICHTEXT wxRichTextObjectAddress
5718 Creates the address given a container and an object.
5720 wxRichTextObjectAddress(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
) { Create(topLevelContainer
, obj
); }
5723 wxRichTextObjectAddress() { Init(); }
5726 wxRichTextObjectAddress(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5733 void Copy(const wxRichTextObjectAddress
& address
) { m_address
= address
.m_address
; }
5736 Assignment operator.
5738 void operator=(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5741 Returns the object specified by the address, given a top level container.
5743 wxRichTextObject
* GetObject(wxRichTextParagraphLayoutBox
* topLevelContainer
) const;
5746 Creates the address given a container and an object.
5748 bool Create(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
);
5751 Returns the array of integers representing the object address.
5753 wxArrayInt
& GetAddress() { return m_address
; }
5756 Returns the array of integers representing the object address.
5758 const wxArrayInt
& GetAddress() const { return m_address
; }
5761 Sets the address from an array of integers.
5763 void SetAddress(const wxArrayInt
& address
) { m_address
= address
; }
5767 wxArrayInt m_address
;
5770 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
5773 @class wxRichTextCommand
5775 Implements a command on the undo/redo stack. A wxRichTextCommand object contains one or more wxRichTextAction
5776 objects, allowing aggregation of a number of operations into one command.
5778 @library{wxrichtext}
5781 @see wxRichTextAction
5784 class WXDLLIMPEXP_RICHTEXT wxRichTextCommand
: public wxCommand
5788 Constructor for one action.
5790 wxRichTextCommand(const wxString
& name
, wxRichTextCommandId id
, wxRichTextBuffer
* buffer
,
5791 wxRichTextParagraphLayoutBox
* container
, wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5794 Constructor for multiple actions.
5796 wxRichTextCommand(const wxString
& name
);
5798 virtual ~wxRichTextCommand();
5801 Performs the command.
5811 Adds an action to the action list.
5813 void AddAction(wxRichTextAction
* action
);
5816 Clears the action list.
5818 void ClearActions();
5821 Returns the action list.
5823 wxList
& GetActions() { return m_actions
; }
5831 @class wxRichTextAction
5833 Implements a part of a command.
5835 @library{wxrichtext}
5838 @see wxRichTextCommand
5841 class WXDLLIMPEXP_RICHTEXT wxRichTextAction
: public wxObject
5845 Constructor. @a buffer is the top-level buffer, while @a container is the object within
5846 which the action is taking place. In the simplest case, they are the same.
5848 wxRichTextAction(wxRichTextCommand
* cmd
, const wxString
& name
, wxRichTextCommandId id
,
5849 wxRichTextBuffer
* buffer
, wxRichTextParagraphLayoutBox
* container
,
5850 wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5852 virtual ~wxRichTextAction();
5855 Performs the action.
5865 Updates the control appearance, optimizing if possible given information from the call to Layout.
5867 void UpdateAppearance(long caretPosition
, bool sendUpdateEvent
= false,
5868 wxArrayInt
* optimizationLineCharPositions
= NULL
, wxArrayInt
* optimizationLineYPositions
= NULL
, bool isDoCmd
= true);
5871 Replaces the buffer paragraphs with the given fragment.
5873 void ApplyParagraphs(const wxRichTextParagraphLayoutBox
& fragment
);
5876 Returns the new fragments.
5878 wxRichTextParagraphLayoutBox
& GetNewParagraphs() { return m_newParagraphs
; }
5881 Returns the old fragments.
5883 wxRichTextParagraphLayoutBox
& GetOldParagraphs() { return m_oldParagraphs
; }
5886 Returns the attributes, for single-object commands.
5888 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
5891 Returns the object to replace the one at the position defined by the container address
5892 and the action's range start position.
5894 wxRichTextObject
* GetObject() const { return m_object
; }
5897 Sets the object to replace the one at the position defined by the container address
5898 and the action's range start position.
5900 void SetObject(wxRichTextObject
* obj
) { m_object
= obj
; m_objectAddress
.Create(m_buffer
, m_object
); }
5903 Makes an address from the given object.
5905 void MakeObject(wxRichTextObject
* obj
) { m_objectAddress
.Create(m_buffer
, obj
); }
5908 Calculate arrays for refresh optimization.
5910 void CalculateRefreshOptimizations(wxArrayInt
& optimizationLineCharPositions
, wxArrayInt
& optimizationLineYPositions
);
5913 Sets the position used for e.g. insertion.
5915 void SetPosition(long pos
) { m_position
= pos
; }
5918 Returns the position used for e.g. insertion.
5920 long GetPosition() const { return m_position
; }
5923 Sets the range for e.g. deletion.
5925 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
5928 Returns the range for e.g. deletion.
5930 const wxRichTextRange
& GetRange() const { return m_range
; }
5933 Returns the address (nested position) of the container within the buffer being manipulated.
5935 wxRichTextObjectAddress
& GetContainerAddress() { return m_containerAddress
; }
5938 Returns the address (nested position) of the container within the buffer being manipulated.
5940 const wxRichTextObjectAddress
& GetContainerAddress() const { return m_containerAddress
; }
5943 Sets the address (nested position) of the container within the buffer being manipulated.
5945 void SetContainerAddress(const wxRichTextObjectAddress
& address
) { m_containerAddress
= address
; }
5948 Sets the address (nested position) of the container within the buffer being manipulated.
5950 void SetContainerAddress(wxRichTextParagraphLayoutBox
* container
, wxRichTextObject
* obj
) { m_containerAddress
.Create(container
, obj
); }
5953 Returns the container that this action refers to, using the container address and top-level buffer.
5955 wxRichTextParagraphLayoutBox
* GetContainer() const;
5958 Returns the action name.
5960 const wxString
& GetName() const { return m_name
; }
5967 wxRichTextBuffer
* m_buffer
;
5969 // The address (nested position) of the container being manipulated.
5970 // This is necessary because objects are deleted, and we can't
5971 // therefore store actual pointers.
5972 wxRichTextObjectAddress m_containerAddress
;
5975 wxRichTextCtrl
* m_ctrl
;
5977 // Stores the new paragraphs
5978 wxRichTextParagraphLayoutBox m_newParagraphs
;
5980 // Stores the old paragraphs
5981 wxRichTextParagraphLayoutBox m_oldParagraphs
;
5983 // Stores an object to replace the one at the position
5984 // defined by the container address and the action's range start position.
5985 wxRichTextObject
* m_object
;
5987 // Stores the attributes
5988 wxRichTextAttr m_attributes
;
5990 // The address of the object being manipulated (used for changing an individual object or its attributes)
5991 wxRichTextObjectAddress m_objectAddress
;
5993 // Stores the old attributes
5994 // wxRichTextAttr m_oldAttributes;
5996 // The affected range
5997 wxRichTextRange m_range
;
5999 // The insertion point for this command
6002 // Ignore 1st 'Do' operation because we already did it
6005 // The command identifier
6006 wxRichTextCommandId m_cmdId
;
6013 // Include style sheet when loading and saving
6014 #define wxRICHTEXT_HANDLER_INCLUDE_STYLESHEET 0x0001
6016 // Save images to memory file system in HTML handler
6017 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY 0x0010
6019 // Save images to files in HTML handler
6020 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_FILES 0x0020
6022 // Save images as inline base64 data in HTML handler
6023 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_BASE64 0x0040
6025 // Don't write header and footer (or BODY), so we can include the fragment
6026 // in a larger document
6027 #define wxRICHTEXT_HANDLER_NO_HEADER_FOOTER 0x0080
6029 // Convert the more common face names to names that will work on the current platform
6030 // in a larger document
6031 #define wxRICHTEXT_HANDLER_CONVERT_FACENAMES 0x0100
6034 @class wxRichTextFileHandler
6036 The base class for file handlers.
6038 @library{wxrichtext}
6041 @see wxRichTextBuffer, wxRichTextCtrl
6044 class WXDLLIMPEXP_RICHTEXT wxRichTextFileHandler
: public wxObject
6046 DECLARE_CLASS(wxRichTextFileHandler
)
6049 Creates a file handler object.
6051 wxRichTextFileHandler(const wxString
& name
= wxEmptyString
, const wxString
& ext
= wxEmptyString
, int type
= 0)
6052 : m_name(name
), m_extension(ext
), m_type(type
), m_flags(0), m_visible(true)
6057 Loads the buffer from a stream.
6058 Not all handlers will implement file loading.
6060 bool LoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
)
6061 { return DoLoadFile(buffer
, stream
); }
6064 Saves the buffer to a stream.
6065 Not all handlers will implement file saving.
6067 bool SaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
)
6068 { return DoSaveFile(buffer
, stream
); }
6071 #if wxUSE_FFILE && wxUSE_STREAMS
6073 Loads the buffer from a file.
6075 virtual bool LoadFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
6078 Saves the buffer to a file.
6080 virtual bool SaveFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
6081 #endif // wxUSE_STREAMS && wxUSE_STREAMS
6084 Returns @true if we handle this filename (if using files). By default, checks the extension.
6086 virtual bool CanHandle(const wxString
& filename
) const;
6089 Returns @true if we can save using this handler.
6091 virtual bool CanSave() const { return false; }
6094 Returns @true if we can load using this handler.
6096 virtual bool CanLoad() const { return false; }
6099 Returns @true if this handler should be visible to the user.
6101 virtual bool IsVisible() const { return m_visible
; }
6104 Sets whether the handler should be visible to the user (via the application's
6105 load and save dialogs).
6107 virtual void SetVisible(bool visible
) { m_visible
= visible
; }
6110 Sets the name of the handler.
6112 void SetName(const wxString
& name
) { m_name
= name
; }
6115 Returns the name of the handler.
6117 wxString
GetName() const { return m_name
; }
6120 Sets the default extension to recognise.
6122 void SetExtension(const wxString
& ext
) { m_extension
= ext
; }
6125 Returns the default extension to recognise.
6127 wxString
GetExtension() const { return m_extension
; }
6130 Sets the handler type.
6132 void SetType(int type
) { m_type
= type
; }
6135 Returns the handler type.
6137 int GetType() const { return m_type
; }
6140 Sets flags that change the behaviour of loading or saving.
6141 See the documentation for each handler class to see what flags are relevant
6144 You call this function directly if you are using a file handler explicitly
6145 (without going through the text control or buffer LoadFile/SaveFile API).
6146 Or, you can call the control or buffer's SetHandlerFlags function to set
6147 the flags that will be used for subsequent load and save operations.
6149 void SetFlags(int flags
) { m_flags
= flags
; }
6152 Returns flags controlling how loading and saving is done.
6154 int GetFlags() const { return m_flags
; }
6157 Sets the encoding to use when saving a file. If empty, a suitable encoding is chosen.
6159 void SetEncoding(const wxString
& encoding
) { m_encoding
= encoding
; }
6162 Returns the encoding to use when saving a file. If empty, a suitable encoding is chosen.
6164 const wxString
& GetEncoding() const { return m_encoding
; }
6170 Override to load content from @a stream into @a buffer.
6172 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
) = 0;
6175 Override to save content to @a stream from @a buffer.
6177 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
) = 0;
6181 wxString m_encoding
;
6182 wxString m_extension
;
6189 @class wxRichTextPlainTextHandler
6191 Implements saving a buffer to plain text.
6193 @library{wxrichtext}
6196 @see wxRichTextFileHandler, wxRichTextBuffer, wxRichTextCtrl
6199 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainTextHandler
: public wxRichTextFileHandler
6201 DECLARE_CLASS(wxRichTextPlainTextHandler
)
6203 wxRichTextPlainTextHandler(const wxString
& name
= wxT("Text"),
6204 const wxString
& ext
= wxT("txt"),
6205 wxRichTextFileType type
= wxRICHTEXT_TYPE_TEXT
)
6206 : wxRichTextFileHandler(name
, ext
, type
)
6209 // Can we save using this handler?
6210 virtual bool CanSave() const { return true; }
6212 // Can we load using this handler?
6213 virtual bool CanLoad() const { return true; }
6218 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
);
6219 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
);
6225 @class wxRichTextDrawingHandler
6227 The base class for custom drawing handlers.
6228 Currently, drawing handlers can provide virtual attributes.
6230 @library{wxrichtext}
6233 @see wxRichTextBuffer, wxRichTextCtrl
6236 class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingHandler
: public wxObject
6238 DECLARE_CLASS(wxRichTextDrawingHandler
)
6241 Creates a drawing handler object.
6243 wxRichTextDrawingHandler(const wxString
& name
= wxEmptyString
)
6248 Returns @true if this object has virtual attributes that we can provide.
6250 virtual bool HasVirtualAttributes(wxRichTextObject
* obj
) const = 0;
6253 Provides virtual attributes that we can provide.
6255 virtual bool GetVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const = 0;
6258 Sets the name of the handler.
6260 void SetName(const wxString
& name
) { m_name
= name
; }
6263 Returns the name of the handler.
6265 wxString
GetName() const { return m_name
; }
6275 @class wxRichTextBufferDataObject
6277 Implements a rich text data object for clipboard transfer.
6279 @library{wxrichtext}
6282 @see wxDataObjectSimple, wxRichTextBuffer, wxRichTextCtrl
6285 class WXDLLIMPEXP_RICHTEXT wxRichTextBufferDataObject
: public wxDataObjectSimple
6289 The constructor doesn't copy the pointer, so it shouldn't go away while this object
6292 wxRichTextBufferDataObject(wxRichTextBuffer
* richTextBuffer
= NULL
);
6293 virtual ~wxRichTextBufferDataObject();
6296 After a call to this function, the buffer is owned by the caller and it
6297 is responsible for deleting it.
6299 wxRichTextBuffer
* GetRichTextBuffer();
6302 Returns the id for the new data format.
6304 static const wxChar
* GetRichTextBufferFormatId() { return ms_richTextBufferFormatId
; }
6306 // base class pure virtuals
6308 virtual wxDataFormat
GetPreferredFormat(Direction dir
) const;
6309 virtual size_t GetDataSize() const;
6310 virtual bool GetDataHere(void *pBuf
) const;
6311 virtual bool SetData(size_t len
, const void *buf
);
6315 virtual size_t GetDataSize(const wxDataFormat
&) const { return GetDataSize(); }
6316 virtual bool GetDataHere(const wxDataFormat
&, void *buf
) const { return GetDataHere(buf
); }
6317 virtual bool SetData(const wxDataFormat
&, size_t len
, const void *buf
) { return SetData(len
, buf
); }
6320 wxDataFormat m_formatRichTextBuffer
; // our custom format
6321 wxRichTextBuffer
* m_richTextBuffer
; // our data
6322 static const wxChar
* ms_richTextBufferFormatId
; // our format id
6328 @class wxRichTextRenderer
6330 This class isolates some common drawing functionality.
6332 @library{wxrichtext}
6335 @see wxRichTextBuffer, wxRichTextCtrl
6338 class WXDLLIMPEXP_RICHTEXT wxRichTextRenderer
: public wxObject
6344 wxRichTextRenderer() {}
6345 virtual ~wxRichTextRenderer() {}
6348 Draws a standard bullet, as specified by the value of GetBulletName. This function should be overridden.
6350 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
6353 Draws a bullet that can be described by text, such as numbered or symbol bullets. This function should be overridden.
6355 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
) = 0;
6358 Draws a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName. This function should be overridden.
6360 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
6363 Enumerate the standard bullet names currently supported. This function should be overridden.
6365 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
) = 0;
6369 @class wxRichTextStdRenderer
6371 The standard renderer for drawing bullets.
6373 @library{wxrichtext}
6376 @see wxRichTextRenderer, wxRichTextBuffer, wxRichTextCtrl
6379 class WXDLLIMPEXP_RICHTEXT wxRichTextStdRenderer
: public wxRichTextRenderer
6385 wxRichTextStdRenderer() {}
6387 // Draw a standard bullet, as specified by the value of GetBulletName
6388 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
6390 // Draw a bullet that can be described by text, such as numbered or symbol bullets
6391 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
);
6393 // Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
6394 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
6396 // Enumerate the standard bullet names currently supported
6397 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
);
6405 inline bool wxRichTextHasStyle(int flags
, int style
)
6407 return ((flags
& style
) == style
);
6410 /// Compare two attribute objects
6411 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6412 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6414 /// Apply one style to another
6415 WXDLLIMPEXP_RICHTEXT
bool wxRichTextApplyStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
* compareWith
= NULL
);
6417 // Remove attributes
6418 WXDLLIMPEXP_RICHTEXT
bool wxRichTextRemoveStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
);
6420 /// Combine two bitlists
6421 WXDLLIMPEXP_RICHTEXT
bool wxRichTextCombineBitlists(int& valueA
, int valueB
, int& flagsA
, int flagsB
);
6423 /// Compare two bitlists
6424 WXDLLIMPEXP_RICHTEXT
bool wxRichTextBitlistsEqPartial(int valueA
, int valueB
, int flags
);
6426 /// Split into paragraph and character styles
6427 WXDLLIMPEXP_RICHTEXT
bool wxRichTextSplitParaCharStyles(const wxRichTextAttr
& style
, wxRichTextAttr
& parStyle
, wxRichTextAttr
& charStyle
);
6430 WXDLLIMPEXP_RICHTEXT
bool wxRichTextTabsEq(const wxArrayInt
& tabs1
, const wxArrayInt
& tabs2
);
6432 /// Convert a decimal to Roman numerals
6433 WXDLLIMPEXP_RICHTEXT wxString
wxRichTextDecimalToRoman(long n
);
6435 // Collects the attributes that are common to a range of content, building up a note of
6436 // which attributes are absent in some objects and which clash in some objects.
6437 WXDLLIMPEXP_RICHTEXT
void wxTextAttrCollectCommonAttributes(wxTextAttr
& currentStyle
, const wxTextAttr
& attr
, wxTextAttr
& clashingAttr
, wxTextAttr
& absentAttr
);
6439 WXDLLIMPEXP_RICHTEXT
void wxRichTextModuleInit();
6445 // _WX_RICHTEXTBUFFER_H_