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 /////////////////////////////////////////////////////////////////////////////
13 The line break character that can be embedded in content.
16 extern const wxChar wxRichTextLineBreakChar
;
19 File types in wxRichText context.
21 enum wxRichTextFileType
23 wxRICHTEXT_TYPE_ANY
= 0,
32 Flags determining the available space, passed to Layout.
35 #define wxRICHTEXT_FIXED_WIDTH 0x01
36 #define wxRICHTEXT_FIXED_HEIGHT 0x02
37 #define wxRICHTEXT_VARIABLE_WIDTH 0x04
38 #define wxRICHTEXT_VARIABLE_HEIGHT 0x08
40 // Only lay out the part of the buffer that lies within
41 // the rect passed to Layout.
42 #define wxRICHTEXT_LAYOUT_SPECIFIED_RECT 0x10
48 // Ignore paragraph cache optimization, e.g. for printing purposes
49 // where one line may be drawn higher (on the next page) compared
50 // with the previous line
51 #define wxRICHTEXT_DRAW_IGNORE_CACHE 0x01
52 #define wxRICHTEXT_DRAW_SELECTED 0x02
53 #define wxRICHTEXT_DRAW_PRINT 0x04
54 #define wxRICHTEXT_DRAW_GUIDELINES 0x08
57 Flags returned from hit-testing, or passed to hit-test function.
59 enum wxRichTextHitTestFlags
61 // The point was not on this object
62 wxRICHTEXT_HITTEST_NONE
= 0x01,
64 // The point was before the position returned from HitTest
65 wxRICHTEXT_HITTEST_BEFORE
= 0x02,
67 // The point was after the position returned from HitTest
68 wxRICHTEXT_HITTEST_AFTER
= 0x04,
70 // The point was on the position returned from HitTest
71 wxRICHTEXT_HITTEST_ON
= 0x08,
73 // The point was on space outside content
74 wxRICHTEXT_HITTEST_OUTSIDE
= 0x10,
76 // Only do hit-testing at the current level (don't traverse into top-level objects)
77 wxRICHTEXT_HITTEST_NO_NESTED_OBJECTS
= 0x20,
79 // Ignore floating objects
80 wxRICHTEXT_HITTEST_NO_FLOATING_OBJECTS
= 0x40,
82 // Don't recurse into objects marked as atomic
83 wxRICHTEXT_HITTEST_HONOUR_ATOMIC
= 0x80
87 Flags for GetRangeSize.
90 #define wxRICHTEXT_FORMATTED 0x01
91 #define wxRICHTEXT_UNFORMATTED 0x02
92 #define wxRICHTEXT_CACHE_SIZE 0x04
93 #define wxRICHTEXT_HEIGHT_ONLY 0x08
96 Flags for SetStyle/SetListStyle.
99 #define wxRICHTEXT_SETSTYLE_NONE 0x00
101 // Specifies that this operation should be undoable
102 #define wxRICHTEXT_SETSTYLE_WITH_UNDO 0x01
104 // Specifies that the style should not be applied if the
105 // combined style at this point is already the style in question.
106 #define wxRICHTEXT_SETSTYLE_OPTIMIZE 0x02
108 // Specifies that the style should only be applied to paragraphs,
109 // and not the content. This allows content styling to be
110 // preserved independently from that of e.g. a named paragraph style.
111 #define wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY 0x04
113 // Specifies that the style should only be applied to characters,
114 // and not the paragraph. This allows content styling to be
115 // preserved independently from that of e.g. a named paragraph style.
116 #define wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY 0x08
118 // For SetListStyle only: specifies starting from the given number, otherwise
119 // deduces number from existing attributes
120 #define wxRICHTEXT_SETSTYLE_RENUMBER 0x10
122 // For SetListStyle only: specifies the list level for all paragraphs, otherwise
123 // the current indentation will be used
124 #define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20
126 // Resets the existing style before applying the new style
127 #define wxRICHTEXT_SETSTYLE_RESET 0x40
129 // Removes the given style instead of applying it
130 #define wxRICHTEXT_SETSTYLE_REMOVE 0x80
133 Flags for SetProperties.
136 #define wxRICHTEXT_SETPROPERTIES_NONE 0x00
138 // Specifies that this operation should be undoable
139 #define wxRICHTEXT_SETPROPERTIES_WITH_UNDO 0x01
141 // Specifies that the properties should only be applied to paragraphs,
142 // and not the content.
143 #define wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY 0x02
145 // Specifies that the properties should only be applied to characters,
146 // and not the paragraph.
147 #define wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY 0x04
149 // Resets the existing properties before applying the new properties.
150 #define wxRICHTEXT_SETPROPERTIES_RESET 0x08
152 // Removes the given properties instead of applying them.
153 #define wxRICHTEXT_SETPROPERTIES_REMOVE 0x10
156 Flags for object insertion.
159 #define wxRICHTEXT_INSERT_NONE 0x00
160 #define wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE 0x01
161 #define wxRICHTEXT_INSERT_INTERACTIVE 0x02
163 // A special flag telling the buffer to keep the first paragraph style
164 // as-is, when deleting a paragraph marker. In future we might pass a
165 // flag to InsertFragment and DeleteRange to indicate the appropriate mode.
166 #define wxTEXT_ATTR_KEEP_FIRST_PARA_STYLE 0x10000000
169 Default superscript/subscript font multiplication factor.
172 #define wxSCRIPT_MUL_FACTOR 1.5
175 The type for wxTextAttrDimension flags.
177 typedef unsigned short wxTextAttrDimensionFlags
;
180 Miscellaneous text box flags
182 enum wxTextBoxAttrFlags
184 wxTEXT_BOX_ATTR_FLOAT
= 0x00000001,
185 wxTEXT_BOX_ATTR_CLEAR
= 0x00000002,
186 wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
= 0x00000004,
187 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
= 0x00000008
191 Whether a value is present, used in dimension flags.
193 enum wxTextAttrValueFlags
195 wxTEXT_ATTR_VALUE_VALID
= 0x1000,
196 wxTEXT_ATTR_VALUE_VALID_MASK
= 0x1000
200 Units, included in the dimension value.
204 wxTEXT_ATTR_UNITS_TENTHS_MM
= 0x0001,
205 wxTEXT_ATTR_UNITS_PIXELS
= 0x0002,
206 wxTEXT_ATTR_UNITS_PERCENTAGE
= 0x0004,
207 wxTEXT_ATTR_UNITS_POINTS
= 0x0008,
209 wxTEXT_ATTR_UNITS_MASK
= 0x000F
213 Position alternatives, included in the dimension flags.
215 enum wxTextBoxAttrPosition
217 wxTEXT_BOX_ATTR_POSITION_STATIC
= 0x0000, // Default is static, i.e. as per normal layout
218 wxTEXT_BOX_ATTR_POSITION_RELATIVE
= 0x0010, // Relative to the relevant edge
219 wxTEXT_BOX_ATTR_POSITION_ABSOLUTE
= 0x0020, // Relative to the parent
220 wxTEXT_BOX_ATTR_POSITION_FIXED
= 0x0040, // Relative to the top-level window
222 wxTEXT_BOX_ATTR_POSITION_MASK
= 0x00F0
226 @class wxTextAttrDimension
228 A class representing a rich text dimension, including units and position.
233 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimensions
236 class wxTextAttrDimension
242 wxTextAttrDimension() { Reset(); }
244 Constructor taking value and units flag.
246 wxTextAttrDimension(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { m_value
= value
; m_flags
= units
|wxTEXT_ATTR_VALUE_VALID
; }
249 Resets the dimension value and flags.
251 void Reset() { m_value
= 0; m_flags
= 0; }
254 Partial equality test. If @a weakTest is @true, attributes of this object do not
255 have to be present if those attributes of @a dim are present. If @a weakTest is
256 @false, the function will fail if an attribute is present in @a dim but not
259 bool EqPartial(const wxTextAttrDimension
& dim
, bool weakTest
= true) const;
261 /** Apply the dimension, but not those identical to @a compareWith if present.
263 bool Apply(const wxTextAttrDimension
& dim
, const wxTextAttrDimension
* compareWith
= NULL
);
265 /** Collects the attributes that are common to a range of content, building up a note of
266 which attributes are absent in some objects and which clash in some objects.
268 void CollectCommonAttributes(const wxTextAttrDimension
& attr
, wxTextAttrDimension
& clashingAttr
, wxTextAttrDimension
& absentAttr
);
273 bool operator==(const wxTextAttrDimension
& dim
) const { return m_value
== dim
.m_value
&& m_flags
== dim
.m_flags
; }
276 Returns the integer value of the dimension.
278 int GetValue() const { return m_value
; }
281 Returns the floating-pointing value of the dimension in mm.
284 float GetValueMM() const { return float(m_value
) / 10.0; }
287 Sets the value of the dimension in mm.
289 void SetValueMM(float value
) { m_value
= (int) ((value
* 10.0) + 0.5); m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
292 Sets the integer value of the dimension.
294 void SetValue(int value
) { m_value
= value
; m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
297 Sets the integer value of the dimension, passing dimension flags.
299 void SetValue(int value
, wxTextAttrDimensionFlags flags
) { SetValue(value
); m_flags
= flags
; }
302 Sets the integer value and units.
304 void SetValue(int value
, wxTextAttrUnits units
) { m_value
= value
; m_flags
= units
| wxTEXT_ATTR_VALUE_VALID
; }
309 void SetValue(const wxTextAttrDimension
& dim
) { (*this) = dim
; }
312 Gets the units of the dimension.
314 wxTextAttrUnits
GetUnits() const { return (wxTextAttrUnits
) (m_flags
& wxTEXT_ATTR_UNITS_MASK
); }
317 Sets the units of the dimension.
319 void SetUnits(wxTextAttrUnits units
) { m_flags
&= ~wxTEXT_ATTR_UNITS_MASK
; m_flags
|= units
; }
322 Gets the position flags.
324 wxTextBoxAttrPosition
GetPosition() const { return (wxTextBoxAttrPosition
) (m_flags
& wxTEXT_BOX_ATTR_POSITION_MASK
); }
327 Sets the position flags.
329 void SetPosition(wxTextBoxAttrPosition pos
) { m_flags
&= ~wxTEXT_BOX_ATTR_POSITION_MASK
; m_flags
|= pos
; }
332 Returns @true if the dimension is valid.
334 bool IsValid() const { return (m_flags
& wxTEXT_ATTR_VALUE_VALID
) != 0; }
339 void SetValid(bool b
) { m_flags
&= ~wxTEXT_ATTR_VALUE_VALID_MASK
; m_flags
|= (b
? wxTEXT_ATTR_VALUE_VALID
: 0); }
342 Gets the dimension flags.
344 wxTextAttrDimensionFlags
GetFlags() const { return m_flags
; }
347 Sets the dimension flags.
349 void SetFlags(wxTextAttrDimensionFlags flags
) { m_flags
= flags
; }
352 wxTextAttrDimensionFlags m_flags
;
356 @class wxTextAttrDimensions
357 A class for left, right, top and bottom dimensions.
362 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
365 class wxTextAttrDimensions
371 wxTextAttrDimensions() {}
374 Resets the value and flags for all dimensions.
376 void Reset() { m_left
.Reset(); m_top
.Reset(); m_right
.Reset(); m_bottom
.Reset(); }
381 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
; }
384 Partial equality test. If @a weakTest is @true, attributes of this object do not
385 have to be present if those attributes of @a dim sare present. If @a weakTest is
386 @false, the function will fail if an attribute is present in @a dims but not
390 bool EqPartial(const wxTextAttrDimensions
& dims
, bool weakTest
= true) const;
393 Apply to 'this', but not if the same as @a compareWith.
396 bool Apply(const wxTextAttrDimensions
& dims
, const wxTextAttrDimensions
* compareWith
= NULL
);
399 Collects the attributes that are common to a range of content, building up a note of
400 which attributes are absent in some objects and which clash in some objects.
403 void CollectCommonAttributes(const wxTextAttrDimensions
& attr
, wxTextAttrDimensions
& clashingAttr
, wxTextAttrDimensions
& absentAttr
);
406 Remove specified attributes from this object.
408 bool RemoveStyle(const wxTextAttrDimensions
& attr
);
411 Gets the left dimension.
413 const wxTextAttrDimension
& GetLeft() const { return m_left
; }
414 wxTextAttrDimension
& GetLeft() { return m_left
; }
417 Gets the right dimension.
420 const wxTextAttrDimension
& GetRight() const { return m_right
; }
421 wxTextAttrDimension
& GetRight() { return m_right
; }
424 Gets the top dimension.
427 const wxTextAttrDimension
& GetTop() const { return m_top
; }
428 wxTextAttrDimension
& GetTop() { return m_top
; }
431 Gets the bottom dimension.
434 const wxTextAttrDimension
& GetBottom() const { return m_bottom
; }
435 wxTextAttrDimension
& GetBottom() { return m_bottom
; }
438 Are all dimensions valid?
441 bool IsValid() const { return m_left
.IsValid() && m_top
.IsValid() && m_right
.IsValid() && m_bottom
.IsValid(); }
443 wxTextAttrDimension m_left
;
444 wxTextAttrDimension m_top
;
445 wxTextAttrDimension m_right
;
446 wxTextAttrDimension m_bottom
;
450 @class wxTextAttrSize
451 A class for representing width and height.
456 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
468 Resets the width and height dimensions.
470 void Reset() { m_width
.Reset(); m_height
.Reset(); }
475 bool operator==(const wxTextAttrSize
& size
) const { return m_width
== size
.m_width
&& m_height
== size
.m_height
; }
478 Partial equality test. If @a weakTest is @true, attributes of this object do not
479 have to be present if those attributes of @a size are present. If @a weakTest is
480 @false, the function will fail if an attribute is present in @a size but not
483 bool EqPartial(const wxTextAttrSize
& size
, bool weakTest
= true) const;
486 Apply to this object, but not if the same as @a compareWith.
488 bool Apply(const wxTextAttrSize
& dims
, const wxTextAttrSize
* compareWith
= NULL
);
491 Collects the attributes that are common to a range of content, building up a note of
492 which attributes are absent in some objects and which clash in some objects.
494 void CollectCommonAttributes(const wxTextAttrSize
& attr
, wxTextAttrSize
& clashingAttr
, wxTextAttrSize
& absentAttr
);
497 Removes the specified attributes from this object.
499 bool RemoveStyle(const wxTextAttrSize
& attr
);
504 wxTextAttrDimension
& GetWidth() { return m_width
; }
505 const wxTextAttrDimension
& GetWidth() const { return m_width
; }
510 void SetWidth(int value
, wxTextAttrDimensionFlags flags
) { m_width
.SetValue(value
, flags
); }
515 void SetWidth(int value
, wxTextAttrUnits units
) { m_width
.SetValue(value
, units
); }
520 void SetWidth(const wxTextAttrDimension
& dim
) { m_width
.SetValue(dim
); }
525 wxTextAttrDimension
& GetHeight() { return m_height
; }
526 const wxTextAttrDimension
& GetHeight() const { return m_height
; }
531 void SetHeight(int value
, wxTextAttrDimensionFlags flags
) { m_height
.SetValue(value
, flags
); }
536 void SetHeight(int value
, wxTextAttrUnits units
) { m_height
.SetValue(value
, units
); }
541 void SetHeight(const wxTextAttrDimension
& dim
) { m_height
.SetValue(dim
); }
546 bool IsValid() const { return m_width
.IsValid() && m_height
.IsValid(); }
548 wxTextAttrDimension m_width
;
549 wxTextAttrDimension m_height
;
553 @class wxTextAttrDimensionConverter
554 A class to make it easier to convert dimensions.
559 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
562 class wxTextAttrDimensionConverter
568 wxTextAttrDimensionConverter(wxDC
& dc
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
572 wxTextAttrDimensionConverter(int ppi
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
575 Gets the pixel size for the given dimension.
577 int GetPixels(const wxTextAttrDimension
& dim
, int direction
= wxHORIZONTAL
) const;
579 Gets the mm size for the given dimension.
581 int GetTenthsMM(const wxTextAttrDimension
& dim
) const;
584 Converts tenths of a mm to pixels.
586 int ConvertTenthsMMToPixels(int units
) const;
588 Converts pixels to tenths of a mm.
590 int ConvertPixelsToTenthsMM(int pixels
) const;
598 Border styles, used with wxTextAttrBorder.
600 enum wxTextAttrBorderStyle
602 wxTEXT_BOX_ATTR_BORDER_NONE
= 0,
603 wxTEXT_BOX_ATTR_BORDER_SOLID
= 1,
604 wxTEXT_BOX_ATTR_BORDER_DOTTED
= 2,
605 wxTEXT_BOX_ATTR_BORDER_DASHED
= 3,
606 wxTEXT_BOX_ATTR_BORDER_DOUBLE
= 4,
607 wxTEXT_BOX_ATTR_BORDER_GROOVE
= 5,
608 wxTEXT_BOX_ATTR_BORDER_RIDGE
= 6,
609 wxTEXT_BOX_ATTR_BORDER_INSET
= 7,
610 wxTEXT_BOX_ATTR_BORDER_OUTSET
= 8
614 Border style presence flags, used with wxTextAttrBorder.
616 enum wxTextAttrBorderFlags
618 wxTEXT_BOX_ATTR_BORDER_STYLE
= 0x0001,
619 wxTEXT_BOX_ATTR_BORDER_COLOUR
= 0x0002
623 Border width symbols for qualitative widths, used with wxTextAttrBorder.
625 enum wxTextAttrBorderWidth
627 wxTEXT_BOX_ATTR_BORDER_THIN
= -1,
628 wxTEXT_BOX_ATTR_BORDER_MEDIUM
= -2,
629 wxTEXT_BOX_ATTR_BORDER_THICK
= -3
635 enum wxTextBoxAttrFloatStyle
637 wxTEXT_BOX_ATTR_FLOAT_NONE
= 0,
638 wxTEXT_BOX_ATTR_FLOAT_LEFT
= 1,
639 wxTEXT_BOX_ATTR_FLOAT_RIGHT
= 2
645 enum wxTextBoxAttrClearStyle
647 wxTEXT_BOX_ATTR_CLEAR_NONE
= 0,
648 wxTEXT_BOX_ATTR_CLEAR_LEFT
= 1,
649 wxTEXT_BOX_ATTR_CLEAR_RIGHT
= 2,
650 wxTEXT_BOX_ATTR_CLEAR_BOTH
= 3
654 Collapse mode styles. TODO: can they be switched on per side?
656 enum wxTextBoxAttrCollapseMode
658 wxTEXT_BOX_ATTR_COLLAPSE_NONE
= 0,
659 wxTEXT_BOX_ATTR_COLLAPSE_FULL
= 1
663 Vertical alignment values.
665 enum wxTextBoxAttrVerticalAlignment
667 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_NONE
= 0,
668 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_TOP
= 1,
669 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_CENTRE
= 2,
670 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_BOTTOM
= 3
674 @class wxTextAttrBorder
675 A class representing a rich text object border.
680 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorders
683 class wxTextAttrBorder
689 wxTextAttrBorder() { Reset(); }
694 bool operator==(const wxTextAttrBorder
& border
) const
696 return m_flags
== border
.m_flags
&& m_borderStyle
== border
.m_borderStyle
&&
697 m_borderColour
== border
.m_borderColour
&& m_borderWidth
== border
.m_borderWidth
;
701 Resets the border style, colour, width and flags.
703 void Reset() { m_borderStyle
= 0; m_borderColour
= 0; m_flags
= 0; m_borderWidth
.Reset(); }
706 Partial equality test. If @a weakTest is @true, attributes of this object do not
707 have to be present if those attributes of @a border are present. If @a weakTest is
708 @false, the function will fail if an attribute is present in @a border but not
711 bool EqPartial(const wxTextAttrBorder
& border
, bool weakTest
= true) const;
714 Applies the border to this object, but not if the same as @a compareWith.
717 bool Apply(const wxTextAttrBorder
& border
, const wxTextAttrBorder
* compareWith
= NULL
);
720 Removes the specified attributes from this object.
722 bool RemoveStyle(const wxTextAttrBorder
& attr
);
725 Collects the attributes that are common to a range of content, building up a note of
726 which attributes are absent in some objects and which clash in some objects.
728 void CollectCommonAttributes(const wxTextAttrBorder
& attr
, wxTextAttrBorder
& clashingAttr
, wxTextAttrBorder
& absentAttr
);
731 Sets the border style.
733 void SetStyle(int style
) { m_borderStyle
= style
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_STYLE
; }
736 Gets the border style.
739 int GetStyle() const { return m_borderStyle
; }
742 Sets the border colour.
744 void SetColour(unsigned long colour
) { m_borderColour
= colour
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
747 Sets the border colour.
749 void SetColour(const wxColour
& colour
) { m_borderColour
= colour
.GetRGB(); m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
752 Gets the colour as a long.
754 unsigned long GetColourLong() const { return m_borderColour
; }
759 wxColour
GetColour() const { return wxColour(m_borderColour
); }
762 Gets the border width.
764 wxTextAttrDimension
& GetWidth() { return m_borderWidth
; }
765 const wxTextAttrDimension
& GetWidth() const { return m_borderWidth
; }
768 Sets the border width.
770 void SetWidth(const wxTextAttrDimension
& width
) { m_borderWidth
= width
; }
772 Sets the border width.
774 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
777 True if the border has a valid style.
779 bool HasStyle() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_STYLE
) != 0; }
782 True if the border has a valid colour.
784 bool HasColour() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_COLOUR
) != 0; }
787 True if the border has a valid width.
789 bool HasWidth() const { return m_borderWidth
.IsValid(); }
792 True if the border is valid.
794 bool IsValid() const { return HasWidth(); }
797 Set the valid flag for this border.
799 void MakeValid() { m_borderWidth
.SetValid(true); }
802 Returns the border flags.
804 int GetFlags() const { return m_flags
; }
807 Sets the border flags.
809 void SetFlags(int flags
) { m_flags
= flags
; }
814 void AddFlag(int flag
) { m_flags
|= flag
; }
817 Removes a border flag.
819 void RemoveFlag(int flag
) { m_flags
&= ~flag
; }
822 unsigned long m_borderColour
;
823 wxTextAttrDimension m_borderWidth
;
828 @class wxTextAttrBorders
829 A class representing a rich text object's borders.
834 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorder
837 class wxTextAttrBorders
843 wxTextAttrBorders() { }
848 bool operator==(const wxTextAttrBorders
& borders
) const
850 return m_left
== borders
.m_left
&& m_right
== borders
.m_right
&&
851 m_top
== borders
.m_top
&& m_bottom
== borders
.m_bottom
;
855 Sets the style of all borders.
857 void SetStyle(int style
);
860 Sets colour of all borders.
862 void SetColour(unsigned long colour
);
865 Sets the colour for all borders.
867 void SetColour(const wxColour
& colour
);
870 Sets the width of all borders.
872 void SetWidth(const wxTextAttrDimension
& width
);
875 Sets the width of all borders.
877 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
882 void Reset() { m_left
.Reset(); m_right
.Reset(); m_top
.Reset(); m_bottom
.Reset(); }
885 Partial equality test. If @a weakTest is @true, attributes of this object do not
886 have to be present if those attributes of @a borders are present. If @a weakTest is
887 @false, the function will fail if an attribute is present in @a borders but not
890 bool EqPartial(const wxTextAttrBorders
& borders
, bool weakTest
= true) const;
893 Applies border to this object, but not if the same as @a compareWith.
895 bool Apply(const wxTextAttrBorders
& borders
, const wxTextAttrBorders
* compareWith
= NULL
);
898 Removes the specified attributes from this object.
900 bool RemoveStyle(const wxTextAttrBorders
& attr
);
903 Collects the attributes that are common to a range of content, building up a note of
904 which attributes are absent in some objects and which clash in some objects.
906 void CollectCommonAttributes(const wxTextAttrBorders
& attr
, wxTextAttrBorders
& clashingAttr
, wxTextAttrBorders
& absentAttr
);
909 Returns @true if all borders are valid.
911 bool IsValid() const { return m_left
.IsValid() || m_right
.IsValid() || m_top
.IsValid() || m_bottom
.IsValid(); }
914 Returns the left border.
916 const wxTextAttrBorder
& GetLeft() const { return m_left
; }
917 wxTextAttrBorder
& GetLeft() { return m_left
; }
920 Returns the right border.
922 const wxTextAttrBorder
& GetRight() const { return m_right
; }
923 wxTextAttrBorder
& GetRight() { return m_right
; }
926 Returns the top border.
928 const wxTextAttrBorder
& GetTop() const { return m_top
; }
929 wxTextAttrBorder
& GetTop() { return m_top
; }
932 Returns the bottom border.
934 const wxTextAttrBorder
& GetBottom() const { return m_bottom
; }
935 wxTextAttrBorder
& GetBottom() { return m_bottom
; }
937 wxTextAttrBorder m_left
, m_right
, m_top
, m_bottom
;
943 A class representing the box attributes of a rich text object.
948 @see wxRichTextAttr, wxRichTextCtrl
957 wxTextBoxAttr() { Init(); }
962 wxTextBoxAttr(const wxTextBoxAttr
& attr
) { Init(); (*this) = attr
; }
965 Initialises this object.
967 void Init() { Reset(); }
974 // Copy. Unnecessary since we let it do a binary copy
975 //void Copy(const wxTextBoxAttr& attr);
978 //void operator= (const wxTextBoxAttr& attr);
983 bool operator== (const wxTextBoxAttr
& attr
) const;
986 Partial equality test, ignoring unset attributes. If @a weakTest is @true, attributes of this object do not
987 have to be present if those attributes of @a attr are present. If @a weakTest is
988 @false, the function will fail if an attribute is present in @a attr but not
992 bool EqPartial(const wxTextBoxAttr
& attr
, bool weakTest
= true) const;
995 Merges the given attributes. If @a compareWith is non-NULL, then it will be used
996 to mask out those attributes that are the same in style and @a compareWith, for
997 situations where we don't want to explicitly set inherited attributes.
999 bool Apply(const wxTextBoxAttr
& style
, const wxTextBoxAttr
* compareWith
= NULL
);
1002 Collects the attributes that are common to a range of content, building up a note of
1003 which attributes are absent in some objects and which clash in some objects.
1005 void CollectCommonAttributes(const wxTextBoxAttr
& attr
, wxTextBoxAttr
& clashingAttr
, wxTextBoxAttr
& absentAttr
);
1008 Removes the specified attributes from this object.
1010 bool RemoveStyle(const wxTextBoxAttr
& attr
);
1015 void SetFlags(int flags
) { m_flags
= flags
; }
1020 int GetFlags() const { return m_flags
; }
1023 Is this flag present?
1025 bool HasFlag(wxTextBoxAttrFlags flag
) const { return (m_flags
& flag
) != 0; }
1030 void RemoveFlag(wxTextBoxAttrFlags flag
) { m_flags
&= ~flag
; }
1035 void AddFlag(wxTextBoxAttrFlags flag
) { m_flags
|= flag
; }
1038 Returns @true if no attributes are set.
1040 bool IsDefault() const;
1043 Returns the float mode.
1045 wxTextBoxAttrFloatStyle
GetFloatMode() const { return m_floatMode
; }
1048 Sets the float mode.
1050 void SetFloatMode(wxTextBoxAttrFloatStyle mode
) { m_floatMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_FLOAT
; }
1053 Returns @true if float mode is active.
1055 bool HasFloatMode() const { return HasFlag(wxTEXT_BOX_ATTR_FLOAT
); }
1058 Returns @true if this object is floating.
1060 bool IsFloating() const { return HasFloatMode() && GetFloatMode() != wxTEXT_BOX_ATTR_FLOAT_NONE
; }
1063 Returns the clear mode - whether to wrap text after object. Currently unimplemented.
1065 wxTextBoxAttrClearStyle
GetClearMode() const { return m_clearMode
; }
1068 Set the clear mode. Currently unimplemented.
1070 void SetClearMode(wxTextBoxAttrClearStyle mode
) { m_clearMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_CLEAR
; }
1073 Returns @true if we have a clear flag.
1075 bool HasClearMode() const { return HasFlag(wxTEXT_BOX_ATTR_CLEAR
); }
1078 Returns the collapse mode - whether to collapse borders. Currently unimplemented.
1080 wxTextBoxAttrCollapseMode
GetCollapseBorders() const { return m_collapseMode
; }
1083 Sets the collapse mode - whether to collapse borders. Currently unimplemented.
1085 void SetCollapseBorders(wxTextBoxAttrCollapseMode collapse
) { m_collapseMode
= collapse
; m_flags
|= wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
; }
1088 Returns @true if the collapse borders flag is present.
1090 bool HasCollapseBorders() const { return HasFlag(wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
); }
1093 Returns the vertical alignment.
1095 wxTextBoxAttrVerticalAlignment
GetVerticalAlignment() const { return m_verticalAlignment
; }
1098 Sets the vertical alignment.
1100 void SetVerticalAlignment(wxTextBoxAttrVerticalAlignment verticalAlignment
) { m_verticalAlignment
= verticalAlignment
; m_flags
|= wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
; }
1103 Returns @true if a vertical alignment flag is present.
1105 bool HasVerticalAlignment() const { return HasFlag(wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
); }
1108 Returns the margin values.
1110 wxTextAttrDimensions
& GetMargins() { return m_margins
; }
1111 const wxTextAttrDimensions
& GetMargins() const { return m_margins
; }
1114 Returns the left margin.
1116 wxTextAttrDimension
& GetLeftMargin() { return m_margins
.m_left
; }
1117 const wxTextAttrDimension
& GetLeftMargin() const { return m_margins
.m_left
; }
1120 Returns the right margin.
1122 wxTextAttrDimension
& GetRightMargin() { return m_margins
.m_right
; }
1123 const wxTextAttrDimension
& GetRightMargin() const { return m_margins
.m_right
; }
1126 Returns the top margin.
1128 wxTextAttrDimension
& GetTopMargin() { return m_margins
.m_top
; }
1129 const wxTextAttrDimension
& GetTopMargin() const { return m_margins
.m_top
; }
1132 Returns the bottom margin.
1134 wxTextAttrDimension
& GetBottomMargin() { return m_margins
.m_bottom
; }
1135 const wxTextAttrDimension
& GetBottomMargin() const { return m_margins
.m_bottom
; }
1138 Returns the position.
1140 wxTextAttrDimensions
& GetPosition() { return m_position
; }
1141 const wxTextAttrDimensions
& GetPosition() const { return m_position
; }
1144 Returns the left position.
1146 wxTextAttrDimension
& GetLeft() { return m_position
.m_left
; }
1147 const wxTextAttrDimension
& GetLeft() const { return m_position
.m_left
; }
1150 Returns the right position.
1152 wxTextAttrDimension
& GetRight() { return m_position
.m_right
; }
1153 const wxTextAttrDimension
& GetRight() const { return m_position
.m_right
; }
1156 Returns the top position.
1158 wxTextAttrDimension
& GetTop() { return m_position
.m_top
; }
1159 const wxTextAttrDimension
& GetTop() const { return m_position
.m_top
; }
1162 Returns the bottom position.
1164 wxTextAttrDimension
& GetBottom() { return m_position
.m_bottom
; }
1165 const wxTextAttrDimension
& GetBottom() const { return m_position
.m_bottom
; }
1168 Returns the padding values.
1170 wxTextAttrDimensions
& GetPadding() { return m_padding
; }
1171 const wxTextAttrDimensions
& GetPadding() const { return m_padding
; }
1174 Returns the left padding value.
1176 wxTextAttrDimension
& GetLeftPadding() { return m_padding
.m_left
; }
1177 const wxTextAttrDimension
& GetLeftPadding() const { return m_padding
.m_left
; }
1180 Returns the right padding value.
1182 wxTextAttrDimension
& GetRightPadding() { return m_padding
.m_right
; }
1183 const wxTextAttrDimension
& GetRightPadding() const { return m_padding
.m_right
; }
1186 Returns the top padding value.
1188 wxTextAttrDimension
& GetTopPadding() { return m_padding
.m_top
; }
1189 const wxTextAttrDimension
& GetTopPadding() const { return m_padding
.m_top
; }
1192 Returns the bottom padding value.
1194 wxTextAttrDimension
& GetBottomPadding() { return m_padding
.m_bottom
; }
1195 const wxTextAttrDimension
& GetBottomPadding() const { return m_padding
.m_bottom
; }
1198 Returns the borders.
1200 wxTextAttrBorders
& GetBorder() { return m_border
; }
1201 const wxTextAttrBorders
& GetBorder() const { return m_border
; }
1204 Returns the left border.
1206 wxTextAttrBorder
& GetLeftBorder() { return m_border
.m_left
; }
1207 const wxTextAttrBorder
& GetLeftBorder() const { return m_border
.m_left
; }
1210 Returns the top border.
1212 wxTextAttrBorder
& GetTopBorder() { return m_border
.m_top
; }
1213 const wxTextAttrBorder
& GetTopBorder() const { return m_border
.m_top
; }
1216 Returns the right border.
1218 wxTextAttrBorder
& GetRightBorder() { return m_border
.m_right
; }
1219 const wxTextAttrBorder
& GetRightBorder() const { return m_border
.m_right
; }
1222 Returns the bottom border.
1224 wxTextAttrBorder
& GetBottomBorder() { return m_border
.m_bottom
; }
1225 const wxTextAttrBorder
& GetBottomBorder() const { return m_border
.m_bottom
; }
1228 Returns the outline.
1230 wxTextAttrBorders
& GetOutline() { return m_outline
; }
1231 const wxTextAttrBorders
& GetOutline() const { return m_outline
; }
1234 Returns the left outline.
1236 wxTextAttrBorder
& GetLeftOutline() { return m_outline
.m_left
; }
1237 const wxTextAttrBorder
& GetLeftOutline() const { return m_outline
.m_left
; }
1240 Returns the top outline.
1242 wxTextAttrBorder
& GetTopOutline() { return m_outline
.m_top
; }
1243 const wxTextAttrBorder
& GetTopOutline() const { return m_outline
.m_top
; }
1246 Returns the right outline.
1248 wxTextAttrBorder
& GetRightOutline() { return m_outline
.m_right
; }
1249 const wxTextAttrBorder
& GetRightOutline() const { return m_outline
.m_right
; }
1252 Returns the bottom outline.
1254 wxTextAttrBorder
& GetBottomOutline() { return m_outline
.m_bottom
; }
1255 const wxTextAttrBorder
& GetBottomOutline() const { return m_outline
.m_bottom
; }
1258 Returns the object size.
1260 wxTextAttrSize
& GetSize() { return m_size
; }
1261 const wxTextAttrSize
& GetSize() const { return m_size
; }
1264 Returns the object minimum size.
1267 wxTextAttrSize
& GetMinSize() { return m_minSize
; }
1268 const wxTextAttrSize
& GetMinSize() const { return m_minSize
; }
1271 Returns the object maximum size.
1274 wxTextAttrSize
& GetMaxSize() { return m_maxSize
; }
1275 const wxTextAttrSize
& GetMaxSize() const { return m_maxSize
; }
1278 Sets the object size.
1280 void SetSize(const wxTextAttrSize
& sz
) { m_size
= sz
; }
1283 Sets the object minimum size.
1285 void SetMinSize(const wxTextAttrSize
& sz
) { m_minSize
= sz
; }
1288 Sets the object maximum size.
1290 void SetMaxSize(const wxTextAttrSize
& sz
) { m_maxSize
= sz
; }
1293 Returns the object width.
1295 wxTextAttrDimension
& GetWidth() { return m_size
.m_width
; }
1296 const wxTextAttrDimension
& GetWidth() const { return m_size
.m_width
; }
1299 Returns the object height.
1301 wxTextAttrDimension
& GetHeight() { return m_size
.m_height
; }
1302 const wxTextAttrDimension
& GetHeight() const { return m_size
.m_height
; }
1305 Returns the box style name.
1307 const wxString
& GetBoxStyleName() const { return m_boxStyleName
; }
1310 Sets the box style name.
1312 void SetBoxStyleName(const wxString
& name
) { m_boxStyleName
= name
; AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1315 Returns @true if the box style name is present.
1317 bool HasBoxStyleName() const { return HasFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1323 wxTextAttrDimensions m_margins
;
1324 wxTextAttrDimensions m_padding
;
1325 wxTextAttrDimensions m_position
;
1327 wxTextAttrSize m_size
;
1328 wxTextAttrSize m_minSize
;
1329 wxTextAttrSize m_maxSize
;
1331 wxTextAttrBorders m_border
;
1332 wxTextAttrBorders m_outline
;
1334 wxTextBoxAttrFloatStyle m_floatMode
;
1335 wxTextBoxAttrClearStyle m_clearMode
;
1336 wxTextBoxAttrCollapseMode m_collapseMode
;
1337 wxTextBoxAttrVerticalAlignment m_verticalAlignment
;
1338 wxString m_boxStyleName
;
1342 @class wxRichTextAttr
1343 A class representing enhanced attributes for rich text objects.
1344 This adds a wxTextBoxAttr member to the basic wxTextAttr class.
1346 @library{wxrichtext}
1349 @see wxRichTextAttr, wxTextBoxAttr, wxRichTextCtrl
1352 class wxRichTextAttr
: public wxTextAttr
1356 Constructor taking a wxTextAttr.
1358 wxRichTextAttr(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1363 wxRichTextAttr(const wxRichTextAttr
& attr
): wxTextAttr() { Copy(attr
); }
1366 Default constructor.
1373 void Copy(const wxRichTextAttr
& attr
);
1376 Assignment operator.
1378 void operator=(const wxRichTextAttr
& attr
) { Copy(attr
); }
1381 Assignment operator.
1383 void operator=(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1388 bool operator==(const wxRichTextAttr
& attr
) const;
1391 Partial equality test. If @a weakTest is @true, attributes of this object do not
1392 have to be present if those attributes of @a attr are present. If @a weakTest is
1393 @false, the function will fail if an attribute is present in @a attr but not
1396 bool EqPartial(const wxRichTextAttr
& attr
, bool weakTest
= true) const;
1399 Merges the given attributes. If @a compareWith
1400 is non-NULL, then it will be used to mask out those attributes that are the same in style
1401 and @a compareWith, for situations where we don't want to explicitly set inherited attributes.
1403 bool Apply(const wxRichTextAttr
& style
, const wxRichTextAttr
* compareWith
= NULL
);
1406 Collects the attributes that are common to a range of content, building up a note of
1407 which attributes are absent in some objects and which clash in some objects.
1409 void CollectCommonAttributes(const wxRichTextAttr
& attr
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
1412 Removes the specified attributes from this object.
1414 bool RemoveStyle(const wxRichTextAttr
& attr
);
1417 Returns the text box attributes.
1419 wxTextBoxAttr
& GetTextBoxAttr() { return m_textBoxAttr
; }
1420 const wxTextBoxAttr
& GetTextBoxAttr() const { return m_textBoxAttr
; }
1423 Set the text box attributes.
1425 void SetTextBoxAttr(const wxTextBoxAttr
& attr
) { m_textBoxAttr
= attr
; }
1428 Returns @true if no attributes are set.
1430 bool IsDefault() const { return (GetFlags() == 0) && m_textBoxAttr
.IsDefault(); }
1432 wxTextBoxAttr m_textBoxAttr
;
1435 class wxRichTextAttrArray
;
1436 class wxRichTextVariantArray
;
1439 @class wxRichTextProperties
1440 A simple property class using wxVariants. This is used to give each rich text object the
1441 ability to store custom properties that can be used by the application.
1443 @library{wxrichtext}
1446 @see wxRichTextBuffer, wxRichTextObject, wxRichTextCtrl
1449 class wxRichTextProperties
: public wxObject
1454 Default constructor.
1456 wxRichTextProperties() {}
1461 wxRichTextProperties(const wxRichTextProperties
& props
): wxObject() { Copy(props
); }
1464 Assignment operator.
1466 void operator=(const wxRichTextProperties
& props
) { Copy(props
); }
1471 bool operator==(const wxRichTextProperties
& props
) const;
1474 Copies from @a props.
1476 void Copy(const wxRichTextProperties
& props
) { m_properties
= props
.m_properties
; }
1479 Returns the variant at the given index.
1481 const wxVariant
& operator[](size_t idx
) const { return m_properties
[idx
]; }
1484 Returns the variant at the given index.
1486 wxVariant
& operator[](size_t idx
) { return m_properties
[idx
]; }
1489 Clears the properties.
1491 void Clear() { m_properties
.Clear(); }
1494 Returns the array of variants implementing the properties.
1496 const wxRichTextVariantArray
& GetProperties() const { return m_properties
; }
1499 Returns the array of variants implementing the properties.
1501 wxRichTextVariantArray
& GetProperties() { return m_properties
; }
1504 Sets the array of variants.
1506 void SetProperties(const wxRichTextVariantArray
& props
) { m_properties
= props
; }
1509 Returns all the property names.
1511 wxArrayString
GetPropertyNames() const;
1514 Returns a count of the properties.
1516 size_t GetCount() const { return m_properties
.GetCount(); }
1519 Returns @true if the given property is found.
1521 bool HasProperty(const wxString
& name
) const { return Find(name
) != -1; }
1524 Finds the given property.
1526 int Find(const wxString
& name
) const;
1529 Removes the given property.
1531 bool Remove(const wxString
& name
);
1534 Gets the property variant by name.
1536 const wxVariant
& GetProperty(const wxString
& name
) const;
1539 Finds or creates a property with the given name, returning a pointer to the variant.
1541 wxVariant
* FindOrCreateProperty(const wxString
& name
);
1544 Gets the value of the named property as a string.
1546 wxString
GetPropertyString(const wxString
& name
) const;
1549 Gets the value of the named property as a long integer.
1551 long GetPropertyLong(const wxString
& name
) const;
1554 Gets the value of the named property as a boolean.
1556 bool GetPropertyBool(const wxString
& name
) const;
1559 Gets the value of the named property as a double.
1561 double GetPropertyDouble(const wxString
& name
) const;
1564 Sets the property by passing a variant which contains a name and value.
1566 void SetProperty(const wxVariant
& variant
);
1569 Sets a property by name and variant.
1571 void SetProperty(const wxString
& name
, const wxVariant
& variant
);
1574 Sets a property by name and string value.
1576 void SetProperty(const wxString
& name
, const wxString
& value
);
1579 Sets property by name and long integer value.
1581 void SetProperty(const wxString
& name
, long value
);
1584 Sets property by name and double value.
1586 void SetProperty(const wxString
& name
, double value
);
1589 Sets property by name and boolean value.
1591 void SetProperty(const wxString
& name
, bool value
);
1594 Removes the given properties from these properties.
1596 void RemoveProperties(const wxRichTextProperties
& properties
);
1599 Merges the given properties with these properties.
1601 void MergeProperties(const wxRichTextProperties
& properties
);
1604 wxRichTextVariantArray m_properties
;
1609 @class wxRichTextFontTable
1610 Manages quick access to a pool of fonts for rendering rich text.
1612 @library{wxrichtext}
1615 @see wxRichTextBuffer, wxRichTextCtrl
1618 class wxRichTextFontTable
: public wxObject
1622 Default constructor.
1624 wxRichTextFontTable();
1629 wxRichTextFontTable(const wxRichTextFontTable
& table
);
1630 virtual ~wxRichTextFontTable();
1633 Returns @true if the font table is valid.
1635 bool IsOk() const { return m_refData
!= NULL
; }
1638 Finds a font for the given attribute object.
1640 wxFont
FindFont(const wxRichTextAttr
& fontSpec
);
1643 Clears the font table.
1648 Assignment operator.
1650 void operator= (const wxRichTextFontTable
& table
);
1655 bool operator == (const wxRichTextFontTable
& table
) const;
1658 Inequality operator.
1660 bool operator != (const wxRichTextFontTable
& table
) const { return !(*this == table
); }
1663 Set the font scale factor.
1665 void SetFontScale(double fontScale
);
1673 @class wxRichTextRange
1675 This stores beginning and end positions for a range of data.
1677 @library{wxrichtext}
1680 @see wxRichTextBuffer, wxRichTextCtrl
1683 class wxRichTextRange
1689 Default constructor.
1691 wxRichTextRange() { m_start
= 0; m_end
= 0; }
1694 Constructor taking start and end positions.
1696 wxRichTextRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1701 wxRichTextRange(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1702 ~wxRichTextRange() {}
1705 Assigns @a range to this range.
1707 void operator =(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1710 Equality operator. Returns @true if @a range is the same as this range.
1712 bool operator ==(const wxRichTextRange
& range
) const { return (m_start
== range
.m_start
&& m_end
== range
.m_end
); }
1715 Inequality operator.
1717 bool operator !=(const wxRichTextRange
& range
) const { return (m_start
!= range
.m_start
|| m_end
!= range
.m_end
); }
1720 Subtracts a range from this range.
1722 wxRichTextRange
operator -(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
- range
.m_start
, m_end
- range
.m_end
); }
1725 Adds a range to this range.
1727 wxRichTextRange
operator +(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
+ range
.m_start
, m_end
+ range
.m_end
); }
1730 Sets the range start and end positions.
1732 void SetRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1735 Sets the start position.
1737 void SetStart(long start
) { m_start
= start
; }
1740 Returns the start position.
1742 long GetStart() const { return m_start
; }
1745 Sets the end position.
1747 void SetEnd(long end
) { m_end
= end
; }
1750 Gets the end position.
1752 long GetEnd() const { return m_end
; }
1755 Returns true if this range is completely outside @a range.
1757 bool IsOutside(const wxRichTextRange
& range
) const { return range
.m_start
> m_end
|| range
.m_end
< m_start
; }
1760 Returns true if this range is completely within @a range.
1762 bool IsWithin(const wxRichTextRange
& range
) const { return m_start
>= range
.m_start
&& m_end
<= range
.m_end
; }
1765 Returns true if @a pos was within the range. Does not match if the range is empty.
1767 bool Contains(long pos
) const { return pos
>= m_start
&& pos
<= m_end
; }
1770 Limit this range to be within @a range.
1772 bool LimitTo(const wxRichTextRange
& range
) ;
1775 Gets the length of the range.
1777 long GetLength() const { return m_end
- m_start
+ 1; }
1780 Swaps the start and end.
1782 void Swap() { long tmp
= m_start
; m_start
= m_end
; m_end
= tmp
; }
1785 Converts the API-standard range, whose end is one past the last character in
1786 the range, to the internal form, which uses the first and last character
1787 positions of the range. In other words, one is subtracted from the end position.
1788 (n, n) is the range of a single character.
1790 wxRichTextRange
ToInternal() const { return wxRichTextRange(m_start
, m_end
-1); }
1793 Converts the internal range, which uses the first and last character positions
1794 of the range, to the API-standard range, whose end is one past the last
1795 character in the range. In other words, one is added to the end position.
1796 (n, n+1) is the range of a single character.
1798 wxRichTextRange
FromInternal() const { return wxRichTextRange(m_start
, m_end
+1); }
1805 class wxRichTextRangeArray
;
1807 #define wxRICHTEXT_ALL wxRichTextRange(-2, -2)
1808 #define wxRICHTEXT_NONE wxRichTextRange(-1, -1)
1810 #define wxRICHTEXT_NO_SELECTION wxRichTextRange(-2, -2)
1813 @class wxRichTextSelection
1815 Stores selection information. The selection does not have to be contiguous, though currently non-contiguous
1816 selections are only supported for a range of table cells (a geometric block of cells can consist
1817 of a set of non-contiguous positions).
1819 The selection consists of an array of ranges, and the container that is the context for the selection. It
1820 follows that a single selection object can only represent ranges with the same parent container.
1822 @library{wxrichtext}
1825 @see wxRichTextBuffer, wxRichTextCtrl
1828 class wxRichTextSelection
1834 wxRichTextSelection(const wxRichTextSelection
& sel
) { Copy(sel
); }
1837 Creates a selection from a range and a container.
1839 wxRichTextSelection(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
) { m_ranges
.Add(range
); m_container
= container
; }
1842 Default constructor.
1844 wxRichTextSelection() { Reset(); }
1847 Resets the selection.
1849 void Reset() { m_ranges
.Clear(); m_container
= NULL
; }
1855 void Set(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
)
1856 { m_ranges
.Clear(); m_ranges
.Add(range
); m_container
= container
; }
1859 Adds a range to the selection.
1861 void Add(const wxRichTextRange
& range
)
1862 { m_ranges
.Add(range
); }
1865 Sets the selections from an array of ranges and a container object.
1867 void Set(const wxRichTextRangeArray
& ranges
, wxRichTextParagraphLayoutBox
* container
)
1868 { m_ranges
= ranges
; m_container
= container
; }
1873 void Copy(const wxRichTextSelection
& sel
)
1874 { m_ranges
= sel
.m_ranges
; m_container
= sel
.m_container
; }
1877 Assignment operator.
1879 void operator=(const wxRichTextSelection
& sel
) { Copy(sel
); }
1884 bool operator==(const wxRichTextSelection
& sel
) const;
1889 wxRichTextRange
operator[](size_t i
) const { return GetRange(i
); }
1892 Returns the selection ranges.
1894 wxRichTextRangeArray
& GetRanges() { return m_ranges
; }
1897 Returns the selection ranges.
1899 const wxRichTextRangeArray
& GetRanges() const { return m_ranges
; }
1902 Sets the selection ranges.
1904 void SetRanges(const wxRichTextRangeArray
& ranges
) { m_ranges
= ranges
; }
1907 Returns the number of ranges in the selection.
1909 size_t GetCount() const { return m_ranges
.GetCount(); }
1912 Returns the range at the given index.
1915 wxRichTextRange
GetRange(size_t i
) const { return m_ranges
[i
]; }
1918 Returns the first range if there is one, otherwise wxRICHTEXT_NO_SELECTION.
1920 wxRichTextRange
GetRange() const { return (m_ranges
.GetCount() > 0) ? (m_ranges
[0]) : wxRICHTEXT_NO_SELECTION
; }
1923 Sets a single range.
1925 void SetRange(const wxRichTextRange
& range
) { m_ranges
.Clear(); m_ranges
.Add(range
); }
1928 Returns the container for which the selection is valid.
1930 wxRichTextParagraphLayoutBox
* GetContainer() const { return m_container
; }
1933 Sets the container for which the selection is valid.
1935 void SetContainer(wxRichTextParagraphLayoutBox
* container
) { m_container
= container
; }
1938 Returns @true if the selection is valid.
1940 bool IsValid() const { return m_ranges
.GetCount() > 0 && GetContainer(); }
1943 Returns the selection appropriate to the specified object, if any; returns an empty array if none
1944 at the level of the object's container.
1946 wxRichTextRangeArray
GetSelectionForObject(wxRichTextObject
* obj
) const;
1949 Returns @true if the given position is within the selection.
1951 bool WithinSelection(long pos
, wxRichTextObject
* obj
) const;
1954 Returns @true if the given position is within the selection.
1957 bool WithinSelection(long pos
) const { return WithinSelection(pos
, m_ranges
); }
1960 Returns @true if the given position is within the selection range.
1962 static bool WithinSelection(long pos
, const wxRichTextRangeArray
& ranges
);
1965 Returns @true if the given range is within the selection range.
1967 static bool WithinSelection(const wxRichTextRange
& range
, const wxRichTextRangeArray
& ranges
);
1969 wxRichTextRangeArray m_ranges
;
1970 wxRichTextParagraphLayoutBox
* m_container
;
1974 @class wxRichTextDrawingContext
1976 A class for passing information to drawing and measuring functions.
1978 @library{wxrichtext}
1981 @see wxRichTextBuffer, wxRichTextCtrl
1984 class wxRichTextDrawingContext
: public wxObject
1989 Pass the buffer to the context so the context can retrieve information
1990 such as virtual attributes.
1992 wxRichTextDrawingContext(wxRichTextBuffer
* buffer
) { Init(); m_buffer
= buffer
; }
1994 void Init() { m_buffer
= NULL
; }
1997 Does this object have virtual attributes?
1998 Virtual attributes can be provided for visual cues without
1999 affecting the actual styling.
2001 bool HasVirtualAttributes(wxRichTextObject
* obj
) const;
2004 Returns the virtual attributes for this object.
2005 Virtual attributes can be provided for visual cues without
2006 affecting the actual styling.
2008 wxRichTextAttr
GetVirtualAttributes(wxRichTextObject
* obj
) const;
2011 Applies any virtual attributes relevant to this object.
2013 bool ApplyVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const;
2016 Gets the count for mixed virtual attributes for individual positions within the object.
2017 For example, individual characters within a text object may require special highlighting.
2019 int GetVirtualSubobjectAttributesCount(wxRichTextObject
* obj
) const;
2022 Gets the mixed virtual attributes for individual positions within the object.
2023 For example, individual characters within a text object may require special highlighting.
2024 The function is passed the count returned by GetVirtualSubobjectAttributesCount.
2026 int GetVirtualSubobjectAttributes(wxRichTextObject
* obj
, wxArrayInt
& positions
, wxRichTextAttrArray
& attributes
) const;
2029 Do we have virtual text for this object? Virtual text allows an application
2030 to replace characters in an object for editing and display purposes, for example
2031 for highlighting special characters.
2033 bool HasVirtualText(const wxRichTextPlainText
* obj
) const;
2036 Gets the virtual text for this object.
2038 bool GetVirtualText(const wxRichTextPlainText
* obj
, wxString
& text
) const;
2041 Enables virtual attribute processing.
2044 void EnableVirtualAttributes(bool b
);
2047 Returns @true if virtual attribute processing is enabled.
2050 bool GetVirtualAttributesEnabled() const;
2052 wxRichTextBuffer
* m_buffer
;
2056 @class wxRichTextObject
2058 This is the base for drawable rich text objects.
2060 @library{wxrichtext}
2063 @see wxRichTextBuffer, wxRichTextCtrl
2066 class wxRichTextObject
: public wxObject
2070 Constructor, taking an optional parent pointer.
2072 wxRichTextObject(wxRichTextObject
* parent
= NULL
);
2074 virtual ~wxRichTextObject();
2079 Draw the item, within the given range. Some objects may ignore the range (for
2080 example paragraphs) while others must obey it (lines, to implement wrapping)
2082 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
2085 Lay the item out at the specified position with the given size constraint.
2086 Layout must set the cached size. @rect is the available space for the object,
2087 and @a parentRect is the container that is used to determine a relative size
2088 or position (for example if a text box must be 50% of the parent text box).
2090 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
2093 Hit-testing: returns a flag indicating hit test details, plus
2094 information about position. @a contextObj is returned to specify what object
2095 position is relevant to, since otherwise there's an ambiguity.
2096 @ obj might not be a child of @a contextObj, since we may be referring to the container itself
2097 if we have no hit on a child - for example if we click outside an object.
2099 The function puts the position in @a textPosition if one is found.
2100 @a pt is in logical units (a zero y position is at the beginning of the buffer).
2102 @return One of the ::wxRichTextHitTestFlags values.
2105 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2108 Finds the absolute position and row height for the given character position.
2110 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
2113 Returns the best size, i.e. the ideal starting size for this object irrespective
2114 of available space. For a short text string, it will be the size that exactly encloses
2115 the text. For a longer string, it might use the parent width for example.
2117 virtual wxSize
GetBestSize() const { return m_size
; }
2120 Returns the object size for the given range. Returns @false if the range
2121 is invalid for this object.
2124 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const = 0;
2127 Do a split from @a pos, returning an object containing the second part, and setting
2128 the first part in 'this'.
2130 virtual wxRichTextObject
* DoSplit(long pos
);
2133 Calculates the range of the object. By default, guess that the object is 1 unit long.
2135 virtual void CalculateRange(long start
, long& end
);
2138 Deletes the given range.
2140 virtual bool DeleteRange(const wxRichTextRange
& range
);
2143 Returns @true if the object is empty.
2145 virtual bool IsEmpty() const { return false; }
2148 Returns @true if this class of object is floatable.
2150 virtual bool IsFloatable() const { return false; }
2153 Returns @true if this object is currently floating.
2155 virtual bool IsFloating() const { return GetAttributes().GetTextBoxAttr().IsFloating(); }
2158 Returns the floating direction.
2160 virtual int GetFloatDirection() const { return GetAttributes().GetTextBoxAttr().GetFloatMode(); }
2163 Returns any text in this object for the given range.
2165 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const { return wxEmptyString
; }
2168 Returns @true if this object can merge itself with the given one.
2170 virtual bool CanMerge(wxRichTextObject
* object
, wxRichTextDrawingContext
& context
) const { return false; }
2173 Returns @true if this object merged itself with the given one.
2174 The calling code will then delete the given object.
2176 virtual bool Merge(wxRichTextObject
* object
, wxRichTextDrawingContext
& context
) { return false; }
2179 Returns @true if this object can potentially be split, by virtue of having
2180 different virtual attributes for individual sub-objects.
2182 virtual bool CanSplit(wxRichTextDrawingContext
& context
) const;
2185 Returns the final object in the split objects if this object was split due to differences between sub-object virtual attributes.
2186 Returns itself if it was not split.
2188 virtual wxRichTextObject
* Split(wxRichTextDrawingContext
& context
);
2191 Dump object data to the given output stream for debugging.
2193 virtual void Dump(wxTextOutputStream
& stream
);
2196 Returns @true if we can edit the object's properties via a GUI.
2198 virtual bool CanEditProperties() const { return false; }
2201 Edits the object's properties via a GUI.
2203 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
) { return false; }
2206 Returns the label to be used for the properties context menu item.
2208 virtual wxString
GetPropertiesMenuLabel() const { return wxEmptyString
; }
2211 Returns @true if objects of this class can accept the focus, i.e. a call to SetFocusObject
2212 is possible. For example, containers supporting text, such as a text box object, can accept the focus,
2213 but a table can't (set the focus to individual cells instead).
2215 virtual bool AcceptsFocus() const { return false; }
2218 Imports this object from XML.
2220 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2222 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2224 Exports this object directly to the given stream, bypassing the creation of a wxXmlNode hierarchy.
2225 This method is considerably faster than creating a tree first. However, both versions of ExportXML must be
2226 implemented so that if the tree method is made efficient in the future, we can deprecate the
2227 more verbose direct output method. Compiled only if wxRICHTEXT_HAVE_DIRECT_OUTPUT is defined (on by default).
2229 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2232 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2234 Exports this object to the given parent node, usually creating at least one child node.
2235 This method is less efficient than the direct-to-stream method but is retained to allow for
2236 switching to this method if we make it more efficient. Compiled only if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT is defined
2239 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2243 Returns @true if this object takes note of paragraph attributes (text and image objects don't).
2245 virtual bool UsesParagraphAttributes() const { return true; }
2248 Returns the XML node name of this object. This must be overridden for wxXmlNode-base XML export to work.
2250 virtual wxString
GetXMLNodeName() const { return wxT("unknown"); }
2253 Invalidates the object at the given range. With no argument, invalidates the whole object.
2255 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2258 Returns @true if this object can handle the selections of its children, fOr example a table.
2259 Required for composite selection handling to work.
2261 virtual bool HandlesChildSelections() const { return false; }
2264 Returns a selection object specifying the selections between start and end character positions.
2265 For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
2267 virtual wxRichTextSelection
GetSelection(long start
, long end
) const { return wxRichTextSelection(); }
2272 Gets the cached object size as calculated by Layout.
2274 virtual wxSize
GetCachedSize() const { return m_size
; }
2277 Sets the cached object size as calculated by Layout.
2279 virtual void SetCachedSize(const wxSize
& sz
) { m_size
= sz
; }
2282 Gets the maximum object size as calculated by Layout. This allows
2283 us to fit an object to its contents or allocate extra space if required.
2285 virtual wxSize
GetMaxSize() const { return m_maxSize
; }
2288 Sets the maximum object size as calculated by Layout. This allows
2289 us to fit an object to its contents or allocate extra space if required.
2291 virtual void SetMaxSize(const wxSize
& sz
) { m_maxSize
= sz
; }
2294 Gets the minimum object size as calculated by Layout. This allows
2295 us to constrain an object to its absolute minimum size if necessary.
2297 virtual wxSize
GetMinSize() const { return m_minSize
; }
2300 Sets the minimum object size as calculated by Layout. This allows
2301 us to constrain an object to its absolute minimum size if necessary.
2303 virtual void SetMinSize(const wxSize
& sz
) { m_minSize
= sz
; }
2306 Gets the 'natural' size for an object. For an image, it would be the
2309 virtual wxTextAttrSize
GetNaturalSize() const { return wxTextAttrSize(); }
2312 Returns the object position in pixels.
2314 virtual wxPoint
GetPosition() const { return m_pos
; }
2317 Sets the object position in pixels.
2319 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
2322 Returns the absolute object position, by traversing up the child/parent hierarchy.
2323 TODO: may not be needed, if all object positions are in fact relative to the
2324 top of the coordinate space.
2326 virtual wxPoint
GetAbsolutePosition() const;
2329 Returns the rectangle enclosing the object.
2331 virtual wxRect
GetRect() const { return wxRect(GetPosition(), GetCachedSize()); }
2334 Sets the object's range within its container.
2336 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
2339 Returns the object's range.
2341 const wxRichTextRange
& GetRange() const { return m_range
; }
2344 Returns the object's range.
2346 wxRichTextRange
& GetRange() { return m_range
; }
2349 Set the object's own range, for a top-level object with its own position space.
2351 void SetOwnRange(const wxRichTextRange
& range
) { m_ownRange
= range
; }
2354 Returns the object's own range (valid if top-level).
2356 const wxRichTextRange
& GetOwnRange() const { return m_ownRange
; }
2359 Returns the object's own range (valid if top-level).
2361 wxRichTextRange
& GetOwnRange() { return m_ownRange
; }
2364 Returns the object's own range only if a top-level object.
2366 wxRichTextRange
GetOwnRangeIfTopLevel() const { return IsTopLevel() ? m_ownRange
: m_range
; }
2369 Returns @true if this object is composite.
2371 virtual bool IsComposite() const { return false; }
2374 Returns @true if no user editing can be done inside the object. This returns @true for simple objects,
2375 @false for most composite objects, but @true for fields, which if composite, should not be user-edited.
2377 virtual bool IsAtomic() const { return true; }
2380 Returns a pointer to the parent object.
2382 virtual wxRichTextObject
* GetParent() const { return m_parent
; }
2385 Sets the pointer to the parent object.
2387 virtual void SetParent(wxRichTextObject
* parent
) { m_parent
= parent
; }
2390 Returns the top-level container of this object.
2391 May return itself if it's a container; use GetParentContainer to return
2392 a different container.
2394 virtual wxRichTextParagraphLayoutBox
* GetContainer() const;
2397 Returns the top-level container of this object.
2398 Returns a different container than itself, unless there's no parent, in which case it will return NULL.
2400 virtual wxRichTextParagraphLayoutBox
* GetParentContainer() const { return GetParent() ? GetParent()->GetContainer() : GetContainer(); }
2403 Set the margin around the object, in pixels.
2405 virtual void SetMargins(int margin
);
2408 Set the margin around the object, in pixels.
2410 virtual void SetMargins(int leftMargin
, int rightMargin
, int topMargin
, int bottomMargin
);
2413 Returns the left margin of the object, in pixels.
2415 virtual int GetLeftMargin() const;
2418 Returns the right margin of the object, in pixels.
2420 virtual int GetRightMargin() const;
2423 Returns the top margin of the object, in pixels.
2425 virtual int GetTopMargin() const;
2428 Returns the bottom margin of the object, in pixels.
2430 virtual int GetBottomMargin() const;
2433 Calculates the available content space in the given rectangle, given the
2434 margins, border and padding specified in the object's attributes.
2436 virtual wxRect
GetAvailableContentArea(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& outerRect
) const;
2439 Lays out the object first with a given amount of space, and then if no width was specified in attr,
2440 lays out the object again using the minimum size. @a availableParentSpace is the maximum space
2441 for the object, whereas @a availableContainerSpace is the container with which relative positions and
2442 sizes should be computed. For example, a text box whose space has already been constrained
2443 in a previous layout pass to @a availableParentSpace, but should have a width of 50% of @a availableContainerSpace.
2444 (If these two rects were the same, a 2nd pass could see the object getting too small.)
2446 virtual bool LayoutToBestSize(wxDC
& dc
, wxRichTextDrawingContext
& context
, wxRichTextBuffer
* buffer
,
2447 const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& attr
,
2448 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
, int style
);
2451 Sets the object's attributes.
2453 void SetAttributes(const wxRichTextAttr
& attr
) { m_attributes
= attr
; }
2456 Returns the object's attributes.
2458 const wxRichTextAttr
& GetAttributes() const { return m_attributes
; }
2461 Returns the object's attributes.
2463 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
2466 Returns the object's properties.
2468 wxRichTextProperties
& GetProperties() { return m_properties
; }
2471 Returns the object's properties.
2473 const wxRichTextProperties
& GetProperties() const { return m_properties
; }
2476 Sets the object's properties.
2478 void SetProperties(const wxRichTextProperties
& props
) { m_properties
= props
; }
2481 Sets the stored descent value.
2483 void SetDescent(int descent
) { m_descent
= descent
; }
2486 Returns the stored descent value.
2488 int GetDescent() const { return m_descent
; }
2491 Returns the containing buffer.
2493 wxRichTextBuffer
* GetBuffer() const;
2496 Sets the identifying name for this object as a property using the "name" key.
2498 void SetName(const wxString
& name
) { m_properties
.SetProperty(wxT("name"), name
); }
2501 Returns the identifying name for this object from the properties, using the "name" key.
2503 wxString
GetName() const { return m_properties
.GetPropertyString(wxT("name")); }
2506 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
2508 virtual bool IsTopLevel() const { return false; }
2511 Returns @true if the object will be shown, @false otherwise.
2513 bool IsShown() const { return m_show
; }
2518 Call to show or hide this object. This function does not cause the content to be
2519 laid out or redrawn.
2521 virtual void Show(bool show
) { m_show
= show
; }
2526 virtual wxRichTextObject
* Clone() const { return NULL
; }
2531 void Copy(const wxRichTextObject
& obj
);
2534 Reference-counting allows us to use the same object in multiple
2535 lists (not yet used).
2538 void Reference() { m_refCount
++; }
2541 Reference-counting allows us to use the same object in multiple
2542 lists (not yet used).
2547 Moves the object recursively, by adding the offset from old to new.
2549 virtual void Move(const wxPoint
& pt
);
2552 Converts units in tenths of a millimetre to device units.
2554 int ConvertTenthsMMToPixels(wxDC
& dc
, int units
) const;
2557 Converts units in tenths of a millimetre to device units.
2559 static int ConvertTenthsMMToPixels(int ppi
, int units
, double scale
= 1.0);
2562 Convert units in pixels to tenths of a millimetre.
2564 int ConvertPixelsToTenthsMM(wxDC
& dc
, int pixels
) const;
2567 Convert units in pixels to tenths of a millimetre.
2569 static int ConvertPixelsToTenthsMM(int ppi
, int pixels
, double scale
= 1.0);
2572 Draws the borders and background for the given rectangle and attributes.
2573 @a boxRect is taken to be the outer margin box, not the box around the content.
2575 static bool DrawBoxAttributes(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, const wxRect
& boxRect
, int flags
= 0);
2580 static bool DrawBorder(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxTextAttrBorders
& attr
, const wxRect
& rect
, int flags
= 0);
2583 Returns the various rectangles of the box model in pixels. You can either specify @a contentRect (inner)
2584 or @a marginRect (outer), and the other must be the default rectangle (no width or height).
2585 Note that the outline doesn't affect the position of the rectangle, it's drawn in whatever space
2588 static bool GetBoxRects(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, wxRect
& marginRect
, wxRect
& borderRect
, wxRect
& contentRect
, wxRect
& paddingRect
, wxRect
& outlineRect
);
2591 Returns the total margin for the object in pixels, taking into account margin, padding and border size.
2593 static bool GetTotalMargin(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, int& leftMargin
, int& rightMargin
,
2594 int& topMargin
, int& bottomMargin
);
2597 Returns the rectangle which the child has available to it given restrictions specified in the
2598 child attribute, e.g. 50% width of the parent, 400 pixels, x position 20% of the parent, etc.
2599 availableContainerSpace might be a parent that the cell has to compute its width relative to.
2600 E.g. a cell that's 50% of its parent.
2602 static wxRect
AdjustAvailableSpace(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& childAttr
,
2603 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
);
2610 int m_descent
; // Descent for this object (if any)
2613 wxRichTextObject
* m_parent
;
2615 // The range of this object (start position to end position)
2616 wxRichTextRange m_range
;
2618 // The internal range of this object, if it's a top-level object with its own range space
2619 wxRichTextRange m_ownRange
;
2622 wxRichTextAttr m_attributes
;
2625 wxRichTextProperties m_properties
;
2628 class wxRichTextObjectList
;
2631 @class wxRichTextCompositeObject
2633 Objects of this class can contain other objects.
2635 @library{wxrichtext}
2638 @see wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2641 class wxRichTextCompositeObject
: public wxRichTextObject
2646 wxRichTextCompositeObject(wxRichTextObject
* parent
= NULL
);
2647 virtual ~wxRichTextCompositeObject();
2651 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2653 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
2655 virtual void CalculateRange(long start
, long& end
);
2657 virtual bool DeleteRange(const wxRichTextRange
& range
);
2659 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2661 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
2663 virtual void Dump(wxTextOutputStream
& stream
);
2665 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2670 Returns the children.
2672 wxRichTextObjectList
& GetChildren() { return m_children
; }
2674 Returns the children.
2676 const wxRichTextObjectList
& GetChildren() const { return m_children
; }
2679 Returns the number of children.
2681 size_t GetChildCount() const ;
2684 Returns the nth child.
2686 wxRichTextObject
* GetChild(size_t n
) const ;
2689 Returns @true if this object is composite.
2691 virtual bool IsComposite() const { return true; }
2694 Returns @true if no user editing can be done inside the object. This returns @true for simple objects,
2695 @false for most composite objects, but @true for fields, which if composite, should not be user-edited.
2697 virtual bool IsAtomic() const { return false; }
2700 Returns true if the buffer is empty.
2702 virtual bool IsEmpty() const { return GetChildCount() == 0; }
2705 Returns the child object at the given character position.
2707 virtual wxRichTextObject
* GetChildAtPosition(long pos
) const;
2711 void Copy(const wxRichTextCompositeObject
& obj
);
2713 void operator= (const wxRichTextCompositeObject
& obj
) { Copy(obj
); }
2716 Appends a child, returning the position.
2718 size_t AppendChild(wxRichTextObject
* child
) ;
2721 Inserts the child in front of the given object, or at the beginning.
2723 bool InsertChild(wxRichTextObject
* child
, wxRichTextObject
* inFrontOf
) ;
2726 Removes and optionally deletes the specified child.
2728 bool RemoveChild(wxRichTextObject
* child
, bool deleteChild
= false) ;
2731 Deletes all the children.
2733 bool DeleteChildren() ;
2736 Recursively merges all pieces that can be merged.
2738 bool Defragment(wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
= wxRICHTEXT_ALL
);
2741 Moves the object recursively, by adding the offset from old to new.
2743 virtual void Move(const wxPoint
& pt
);
2746 wxRichTextObjectList m_children
;
2750 @class wxRichTextParagraphBox
2752 This class knows how to lay out paragraphs.
2754 @library{wxrichtext}
2757 @see wxRichTextCompositeObject, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2760 class wxRichTextParagraphLayoutBox
: public wxRichTextCompositeObject
2765 wxRichTextParagraphLayoutBox(wxRichTextObject
* parent
= NULL
);
2766 wxRichTextParagraphLayoutBox(const wxRichTextParagraphLayoutBox
& obj
): wxRichTextCompositeObject() { Init(); Copy(obj
); }
2767 ~wxRichTextParagraphLayoutBox();
2771 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2773 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2775 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
2777 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
2779 virtual bool DeleteRange(const wxRichTextRange
& range
);
2781 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2783 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2785 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2786 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2789 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2790 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2793 virtual wxString
GetXMLNodeName() const { return wxT("paragraphlayout"); }
2795 virtual bool AcceptsFocus() const { return true; }
2800 Associates a control with the buffer, for operations that for example require refreshing the window.
2802 void SetRichTextCtrl(wxRichTextCtrl
* ctrl
) { m_ctrl
= ctrl
; }
2805 Returns the associated control.
2807 wxRichTextCtrl
* GetRichTextCtrl() const { return m_ctrl
; }
2810 Sets a flag indicating whether the last paragraph is partial or complete.
2812 void SetPartialParagraph(bool partialPara
) { m_partialParagraph
= partialPara
; }
2815 Returns a flag indicating whether the last paragraph is partial or complete.
2817 bool GetPartialParagraph() const { return m_partialParagraph
; }
2820 Returns the style sheet associated with the overall buffer.
2822 virtual wxRichTextStyleSheet
* GetStyleSheet() const;
2824 virtual bool IsTopLevel() const { return true; }
2829 Submits a command to insert paragraphs.
2831 bool InsertParagraphsWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2834 Submits a command to insert the given text.
2836 bool InsertTextWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2839 Submits a command to insert the given text.
2841 bool InsertNewlineWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2844 Submits a command to insert the given image.
2846 bool InsertImageWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextImageBlock
& imageBlock
,
2847 wxRichTextCtrl
* ctrl
, int flags
,
2848 const wxRichTextAttr
& textAttr
);
2851 Submits a command to insert the given field. Field data can be included in properties.
2853 @see wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
2855 wxRichTextField
* InsertFieldWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& fieldType
,
2856 const wxRichTextProperties
& properties
,
2857 wxRichTextCtrl
* ctrl
, int flags
,
2858 const wxRichTextAttr
& textAttr
);
2861 Returns the style that is appropriate for a new paragraph at this position.
2862 If the previous paragraph has a paragraph style name, looks up the next-paragraph
2865 wxRichTextAttr
GetStyleForNewParagraph(wxRichTextBuffer
* buffer
, long pos
, bool caretPosition
= false, bool lookUpNewParaStyle
=false) const;
2870 wxRichTextObject
* InsertObjectWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2873 Submits a command to delete this range.
2875 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
, wxRichTextBuffer
* buffer
);
2878 Draws the floating objects in this buffer.
2880 void DrawFloats(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2883 Moves an anchored object to another paragraph.
2885 void MoveAnchoredObjectToParagraph(wxRichTextParagraph
* from
, wxRichTextParagraph
* to
, wxRichTextObject
* obj
);
2888 Initializes the object.
2893 Clears all the children.
2895 virtual void Clear();
2898 Clears and initializes with one blank paragraph.
2900 virtual void Reset();
2903 Convenience function to add a paragraph of text.
2905 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2908 Convenience function to add an image.
2910 virtual wxRichTextRange
AddImage(const wxImage
& image
, wxRichTextAttr
* paraStyle
= NULL
);
2913 Adds multiple paragraphs, based on newlines.
2915 virtual wxRichTextRange
AddParagraphs(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2918 Returns the line at the given position. If @a caretPosition is true, the position is
2919 a caret position, which is normally a smaller number.
2921 virtual wxRichTextLine
* GetLineAtPosition(long pos
, bool caretPosition
= false) const;
2924 Returns the line at the given y pixel position, or the last line.
2926 virtual wxRichTextLine
* GetLineAtYPosition(int y
) const;
2929 Returns the paragraph at the given character or caret position.
2931 virtual wxRichTextParagraph
* GetParagraphAtPosition(long pos
, bool caretPosition
= false) const;
2934 Returns the line size at the given position.
2936 virtual wxSize
GetLineSizeAtPosition(long pos
, bool caretPosition
= false) const;
2939 Given a position, returns the number of the visible line (potentially many to a paragraph),
2940 starting from zero at the start of the buffer. We also have to pass a bool (@a startOfLine)
2941 that indicates whether the caret is being shown at the end of the previous line or at the start
2942 of the next, since the caret can be shown at two visible positions for the same underlying
2945 virtual long GetVisibleLineNumber(long pos
, bool caretPosition
= false, bool startOfLine
= false) const;
2948 Given a line number, returns the corresponding wxRichTextLine object.
2950 virtual wxRichTextLine
* GetLineForVisibleLineNumber(long lineNumber
) const;
2953 Returns the leaf object in a paragraph at this position.
2955 virtual wxRichTextObject
* GetLeafObjectAtPosition(long position
) const;
2958 Returns the paragraph by number.
2960 virtual wxRichTextParagraph
* GetParagraphAtLine(long paragraphNumber
) const;
2963 Returns the paragraph for a given line.
2965 virtual wxRichTextParagraph
* GetParagraphForLine(wxRichTextLine
* line
) const;
2968 Returns the length of the paragraph.
2970 virtual int GetParagraphLength(long paragraphNumber
) const;
2973 Returns the number of paragraphs.
2975 virtual int GetParagraphCount() const { return static_cast<int>(GetChildCount()); }
2978 Returns the number of visible lines.
2980 virtual int GetLineCount() const;
2983 Returns the text of the paragraph.
2985 virtual wxString
GetParagraphText(long paragraphNumber
) const;
2988 Converts zero-based line column and paragraph number to a position.
2990 virtual long XYToPosition(long x
, long y
) const;
2993 Converts a zero-based position to line column and paragraph number.
2995 virtual bool PositionToXY(long pos
, long* x
, long* y
) const;
2998 Sets the attributes for the given range. Pass flags to determine how the
3001 The end point of range is specified as the last character position of the span
3002 of text. So, for example, to set the style for a character at position 5,
3003 use the range (5,5).
3004 This differs from the wxRichTextCtrl API, where you would specify (5,6).
3006 @a flags may contain a bit list of the following values:
3007 - wxRICHTEXT_SETSTYLE_NONE: no style flag.
3008 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
3010 - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
3011 if the combined style at this point is already the style in question.
3012 - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
3013 applied to paragraphs, and not the content.
3014 This allows content styling to be preserved independently from that
3015 of e.g. a named paragraph style.
3016 - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
3017 applied to characters, and not the paragraph.
3018 This allows content styling to be preserved independently from that
3019 of e.g. a named paragraph style.
3020 - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
3022 - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style.
3023 Only the style flags are used in this operation.
3025 virtual bool SetStyle(const wxRichTextRange
& range
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3028 Sets the attributes for the given object only, for example the box attributes for a text box.
3030 virtual void SetStyle(wxRichTextObject
*obj
, const wxRichTextAttr
& textAttr
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3033 Returns the combined text attributes for this position.
3035 This function gets the @e uncombined style - that is, the attributes associated
3036 with the paragraph or character content, and not necessarily the combined
3037 attributes you see on the screen. To get the combined attributes, use GetStyle().
3038 If you specify (any) paragraph attribute in @e style's flags, this function
3039 will fetch the paragraph attributes.
3040 Otherwise, it will return the character attributes.
3042 virtual bool GetStyle(long position
, wxRichTextAttr
& style
);
3045 Returns the content (uncombined) attributes for this position.
3047 virtual bool GetUncombinedStyle(long position
, wxRichTextAttr
& style
);
3050 Implementation helper for GetStyle. If combineStyles is true, combine base, paragraph and
3053 virtual bool DoGetStyle(long position
, wxRichTextAttr
& style
, bool combineStyles
= true);
3056 This function gets a style representing the common, combined attributes in the
3058 Attributes which have different values within the specified range will not be
3059 included the style flags.
3061 The function is used to get the attributes to display in the formatting dialog:
3062 the user can edit the attributes common to the selection, and optionally specify the
3063 values of further attributes to be applied uniformly.
3065 To apply the edited attributes, you can use SetStyle() specifying
3066 the wxRICHTEXT_SETSTYLE_OPTIMIZE flag, which will only apply attributes that
3067 are different from the @e combined attributes within the range.
3068 So, the user edits the effective, displayed attributes for the range,
3069 but his choice won't be applied unnecessarily to content. As an example,
3070 say the style for a paragraph specifies bold, but the paragraph text doesn't
3072 The combined style is bold, and this is what the user will see on-screen and
3073 in the formatting dialog. The user now specifies red text, in addition to bold.
3074 When applying with SetStyle(), the content font weight attributes won't be
3075 changed to bold because this is already specified by the paragraph.
3076 However the text colour attributes @e will be changed to show red.
3078 virtual bool GetStyleForRange(const wxRichTextRange
& range
, wxRichTextAttr
& style
);
3081 Combines @a style with @a currentStyle for the purpose of summarising the attributes of a range of
3084 bool CollectStyle(wxRichTextAttr
& currentStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
3088 Sets the list attributes for the given range, passing flags to determine how
3089 the attributes are set.
3090 Either the style definition or the name of the style definition (in the current
3091 sheet) can be passed.
3093 @a flags is a bit list of the following:
3094 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3095 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3096 @a startFrom, otherwise existing attributes are used.
3097 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3098 as the level for all paragraphs, otherwise the current indentation will be used.
3100 @see NumberList(), PromoteList(), ClearListStyle().
3102 virtual bool SetListStyle(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3103 virtual bool SetListStyle(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3107 Clears the list style from the given range, clearing list-related attributes
3108 and applying any named paragraph style associated with each paragraph.
3110 @a flags is a bit list of the following:
3111 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3113 @see SetListStyle(), PromoteList(), NumberList()
3115 virtual bool ClearListStyle(const wxRichTextRange
& range
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3119 Numbers the paragraphs in the given range.
3121 Pass flags to determine how the attributes are set.
3122 Either the style definition or the name of the style definition (in the current
3123 sheet) can be passed.
3125 @a flags is a bit list of the following:
3126 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3127 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3128 @a startFrom, otherwise existing attributes are used.
3129 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3130 as the level for all paragraphs, otherwise the current indentation will be used.
3132 @a def can be NULL to indicate that the existing list style should be used.
3134 @see SetListStyle(), PromoteList(), ClearListStyle()
3136 virtual bool NumberList(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3137 virtual bool NumberList(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3142 Promotes the list items within the given range.
3143 A positive @a promoteBy produces a smaller indent, and a negative number
3144 produces a larger indent. Pass flags to determine how the attributes are set.
3145 Either the style definition or the name of the style definition (in the current
3146 sheet) can be passed.
3148 @a flags is a bit list of the following:
3149 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3150 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3151 @a startFrom, otherwise existing attributes are used.
3152 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3153 as the level for all paragraphs, otherwise the current indentation will be used.
3155 @see SetListStyle(), SetListStyle(), ClearListStyle()
3157 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3158 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3162 Helper for NumberList and PromoteList, that does renumbering and promotion simultaneously
3163 @a def can be NULL/empty to indicate that the existing list style should be used.
3165 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);
3168 Fills in the attributes for numbering a paragraph after previousParagraph.
3170 virtual bool FindNextParagraphNumber(wxRichTextParagraph
* previousParagraph
, wxRichTextAttr
& attr
) const;
3173 Sets the properties for the given range, passing flags to determine how the
3174 attributes are set. You can merge properties or replace them.
3176 The end point of range is specified as the last character position of the span
3177 of text, plus one. So, for example, to set the properties for a character at
3178 position 5, use the range (5,6).
3180 @a flags may contain a bit list of the following values:
3181 - wxRICHTEXT_SETPROPERTIES_NONE: no flag.
3182 - wxRICHTEXT_SETPROPERTIES_WITH_UNDO: specifies that this operation should be
3184 - wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY: specifies that the properties should only be
3185 applied to paragraphs, and not the content.
3186 - wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY: specifies that the properties should only be
3187 applied to characters, and not the paragraph.
3188 - wxRICHTEXT_SETPROPERTIES_RESET: resets (clears) the existing properties before applying
3190 - wxRICHTEXT_SETPROPERTIES_REMOVE: removes the specified properties.
3192 virtual bool SetProperties(const wxRichTextRange
& range
, const wxRichTextProperties
& properties
, int flags
= wxRICHTEXT_SETPROPERTIES_WITH_UNDO
);
3195 Test if this whole range has character attributes of the specified kind. If any
3196 of the attributes are different within the range, the test fails. You
3197 can use this to implement, for example, bold button updating. style must have
3198 flags indicating which attributes are of interest.
3200 virtual bool HasCharacterAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3203 Test if this whole range has paragraph attributes of the specified kind. If any
3204 of the attributes are different within the range, the test fails. You
3205 can use this to implement, for example, centering button updating. style must have
3206 flags indicating which attributes are of interest.
3208 virtual bool HasParagraphAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3210 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraphLayoutBox(*this); }
3213 Prepares the content just before insertion (or after buffer reset).
3214 Currently is only called if undo mode is on.
3216 virtual void PrepareContent(wxRichTextParagraphLayoutBox
& container
);
3219 Insert fragment into this box at the given position. If partialParagraph is true,
3220 it is assumed that the last (or only) paragraph is just a piece of data with no paragraph
3223 virtual bool InsertFragment(long position
, wxRichTextParagraphLayoutBox
& fragment
);
3226 Make a copy of the fragment corresponding to the given range, putting it in @a fragment.
3228 virtual bool CopyFragment(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
& fragment
);
3231 Apply the style sheet to the buffer, for example if the styles have changed.
3233 virtual bool ApplyStyleSheet(wxRichTextStyleSheet
* styleSheet
);
3235 void Copy(const wxRichTextParagraphLayoutBox
& obj
);
3237 void operator= (const wxRichTextParagraphLayoutBox
& obj
) { Copy(obj
); }
3242 virtual void UpdateRanges();
3247 virtual wxString
GetText() const;
3250 Sets the default style, affecting the style currently being applied
3251 (for example, setting the default style to bold will cause subsequently
3252 inserted text to be bold).
3254 This is not cumulative - setting the default style will replace the previous
3257 Setting it to a default attribute object makes new content take on the 'basic' style.
3259 virtual bool SetDefaultStyle(const wxRichTextAttr
& style
);
3262 Returns the current default style, affecting the style currently being applied
3263 (for example, setting the default style to bold will cause subsequently
3264 inserted text to be bold).
3266 virtual const wxRichTextAttr
& GetDefaultStyle() const { return m_defaultAttributes
; }
3269 Sets the basic (overall) style. This is the style of the whole
3270 buffer before further styles are applied, unlike the default style, which
3271 only affects the style currently being applied (for example, setting the default
3272 style to bold will cause subsequently inserted text to be bold).
3274 virtual void SetBasicStyle(const wxRichTextAttr
& style
) { m_attributes
= style
; }
3277 Returns the basic (overall) style.
3279 This is the style of the whole buffer before further styles are applied,
3280 unlike the default style, which only affects the style currently being
3281 applied (for example, setting the default style to bold will cause
3282 subsequently inserted text to be bold).
3284 virtual const wxRichTextAttr
& GetBasicStyle() const { return m_attributes
; }
3287 Invalidates the buffer. With no argument, invalidates whole buffer.
3289 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3292 Do the (in)validation for this object only.
3294 virtual void DoInvalidate(const wxRichTextRange
& invalidRange
);
3297 Do the (in)validation both up and down the hierarchy.
3299 virtual void InvalidateHierarchy(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3302 Gather information about floating objects. If untilObj is non-NULL,
3303 will stop getting information if the current object is this, since we
3304 will collect the rest later.
3306 virtual bool UpdateFloatingObjects(const wxRect
& availableRect
, wxRichTextObject
* untilObj
= NULL
);
3309 Get invalid range, rounding to entire paragraphs if argument is true.
3311 wxRichTextRange
GetInvalidRange(bool wholeParagraphs
= false) const;
3314 Returns @true if this object needs layout.
3316 bool IsDirty() const { return m_invalidRange
!= wxRICHTEXT_NONE
; }
3319 Returns the wxRichTextFloatCollector of this object.
3321 wxRichTextFloatCollector
* GetFloatCollector() { return m_floatCollector
; }
3324 Returns the number of floating objects at this level.
3326 int GetFloatingObjectCount() const;
3329 Returns a list of floating objects.
3331 bool GetFloatingObjects(wxRichTextObjectList
& objects
) const;
3334 wxRichTextCtrl
* m_ctrl
;
3335 wxRichTextAttr m_defaultAttributes
;
3337 // The invalidated range that will need full layout
3338 wxRichTextRange m_invalidRange
;
3340 // Is the last paragraph partial or complete?
3341 bool m_partialParagraph
;
3343 // The floating layout state
3344 wxRichTextFloatCollector
* m_floatCollector
;
3348 @class wxRichTextBox
3350 This class implements a floating or inline text box, containing paragraphs.
3352 @library{wxrichtext}
3355 @see wxRichTextParagraphLayoutBox, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
3358 class wxRichTextBox
: public wxRichTextParagraphLayoutBox
3364 Default constructor; optionally pass the parent object.
3367 wxRichTextBox(wxRichTextObject
* parent
= NULL
);
3373 wxRichTextBox(const wxRichTextBox
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3377 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3379 virtual wxString
GetXMLNodeName() const { return wxT("textbox"); }
3381 virtual bool CanEditProperties() const { return true; }
3383 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3385 virtual wxString
GetPropertiesMenuLabel() const { return _("&Box"); }
3391 virtual wxRichTextObject
* Clone() const { return new wxRichTextBox(*this); }
3393 void Copy(const wxRichTextBox
& obj
);
3399 @class wxRichTextField
3401 This class implements the general concept of a field, an object that represents
3402 additional functionality such as a footnote, a bookmark, a page number, a table
3403 of contents, and so on. Extra information (such as a bookmark name) can be stored
3404 in the object properties.
3406 Drawing, layout, and property editing is delegated to classes derived
3407 from wxRichTextFieldType, such as instances of wxRichTextFieldTypeStandard; this makes
3408 the use of fields an efficient method of introducing extra functionality, since
3409 most of the information required to draw a field (such as a bitmap) is kept centrally
3410 in a single field type definition.
3412 The FieldType property, accessed by SetFieldType/GetFieldType, is used to retrieve
3413 the field type definition. So be careful not to overwrite this property.
3415 wxRichTextField is derived from wxRichTextParagraphLayoutBox, which means that it
3416 can contain its own read-only content, refreshed when the application calls the UpdateField
3417 function. Whether a field is treated as a composite or a single graphic is determined
3418 by the field type definition. If using wxRichTextFieldTypeStandard, passing the display
3419 type wxRICHTEXT_FIELD_STYLE_COMPOSITE to the field type definition causes the field
3420 to behave like a composite; the other display styles display a simple graphic.
3421 When implementing a composite field, you will still need to derive from wxRichTextFieldTypeStandard
3422 or wxRichTextFieldType, if only to implement UpdateField to refresh the field content
3423 appropriately. wxRichTextFieldTypeStandard is only one possible implementation, but
3424 covers common needs especially for simple, static fields using text or a bitmap.
3426 Register field types on application initialisation with the static function
3427 wxRichTextParagraphLayoutBox::AddFieldType. They will be deleted automatically
3428 on application exit.
3430 An application can write a field to a control with wxRichTextCtrl::WriteField,
3431 taking a field type, the properties for the field, and optional attributes.
3433 @library{wxrichtext}
3436 @see wxRichTextFieldTypeStandard, wxRichTextFieldType, wxRichTextParagraphLayoutBox, wxRichTextProperties, wxRichTextCtrl
3439 class wxRichTextField
: public wxRichTextParagraphLayoutBox
3445 Default constructor; optionally pass the parent object.
3448 wxRichTextField(const wxString
& fieldType
= wxEmptyString
, wxRichTextObject
* parent
= NULL
);
3454 wxRichTextField(const wxRichTextField
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3458 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3460 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3462 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
3464 virtual wxString
GetXMLNodeName() const { return wxT("field"); }
3466 virtual bool CanEditProperties() const;
3468 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3470 virtual wxString
GetPropertiesMenuLabel() const;
3472 virtual bool AcceptsFocus() const { return false; }
3474 virtual void CalculateRange(long start
, long& end
);
3477 If a field has children, we don't want the user to be able to edit it.
3479 virtual bool IsAtomic() const { return true; }
3481 virtual bool IsEmpty() const { return false; }
3483 virtual bool IsTopLevel() const;
3487 void SetFieldType(const wxString
& fieldType
) { GetProperties().SetProperty(wxT("FieldType"), fieldType
); }
3488 wxString
GetFieldType() const { return GetProperties().GetPropertyString(wxT("FieldType")); }
3493 Update the field; delegated to the associated field type. This would typically expand the field to its value,
3494 if this is a dynamically changing and/or composite field.
3496 virtual bool UpdateField(wxRichTextBuffer
* buffer
);
3498 virtual wxRichTextObject
* Clone() const { return new wxRichTextField(*this); }
3500 void Copy(const wxRichTextField
& obj
);
3506 @class wxRichTextFieldType
3508 The base class for custom field types. Each type definition handles one
3509 field type. Override functions to provide drawing, layout, updating and
3510 property editing functionality for a field.
3512 Register field types on application initialisation with the static function
3513 wxRichTextParagraphLayoutBox::AddFieldType. They will be deleted automatically
3514 on application exit.
3516 @library{wxrichtext}
3519 @see wxRichTextFieldTypeStandard, wxRichTextField, wxRichTextCtrl
3522 class wxRichTextFieldType
: public wxObject
3526 Creates a field type definition.
3528 wxRichTextFieldType(const wxString
& name
= wxEmptyString
)
3535 wxRichTextFieldType(const wxRichTextFieldType
& fieldType
) { Copy(fieldType
); }
3537 void Copy(const wxRichTextFieldType
& fieldType
) { m_name
= fieldType
.m_name
; }
3540 Draw the item, within the given range. Some objects may ignore the range (for
3541 example paragraphs) while others must obey it (lines, to implement wrapping)
3543 virtual bool Draw(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
3546 Lay the item out at the specified position with the given size constraint.
3547 Layout must set the cached size. @rect is the available space for the object,
3548 and @a parentRect is the container that is used to determine a relative size
3549 or position (for example if a text box must be 50% of the parent text box).
3551 virtual bool Layout(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
3554 Returns the object size for the given range. Returns @false if the range
3555 is invalid for this object.
3557 virtual bool GetRangeSize(wxRichTextField
* obj
, const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const = 0;
3560 Returns @true if we can edit the object's properties via a GUI.
3562 virtual bool CanEditProperties(wxRichTextField
* obj
) const { return false; }
3565 Edits the object's properties via a GUI.
3567 virtual bool EditProperties(wxRichTextField
* obj
, wxWindow
* parent
, wxRichTextBuffer
* buffer
) { return false; }
3570 Returns the label to be used for the properties context menu item.
3572 virtual wxString
GetPropertiesMenuLabel(wxRichTextField
* obj
) const { return wxEmptyString
; }
3575 Update the field. This would typically expand the field to its value,
3576 if this is a dynamically changing and/or composite field.
3578 virtual bool UpdateField(wxRichTextBuffer
* buffer
, wxRichTextField
* obj
) { return false; }
3581 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
3583 virtual bool IsTopLevel(wxRichTextField
* obj
) const { return true; }
3586 Sets the field type name. There should be a unique name per field type object.
3588 void SetName(const wxString
& name
) { m_name
= name
; }
3591 Returns the field type name. There should be a unique name per field type object.
3593 wxString
GetName() const { return m_name
; }
3600 class wxRichTextFieldTypeHashMap
;
3603 @class wxRichTextFieldTypeStandard
3605 A field type that can handle fields with text or bitmap labels, with a small range
3606 of styles for implementing rectangular fields and fields that can be used for start
3609 The border, text and background colours can be customised; the default is
3610 white text on a black background.
3612 The following display styles can be used.
3615 @style{wxRICHTEXT_FIELD_STYLE_COMPOSITE}
3616 Creates a composite field; you will probably need to derive a new class to implement UpdateField.
3617 @style{wxRICHTEXT_FIELD_STYLE_RECTANGLE}
3618 Shows a rounded rectangle background.
3619 @style{wxRICHTEXT_FIELD_STYLE_NO_BORDER}
3620 Suppresses the background and border; mostly used with a bitmap label.
3621 @style{wxRICHTEXT_FIELD_STYLE_START_TAG}
3622 Shows a start tag background, with the pointy end facing right.
3623 @style{wxRICHTEXT_FIELD_STYLE_END_TAG}
3624 Shows an end tag background, with the pointy end facing left.
3627 @library{wxrichtext}
3630 @see wxRichTextFieldType, wxRichTextField, wxRichTextBuffer, wxRichTextCtrl
3633 class wxRichTextFieldTypeStandard
: public wxRichTextFieldType
3637 // Display style types
3638 enum { wxRICHTEXT_FIELD_STYLE_COMPOSITE
= 0x01,
3639 wxRICHTEXT_FIELD_STYLE_RECTANGLE
= 0x02,
3640 wxRICHTEXT_FIELD_STYLE_NO_BORDER
= 0x04,
3641 wxRICHTEXT_FIELD_STYLE_START_TAG
= 0x08,
3642 wxRICHTEXT_FIELD_STYLE_END_TAG
= 0x10
3646 Constructor, creating a field type definition with a text label.
3649 The name of the type definition. This must be unique, and is the type
3650 name used when adding a field to a control.
3652 The text label to be shown on the field.
3654 The display style: one of wxRICHTEXT_FIELD_STYLE_RECTANGLE,
3655 wxRICHTEXT_FIELD_STYLE_NO_BORDER, wxRICHTEXT_FIELD_STYLE_START_TAG,
3656 wxRICHTEXT_FIELD_STYLE_END_TAG.
3659 wxRichTextFieldTypeStandard(const wxString
& name
, const wxString
& label
, int displayStyle
= wxRICHTEXT_FIELD_STYLE_RECTANGLE
);
3662 Constructor, creating a field type definition with a bitmap label.
3665 The name of the type definition. This must be unique, and is the type
3666 name used when adding a field to a control.
3668 The bitmap label to be shown on the field.
3670 The display style: one of wxRICHTEXT_FIELD_STYLE_RECTANGLE,
3671 wxRICHTEXT_FIELD_STYLE_NO_BORDER, wxRICHTEXT_FIELD_STYLE_START_TAG,
3672 wxRICHTEXT_FIELD_STYLE_END_TAG.
3675 wxRichTextFieldTypeStandard(const wxString
& name
, const wxBitmap
& bitmap
, int displayStyle
= wxRICHTEXT_FIELD_STYLE_NO_BORDER
);
3678 The default constructor.
3681 wxRichTextFieldTypeStandard() { Init(); }
3684 The copy constructor.
3687 wxRichTextFieldTypeStandard(const wxRichTextFieldTypeStandard
& field
) { Copy(field
); }
3690 Initialises the object.
3697 void Copy(const wxRichTextFieldTypeStandard
& field
);
3700 The assignment operator.
3702 void operator=(const wxRichTextFieldTypeStandard
& field
) { Copy(field
); }
3705 Draw the item, within the given range. Some objects may ignore the range (for
3706 example paragraphs) while others must obey it (lines, to implement wrapping)
3708 virtual bool Draw(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3711 Lay the item out at the specified position with the given size constraint.
3712 Layout must set the cached size. @rect is the available space for the object,
3713 and @a parentRect is the container that is used to determine a relative size
3714 or position (for example if a text box must be 50% of the parent text box).
3716 virtual bool Layout(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3719 Returns the object size for the given range. Returns @false if the range
3720 is invalid for this object.
3722 virtual bool GetRangeSize(wxRichTextField
* obj
, const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
3725 Get the size of the field, given the label, font size, and so on.
3727 wxSize
GetSize(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int style
) const;
3730 Returns @true if the display type is wxRICHTEXT_FIELD_STYLE_COMPOSITE, @false otherwise.
3732 virtual bool IsTopLevel(wxRichTextField
* obj
) const { return (GetDisplayStyle() & wxRICHTEXT_FIELD_STYLE_COMPOSITE
) != 0; }
3735 Sets the text label for fields of this type.
3737 void SetLabel(const wxString
& label
) { m_label
= label
; }
3740 Returns the text label for fields of this type.
3742 const wxString
& GetLabel() const { return m_label
; }
3745 Sets the bitmap label for fields of this type.
3747 void SetBitmap(const wxBitmap
& bitmap
) { m_bitmap
= bitmap
; }
3750 Gets the bitmap label for fields of this type.
3752 const wxBitmap
& GetBitmap() const { return m_bitmap
; }
3755 Gets the display style for fields of this type.
3757 int GetDisplayStyle() const { return m_displayStyle
; }
3760 Sets the display style for fields of this type.
3762 void SetDisplayStyle(int displayStyle
) { m_displayStyle
= displayStyle
; }
3765 Gets the font used for drawing the text label.
3767 const wxFont
& GetFont() const { return m_font
; }
3770 Sets the font used for drawing the text label.
3772 void SetFont(const wxFont
& font
) { m_font
= font
; }
3775 Gets the colour used for drawing the text label.
3777 const wxColour
& GetTextColour() const { return m_textColour
; }
3780 Sets the colour used for drawing the text label.
3782 void SetTextColour(const wxColour
& colour
) { m_textColour
= colour
; }
3785 Gets the colour used for drawing the field border.
3787 const wxColour
& GetBorderColour() const { return m_borderColour
; }
3790 Sets the colour used for drawing the field border.
3792 void SetBorderColour(const wxColour
& colour
) { m_borderColour
= colour
; }
3795 Gets the colour used for drawing the field background.
3797 const wxColour
& GetBackgroundColour() const { return m_backgroundColour
; }
3800 Sets the colour used for drawing the field background.
3802 void SetBackgroundColour(const wxColour
& colour
) { m_backgroundColour
= colour
; }
3805 Sets the vertical padding (the distance between the border and the text).
3807 void SetVerticalPadding(int padding
) { m_verticalPadding
= padding
; }
3810 Gets the vertical padding (the distance between the border and the text).
3812 int GetVerticalPadding() const { return m_verticalPadding
; }
3815 Sets the horizontal padding (the distance between the border and the text).
3817 void SetHorizontalPadding(int padding
) { m_horizontalPadding
= padding
; }
3820 Sets the horizontal padding (the distance between the border and the text).
3822 int GetHorizontalPadding() const { return m_horizontalPadding
; }
3825 Sets the horizontal margin surrounding the field object.
3827 void SetHorizontalMargin(int margin
) { m_horizontalMargin
= margin
; }
3830 Gets the horizontal margin surrounding the field object.
3832 int GetHorizontalMargin() const { return m_horizontalMargin
; }
3835 Sets the vertical margin surrounding the field object.
3837 void SetVerticalMargin(int margin
) { m_verticalMargin
= margin
; }
3840 Gets the vertical margin surrounding the field object.
3842 int GetVerticalMargin() const { return m_verticalMargin
; }
3849 wxColour m_textColour
;
3850 wxColour m_borderColour
;
3851 wxColour m_backgroundColour
;
3852 int m_verticalPadding
;
3853 int m_horizontalPadding
;
3854 int m_horizontalMargin
;
3855 int m_verticalMargin
;
3860 @class wxRichTextLine
3862 This object represents a line in a paragraph, and stores
3863 offsets from the start of the paragraph representing the
3864 start and end positions of the line.
3866 @library{wxrichtext}
3869 @see wxRichTextBuffer, wxRichTextCtrl
3872 class wxRichTextLine
3877 wxRichTextLine(wxRichTextParagraph
* parent
);
3878 wxRichTextLine(const wxRichTextLine
& obj
) { Init( NULL
); Copy(obj
); }
3879 virtual ~wxRichTextLine() {}
3886 Sets the range associated with this line.
3888 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
3890 Sets the range associated with this line.
3892 void SetRange(long from
, long to
) { m_range
= wxRichTextRange(from
, to
); }
3895 Returns the parent paragraph.
3897 wxRichTextParagraph
* GetParent() { return m_parent
; }
3902 const wxRichTextRange
& GetRange() const { return m_range
; }
3906 wxRichTextRange
& GetRange() { return m_range
; }
3909 Returns the absolute range.
3911 wxRichTextRange
GetAbsoluteRange() const;
3914 Returns the line size as calculated by Layout.
3916 virtual wxSize
GetSize() const { return m_size
; }
3919 Sets the line size as calculated by Layout.
3921 virtual void SetSize(const wxSize
& sz
) { m_size
= sz
; }
3924 Returns the object position relative to the parent.
3926 virtual wxPoint
GetPosition() const { return m_pos
; }
3929 Sets the object position relative to the parent.
3931 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
3934 Returns the absolute object position.
3936 virtual wxPoint
GetAbsolutePosition() const;
3939 Returns the rectangle enclosing the line.
3941 virtual wxRect
GetRect() const { return wxRect(GetAbsolutePosition(), GetSize()); }
3944 Sets the stored descent.
3946 void SetDescent(int descent
) { m_descent
= descent
; }
3949 Returns the stored descent.
3951 int GetDescent() const { return m_descent
; }
3953 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3954 wxArrayInt
& GetObjectSizes() { return m_objectSizes
; }
3955 const wxArrayInt
& GetObjectSizes() const { return m_objectSizes
; }
3961 Initialises the object.
3963 void Init(wxRichTextParagraph
* parent
);
3968 void Copy(const wxRichTextLine
& obj
);
3970 virtual wxRichTextLine
* Clone() const { return new wxRichTextLine(*this); }
3974 // The range of the line (start position to end position)
3975 // This is relative to the parent paragraph.
3976 wxRichTextRange m_range
;
3978 // Size and position measured relative to top of paragraph
3982 // Maximum descent for this line (location of text baseline)
3985 // The parent object
3986 wxRichTextParagraph
* m_parent
;
3988 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3989 wxArrayInt m_objectSizes
;
3993 class wxRichTextLineList
;
3996 @class wxRichTextParagraph
3998 This object represents a single paragraph containing various objects such as text content, images, and further paragraph layout objects.
4000 @library{wxrichtext}
4003 @see wxRichTextBuffer, wxRichTextCtrl
4006 class wxRichTextParagraph
: public wxRichTextCompositeObject
4012 Constructor taking a parent and style.
4014 wxRichTextParagraph(wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
4016 Constructor taking a text string, a parent and paragraph and character attributes.
4018 wxRichTextParagraph(const wxString
& text
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* paraStyle
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4019 virtual ~wxRichTextParagraph();
4020 wxRichTextParagraph(const wxRichTextParagraph
& obj
): wxRichTextCompositeObject() { Copy(obj
); }
4024 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4026 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4028 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
4030 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
4032 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
4034 virtual void CalculateRange(long start
, long& end
);
4036 virtual wxString
GetXMLNodeName() const { return wxT("paragraph"); }
4041 Returns the cached lines.
4043 wxRichTextLineList
& GetLines() { return m_cachedLines
; }
4050 void Copy(const wxRichTextParagraph
& obj
);
4052 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraph(*this); }
4055 Clears the cached lines.
4062 Applies paragraph styles such as centering to the wrapped lines.
4064 virtual void ApplyParagraphStyle(wxRichTextLine
* line
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxDC
& dc
);
4067 Inserts text at the given position.
4069 virtual bool InsertText(long pos
, const wxString
& text
);
4072 Splits an object at this position if necessary, and returns
4073 the previous object, or NULL if inserting at the beginning.
4075 virtual wxRichTextObject
* SplitAt(long pos
, wxRichTextObject
** previousObject
= NULL
);
4078 Moves content to a list from this point.
4080 virtual void MoveToList(wxRichTextObject
* obj
, wxList
& list
);
4083 Adds content back from a list.
4085 virtual void MoveFromList(wxList
& list
);
4088 Returns the plain text searching from the start or end of the range.
4089 The resulting string may be shorter than the range given.
4091 bool GetContiguousPlainText(wxString
& text
, const wxRichTextRange
& range
, bool fromStart
= true);
4094 Finds a suitable wrap position. @a wrapPosition is the last position in the line to the left
4097 bool FindWrapPosition(const wxRichTextRange
& range
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int availableSpace
, long& wrapPosition
, wxArrayInt
* partialExtents
);
4100 Finds the object at the given position.
4102 wxRichTextObject
* FindObjectAtPosition(long position
);
4105 Returns the bullet text for this paragraph.
4107 wxString
GetBulletText();
4110 Allocates or reuses a line object.
4112 wxRichTextLine
* AllocateLine(int pos
);
4115 Clears remaining unused line objects, if any.
4117 bool ClearUnusedLines(int lineCount
);
4120 Returns combined attributes of the base style, paragraph style and character style. We use this to dynamically
4121 retrieve the actual style.
4123 wxRichTextAttr
GetCombinedAttributes(const wxRichTextAttr
& contentStyle
, bool includingBoxAttr
= false) const;
4126 Returns the combined attributes of the base style and paragraph style.
4128 wxRichTextAttr
GetCombinedAttributes(bool includingBoxAttr
= false) const;
4131 Returns the first position from pos that has a line break character.
4133 long GetFirstLineBreakPosition(long pos
);
4136 Creates a default tabstop array.
4138 static void InitDefaultTabs();
4141 Clears the default tabstop array.
4143 static void ClearDefaultTabs();
4146 Returns the default tabstop array.
4148 static const wxArrayInt
& GetDefaultTabs() { return sm_defaultTabs
; }
4151 Lays out the floating objects.
4153 void LayoutFloat(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
, wxRichTextFloatCollector
* floatCollector
);
4157 // The lines that make up the wrapped paragraph
4158 wxRichTextLineList m_cachedLines
;
4161 static wxArrayInt sm_defaultTabs
;
4163 friend class wxRichTextFloatCollector
;
4167 @class wxRichTextPlainText
4169 This object represents a single piece of text.
4171 @library{wxrichtext}
4174 @see wxRichTextBuffer, wxRichTextCtrl
4177 class wxRichTextPlainText
: public wxRichTextObject
4185 wxRichTextPlainText(const wxString
& text
= wxEmptyString
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
4190 wxRichTextPlainText(const wxRichTextPlainText
& obj
): wxRichTextObject() { Copy(obj
); }
4194 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4196 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4198 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
4200 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
4202 virtual wxRichTextObject
* DoSplit(long pos
);
4204 virtual void CalculateRange(long start
, long& end
);
4206 virtual bool DeleteRange(const wxRichTextRange
& range
);
4208 virtual bool IsEmpty() const { return m_text
.empty(); }
4210 virtual bool CanMerge(wxRichTextObject
* object
, wxRichTextDrawingContext
& context
) const;
4212 virtual bool Merge(wxRichTextObject
* object
, wxRichTextDrawingContext
& context
);
4214 virtual bool CanSplit(wxRichTextDrawingContext
& context
) const;
4216 virtual wxRichTextObject
* Split(wxRichTextDrawingContext
& context
);
4218 virtual void Dump(wxTextOutputStream
& stream
);
4221 Get the first position from pos that has a line break character.
4223 long GetFirstLineBreakPosition(long pos
);
4225 /// Does this object take note of paragraph attributes? Text and image objects don't.
4226 virtual bool UsesParagraphAttributes() const { return false; }
4228 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4230 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4231 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4234 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4235 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4238 virtual wxString
GetXMLNodeName() const { return wxT("text"); }
4245 const wxString
& GetText() const { return m_text
; }
4250 void SetText(const wxString
& text
) { m_text
= text
; }
4254 // Copies the text object,
4255 void Copy(const wxRichTextPlainText
& obj
);
4257 // Clones the text object.
4258 virtual wxRichTextObject
* Clone() const { return new wxRichTextPlainText(*this); }
4261 bool DrawTabbedString(wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxString
& str
, wxCoord
& x
, wxCoord
& y
, bool selected
);
4268 @class wxRichTextImageBlock
4270 This class stores information about an image, in binary in-memory form.
4272 @library{wxrichtext}
4275 @see wxRichTextBuffer, wxRichTextCtrl
4278 class wxRichTextImageBlock
: public wxObject
4284 wxRichTextImageBlock();
4289 wxRichTextImageBlock(const wxRichTextImageBlock
& block
);
4290 virtual ~wxRichTextImageBlock();
4293 Initialises the block.
4304 Load the original image into a memory block.
4305 If the image is not a JPEG, we must convert it into a JPEG
4307 If it's not a JPEG we can make use of @a image, already scaled, so we don't have to
4308 load the image a second time.
4310 virtual bool MakeImageBlock(const wxString
& filename
, wxBitmapType imageType
,
4311 wxImage
& image
, bool convertToJPEG
= true);
4314 Make an image block from the wxImage in the given
4317 virtual bool MakeImageBlock(wxImage
& image
, wxBitmapType imageType
, int quality
= 80);
4320 Uses a const wxImage for efficiency, but can't set quality (only relevant for JPEG)
4322 virtual bool MakeImageBlockDefaultQuality(const wxImage
& image
, wxBitmapType imageType
);
4325 Makes the image block.
4327 virtual bool DoMakeImageBlock(const wxImage
& image
, wxBitmapType imageType
);
4330 Writes the block to a file.
4332 bool Write(const wxString
& filename
);
4335 Writes the data in hex to a stream.
4337 bool WriteHex(wxOutputStream
& stream
);
4340 Reads the data in hex from a stream.
4342 bool ReadHex(wxInputStream
& stream
, int length
, wxBitmapType imageType
);
4347 void Copy(const wxRichTextImageBlock
& block
);
4349 // Load a wxImage from the block
4352 bool Load(wxImage
& image
);
4357 Assignment operation.
4359 void operator=(const wxRichTextImageBlock
& block
);
4364 Returns the raw data.
4366 unsigned char* GetData() const { return m_data
; }
4369 Returns the data size in bytes.
4371 size_t GetDataSize() const { return m_dataSize
; }
4374 Returns the image type.
4376 wxBitmapType
GetImageType() const { return m_imageType
; }
4380 void SetData(unsigned char* image
) { m_data
= image
; }
4385 void SetDataSize(size_t size
) { m_dataSize
= size
; }
4388 Sets the image type.
4390 void SetImageType(wxBitmapType imageType
) { m_imageType
= imageType
; }
4393 Returns @true if the data is non-NULL.
4395 bool IsOk() const { return GetData() != NULL
; }
4396 bool Ok() const { return IsOk(); }
4399 Gets the extension for the block's type.
4401 wxString
GetExtension() const;
4406 Allocates and reads from a stream as a block of memory.
4408 static unsigned char* ReadBlock(wxInputStream
& stream
, size_t size
);
4411 Allocates and reads from a file as a block of memory.
4413 static unsigned char* ReadBlock(const wxString
& filename
, size_t size
);
4416 Writes a memory block to stream.
4418 static bool WriteBlock(wxOutputStream
& stream
, unsigned char* block
, size_t size
);
4421 Writes a memory block to a file.
4423 static bool WriteBlock(const wxString
& filename
, unsigned char* block
, size_t size
);
4426 // Size in bytes of the image stored.
4427 // This is in the raw, original form such as a JPEG file.
4428 unsigned char* m_data
;
4430 wxBitmapType m_imageType
;
4434 @class wxRichTextImage
4436 This class implements a graphic object.
4438 @library{wxrichtext}
4441 @see wxRichTextBuffer, wxRichTextCtrl, wxRichTextImageBlock
4444 class wxRichTextImage
: public wxRichTextObject
4450 Default constructor.
4452 wxRichTextImage(wxRichTextObject
* parent
= NULL
): wxRichTextObject(parent
) { }
4455 Creates a wxRichTextImage from a wxImage.
4457 wxRichTextImage(const wxImage
& image
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4460 Creates a wxRichTextImage from an image block.
4462 wxRichTextImage(const wxRichTextImageBlock
& imageBlock
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4467 wxRichTextImage(const wxRichTextImage
& obj
): wxRichTextObject(obj
) { Copy(obj
); }
4471 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4473 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4475 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
4478 Returns the 'natural' size for this object - the image size.
4480 virtual wxTextAttrSize
GetNaturalSize() const;
4482 virtual bool IsEmpty() const { return false; /* !m_imageBlock.IsOk(); */ }
4484 virtual bool CanEditProperties() const { return true; }
4486 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
4488 virtual wxString
GetPropertiesMenuLabel() const { return _("&Picture"); }
4490 virtual bool UsesParagraphAttributes() const { return false; }
4492 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4494 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4495 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4498 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4499 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4502 // Images can be floatable (optionally).
4503 virtual bool IsFloatable() const { return true; }
4505 virtual wxString
GetXMLNodeName() const { return wxT("image"); }
4510 Returns the image cache (a scaled bitmap).
4512 const wxBitmap
& GetImageCache() const { return m_imageCache
; }
4515 Sets the image cache.
4517 void SetImageCache(const wxBitmap
& bitmap
) { m_imageCache
= bitmap
; }
4520 Resets the image cache.
4522 void ResetImageCache() { m_imageCache
= wxNullBitmap
; }
4525 Returns the image block containing the raw data.
4527 wxRichTextImageBlock
& GetImageBlock() { return m_imageBlock
; }
4530 Gets the original image size.
4532 wxSize
GetOriginalImageSize() const;
4535 Sets the original image size.
4537 void SetOriginalImageSize(const wxSize
& sz
);
4542 Copies the image object.
4544 void Copy(const wxRichTextImage
& obj
);
4547 Clones the image object.
4549 virtual wxRichTextObject
* Clone() const { return new wxRichTextImage(*this); }
4552 Creates a cached image at the required size.
4554 virtual bool LoadImageCache(wxDC
& dc
, bool resetCache
= false, const wxSize
& parentSize
= wxDefaultSize
);
4557 wxRichTextImageBlock m_imageBlock
;
4558 wxBitmap m_imageCache
;
4561 class wxRichTextCommand
;
4562 class wxRichTextAction
;
4565 @class wxRichTextBuffer
4567 This is a kind of paragraph layout box, used to represent the whole buffer.
4569 @library{wxrichtext}
4572 @see wxRichTextParagraphLayoutBox, wxRichTextCtrl
4575 class wxRichTextBuffer
: public wxRichTextParagraphLayoutBox
4581 Default constructor.
4583 wxRichTextBuffer() { Init(); }
4588 wxRichTextBuffer(const wxRichTextBuffer
& obj
): wxRichTextParagraphLayoutBox() { Init(); Copy(obj
); }
4590 virtual ~wxRichTextBuffer() ;
4595 Returns the command processor.
4596 A text buffer always creates its own command processor when it is initialized.
4598 wxCommandProcessor
* GetCommandProcessor() const { return m_commandProcessor
; }
4601 Sets style sheet, if any. This will allow the application to use named character and paragraph
4602 styles found in the style sheet.
4604 Neither the buffer nor the control owns the style sheet so must be deleted by the application.
4606 void SetStyleSheet(wxRichTextStyleSheet
* styleSheet
) { m_styleSheet
= styleSheet
; }
4609 Returns the style sheet.
4611 virtual wxRichTextStyleSheet
* GetStyleSheet() const { return m_styleSheet
; }
4614 Sets the style sheet and sends a notification of the change.
4616 bool SetStyleSheetAndNotify(wxRichTextStyleSheet
* sheet
);
4619 Pushes the style sheet to the top of the style sheet stack.
4621 bool PushStyleSheet(wxRichTextStyleSheet
* styleSheet
);
4624 Pops the style sheet from the top of the style sheet stack.
4626 wxRichTextStyleSheet
* PopStyleSheet();
4629 Returns the table storing fonts, for quick access and font reuse.
4631 wxRichTextFontTable
& GetFontTable() { return m_fontTable
; }
4634 Returns the table storing fonts, for quick access and font reuse.
4636 const wxRichTextFontTable
& GetFontTable() const { return m_fontTable
; }
4639 Sets table storing fonts, for quick access and font reuse.
4641 void SetFontTable(const wxRichTextFontTable
& table
) { m_fontTable
= table
; }
4644 Sets the scale factor for displaying fonts, for example for more comfortable
4647 void SetFontScale(double fontScale
);
4650 Returns the scale factor for displaying fonts, for example for more comfortable
4653 double GetFontScale() const { return m_fontScale
; }
4656 Sets the scale factor for displaying certain dimensions such as indentation and
4657 inter-paragraph spacing. This can be useful when editing in a small control
4658 where you still want legible text, but a minimum of wasted white space.
4660 void SetDimensionScale(double dimScale
);
4663 Returns the scale factor for displaying certain dimensions such as indentation
4664 and inter-paragraph spacing.
4666 double GetDimensionScale() const { return m_dimensionScale
; }
4676 Clears the buffer, adds an empty paragraph, and clears the command processor.
4678 virtual void ResetAndClearCommands();
4682 Loads content from a stream or file.
4683 Not all handlers will implement file loading.
4685 virtual bool LoadFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4686 virtual bool LoadFile(wxInputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4691 Saves content to a stream or file.
4692 Not all handlers will implement file saving.
4694 virtual bool SaveFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4695 virtual bool SaveFile(wxOutputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4699 Sets the handler flags, controlling loading and saving.
4701 void SetHandlerFlags(int flags
) { m_handlerFlags
= flags
; }
4704 Gets the handler flags, controlling loading and saving.
4706 int GetHandlerFlags() const { return m_handlerFlags
; }
4709 Convenience function to add a paragraph of text.
4711 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
) { Modify(); return wxRichTextParagraphLayoutBox::AddParagraph(text
, paraStyle
); }
4714 Begin collapsing undo/redo commands. Note that this may not work properly
4715 if combining commands that delete or insert content, changing ranges for
4718 @a cmdName should be the name of the combined command that will appear
4719 next to Undo and Redo in the edit menu.
4721 virtual bool BeginBatchUndo(const wxString
& cmdName
);
4724 End collapsing undo/redo commands.
4726 virtual bool EndBatchUndo();
4729 Returns @true if we are collapsing commands.
4731 virtual bool BatchingUndo() const { return m_batchedCommandDepth
> 0; }
4734 Submit the action immediately, or delay according to whether collapsing is on.
4736 virtual bool SubmitAction(wxRichTextAction
* action
);
4739 Returns the collapsed command.
4741 virtual wxRichTextCommand
* GetBatchedCommand() const { return m_batchedCommand
; }
4744 Begin suppressing undo/redo commands. The way undo is suppressed may be implemented
4745 differently by each command. If not dealt with by a command implementation, then
4746 it will be implemented automatically by not storing the command in the undo history
4747 when the action is submitted to the command processor.
4749 virtual bool BeginSuppressUndo();
4752 End suppressing undo/redo commands.
4754 virtual bool EndSuppressUndo();
4757 Are we suppressing undo??
4759 virtual bool SuppressingUndo() const { return m_suppressUndo
> 0; }
4762 Copy the range to the clipboard.
4764 virtual bool CopyToClipboard(const wxRichTextRange
& range
);
4767 Paste the clipboard content to the buffer.
4769 virtual bool PasteFromClipboard(long position
);
4772 Returns @true if we can paste from the clipboard.
4774 virtual bool CanPasteFromClipboard() const;
4777 Begin using a style.
4779 virtual bool BeginStyle(const wxRichTextAttr
& style
);
4784 virtual bool EndStyle();
4789 virtual bool EndAllStyles();
4792 Clears the style stack.
4794 virtual void ClearStyleStack();
4797 Returns the size of the style stack, for example to check correct nesting.
4799 virtual size_t GetStyleStackSize() const { return m_attributeStack
.GetCount(); }
4809 bool EndBold() { return EndStyle(); }
4812 Begins using italic.
4819 bool EndItalic() { return EndStyle(); }
4822 Begins using underline.
4824 bool BeginUnderline();
4827 Ends using underline.
4829 bool EndUnderline() { return EndStyle(); }
4832 Begins using point size.
4834 bool BeginFontSize(int pointSize
);
4837 Ends using point size.
4839 bool EndFontSize() { return EndStyle(); }
4842 Begins using this font.
4844 bool BeginFont(const wxFont
& font
);
4849 bool EndFont() { return EndStyle(); }
4852 Begins using this colour.
4854 bool BeginTextColour(const wxColour
& colour
);
4857 Ends using a colour.
4859 bool EndTextColour() { return EndStyle(); }
4862 Begins using alignment.
4864 bool BeginAlignment(wxTextAttrAlignment alignment
);
4869 bool EndAlignment() { return EndStyle(); }
4872 Begins using @a leftIndent for the left indent, and optionally @a leftSubIndent for
4873 the sub-indent. Both are expressed in tenths of a millimetre.
4875 The sub-indent is an offset from the left of the paragraph, and is used for all
4876 but the first line in a paragraph. A positive value will cause the first line to appear
4877 to the left of the subsequent lines, and a negative value will cause the first line to be
4878 indented relative to the subsequent lines.
4880 bool BeginLeftIndent(int leftIndent
, int leftSubIndent
= 0);
4885 bool EndLeftIndent() { return EndStyle(); }
4888 Begins a right indent, specified in tenths of a millimetre.
4890 bool BeginRightIndent(int rightIndent
);
4895 bool EndRightIndent() { return EndStyle(); }
4898 Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
4899 in tenths of a millimetre.
4901 bool BeginParagraphSpacing(int before
, int after
);
4904 Ends paragraph spacing.
4906 bool EndParagraphSpacing() { return EndStyle(); }
4909 Begins line spacing using the specified value. @e spacing is a multiple, where
4910 10 means single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
4912 The ::wxTextAttrLineSpacing enumeration values are defined for convenience.
4914 bool BeginLineSpacing(int lineSpacing
);
4919 bool EndLineSpacing() { return EndStyle(); }
4922 Begins numbered bullet.
4924 This call will be needed for each item in the list, and the
4925 application should take care of incrementing the numbering.
4927 @a bulletNumber is a number, usually starting with 1.
4928 @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
4929 @a bulletStyle is a bitlist of the following values:
4931 wxRichTextBuffer uses indentation to render a bulleted item.
4932 The left indent is the distance between the margin and the bullet.
4933 The content of the paragraph, including the first line, starts
4934 at leftMargin + leftSubIndent.
4935 So the distance between the left edge of the bullet and the
4936 left of the actual paragraph is leftSubIndent.
4938 bool BeginNumberedBullet(int bulletNumber
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_ARABIC
|wxTEXT_ATTR_BULLET_STYLE_PERIOD
);
4941 Ends numbered bullet.
4943 bool EndNumberedBullet() { return EndStyle(); }
4946 Begins applying a symbol bullet, using a character from the current font.
4948 See BeginNumberedBullet() for an explanation of how indentation is used
4949 to render the bulleted paragraph.
4951 bool BeginSymbolBullet(const wxString
& symbol
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_SYMBOL
);
4956 bool EndSymbolBullet() { return EndStyle(); }
4959 Begins applying a standard bullet, using one of the standard bullet names
4960 (currently @c standard/circle or @c standard/square.
4962 See BeginNumberedBullet() for an explanation of how indentation is used to
4963 render the bulleted paragraph.
4965 bool BeginStandardBullet(const wxString
& bulletName
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_STANDARD
);
4968 Ends standard bullet.
4970 bool EndStandardBullet() { return EndStyle(); }
4973 Begins named character style.
4975 bool BeginCharacterStyle(const wxString
& characterStyle
);
4978 Ends named character style.
4980 bool EndCharacterStyle() { return EndStyle(); }
4983 Begins named paragraph style.
4985 bool BeginParagraphStyle(const wxString
& paragraphStyle
);
4988 Ends named character style.
4990 bool EndParagraphStyle() { return EndStyle(); }
4993 Begins named list style.
4995 Optionally, you can also pass a level and a number.
4997 bool BeginListStyle(const wxString
& listStyle
, int level
= 1, int number
= 1);
5000 Ends named character style.
5002 bool EndListStyle() { return EndStyle(); }
5005 Begins applying wxTEXT_ATTR_URL to the content.
5007 Pass a URL and optionally, a character style to apply, since it is common
5008 to mark a URL with a familiar style such as blue text with underlining.
5010 bool BeginURL(const wxString
& url
, const wxString
& characterStyle
= wxEmptyString
);
5015 bool EndURL() { return EndStyle(); }
5020 Adds an event handler.
5022 A buffer associated with a control has the control as the only event handler,
5023 but the application is free to add more if further notification is required.
5024 All handlers are notified of an event originating from the buffer, such as
5025 the replacement of a style sheet during loading.
5027 The buffer never deletes any of the event handlers, unless RemoveEventHandler()
5028 is called with @true as the second argument.
5030 bool AddEventHandler(wxEvtHandler
* handler
);
5033 Removes an event handler from the buffer's list of handlers, deleting the
5034 object if @a deleteHandler is @true.
5036 bool RemoveEventHandler(wxEvtHandler
* handler
, bool deleteHandler
= false);
5039 Clear event handlers.
5041 void ClearEventHandlers();
5044 Send event to event handlers. If sendToAll is true, will send to all event handlers,
5045 otherwise will stop at the first successful one.
5047 bool SendEvent(wxEvent
& event
, bool sendToAll
= true);
5051 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
5056 void Copy(const wxRichTextBuffer
& obj
);
5059 Assignment operator.
5061 void operator= (const wxRichTextBuffer
& obj
) { Copy(obj
); }
5066 virtual wxRichTextObject
* Clone() const { return new wxRichTextBuffer(*this); }
5069 Submits a command to insert paragraphs.
5071 bool InsertParagraphsWithUndo(long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
5074 Submits a command to insert the given text.
5076 bool InsertTextWithUndo(long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
5079 Submits a command to insert a newline.
5081 bool InsertNewlineWithUndo(long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
5084 Submits a command to insert the given image.
5086 bool InsertImageWithUndo(long pos
, const wxRichTextImageBlock
& imageBlock
, wxRichTextCtrl
* ctrl
, int flags
= 0,
5087 const wxRichTextAttr
& textAttr
= wxRichTextAttr());
5090 Submits a command to insert an object.
5092 wxRichTextObject
* InsertObjectWithUndo(long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
);
5095 Submits a command to delete this range.
5097 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
);
5102 void Modify(bool modify
= true) { m_modified
= modify
; }
5105 Returns @true if the buffer was modified.
5107 bool IsModified() const { return m_modified
; }
5111 Dumps contents of buffer for debugging purposes.
5113 virtual void Dump();
5114 virtual void Dump(wxTextOutputStream
& stream
) { wxRichTextParagraphLayoutBox::Dump(stream
); }
5118 Returns the file handlers.
5120 static wxList
& GetHandlers() { return sm_handlers
; }
5123 Adds a file handler to the end.
5125 static void AddHandler(wxRichTextFileHandler
*handler
);
5128 Inserts a file handler at the front.
5130 static void InsertHandler(wxRichTextFileHandler
*handler
);
5133 Removes a file handler.
5135 static bool RemoveHandler(const wxString
& name
);
5138 Finds a file handler by name.
5140 static wxRichTextFileHandler
*FindHandler(const wxString
& name
);
5143 Finds a file handler by extension and type.
5145 static wxRichTextFileHandler
*FindHandler(const wxString
& extension
, wxRichTextFileType imageType
);
5148 Finds a handler by filename or, if supplied, type.
5150 static wxRichTextFileHandler
*FindHandlerFilenameOrType(const wxString
& filename
,
5151 wxRichTextFileType imageType
);
5154 Finds a handler by type.
5156 static wxRichTextFileHandler
*FindHandler(wxRichTextFileType imageType
);
5159 Gets a wildcard incorporating all visible handlers. If @a types is present,
5160 it will be filled with the file type corresponding to each filter. This can be
5161 used to determine the type to pass to LoadFile given a selected filter.
5163 static wxString
GetExtWildcard(bool combine
= false, bool save
= false, wxArrayInt
* types
= NULL
);
5166 Clean up file handlers.
5168 static void CleanUpHandlers();
5171 Initialise the standard file handlers.
5172 Currently, only the plain text loading/saving handler is initialised by default.
5174 static void InitStandardHandlers();
5177 Returns the drawing handlers.
5179 static wxList
& GetDrawingHandlers() { return sm_drawingHandlers
; }
5182 Adds a drawing handler to the end.
5184 static void AddDrawingHandler(wxRichTextDrawingHandler
*handler
);
5187 Inserts a drawing handler at the front.
5189 static void InsertDrawingHandler(wxRichTextDrawingHandler
*handler
);
5192 Removes a drawing handler.
5194 static bool RemoveDrawingHandler(const wxString
& name
);
5197 Finds a drawing handler by name.
5199 static wxRichTextDrawingHandler
*FindDrawingHandler(const wxString
& name
);
5202 Clean up drawing handlers.
5204 static void CleanUpDrawingHandlers();
5207 Returns the field types.
5209 static wxRichTextFieldTypeHashMap
& GetFieldTypes() { return sm_fieldTypes
; }
5214 @see RemoveFieldType(), FindFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5217 static void AddFieldType(wxRichTextFieldType
*fieldType
);
5220 Removes a field type by name.
5222 @see AddFieldType(), FindFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5224 static bool RemoveFieldType(const wxString
& name
);
5227 Finds a field type by name.
5229 @see RemoveFieldType(), AddFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5231 static wxRichTextFieldType
*FindFieldType(const wxString
& name
);
5234 Cleans up field types.
5236 static void CleanUpFieldTypes();
5239 Returns the renderer object.
5241 static wxRichTextRenderer
* GetRenderer() { return sm_renderer
; }
5244 Sets @a renderer as the object to be used to render certain aspects of the
5245 content, such as bullets.
5247 You can override default rendering by deriving a new class from
5248 wxRichTextRenderer or wxRichTextStdRenderer, overriding one or more
5249 virtual functions, and setting an instance of the class using this function.
5251 static void SetRenderer(wxRichTextRenderer
* renderer
);
5254 Returns the minimum margin between bullet and paragraph in 10ths of a mm.
5256 static int GetBulletRightMargin() { return sm_bulletRightMargin
; }
5259 Sets the minimum margin between bullet and paragraph in 10ths of a mm.
5261 static void SetBulletRightMargin(int margin
) { sm_bulletRightMargin
= margin
; }
5264 Returns the factor to multiply by character height to get a reasonable bullet size.
5266 static float GetBulletProportion() { return sm_bulletProportion
; }
5269 Sets the factor to multiply by character height to get a reasonable bullet size.
5271 static void SetBulletProportion(float prop
) { sm_bulletProportion
= prop
; }
5274 Returns the scale factor for calculating dimensions.
5276 double GetScale() const { return m_scale
; }
5279 Sets the scale factor for calculating dimensions.
5281 void SetScale(double scale
) { m_scale
= scale
; }
5284 Returns the floating layout mode. The default is @true, where objects
5285 are laid out according to their floating status.
5287 static bool GetFloatingLayoutMode();
5290 Sets the floating layout mode. Pass @false to speed up editing by not performing
5291 floating layout. This setting affects all buffers.
5294 static void SetFloatingLayoutMode(bool mode
);
5298 /// Command processor
5299 wxCommandProcessor
* m_commandProcessor
;
5301 /// Table storing fonts
5302 wxRichTextFontTable m_fontTable
;
5304 /// Has been modified?
5307 /// Collapsed command stack
5308 int m_batchedCommandDepth
;
5310 /// Name for collapsed command
5311 wxString m_batchedCommandsName
;
5313 /// Current collapsed command accumulating actions
5314 wxRichTextCommand
* m_batchedCommand
;
5316 /// Whether to suppress undo
5319 /// Style sheet, if any
5320 wxRichTextStyleSheet
* m_styleSheet
;
5322 /// List of event handlers that will be notified of events
5323 wxList m_eventHandlers
;
5325 /// Stack of attributes for convenience functions
5326 wxList m_attributeStack
;
5328 /// Flags to be passed to handlers
5332 static wxList sm_handlers
;
5334 /// Drawing handlers
5335 static wxList sm_drawingHandlers
;
5338 static wxRichTextFieldTypeHashMap sm_fieldTypes
;
5341 static wxRichTextRenderer
* sm_renderer
;
5343 /// Minimum margin between bullet and paragraph in 10ths of a mm
5344 static int sm_bulletRightMargin
;
5346 /// Factor to multiply by character height to get a reasonable bullet size
5347 static float sm_bulletProportion
;
5349 /// Scaling factor in use: needed to calculate correct dimensions when printing
5354 @class wxRichTextCell
5356 wxRichTextCell is the cell in a table.
5359 class wxRichTextCell
: public wxRichTextBox
5365 Default constructor; optionally pass the parent object.
5368 wxRichTextCell(wxRichTextObject
* parent
= NULL
);
5374 wxRichTextCell(const wxRichTextCell
& obj
): wxRichTextBox() { Copy(obj
); }
5378 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
5380 virtual wxString
GetXMLNodeName() const { return wxT("cell"); }
5382 virtual bool CanEditProperties() const { return true; }
5384 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
5386 virtual wxString
GetPropertiesMenuLabel() const { return _("&Cell"); }
5392 virtual wxRichTextObject
* Clone() const { return new wxRichTextCell(*this); }
5394 void Copy(const wxRichTextCell
& obj
);
5400 @class wxRichTextTable
5402 wxRichTextTable represents a table with arbitrary columns and rows.
5405 class wxRichTextObjectPtrArray
;
5406 class wxRichTextObjectPtrArrayArray
;
5408 class wxRichTextTable
: public wxRichTextBox
5415 Default constructor; optionally pass the parent object.
5418 wxRichTextTable(wxRichTextObject
* parent
= NULL
);
5424 wxRichTextTable(const wxRichTextTable
& obj
): wxRichTextBox() { Copy(obj
); }
5428 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
5430 virtual wxString
GetXMLNodeName() const { return wxT("table"); }
5432 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
5434 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, const wxPoint
& position
= wxPoint(0,0), const wxSize
& parentSize
= wxDefaultSize
, wxArrayInt
* partialExtents
= NULL
) const;
5436 virtual bool DeleteRange(const wxRichTextRange
& range
);
5438 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
5440 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
5442 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
5443 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
5446 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
5447 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
5450 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
5452 virtual void CalculateRange(long start
, long& end
);
5454 // Can this object handle the selections of its children? FOr example, a table.
5455 virtual bool HandlesChildSelections() const { return true; }
5457 /// Returns a selection object specifying the selections between start and end character positions.
5458 /// For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
5459 virtual wxRichTextSelection
GetSelection(long start
, long end
) const;
5461 virtual bool CanEditProperties() const { return true; }
5463 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
5465 virtual wxString
GetPropertiesMenuLabel() const { return _("&Table"); }
5467 // Returns true if objects of this class can accept the focus, i.e. a call to SetFocusObject
5468 // is possible. For example, containers supporting text, such as a text box object, can accept the focus,
5469 // but a table can't (set the focus to individual cells instead).
5470 virtual bool AcceptsFocus() const { return false; }
5475 Returns the cells array.
5477 const wxRichTextObjectPtrArrayArray
& GetCells() const { return m_cells
; }
5480 Returns the cells array.
5482 wxRichTextObjectPtrArrayArray
& GetCells() { return m_cells
; }
5485 Returns the row count.
5487 int GetRowCount() const { return m_rowCount
; }
5490 Returns the column count.
5492 int GetColumnCount() const { return m_colCount
; }
5495 Returns the cell at the given row/column position.
5497 virtual wxRichTextCell
* GetCell(int row
, int col
) const;
5500 Returns the cell at the given character position (in the range of the table).
5502 virtual wxRichTextCell
* GetCell(long pos
) const;
5505 Returns the row/column for a given character position.
5507 virtual bool GetCellRowColumnPosition(long pos
, int& row
, int& col
) const;
5510 Returns the coordinates of the cell with keyboard focus, or (-1,-1) if none.
5512 virtual wxPosition
GetFocusedCell() const;
5520 virtual void ClearTable();
5523 Creates a table of the given dimensions.
5526 virtual bool CreateTable(int rows
, int cols
);
5529 Sets the attributes for the cells specified by the selection.
5532 virtual bool SetCellStyle(const wxRichTextSelection
& selection
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
5535 Deletes rows from the given row position.
5538 virtual bool DeleteRows(int startRow
, int noRows
= 1);
5541 Deletes columns from the given column position.
5544 virtual bool DeleteColumns(int startCol
, int noCols
= 1);
5547 Adds rows from the given row position.
5550 virtual bool AddRows(int startRow
, int noRows
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
5553 Adds columns from the given column position.
5556 virtual bool AddColumns(int startCol
, int noCols
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
5558 // Makes a clone of this object.
5559 virtual wxRichTextObject
* Clone() const { return new wxRichTextTable(*this); }
5561 // Copies this object.
5562 void Copy(const wxRichTextTable
& obj
);
5569 // An array of rows, each of which is a wxRichTextObjectPtrArray containing
5570 // the cell objects. The cell objects are also children of this object.
5571 // Problem: if boxes are immediate children of a box, this will cause problems
5572 // with wxRichTextParagraphLayoutBox functions (and functions elsewhere) that
5573 // expect to find just paragraphs. May have to adjust the way we handle the
5574 // hierarchy to accept non-paragraph objects in a paragraph layout box.
5575 // We'll be overriding much wxRichTextParagraphLayoutBox functionality so this
5576 // may not be such a problem. Perhaps the table should derive from a different
5578 wxRichTextObjectPtrArrayArray m_cells
;
5583 The command identifiers for Do/Undo.
5586 enum wxRichTextCommandId
5590 wxRICHTEXT_CHANGE_ATTRIBUTES
,
5591 wxRICHTEXT_CHANGE_STYLE
,
5592 wxRICHTEXT_CHANGE_OBJECT
5596 @class wxRichTextObjectAddress
5598 A class for specifying an object anywhere in an object hierarchy,
5599 without using a pointer, necessary since wxRTC commands may delete
5600 and recreate sub-objects so physical object addresses change. An array
5601 of positions (one per hierarchy level) is used.
5603 @library{wxrichtext}
5606 @see wxRichTextCommand
5609 class wxRichTextObjectAddress
5613 Creates the address given a container and an object.
5615 wxRichTextObjectAddress(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
) { Create(topLevelContainer
, obj
); }
5618 wxRichTextObjectAddress() { Init(); }
5621 wxRichTextObjectAddress(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5628 void Copy(const wxRichTextObjectAddress
& address
) { m_address
= address
.m_address
; }
5631 Assignment operator.
5633 void operator=(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5636 Returns the object specified by the address, given a top level container.
5638 wxRichTextObject
* GetObject(wxRichTextParagraphLayoutBox
* topLevelContainer
) const;
5641 Creates the address given a container and an object.
5643 bool Create(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
);
5646 Returns the array of integers representing the object address.
5648 wxArrayInt
& GetAddress() { return m_address
; }
5651 Returns the array of integers representing the object address.
5653 const wxArrayInt
& GetAddress() const { return m_address
; }
5656 Sets the address from an array of integers.
5658 void SetAddress(const wxArrayInt
& address
) { m_address
= address
; }
5662 wxArrayInt m_address
;
5665 class wxRichTextAction
;
5668 @class wxRichTextCommand
5670 Implements a command on the undo/redo stack. A wxRichTextCommand object contains one or more wxRichTextAction
5671 objects, allowing aggregation of a number of operations into one command.
5673 @library{wxrichtext}
5676 @see wxRichTextAction
5679 class wxRichTextCommand
: public wxCommand
5683 Constructor for one action.
5685 wxRichTextCommand(const wxString
& name
, wxRichTextCommandId id
, wxRichTextBuffer
* buffer
,
5686 wxRichTextParagraphLayoutBox
* container
, wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5689 Constructor for multiple actions.
5691 wxRichTextCommand(const wxString
& name
);
5693 virtual ~wxRichTextCommand();
5696 Performs the command.
5706 Adds an action to the action list.
5708 void AddAction(wxRichTextAction
* action
);
5711 Clears the action list.
5713 void ClearActions();
5716 Returns the action list.
5718 wxList
& GetActions() { return m_actions
; }
5726 @class wxRichTextAction
5728 Implements a part of a command.
5730 @library{wxrichtext}
5733 @see wxRichTextCommand
5736 class wxRichTextAction
: public wxObject
5740 Constructor. @a buffer is the top-level buffer, while @a container is the object within
5741 which the action is taking place. In the simplest case, they are the same.
5743 wxRichTextAction(wxRichTextCommand
* cmd
, const wxString
& name
, wxRichTextCommandId id
,
5744 wxRichTextBuffer
* buffer
, wxRichTextParagraphLayoutBox
* container
,
5745 wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5747 virtual ~wxRichTextAction();
5750 Performs the action.
5760 Updates the control appearance, optimizing if possible given information from the call to Layout.
5762 void UpdateAppearance(long caretPosition
, bool sendUpdateEvent
= false,
5763 wxArrayInt
* optimizationLineCharPositions
= NULL
, wxArrayInt
* optimizationLineYPositions
= NULL
, bool isDoCmd
= true);
5766 Replaces the buffer paragraphs with the given fragment.
5768 void ApplyParagraphs(const wxRichTextParagraphLayoutBox
& fragment
);
5771 Returns the new fragments.
5773 wxRichTextParagraphLayoutBox
& GetNewParagraphs() { return m_newParagraphs
; }
5776 Returns the old fragments.
5778 wxRichTextParagraphLayoutBox
& GetOldParagraphs() { return m_oldParagraphs
; }
5781 Returns the attributes, for single-object commands.
5783 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
5786 Returns the object to replace the one at the position defined by the container address
5787 and the action's range start position.
5789 wxRichTextObject
* GetObject() const { return m_object
; }
5792 Stores the object to replace the one at the position defined by the container address
5793 without making an address for it
5795 @see SetObject(), MakeObject()).
5797 void StoreObject(wxRichTextObject
* obj
) { m_object
= obj
; }
5800 Sets the object to replace the one at the position defined by the container address
5801 and the action's range start position.
5803 void SetObject(wxRichTextObject
* obj
) { m_object
= obj
; m_objectAddress
.Create(m_buffer
, m_object
); }
5806 Makes an address from the given object.
5808 void MakeObject(wxRichTextObject
* obj
) { m_objectAddress
.Create(m_buffer
, obj
); }
5811 Calculate arrays for refresh optimization.
5813 void CalculateRefreshOptimizations(wxArrayInt
& optimizationLineCharPositions
, wxArrayInt
& optimizationLineYPositions
);
5816 Sets the position used for e.g. insertion.
5818 void SetPosition(long pos
) { m_position
= pos
; }
5821 Returns the position used for e.g. insertion.
5823 long GetPosition() const { return m_position
; }
5826 Sets the range for e.g. deletion.
5828 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
5831 Returns the range for e.g. deletion.
5833 const wxRichTextRange
& GetRange() const { return m_range
; }
5836 Returns the address (nested position) of the container within the buffer being manipulated.
5838 wxRichTextObjectAddress
& GetContainerAddress() { return m_containerAddress
; }
5841 Returns the address (nested position) of the container within the buffer being manipulated.
5843 const wxRichTextObjectAddress
& GetContainerAddress() const { return m_containerAddress
; }
5846 Sets the address (nested position) of the container within the buffer being manipulated.
5848 void SetContainerAddress(const wxRichTextObjectAddress
& address
) { m_containerAddress
= address
; }
5851 Sets the address (nested position) of the container within the buffer being manipulated.
5853 void SetContainerAddress(wxRichTextParagraphLayoutBox
* container
, wxRichTextObject
* obj
) { m_containerAddress
.Create(container
, obj
); }
5856 Returns the container that this action refers to, using the container address and top-level buffer.
5858 wxRichTextParagraphLayoutBox
* GetContainer() const;
5861 Returns the action name.
5863 const wxString
& GetName() const { return m_name
; }
5870 wxRichTextBuffer
* m_buffer
;
5872 // The address (nested position) of the container being manipulated.
5873 // This is necessary because objects are deleted, and we can't
5874 // therefore store actual pointers.
5875 wxRichTextObjectAddress m_containerAddress
;
5878 wxRichTextCtrl
* m_ctrl
;
5880 // Stores the new paragraphs
5881 wxRichTextParagraphLayoutBox m_newParagraphs
;
5883 // Stores the old paragraphs
5884 wxRichTextParagraphLayoutBox m_oldParagraphs
;
5886 // Stores an object to replace the one at the position
5887 // defined by the container address and the action's range start position.
5888 wxRichTextObject
* m_object
;
5890 // Stores the attributes
5891 wxRichTextAttr m_attributes
;
5893 // The address of the object being manipulated (used for changing an individual object or its attributes)
5894 wxRichTextObjectAddress m_objectAddress
;
5896 // Stores the old attributes
5897 // wxRichTextAttr m_oldAttributes;
5899 // The affected range
5900 wxRichTextRange m_range
;
5902 // The insertion point for this command
5905 // Ignore 1st 'Do' operation because we already did it
5908 // The command identifier
5909 wxRichTextCommandId m_cmdId
;
5916 // Include style sheet when loading and saving
5917 #define wxRICHTEXT_HANDLER_INCLUDE_STYLESHEET 0x0001
5919 // Save images to memory file system in HTML handler
5920 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY 0x0010
5922 // Save images to files in HTML handler
5923 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_FILES 0x0020
5925 // Save images as inline base64 data in HTML handler
5926 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_BASE64 0x0040
5928 // Don't write header and footer (or BODY), so we can include the fragment
5929 // in a larger document
5930 #define wxRICHTEXT_HANDLER_NO_HEADER_FOOTER 0x0080
5932 // Convert the more common face names to names that will work on the current platform
5933 // in a larger document
5934 #define wxRICHTEXT_HANDLER_CONVERT_FACENAMES 0x0100
5937 @class wxRichTextFileHandler
5939 The base class for file handlers.
5941 @library{wxrichtext}
5944 @see wxRichTextBuffer, wxRichTextCtrl
5947 class wxRichTextFileHandler
: public wxObject
5951 Creates a file handler object.
5953 wxRichTextFileHandler(const wxString
& name
= wxEmptyString
, const wxString
& ext
= wxEmptyString
, int type
= 0)
5954 : m_name(name
), m_extension(ext
), m_type(type
), m_flags(0), m_visible(true)
5958 Loads the buffer from a stream.
5959 Not all handlers will implement file loading.
5961 bool LoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
)
5962 { return DoLoadFile(buffer
, stream
); }
5965 Saves the buffer to a stream.
5966 Not all handlers will implement file saving.
5968 bool SaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
)
5969 { return DoSaveFile(buffer
, stream
); }
5972 Loads the buffer from a file.
5974 virtual bool LoadFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5977 Saves the buffer to a file.
5979 virtual bool SaveFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5982 Returns @true if we handle this filename (if using files). By default, checks the extension.
5984 virtual bool CanHandle(const wxString
& filename
) const;
5987 Returns @true if we can save using this handler.
5989 virtual bool CanSave() const { return false; }
5992 Returns @true if we can load using this handler.
5994 virtual bool CanLoad() const { return false; }
5997 Returns @true if this handler should be visible to the user.
5999 virtual bool IsVisible() const { return m_visible
; }
6002 Sets whether the handler should be visible to the user (via the application's
6003 load and save dialogs).
6005 virtual void SetVisible(bool visible
) { m_visible
= visible
; }
6008 Sets the name of the handler.
6010 void SetName(const wxString
& name
) { m_name
= name
; }
6013 Returns the name of the handler.
6015 wxString
GetName() const { return m_name
; }
6018 Sets the default extension to recognise.
6020 void SetExtension(const wxString
& ext
) { m_extension
= ext
; }
6023 Returns the default extension to recognise.
6025 wxString
GetExtension() const { return m_extension
; }
6028 Sets the handler type.
6030 void SetType(int type
) { m_type
= type
; }
6033 Returns the handler type.
6035 int GetType() const { return m_type
; }
6038 Sets flags that change the behaviour of loading or saving.
6039 See the documentation for each handler class to see what flags are relevant
6042 You call this function directly if you are using a file handler explicitly
6043 (without going through the text control or buffer LoadFile/SaveFile API).
6044 Or, you can call the control or buffer's SetHandlerFlags function to set
6045 the flags that will be used for subsequent load and save operations.
6047 void SetFlags(int flags
) { m_flags
= flags
; }
6050 Returns flags controlling how loading and saving is done.
6052 int GetFlags() const { return m_flags
; }
6055 Sets the encoding to use when saving a file. If empty, a suitable encoding is chosen.
6057 void SetEncoding(const wxString
& encoding
) { m_encoding
= encoding
; }
6060 Returns the encoding to use when saving a file. If empty, a suitable encoding is chosen.
6062 const wxString
& GetEncoding() const { return m_encoding
; }
6067 Override to load content from @a stream into @a buffer.
6069 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
) = 0;
6072 Override to save content to @a stream from @a buffer.
6074 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
) = 0;
6077 wxString m_encoding
;
6078 wxString m_extension
;
6085 @class wxRichTextPlainTextHandler
6087 Implements saving a buffer to plain text.
6089 @library{wxrichtext}
6092 @see wxRichTextFileHandler, wxRichTextBuffer, wxRichTextCtrl
6095 class wxRichTextPlainTextHandler
: public wxRichTextFileHandler
6098 wxRichTextPlainTextHandler(const wxString
& name
= wxT("Text"),
6099 const wxString
& ext
= wxT("txt"),
6100 wxRichTextFileType type
= wxRICHTEXT_TYPE_TEXT
)
6101 : wxRichTextFileHandler(name
, ext
, type
)
6104 // Can we save using this handler?
6105 virtual bool CanSave() const { return true; }
6107 // Can we load using this handler?
6108 virtual bool CanLoad() const { return true; }
6112 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
);
6113 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
);
6118 @class wxRichTextDrawingHandler
6120 The base class for custom drawing handlers.
6121 Currently, drawing handlers can provide virtual attributes.
6123 @library{wxrichtext}
6126 @see wxRichTextBuffer, wxRichTextCtrl
6129 class wxRichTextDrawingHandler
: public wxObject
6133 Creates a drawing handler object.
6135 wxRichTextDrawingHandler(const wxString
& name
= wxEmptyString
)
6140 Returns @true if this object has virtual attributes that we can provide.
6142 virtual bool HasVirtualAttributes(wxRichTextObject
* obj
) const = 0;
6145 Provides virtual attributes that we can provide.
6147 virtual bool GetVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const = 0;
6150 Gets the count for mixed virtual attributes for individual positions within the object.
6151 For example, individual characters within a text object may require special highlighting.
6153 virtual int GetVirtualSubobjectAttributesCount(wxRichTextObject
* obj
) const = 0;
6156 Gets the mixed virtual attributes for individual positions within the object.
6157 For example, individual characters within a text object may require special highlighting.
6158 Returns the number of virtual attributes found.
6160 virtual int GetVirtualSubobjectAttributes(wxRichTextObject
* obj
, wxArrayInt
& positions
, wxRichTextAttrArray
& attributes
) const = 0;
6163 Do we have virtual text for this object? Virtual text allows an application
6164 to replace characters in an object for editing and display purposes, for example
6165 for highlighting special characters.
6167 virtual bool HasVirtualText(const wxRichTextPlainText
* obj
) const = 0;
6170 Gets the virtual text for this object.
6172 virtual bool GetVirtualText(const wxRichTextPlainText
* obj
, wxString
& text
) const = 0;
6175 Sets the name of the handler.
6177 void SetName(const wxString
& name
) { m_name
= name
; }
6180 Returns the name of the handler.
6182 wxString
GetName() const { return m_name
; }
6191 @class wxRichTextBufferDataObject
6193 Implements a rich text data object for clipboard transfer.
6195 @library{wxrichtext}
6198 @see wxDataObjectSimple, wxRichTextBuffer, wxRichTextCtrl
6201 class wxRichTextBufferDataObject
: public wxDataObjectSimple
6205 The constructor doesn't copy the pointer, so it shouldn't go away while this object
6208 wxRichTextBufferDataObject(wxRichTextBuffer
* richTextBuffer
= NULL
);
6209 virtual ~wxRichTextBufferDataObject();
6212 After a call to this function, the buffer is owned by the caller and it
6213 is responsible for deleting it.
6215 wxRichTextBuffer
* GetRichTextBuffer();
6218 Returns the id for the new data format.
6220 static const wxChar
* GetRichTextBufferFormatId() { return ms_richTextBufferFormatId
; }
6222 // base class pure virtuals
6224 virtual wxDataFormat
GetPreferredFormat(Direction dir
) const;
6225 virtual size_t GetDataSize() const;
6226 virtual bool GetDataHere(void *pBuf
) const;
6227 virtual bool SetData(size_t len
, const void *buf
);
6231 virtual size_t GetDataSize(const wxDataFormat
&) const { return GetDataSize(); }
6232 virtual bool GetDataHere(const wxDataFormat
&, void *buf
) const { return GetDataHere(buf
); }
6233 virtual bool SetData(const wxDataFormat
&, size_t len
, const void *buf
) { return SetData(len
, buf
); }
6236 wxDataFormat m_formatRichTextBuffer
; // our custom format
6237 wxRichTextBuffer
* m_richTextBuffer
; // our data
6238 static const wxChar
* ms_richTextBufferFormatId
; // our format id
6243 @class wxRichTextRenderer
6245 This class isolates some common drawing functionality.
6247 @library{wxrichtext}
6250 @see wxRichTextBuffer, wxRichTextCtrl
6253 class wxRichTextRenderer
: public wxObject
6259 wxRichTextRenderer() {}
6260 virtual ~wxRichTextRenderer() {}
6263 Draws a standard bullet, as specified by the value of GetBulletName. This function should be overridden.
6265 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
6268 Draws a bullet that can be described by text, such as numbered or symbol bullets. This function should be overridden.
6270 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
) = 0;
6273 Draws a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName. This function should be overridden.
6275 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
6278 Enumerate the standard bullet names currently supported. This function should be overridden.
6280 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
) = 0;
6284 @class wxRichTextStdRenderer
6286 The standard renderer for drawing bullets.
6288 @library{wxrichtext}
6291 @see wxRichTextRenderer, wxRichTextBuffer, wxRichTextCtrl
6294 class wxRichTextStdRenderer
: public wxRichTextRenderer
6300 wxRichTextStdRenderer() {}
6302 // Draw a standard bullet, as specified by the value of GetBulletName
6303 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
6305 // Draw a bullet that can be described by text, such as numbered or symbol bullets
6306 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
);
6308 // Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
6309 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
6311 // Enumerate the standard bullet names currently supported
6312 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
);
6320 inline bool wxRichTextHasStyle(int flags
, int style
)
6322 return ((flags
& style
) == style
);
6325 /// Compare two attribute objects
6326 bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6327 bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6329 /// Apply one style to another
6330 bool wxRichTextApplyStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
* compareWith
= NULL
);
6332 // Remove attributes
6333 bool wxRichTextRemoveStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
);
6335 /// Combine two bitlists
6336 bool wxRichTextCombineBitlists(int& valueA
, int valueB
, int& flagsA
, int flagsB
);
6338 /// Compare two bitlists
6339 bool wxRichTextBitlistsEqPartial(int valueA
, int valueB
, int flags
);
6341 /// Split into paragraph and character styles
6342 bool wxRichTextSplitParaCharStyles(const wxRichTextAttr
& style
, wxRichTextAttr
& parStyle
, wxRichTextAttr
& charStyle
);
6345 bool wxRichTextTabsEq(const wxArrayInt
& tabs1
, const wxArrayInt
& tabs2
);
6347 /// Convert a decimal to Roman numerals
6348 wxString
wxRichTextDecimalToRoman(long n
);
6350 // Collects the attributes that are common to a range of content, building up a note of
6351 // which attributes are absent in some objects and which clash in some objects.
6352 void wxTextAttrCollectCommonAttributes(wxTextAttr
& currentStyle
, const wxTextAttr
& attr
, wxTextAttr
& clashingAttr
, wxTextAttr
& absentAttr
);
6354 void wxRichTextModuleInit();