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 WXDLLIMPEXP_RICHTEXT
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
84 Flags for GetRangeSize.
87 #define wxRICHTEXT_FORMATTED 0x01
88 #define wxRICHTEXT_UNFORMATTED 0x02
89 #define wxRICHTEXT_CACHE_SIZE 0x04
90 #define wxRICHTEXT_HEIGHT_ONLY 0x08
93 Flags for SetStyle/SetListStyle.
96 #define wxRICHTEXT_SETSTYLE_NONE 0x00
98 // Specifies that this operation should be undoable
99 #define wxRICHTEXT_SETSTYLE_WITH_UNDO 0x01
101 // Specifies that the style should not be applied if the
102 // combined style at this point is already the style in question.
103 #define wxRICHTEXT_SETSTYLE_OPTIMIZE 0x02
105 // Specifies that the style should only be applied to paragraphs,
106 // and not the content. This allows content styling to be
107 // preserved independently from that of e.g. a named paragraph style.
108 #define wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY 0x04
110 // Specifies that the style should only be applied to characters,
111 // and not the paragraph. This allows content styling to be
112 // preserved independently from that of e.g. a named paragraph style.
113 #define wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY 0x08
115 // For SetListStyle only: specifies starting from the given number, otherwise
116 // deduces number from existing attributes
117 #define wxRICHTEXT_SETSTYLE_RENUMBER 0x10
119 // For SetListStyle only: specifies the list level for all paragraphs, otherwise
120 // the current indentation will be used
121 #define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20
123 // Resets the existing style before applying the new style
124 #define wxRICHTEXT_SETSTYLE_RESET 0x40
126 // Removes the given style instead of applying it
127 #define wxRICHTEXT_SETSTYLE_REMOVE 0x80
130 Flags for SetProperties.
133 #define wxRICHTEXT_SETPROPERTIES_NONE 0x00
135 // Specifies that this operation should be undoable
136 #define wxRICHTEXT_SETPROPERTIES_WITH_UNDO 0x01
138 // Specifies that the properties should only be applied to paragraphs,
139 // and not the content.
140 #define wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY 0x02
142 // Specifies that the properties should only be applied to characters,
143 // and not the paragraph.
144 #define wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY 0x04
146 // Resets the existing properties before applying the new properties.
147 #define wxRICHTEXT_SETPROPERTIES_RESET 0x08
149 // Removes the given properties instead of applying them.
150 #define wxRICHTEXT_SETPROPERTIES_REMOVE 0x10
153 Flags for object insertion.
156 #define wxRICHTEXT_INSERT_NONE 0x00
157 #define wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE 0x01
158 #define wxRICHTEXT_INSERT_INTERACTIVE 0x02
160 // A special flag telling the buffer to keep the first paragraph style
161 // as-is, when deleting a paragraph marker. In future we might pass a
162 // flag to InsertFragment and DeleteRange to indicate the appropriate mode.
163 #define wxTEXT_ATTR_KEEP_FIRST_PARA_STYLE 0x10000000
166 Default superscript/subscript font multiplication factor.
169 #define wxSCRIPT_MUL_FACTOR 1.5
172 The type for wxTextAttrDimension flags.
174 typedef unsigned short wxTextAttrDimensionFlags
;
177 Miscellaneous text box flags
179 enum wxTextBoxAttrFlags
181 wxTEXT_BOX_ATTR_FLOAT
= 0x00000001,
182 wxTEXT_BOX_ATTR_CLEAR
= 0x00000002,
183 wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
= 0x00000004,
184 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
= 0x00000008
188 Whether a value is present, used in dimension flags.
190 enum wxTextAttrValueFlags
192 wxTEXT_ATTR_VALUE_VALID
= 0x1000,
193 wxTEXT_ATTR_VALUE_VALID_MASK
= 0x1000
197 Units, included in the dimension value.
201 wxTEXT_ATTR_UNITS_TENTHS_MM
= 0x0001,
202 wxTEXT_ATTR_UNITS_PIXELS
= 0x0002,
203 wxTEXT_ATTR_UNITS_PERCENTAGE
= 0x0004,
204 wxTEXT_ATTR_UNITS_POINTS
= 0x0008,
206 wxTEXT_ATTR_UNITS_MASK
= 0x000F
210 Position alternatives, included in the dimension flags.
212 enum wxTextBoxAttrPosition
214 wxTEXT_BOX_ATTR_POSITION_STATIC
= 0x0000, // Default is static, i.e. as per normal layout
215 wxTEXT_BOX_ATTR_POSITION_RELATIVE
= 0x0010, // Relative to the relevant edge
216 wxTEXT_BOX_ATTR_POSITION_ABSOLUTE
= 0x0020,
218 wxTEXT_BOX_ATTR_POSITION_MASK
= 0x00F0
222 @class wxTextAttrDimension
224 A class representing a rich text dimension, including units and position.
229 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimensions
232 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimension
238 wxTextAttrDimension() { Reset(); }
240 Constructor taking value and units flag.
242 wxTextAttrDimension(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { m_value
= value
; m_flags
= units
|wxTEXT_ATTR_VALUE_VALID
; }
245 Resets the dimension value and flags.
247 void Reset() { m_value
= 0; m_flags
= 0; }
250 Partial equality test.
252 bool EqPartial(const wxTextAttrDimension
& dim
) const;
254 /** Apply the dimension, but not those identical to @a compareWith if present.
256 bool Apply(const wxTextAttrDimension
& dim
, const wxTextAttrDimension
* compareWith
= NULL
);
258 /** Collects the attributes that are common to a range of content, building up a note of
259 which attributes are absent in some objects and which clash in some objects.
261 void CollectCommonAttributes(const wxTextAttrDimension
& attr
, wxTextAttrDimension
& clashingAttr
, wxTextAttrDimension
& absentAttr
);
266 bool operator==(const wxTextAttrDimension
& dim
) const { return m_value
== dim
.m_value
&& m_flags
== dim
.m_flags
; }
269 Returns the integer value of the dimension.
271 int GetValue() const { return m_value
; }
274 Returns the floating-pointing value of the dimension in mm.
277 float GetValueMM() const { return float(m_value
) / 10.0; }
280 Sets the value of the dimension in mm.
282 void SetValueMM(float value
) { m_value
= (int) ((value
* 10.0) + 0.5); m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
285 Sets the integer value of the dimension.
287 void SetValue(int value
) { m_value
= value
; m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
290 Sets the integer value of the dimension, passing dimension flags.
292 void SetValue(int value
, wxTextAttrDimensionFlags flags
) { SetValue(value
); m_flags
= flags
; }
295 Sets the integer value and units.
297 void SetValue(int value
, wxTextAttrUnits units
) { m_value
= value
; m_flags
= units
| wxTEXT_ATTR_VALUE_VALID
; }
302 void SetValue(const wxTextAttrDimension
& dim
) { (*this) = dim
; }
305 Gets the units of the dimension.
307 wxTextAttrUnits
GetUnits() const { return (wxTextAttrUnits
) (m_flags
& wxTEXT_ATTR_UNITS_MASK
); }
310 Sets the units of the dimension.
312 void SetUnits(wxTextAttrUnits units
) { m_flags
&= ~wxTEXT_ATTR_UNITS_MASK
; m_flags
|= units
; }
315 Gets the position flags.
317 wxTextBoxAttrPosition
GetPosition() const { return (wxTextBoxAttrPosition
) (m_flags
& wxTEXT_BOX_ATTR_POSITION_MASK
); }
320 Sets the position flags.
322 void SetPosition(wxTextBoxAttrPosition pos
) { m_flags
&= ~wxTEXT_BOX_ATTR_POSITION_MASK
; m_flags
|= pos
; }
325 Returns @true if the dimension is valid.
327 bool IsValid() const { return (m_flags
& wxTEXT_ATTR_VALUE_VALID
) != 0; }
332 void SetValid(bool b
) { m_flags
&= ~wxTEXT_ATTR_VALUE_VALID_MASK
; m_flags
|= (b
? wxTEXT_ATTR_VALUE_VALID
: 0); }
335 Gets the dimension flags.
337 wxTextAttrDimensionFlags
GetFlags() const { return m_flags
; }
340 Sets the dimension flags.
342 void SetFlags(wxTextAttrDimensionFlags flags
) { m_flags
= flags
; }
345 wxTextAttrDimensionFlags m_flags
;
349 @class wxTextAttrDimensions
350 A class for left, right, top and bottom dimensions.
355 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
358 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensions
364 wxTextAttrDimensions() {}
367 Resets the value and flags for all dimensions.
369 void Reset() { m_left
.Reset(); m_top
.Reset(); m_right
.Reset(); m_bottom
.Reset(); }
374 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
; }
377 Partial equality test.
380 bool EqPartial(const wxTextAttrDimensions
& dims
) const;
383 Apply border to 'this', but not if the same as @a compareWith.
386 bool Apply(const wxTextAttrDimensions
& dims
, const wxTextAttrDimensions
* compareWith
= NULL
);
389 Collects the attributes that are common to a range of content, building up a note of
390 which attributes are absent in some objects and which clash in some objects.
393 void CollectCommonAttributes(const wxTextAttrDimensions
& attr
, wxTextAttrDimensions
& clashingAttr
, wxTextAttrDimensions
& absentAttr
);
396 Remove specified attributes from this object.
398 bool RemoveStyle(const wxTextAttrDimensions
& attr
);
401 Gets the left dimension.
403 const wxTextAttrDimension
& GetLeft() const { return m_left
; }
404 wxTextAttrDimension
& GetLeft() { return m_left
; }
407 Gets the right dimension.
410 const wxTextAttrDimension
& GetRight() const { return m_right
; }
411 wxTextAttrDimension
& GetRight() { return m_right
; }
414 Gets the top dimension.
417 const wxTextAttrDimension
& GetTop() const { return m_top
; }
418 wxTextAttrDimension
& GetTop() { return m_top
; }
421 Gets the bottom dimension.
424 const wxTextAttrDimension
& GetBottom() const { return m_bottom
; }
425 wxTextAttrDimension
& GetBottom() { return m_bottom
; }
428 Are all dimensions valid?
431 bool IsValid() const { return m_left
.IsValid() && m_top
.IsValid() && m_right
.IsValid() && m_bottom
.IsValid(); }
433 wxTextAttrDimension m_left
;
434 wxTextAttrDimension m_top
;
435 wxTextAttrDimension m_right
;
436 wxTextAttrDimension m_bottom
;
440 @class wxTextAttrSize
441 A class for representing width and height.
446 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
449 class WXDLLIMPEXP_RICHTEXT wxTextAttrSize
458 Resets the width and height dimensions.
460 void Reset() { m_width
.Reset(); m_height
.Reset(); }
465 bool operator==(const wxTextAttrSize
& size
) const { return m_width
== size
.m_width
&& m_height
== size
.m_height
; }
468 Partial equality test.
470 bool EqPartial(const wxTextAttrSize
& dims
) const;
473 Apply border to this object, but not if the same as @a compareWith.
475 bool Apply(const wxTextAttrSize
& dims
, const wxTextAttrSize
* compareWith
= NULL
);
478 Collects the attributes that are common to a range of content, building up a note of
479 which attributes are absent in some objects and which clash in some objects.
481 void CollectCommonAttributes(const wxTextAttrSize
& attr
, wxTextAttrSize
& clashingAttr
, wxTextAttrSize
& absentAttr
);
484 Removes the specified attributes from this object.
486 bool RemoveStyle(const wxTextAttrSize
& attr
);
491 wxTextAttrDimension
& GetWidth() { return m_width
; }
492 const wxTextAttrDimension
& GetWidth() const { return m_width
; }
497 void SetWidth(int value
, wxTextAttrDimensionFlags flags
) { m_width
.SetValue(value
, flags
); }
502 void SetWidth(int value
, wxTextAttrUnits units
) { m_width
.SetValue(value
, units
); }
507 void SetWidth(const wxTextAttrDimension
& dim
) { m_width
.SetValue(dim
); }
512 wxTextAttrDimension
& GetHeight() { return m_height
; }
513 const wxTextAttrDimension
& GetHeight() const { return m_height
; }
518 void SetHeight(int value
, wxTextAttrDimensionFlags flags
) { m_height
.SetValue(value
, flags
); }
523 void SetHeight(int value
, wxTextAttrUnits units
) { m_height
.SetValue(value
, units
); }
528 void SetHeight(const wxTextAttrDimension
& dim
) { m_height
.SetValue(dim
); }
533 bool IsValid() const { return m_width
.IsValid() && m_height
.IsValid(); }
535 wxTextAttrDimension m_width
;
536 wxTextAttrDimension m_height
;
540 @class wxTextAttrDimensionConverter
541 A class to make it easier to convert dimensions.
546 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
549 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensionConverter
555 wxTextAttrDimensionConverter(wxDC
& dc
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
559 wxTextAttrDimensionConverter(int ppi
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
562 Gets the pixel size for the given dimension.
564 int GetPixels(const wxTextAttrDimension
& dim
, int direction
= wxHORIZONTAL
) const;
566 Gets the mm size for the given dimension.
568 int GetTenthsMM(const wxTextAttrDimension
& dim
) const;
571 Converts tenths of a mm to pixels.
573 int ConvertTenthsMMToPixels(int units
) const;
575 Converts pixels to tenths of a mm.
577 int ConvertPixelsToTenthsMM(int pixels
) const;
585 Border styles, used with wxTextAttrBorder.
587 enum wxTextAttrBorderStyle
589 wxTEXT_BOX_ATTR_BORDER_NONE
= 0,
590 wxTEXT_BOX_ATTR_BORDER_SOLID
= 1,
591 wxTEXT_BOX_ATTR_BORDER_DOTTED
= 2,
592 wxTEXT_BOX_ATTR_BORDER_DASHED
= 3,
593 wxTEXT_BOX_ATTR_BORDER_DOUBLE
= 4,
594 wxTEXT_BOX_ATTR_BORDER_GROOVE
= 5,
595 wxTEXT_BOX_ATTR_BORDER_RIDGE
= 6,
596 wxTEXT_BOX_ATTR_BORDER_INSET
= 7,
597 wxTEXT_BOX_ATTR_BORDER_OUTSET
= 8
601 Border style presence flags, used with wxTextAttrBorder.
603 enum wxTextAttrBorderFlags
605 wxTEXT_BOX_ATTR_BORDER_STYLE
= 0x0001,
606 wxTEXT_BOX_ATTR_BORDER_COLOUR
= 0x0002
610 Border width symbols for qualitative widths, used with wxTextAttrBorder.
612 enum wxTextAttrBorderWidth
614 wxTEXT_BOX_ATTR_BORDER_THIN
= -1,
615 wxTEXT_BOX_ATTR_BORDER_MEDIUM
= -2,
616 wxTEXT_BOX_ATTR_BORDER_THICK
= -3
622 enum wxTextBoxAttrFloatStyle
624 wxTEXT_BOX_ATTR_FLOAT_NONE
= 0,
625 wxTEXT_BOX_ATTR_FLOAT_LEFT
= 1,
626 wxTEXT_BOX_ATTR_FLOAT_RIGHT
= 2
632 enum wxTextBoxAttrClearStyle
634 wxTEXT_BOX_ATTR_CLEAR_NONE
= 0,
635 wxTEXT_BOX_ATTR_CLEAR_LEFT
= 1,
636 wxTEXT_BOX_ATTR_CLEAR_RIGHT
= 2,
637 wxTEXT_BOX_ATTR_CLEAR_BOTH
= 3
641 Collapse mode styles. TODO: can they be switched on per side?
643 enum wxTextBoxAttrCollapseMode
645 wxTEXT_BOX_ATTR_COLLAPSE_NONE
= 0,
646 wxTEXT_BOX_ATTR_COLLAPSE_FULL
= 1
650 Vertical alignment values.
652 enum wxTextBoxAttrVerticalAlignment
654 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_NONE
= 0,
655 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_TOP
= 1,
656 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_CENTRE
= 2,
657 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_BOTTOM
= 3
661 @class wxTextAttrBorder
662 A class representing a rich text object border.
667 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorders
670 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorder
676 wxTextAttrBorder() { Reset(); }
681 bool operator==(const wxTextAttrBorder
& border
) const
683 return m_flags
== border
.m_flags
&& m_borderStyle
== border
.m_borderStyle
&&
684 m_borderColour
== border
.m_borderColour
&& m_borderWidth
== border
.m_borderWidth
;
688 Resets the border style, colour, width and flags.
690 void Reset() { m_borderStyle
= 0; m_borderColour
= 0; m_flags
= 0; m_borderWidth
.Reset(); }
693 Partial equality test.
695 bool EqPartial(const wxTextAttrBorder
& border
) const;
698 Applies the border to this object, but not if the same as @a compareWith.
701 bool Apply(const wxTextAttrBorder
& border
, const wxTextAttrBorder
* compareWith
= NULL
);
704 Removes the specified attributes from this object.
706 bool RemoveStyle(const wxTextAttrBorder
& attr
);
709 Collects the attributes that are common to a range of content, building up a note of
710 which attributes are absent in some objects and which clash in some objects.
712 void CollectCommonAttributes(const wxTextAttrBorder
& attr
, wxTextAttrBorder
& clashingAttr
, wxTextAttrBorder
& absentAttr
);
715 Sets the border style.
717 void SetStyle(int style
) { m_borderStyle
= style
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_STYLE
; }
720 Gets the border style.
723 int GetStyle() const { return m_borderStyle
; }
726 Sets the border colour.
728 void SetColour(unsigned long colour
) { m_borderColour
= colour
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
731 Sets the border colour.
733 void SetColour(const wxColour
& colour
) { m_borderColour
= colour
.GetRGB(); m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
736 Gets the colour as a long.
738 unsigned long GetColourLong() const { return m_borderColour
; }
743 wxColour
GetColour() const { return wxColour(m_borderColour
); }
746 Gets the border width.
748 wxTextAttrDimension
& GetWidth() { return m_borderWidth
; }
749 const wxTextAttrDimension
& GetWidth() const { return m_borderWidth
; }
752 Sets the border width.
754 void SetWidth(const wxTextAttrDimension
& width
) { m_borderWidth
= width
; }
756 Sets the border width.
758 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
761 True if the border has a valid style.
763 bool HasStyle() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_STYLE
) != 0; }
766 True if the border has a valid colour.
768 bool HasColour() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_COLOUR
) != 0; }
771 True if the border has a valid width.
773 bool HasWidth() const { return m_borderWidth
.IsValid(); }
776 True if the border is valid.
778 bool IsValid() const { return HasWidth(); }
781 Set the valid flag for this border.
783 void MakeValid() { m_borderWidth
.SetValid(true); }
786 Returns the border flags.
788 int GetFlags() const { return m_flags
; }
791 Sets the border flags.
793 void SetFlags(int flags
) { m_flags
= flags
; }
798 void AddFlag(int flag
) { m_flags
|= flag
; }
801 Removes a border flag.
803 void RemoveFlag(int flag
) { m_flags
&= ~flag
; }
806 unsigned long m_borderColour
;
807 wxTextAttrDimension m_borderWidth
;
812 @class wxTextAttrBorders
813 A class representing a rich text object's borders.
818 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorder
821 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorders
827 wxTextAttrBorders() { }
832 bool operator==(const wxTextAttrBorders
& borders
) const
834 return m_left
== borders
.m_left
&& m_right
== borders
.m_right
&&
835 m_top
== borders
.m_top
&& m_bottom
== borders
.m_bottom
;
839 Sets the style of all borders.
841 void SetStyle(int style
);
844 Sets colour of all borders.
846 void SetColour(unsigned long colour
);
849 Sets the colour for all borders.
851 void SetColour(const wxColour
& colour
);
854 Sets the width of all borders.
856 void SetWidth(const wxTextAttrDimension
& width
);
859 Sets the width of all borders.
861 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
866 void Reset() { m_left
.Reset(); m_right
.Reset(); m_top
.Reset(); m_bottom
.Reset(); }
869 Partial equality test.
871 bool EqPartial(const wxTextAttrBorders
& borders
) const;
874 Applies border to this object, but not if the same as @a compareWith.
876 bool Apply(const wxTextAttrBorders
& borders
, const wxTextAttrBorders
* compareWith
= NULL
);
879 Removes the specified attributes from this object.
881 bool RemoveStyle(const wxTextAttrBorders
& attr
);
884 Collects the attributes that are common to a range of content, building up a note of
885 which attributes are absent in some objects and which clash in some objects.
887 void CollectCommonAttributes(const wxTextAttrBorders
& attr
, wxTextAttrBorders
& clashingAttr
, wxTextAttrBorders
& absentAttr
);
890 Returns @true if all borders are valid.
892 bool IsValid() const { return m_left
.IsValid() || m_right
.IsValid() || m_top
.IsValid() || m_bottom
.IsValid(); }
895 Returns the left border.
897 const wxTextAttrBorder
& GetLeft() const { return m_left
; }
898 wxTextAttrBorder
& GetLeft() { return m_left
; }
901 Returns the right border.
903 const wxTextAttrBorder
& GetRight() const { return m_right
; }
904 wxTextAttrBorder
& GetRight() { return m_right
; }
907 Returns the top border.
909 const wxTextAttrBorder
& GetTop() const { return m_top
; }
910 wxTextAttrBorder
& GetTop() { return m_top
; }
913 Returns the bottom border.
915 const wxTextAttrBorder
& GetBottom() const { return m_bottom
; }
916 wxTextAttrBorder
& GetBottom() { return m_bottom
; }
918 wxTextAttrBorder m_left
, m_right
, m_top
, m_bottom
;
924 A class representing the box attributes of a rich text object.
929 @see wxRichTextAttr, wxRichTextCtrl
932 class WXDLLIMPEXP_RICHTEXT wxTextBoxAttr
938 wxTextBoxAttr() { Init(); }
943 wxTextBoxAttr(const wxTextBoxAttr
& attr
) { Init(); (*this) = attr
; }
946 Initialises this object.
948 void Init() { Reset(); }
955 // Copy. Unnecessary since we let it do a binary copy
956 //void Copy(const wxTextBoxAttr& attr);
959 //void operator= (const wxTextBoxAttr& attr);
964 bool operator== (const wxTextBoxAttr
& attr
) const;
967 Partial equality test, ignoring unset attributes.
970 bool EqPartial(const wxTextBoxAttr
& attr
) const;
973 Merges the given attributes. If @a compareWith is non-NULL, then it will be used
974 to mask out those attributes that are the same in style and @a compareWith, for
975 situations where we don't want to explicitly set inherited attributes.
977 bool Apply(const wxTextBoxAttr
& style
, const wxTextBoxAttr
* compareWith
= NULL
);
980 Collects the attributes that are common to a range of content, building up a note of
981 which attributes are absent in some objects and which clash in some objects.
983 void CollectCommonAttributes(const wxTextBoxAttr
& attr
, wxTextBoxAttr
& clashingAttr
, wxTextBoxAttr
& absentAttr
);
986 Removes the specified attributes from this object.
988 bool RemoveStyle(const wxTextBoxAttr
& attr
);
993 void SetFlags(int flags
) { m_flags
= flags
; }
998 int GetFlags() const { return m_flags
; }
1001 Is this flag present?
1003 bool HasFlag(wxTextBoxAttrFlags flag
) const { return (m_flags
& flag
) != 0; }
1008 void RemoveFlag(wxTextBoxAttrFlags flag
) { m_flags
&= ~flag
; }
1013 void AddFlag(wxTextBoxAttrFlags flag
) { m_flags
|= flag
; }
1016 Returns @true if no attributes are set.
1018 bool IsDefault() const;
1021 Returns the float mode.
1023 wxTextBoxAttrFloatStyle
GetFloatMode() const { return m_floatMode
; }
1026 Sets the float mode.
1028 void SetFloatMode(wxTextBoxAttrFloatStyle mode
) { m_floatMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_FLOAT
; }
1031 Returns @true if float mode is active.
1033 bool HasFloatMode() const { return HasFlag(wxTEXT_BOX_ATTR_FLOAT
); }
1036 Returns @true if this object is floating.
1038 bool IsFloating() const { return HasFloatMode() && GetFloatMode() != wxTEXT_BOX_ATTR_FLOAT_NONE
; }
1041 Returns the clear mode - whether to wrap text after object. Currently unimplemented.
1043 wxTextBoxAttrClearStyle
GetClearMode() const { return m_clearMode
; }
1046 Set the clear mode. Currently unimplemented.
1048 void SetClearMode(wxTextBoxAttrClearStyle mode
) { m_clearMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_CLEAR
; }
1051 Returns @true if we have a clear flag.
1053 bool HasClearMode() const { return HasFlag(wxTEXT_BOX_ATTR_CLEAR
); }
1056 Returns the collapse mode - whether to collapse borders. Currently unimplemented.
1058 wxTextBoxAttrCollapseMode
GetCollapseBorders() const { return m_collapseMode
; }
1061 Sets the collapse mode - whether to collapse borders. Currently unimplemented.
1063 void SetCollapseBorders(wxTextBoxAttrCollapseMode collapse
) { m_collapseMode
= collapse
; m_flags
|= wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
; }
1066 Returns @true if the collapse borders flag is present.
1068 bool HasCollapseBorders() const { return HasFlag(wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
); }
1071 Returns the vertical alignment.
1073 wxTextBoxAttrVerticalAlignment
GetVerticalAlignment() const { return m_verticalAlignment
; }
1076 Sets the vertical alignment.
1078 void SetVerticalAlignment(wxTextBoxAttrVerticalAlignment verticalAlignment
) { m_verticalAlignment
= verticalAlignment
; m_flags
|= wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
; }
1081 Returns @true if a vertical alignment flag is present.
1083 bool HasVerticalAlignment() const { return HasFlag(wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
); }
1086 Returns the margin values.
1088 wxTextAttrDimensions
& GetMargins() { return m_margins
; }
1089 const wxTextAttrDimensions
& GetMargins() const { return m_margins
; }
1092 Returns the left margin.
1094 wxTextAttrDimension
& GetLeftMargin() { return m_margins
.m_left
; }
1095 const wxTextAttrDimension
& GetLeftMargin() const { return m_margins
.m_left
; }
1098 Returns the right margin.
1100 wxTextAttrDimension
& GetRightMargin() { return m_margins
.m_right
; }
1101 const wxTextAttrDimension
& GetRightMargin() const { return m_margins
.m_right
; }
1104 Returns the top margin.
1106 wxTextAttrDimension
& GetTopMargin() { return m_margins
.m_top
; }
1107 const wxTextAttrDimension
& GetTopMargin() const { return m_margins
.m_top
; }
1110 Returns the bottom margin.
1112 wxTextAttrDimension
& GetBottomMargin() { return m_margins
.m_bottom
; }
1113 const wxTextAttrDimension
& GetBottomMargin() const { return m_margins
.m_bottom
; }
1116 Returns the position.
1118 wxTextAttrDimensions
& GetPosition() { return m_position
; }
1119 const wxTextAttrDimensions
& GetPosition() const { return m_position
; }
1122 Returns the left position.
1124 wxTextAttrDimension
& GetLeft() { return m_position
.m_left
; }
1125 const wxTextAttrDimension
& GetLeft() const { return m_position
.m_left
; }
1128 Returns the right position.
1130 wxTextAttrDimension
& GetRight() { return m_position
.m_right
; }
1131 const wxTextAttrDimension
& GetRight() const { return m_position
.m_right
; }
1134 Returns the top position.
1136 wxTextAttrDimension
& GetTop() { return m_position
.m_top
; }
1137 const wxTextAttrDimension
& GetTop() const { return m_position
.m_top
; }
1140 Returns the bottom position.
1142 wxTextAttrDimension
& GetBottom() { return m_position
.m_bottom
; }
1143 const wxTextAttrDimension
& GetBottom() const { return m_position
.m_bottom
; }
1146 Returns the padding values.
1148 wxTextAttrDimensions
& GetPadding() { return m_padding
; }
1149 const wxTextAttrDimensions
& GetPadding() const { return m_padding
; }
1152 Returns the left padding value.
1154 wxTextAttrDimension
& GetLeftPadding() { return m_padding
.m_left
; }
1155 const wxTextAttrDimension
& GetLeftPadding() const { return m_padding
.m_left
; }
1158 Returns the right padding value.
1160 wxTextAttrDimension
& GetRightPadding() { return m_padding
.m_right
; }
1161 const wxTextAttrDimension
& GetRightPadding() const { return m_padding
.m_right
; }
1164 Returns the top padding value.
1166 wxTextAttrDimension
& GetTopPadding() { return m_padding
.m_top
; }
1167 const wxTextAttrDimension
& GetTopPadding() const { return m_padding
.m_top
; }
1170 Returns the bottom padding value.
1172 wxTextAttrDimension
& GetBottomPadding() { return m_padding
.m_bottom
; }
1173 const wxTextAttrDimension
& GetBottomPadding() const { return m_padding
.m_bottom
; }
1176 Returns the borders.
1178 wxTextAttrBorders
& GetBorder() { return m_border
; }
1179 const wxTextAttrBorders
& GetBorder() const { return m_border
; }
1182 Returns the left border.
1184 wxTextAttrBorder
& GetLeftBorder() { return m_border
.m_left
; }
1185 const wxTextAttrBorder
& GetLeftBorder() const { return m_border
.m_left
; }
1188 Returns the top border.
1190 wxTextAttrBorder
& GetTopBorder() { return m_border
.m_top
; }
1191 const wxTextAttrBorder
& GetTopBorder() const { return m_border
.m_top
; }
1194 Returns the right border.
1196 wxTextAttrBorder
& GetRightBorder() { return m_border
.m_right
; }
1197 const wxTextAttrBorder
& GetRightBorder() const { return m_border
.m_right
; }
1200 Returns the bottom border.
1202 wxTextAttrBorder
& GetBottomBorder() { return m_border
.m_bottom
; }
1203 const wxTextAttrBorder
& GetBottomBorder() const { return m_border
.m_bottom
; }
1206 Returns the outline.
1208 wxTextAttrBorders
& GetOutline() { return m_outline
; }
1209 const wxTextAttrBorders
& GetOutline() const { return m_outline
; }
1212 Returns the left outline.
1214 wxTextAttrBorder
& GetLeftOutline() { return m_outline
.m_left
; }
1215 const wxTextAttrBorder
& GetLeftOutline() const { return m_outline
.m_left
; }
1218 Returns the top outline.
1220 wxTextAttrBorder
& GetTopOutline() { return m_outline
.m_top
; }
1221 const wxTextAttrBorder
& GetTopOutline() const { return m_outline
.m_top
; }
1224 Returns the right outline.
1226 wxTextAttrBorder
& GetRightOutline() { return m_outline
.m_right
; }
1227 const wxTextAttrBorder
& GetRightOutline() const { return m_outline
.m_right
; }
1230 Returns the bottom outline.
1232 wxTextAttrBorder
& GetBottomOutline() { return m_outline
.m_bottom
; }
1233 const wxTextAttrBorder
& GetBottomOutline() const { return m_outline
.m_bottom
; }
1236 Returns the object size.
1238 wxTextAttrSize
& GetSize() { return m_size
; }
1239 const wxTextAttrSize
& GetSize() const { return m_size
; }
1242 Returns the object minimum size.
1245 wxTextAttrSize
& GetMinSize() { return m_minSize
; }
1246 const wxTextAttrSize
& GetMinSize() const { return m_minSize
; }
1249 Returns the object maximum size.
1252 wxTextAttrSize
& GetMaxSize() { return m_maxSize
; }
1253 const wxTextAttrSize
& GetMaxSize() const { return m_maxSize
; }
1256 Sets the object size.
1258 void SetSize(const wxTextAttrSize
& sz
) { m_size
= sz
; }
1261 Sets the object minimum size.
1263 void SetMinSize(const wxTextAttrSize
& sz
) { m_minSize
= sz
; }
1266 Sets the object maximum size.
1268 void SetMaxSize(const wxTextAttrSize
& sz
) { m_maxSize
= sz
; }
1271 Returns the object width.
1273 wxTextAttrDimension
& GetWidth() { return m_size
.m_width
; }
1274 const wxTextAttrDimension
& GetWidth() const { return m_size
.m_width
; }
1277 Returns the object height.
1279 wxTextAttrDimension
& GetHeight() { return m_size
.m_height
; }
1280 const wxTextAttrDimension
& GetHeight() const { return m_size
.m_height
; }
1283 Returns the box style name.
1285 const wxString
& GetBoxStyleName() const { return m_boxStyleName
; }
1288 Sets the box style name.
1290 void SetBoxStyleName(const wxString
& name
) { m_boxStyleName
= name
; AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1293 Returns @true if the box style name is present.
1295 bool HasBoxStyleName() const { return HasFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1301 wxTextAttrDimensions m_margins
;
1302 wxTextAttrDimensions m_padding
;
1303 wxTextAttrDimensions m_position
;
1305 wxTextAttrSize m_size
;
1306 wxTextAttrSize m_minSize
;
1307 wxTextAttrSize m_maxSize
;
1309 wxTextAttrBorders m_border
;
1310 wxTextAttrBorders m_outline
;
1312 wxTextBoxAttrFloatStyle m_floatMode
;
1313 wxTextBoxAttrClearStyle m_clearMode
;
1314 wxTextBoxAttrCollapseMode m_collapseMode
;
1315 wxTextBoxAttrVerticalAlignment m_verticalAlignment
;
1316 wxString m_boxStyleName
;
1320 @class wxRichTextAttr
1321 A class representing enhanced attributes for rich text objects.
1322 This adds a wxTextBoxAttr member to the basic wxTextAttr class.
1324 @library{wxrichtext}
1327 @see wxRichTextAttr, wxTextBoxAttr, wxRichTextCtrl
1330 class WXDLLIMPEXP_RICHTEXT wxRichTextAttr
: public wxTextAttr
1334 Constructor taking a wxTextAttr.
1336 wxRichTextAttr(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1341 wxRichTextAttr(const wxRichTextAttr
& attr
): wxTextAttr() { Copy(attr
); }
1344 Default constructor.
1351 void Copy(const wxRichTextAttr
& attr
);
1354 Assignment operator.
1356 void operator=(const wxRichTextAttr
& attr
) { Copy(attr
); }
1359 Assignment operator.
1361 void operator=(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1366 bool operator==(const wxRichTextAttr
& attr
) const;
1369 Partial equality test taking comparison object into account.
1371 bool EqPartial(const wxRichTextAttr
& attr
) const;
1374 Merges the given attributes. If @a compareWith
1375 is non-NULL, then it will be used to mask out those attributes that are the same in style
1376 and @a compareWith, for situations where we don't want to explicitly set inherited attributes.
1378 bool Apply(const wxRichTextAttr
& style
, const wxRichTextAttr
* compareWith
= NULL
);
1381 Collects the attributes that are common to a range of content, building up a note of
1382 which attributes are absent in some objects and which clash in some objects.
1384 void CollectCommonAttributes(const wxRichTextAttr
& attr
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
1387 Removes the specified attributes from this object.
1389 bool RemoveStyle(const wxRichTextAttr
& attr
);
1392 Returns the text box attributes.
1394 wxTextBoxAttr
& GetTextBoxAttr() { return m_textBoxAttr
; }
1395 const wxTextBoxAttr
& GetTextBoxAttr() const { return m_textBoxAttr
; }
1398 Set the text box attributes.
1400 void SetTextBoxAttr(const wxTextBoxAttr
& attr
) { m_textBoxAttr
= attr
; }
1402 wxTextBoxAttr m_textBoxAttr
;
1405 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxVariant
, wxRichTextVariantArray
, WXDLLIMPEXP_RICHTEXT
);
1408 @class wxRichTextProperties
1409 A simple property class using wxVariants. This is used to give each rich text object the
1410 ability to store custom properties that can be used by the application.
1412 @library{wxrichtext}
1415 @see wxRichTextBuffer, wxRichTextObject, wxRichTextCtrl
1418 class WXDLLIMPEXP_RICHTEXT wxRichTextProperties
: public wxObject
1420 DECLARE_DYNAMIC_CLASS(wxRichTextProperties
)
1424 Default constructor.
1426 wxRichTextProperties() {}
1431 wxRichTextProperties(const wxRichTextProperties
& props
): wxObject() { Copy(props
); }
1434 Assignment operator.
1436 void operator=(const wxRichTextProperties
& props
) { Copy(props
); }
1441 bool operator==(const wxRichTextProperties
& props
) const;
1444 Copies from @a props.
1446 void Copy(const wxRichTextProperties
& props
) { m_properties
= props
.m_properties
; }
1449 Returns the variant at the given index.
1451 const wxVariant
& operator[](size_t idx
) const { return m_properties
[idx
]; }
1454 Returns the variant at the given index.
1456 wxVariant
& operator[](size_t idx
) { return m_properties
[idx
]; }
1459 Clears the properties.
1461 void Clear() { m_properties
.Clear(); }
1464 Returns the array of variants implementing the properties.
1466 const wxRichTextVariantArray
& GetProperties() const { return m_properties
; }
1469 Returns the array of variants implementing the properties.
1471 wxRichTextVariantArray
& GetProperties() { return m_properties
; }
1474 Sets the array of variants.
1476 void SetProperties(const wxRichTextVariantArray
& props
) { m_properties
= props
; }
1479 Returns all the property names.
1481 wxArrayString
GetPropertyNames() const;
1484 Returns a count of the properties.
1486 size_t GetCount() const { return m_properties
.GetCount(); }
1489 Returns @true if the given property is found.
1491 bool HasProperty(const wxString
& name
) const { return Find(name
) != -1; }
1494 Finds the given property.
1496 int Find(const wxString
& name
) const;
1499 Removes the given property.
1501 bool Remove(const wxString
& name
);
1504 Gets the property variant by name.
1506 const wxVariant
& GetProperty(const wxString
& name
) const;
1509 Finds or creates a property with the given name, returning a pointer to the variant.
1511 wxVariant
* FindOrCreateProperty(const wxString
& name
);
1514 Gets the value of the named property as a string.
1516 wxString
GetPropertyString(const wxString
& name
) const;
1519 Gets the value of the named property as a long integer.
1521 long GetPropertyLong(const wxString
& name
) const;
1524 Gets the value of the named property as a boolean.
1526 bool GetPropertyBool(const wxString
& name
) const;
1529 Gets the value of the named property as a double.
1531 double GetPropertyDouble(const wxString
& name
) const;
1534 Sets the property by passing a variant which contains a name and value.
1536 void SetProperty(const wxVariant
& variant
);
1539 Sets a property by name and variant.
1541 void SetProperty(const wxString
& name
, const wxVariant
& variant
);
1544 Sets a property by name and string value.
1546 void SetProperty(const wxString
& name
, const wxString
& value
);
1549 Sets property by name and long integer value.
1551 void SetProperty(const wxString
& name
, long value
);
1554 Sets property by name and double value.
1556 void SetProperty(const wxString
& name
, double value
);
1559 Sets property by name and boolean value.
1561 void SetProperty(const wxString
& name
, bool value
);
1564 Removes the given properties from these properties.
1566 void RemoveProperties(const wxRichTextProperties
& properties
);
1569 Merges the given properties with these properties.
1571 void MergeProperties(const wxRichTextProperties
& properties
);
1574 wxRichTextVariantArray m_properties
;
1579 @class wxRichTextFontTable
1580 Manages quick access to a pool of fonts for rendering rich text.
1582 @library{wxrichtext}
1585 @see wxRichTextBuffer, wxRichTextCtrl
1588 class WXDLLIMPEXP_RICHTEXT wxRichTextFontTable
: public wxObject
1592 Default constructor.
1594 wxRichTextFontTable();
1599 wxRichTextFontTable(const wxRichTextFontTable
& table
);
1600 virtual ~wxRichTextFontTable();
1603 Returns @true if the font table is valid.
1605 bool IsOk() const { return m_refData
!= NULL
; }
1608 Finds a font for the given attribute object.
1610 wxFont
FindFont(const wxRichTextAttr
& fontSpec
);
1613 Clears the font table.
1618 Assignment operator.
1620 void operator= (const wxRichTextFontTable
& table
);
1625 bool operator == (const wxRichTextFontTable
& table
) const;
1628 Inequality operator.
1630 bool operator != (const wxRichTextFontTable
& table
) const { return !(*this == table
); }
1634 DECLARE_DYNAMIC_CLASS(wxRichTextFontTable
)
1638 @class wxRichTextRange
1640 This stores beginning and end positions for a range of data.
1642 @library{wxrichtext}
1645 @see wxRichTextBuffer, wxRichTextCtrl
1648 class WXDLLIMPEXP_RICHTEXT wxRichTextRange
1654 Default constructor.
1656 wxRichTextRange() { m_start
= 0; m_end
= 0; }
1659 Constructor taking start and end positions.
1661 wxRichTextRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1666 wxRichTextRange(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1667 ~wxRichTextRange() {}
1670 Assigns @a range to this range.
1672 void operator =(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1675 Equality operator. Returns @true if @a range is the same as this range.
1677 bool operator ==(const wxRichTextRange
& range
) const { return (m_start
== range
.m_start
&& m_end
== range
.m_end
); }
1680 Inequality operator.
1682 bool operator !=(const wxRichTextRange
& range
) const { return (m_start
!= range
.m_start
|| m_end
!= range
.m_end
); }
1685 Subtracts a range from this range.
1687 wxRichTextRange
operator -(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
- range
.m_start
, m_end
- range
.m_end
); }
1690 Adds a range to this range.
1692 wxRichTextRange
operator +(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
+ range
.m_start
, m_end
+ range
.m_end
); }
1695 Sets the range start and end positions.
1697 void SetRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1700 Sets the start position.
1702 void SetStart(long start
) { m_start
= start
; }
1705 Returns the start position.
1707 long GetStart() const { return m_start
; }
1710 Sets the end position.
1712 void SetEnd(long end
) { m_end
= end
; }
1715 Gets the end position.
1717 long GetEnd() const { return m_end
; }
1720 Returns true if this range is completely outside @a range.
1722 bool IsOutside(const wxRichTextRange
& range
) const { return range
.m_start
> m_end
|| range
.m_end
< m_start
; }
1725 Returns true if this range is completely within @a range.
1727 bool IsWithin(const wxRichTextRange
& range
) const { return m_start
>= range
.m_start
&& m_end
<= range
.m_end
; }
1730 Returns true if @a pos was within the range. Does not match if the range is empty.
1732 bool Contains(long pos
) const { return pos
>= m_start
&& pos
<= m_end
; }
1735 Limit this range to be within @a range.
1737 bool LimitTo(const wxRichTextRange
& range
) ;
1740 Gets the length of the range.
1742 long GetLength() const { return m_end
- m_start
+ 1; }
1745 Swaps the start and end.
1747 void Swap() { long tmp
= m_start
; m_start
= m_end
; m_end
= tmp
; }
1750 Converts the API-standard range, whose end is one past the last character in
1751 the range, to the internal form, which uses the first and last character
1752 positions of the range. In other words, one is subtracted from the end position.
1753 (n, n) is the range of a single character.
1755 wxRichTextRange
ToInternal() const { return wxRichTextRange(m_start
, m_end
-1); }
1758 Converts the internal range, which uses the first and last character positions
1759 of the range, to the API-standard range, whose end is one past the last
1760 character in the range. In other words, one is added to the end position.
1761 (n, n+1) is the range of a single character.
1763 wxRichTextRange
FromInternal() const { return wxRichTextRange(m_start
, m_end
+1); }
1770 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextRange
, wxRichTextRangeArray
, WXDLLIMPEXP_RICHTEXT
);
1772 #define wxRICHTEXT_ALL wxRichTextRange(-2, -2)
1773 #define wxRICHTEXT_NONE wxRichTextRange(-1, -1)
1775 #define wxRICHTEXT_NO_SELECTION wxRichTextRange(-2, -2)
1778 @class wxRichTextSelection
1780 Stores selection information. The selection does not have to be contiguous, though currently non-contiguous
1781 selections are only supported for a range of table cells (a geometric block of cells can consist
1782 of a set of non-contiguous positions).
1784 The selection consists of an array of ranges, and the container that is the context for the selection. It
1785 follows that a single selection object can only represent ranges with the same parent container.
1787 @library{wxrichtext}
1790 @see wxRichTextBuffer, wxRichTextCtrl
1793 class WXDLLIMPEXP_RICHTEXT wxRichTextSelection
1799 wxRichTextSelection(const wxRichTextSelection
& sel
) { Copy(sel
); }
1802 Creates a selection from a range and a container.
1804 wxRichTextSelection(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
) { m_ranges
.Add(range
); m_container
= container
; }
1807 Default constructor.
1809 wxRichTextSelection() { Reset(); }
1812 Resets the selection.
1814 void Reset() { m_ranges
.Clear(); m_container
= NULL
; }
1820 void Set(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
)
1821 { m_ranges
.Clear(); m_ranges
.Add(range
); m_container
= container
; }
1824 Adds a range to the selection.
1826 void Add(const wxRichTextRange
& range
)
1827 { m_ranges
.Add(range
); }
1830 Sets the selections from an array of ranges and a container object.
1832 void Set(const wxRichTextRangeArray
& ranges
, wxRichTextParagraphLayoutBox
* container
)
1833 { m_ranges
= ranges
; m_container
= container
; }
1838 void Copy(const wxRichTextSelection
& sel
)
1839 { m_ranges
= sel
.m_ranges
; m_container
= sel
.m_container
; }
1842 Assignment operator.
1844 void operator=(const wxRichTextSelection
& sel
) { Copy(sel
); }
1849 bool operator==(const wxRichTextSelection
& sel
) const;
1854 wxRichTextRange
operator[](size_t i
) const { return GetRange(i
); }
1857 Returns the selection ranges.
1859 wxRichTextRangeArray
& GetRanges() { return m_ranges
; }
1862 Returns the selection ranges.
1864 const wxRichTextRangeArray
& GetRanges() const { return m_ranges
; }
1867 Sets the selection ranges.
1869 void SetRanges(const wxRichTextRangeArray
& ranges
) { m_ranges
= ranges
; }
1872 Returns the number of ranges in the selection.
1874 size_t GetCount() const { return m_ranges
.GetCount(); }
1877 Returns the range at the given index.
1880 wxRichTextRange
GetRange(size_t i
) const { return m_ranges
[i
]; }
1883 Returns the first range if there is one, otherwise wxRICHTEXT_NO_SELECTION.
1885 wxRichTextRange
GetRange() const { return (m_ranges
.GetCount() > 0) ? (m_ranges
[0]) : wxRICHTEXT_NO_SELECTION
; }
1888 Sets a single range.
1890 void SetRange(const wxRichTextRange
& range
) { m_ranges
.Clear(); m_ranges
.Add(range
); }
1893 Returns the container for which the selection is valid.
1895 wxRichTextParagraphLayoutBox
* GetContainer() const { return m_container
; }
1898 Sets the container for which the selection is valid.
1900 void SetContainer(wxRichTextParagraphLayoutBox
* container
) { m_container
= container
; }
1903 Returns @true if the selection is valid.
1905 bool IsValid() const { return m_ranges
.GetCount() > 0 && GetContainer(); }
1908 Returns the selection appropriate to the specified object, if any; returns an empty array if none
1909 at the level of the object's container.
1911 wxRichTextRangeArray
GetSelectionForObject(wxRichTextObject
* obj
) const;
1914 Returns @true if the given position is within the selection.
1916 bool WithinSelection(long pos
, wxRichTextObject
* obj
) const;
1919 Returns @true if the given position is within the selection.
1922 bool WithinSelection(long pos
) const { return WithinSelection(pos
, m_ranges
); }
1925 Returns @true if the given position is within the selection range.
1927 static bool WithinSelection(long pos
, const wxRichTextRangeArray
& ranges
);
1930 Returns @true if the given range is within the selection range.
1932 static bool WithinSelection(const wxRichTextRange
& range
, const wxRichTextRangeArray
& ranges
);
1934 wxRichTextRangeArray m_ranges
;
1935 wxRichTextParagraphLayoutBox
* m_container
;
1939 @class wxRichTextDrawingContext
1941 A class for passing information to drawing and measuring functions.
1943 @library{wxrichtext}
1946 @see wxRichTextBuffer, wxRichTextCtrl
1949 class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingContext
: public wxObject
1951 DECLARE_CLASS(wxRichTextDrawingContext
)
1955 Pass the buffer to the context so the context can retrieve information
1956 such as virtual attributes.
1958 wxRichTextDrawingContext(wxRichTextBuffer
* buffer
) { Init(); m_buffer
= buffer
; }
1960 void Init() { m_buffer
= NULL
; }
1963 Does this object have virtual attributes?
1964 Virtual attributes can be provided for visual cues without
1965 affecting the actual styling.
1967 bool HasVirtualAttributes(wxRichTextObject
* obj
) const;
1970 Returns the virtual attributes for this object.
1971 Virtual attributes can be provided for visual cues without
1972 affecting the actual styling.
1974 wxRichTextAttr
GetVirtualAttributes(wxRichTextObject
* obj
) const;
1977 Applies any virtual attributes relevant to this object.
1979 bool ApplyVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const;
1981 wxRichTextBuffer
* m_buffer
;
1985 @class wxRichTextObject
1987 This is the base for drawable rich text objects.
1989 @library{wxrichtext}
1992 @see wxRichTextBuffer, wxRichTextCtrl
1995 class WXDLLIMPEXP_RICHTEXT wxRichTextObject
: public wxObject
1997 DECLARE_CLASS(wxRichTextObject
)
2000 Constructor, taking an optional parent pointer.
2002 wxRichTextObject(wxRichTextObject
* parent
= NULL
);
2004 virtual ~wxRichTextObject();
2009 Draw the item, within the given range. Some objects may ignore the range (for
2010 example paragraphs) while others must obey it (lines, to implement wrapping)
2012 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
2015 Lay the item out at the specified position with the given size constraint.
2016 Layout must set the cached size. @rect is the available space for the object,
2017 and @a parentRect is the container that is used to determine a relative size
2018 or position (for example if a text box must be 50% of the parent text box).
2020 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
2023 Hit-testing: returns a flag indicating hit test details, plus
2024 information about position. @a contextObj is returned to specify what object
2025 position is relevant to, since otherwise there's an ambiguity.
2026 @ obj might not be a child of @a contextObj, since we may be referring to the container itself
2027 if we have no hit on a child - for example if we click outside an object.
2029 The function puts the position in @a textPosition if one is found.
2030 @a pt is in logical units (a zero y position is at the beginning of the buffer).
2032 @return One of the ::wxRichTextHitTestFlags values.
2035 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2038 Finds the absolute position and row height for the given character position.
2040 virtual bool FindPosition(wxDC
& WXUNUSED(dc
), wxRichTextDrawingContext
& WXUNUSED(context
), long WXUNUSED(index
), wxPoint
& WXUNUSED(pt
), int* WXUNUSED(height
), bool WXUNUSED(forceLineStart
)) { return false; }
2043 Returns the best size, i.e. the ideal starting size for this object irrespective
2044 of available space. For a short text string, it will be the size that exactly encloses
2045 the text. For a longer string, it might use the parent width for example.
2047 virtual wxSize
GetBestSize() const { return m_size
; }
2050 Returns the object size for the given range. Returns @false if the range
2051 is invalid for this object.
2054 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const = 0;
2057 Do a split from @a pos, returning an object containing the second part, and setting
2058 the first part in 'this'.
2060 virtual wxRichTextObject
* DoSplit(long WXUNUSED(pos
)) { return NULL
; }
2063 Calculates the range of the object. By default, guess that the object is 1 unit long.
2065 virtual void CalculateRange(long start
, long& end
) { end
= start
; m_range
.SetRange(start
, end
); }
2068 Deletes the given range.
2070 virtual bool DeleteRange(const wxRichTextRange
& WXUNUSED(range
)) { return false; }
2073 Returns @true if the object is empty.
2075 virtual bool IsEmpty() const { return false; }
2078 Returns @true if this class of object is floatable.
2080 virtual bool IsFloatable() const { return false; }
2083 Returns @true if this object is currently floating.
2085 virtual bool IsFloating() const { return GetAttributes().GetTextBoxAttr().IsFloating(); }
2088 Returns the floating direction.
2090 virtual int GetFloatDirection() const { return GetAttributes().GetTextBoxAttr().GetFloatMode(); }
2093 Returns any text in this object for the given range.
2095 virtual wxString
GetTextForRange(const wxRichTextRange
& WXUNUSED(range
)) const { return wxEmptyString
; }
2098 Returns @true if this object can merge itself with the given one.
2100 virtual bool CanMerge(wxRichTextObject
* WXUNUSED(object
)) const { return false; }
2103 Returns @true if this object merged itself with the given one.
2104 The calling code will then delete the given object.
2106 virtual bool Merge(wxRichTextObject
* WXUNUSED(object
)) { return false; }
2109 Dump object data to the given output stream for debugging.
2111 virtual void Dump(wxTextOutputStream
& stream
);
2114 Returns @true if we can edit the object's properties via a GUI.
2116 virtual bool CanEditProperties() const { return false; }
2119 Edits the object's properties via a GUI.
2121 virtual bool EditProperties(wxWindow
* WXUNUSED(parent
), wxRichTextBuffer
* WXUNUSED(buffer
)) { return false; }
2124 Returns the label to be used for the properties context menu item.
2126 virtual wxString
GetPropertiesMenuLabel() const { return wxEmptyString
; }
2129 Returns @true if objects of this class can accept the focus, i.e. a call to SetFocusObject
2130 is possible. For example, containers supporting text, such as a text box object, can accept the focus,
2131 but a table can't (set the focus to individual cells instead).
2133 virtual bool AcceptsFocus() const { return false; }
2137 Imports this object from XML.
2139 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2142 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2144 Exports this object directly to the given stream, bypassing the creation of a wxXmlNode hierarchy.
2145 This method is considerably faster than creating a tree first. However, both versions of ExportXML must be
2146 implemented so that if the tree method is made efficient in the future, we can deprecate the
2147 more verbose direct output method. Compiled only if wxRICHTEXT_HAVE_DIRECT_OUTPUT is defined (on by default).
2149 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2152 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2154 Exports this object to the given parent node, usually creating at least one child node.
2155 This method is less efficient than the direct-to-stream method but is retained to allow for
2156 switching to this method if we make it more efficient. Compiled only if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT is defined
2159 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2163 Returns @true if this object takes note of paragraph attributes (text and image objects don't).
2165 virtual bool UsesParagraphAttributes() const { return true; }
2168 Returns the XML node name of this object. This must be overridden for wxXmlNode-base XML export to work.
2170 virtual wxString
GetXMLNodeName() const { return wxT("unknown"); }
2173 Invalidates the object at the given range. With no argument, invalidates the whole object.
2175 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2178 Returns @true if this object can handle the selections of its children, fOr example a table.
2179 Required for composite selection handling to work.
2181 virtual bool HandlesChildSelections() const { return false; }
2184 Returns a selection object specifying the selections between start and end character positions.
2185 For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
2187 virtual wxRichTextSelection
GetSelection(long WXUNUSED(start
), long WXUNUSED(end
)) const { return wxRichTextSelection(); }
2192 Gets the cached object size as calculated by Layout.
2194 virtual wxSize
GetCachedSize() const { return m_size
; }
2197 Sets the cached object size as calculated by Layout.
2199 virtual void SetCachedSize(const wxSize
& sz
) { m_size
= sz
; }
2202 Gets the maximum object size as calculated by Layout. This allows
2203 us to fit an object to its contents or allocate extra space if required.
2205 virtual wxSize
GetMaxSize() const { return m_maxSize
; }
2208 Sets the maximum object size as calculated by Layout. This allows
2209 us to fit an object to its contents or allocate extra space if required.
2211 virtual void SetMaxSize(const wxSize
& sz
) { m_maxSize
= sz
; }
2214 Gets the minimum object size as calculated by Layout. This allows
2215 us to constrain an object to its absolute minimum size if necessary.
2217 virtual wxSize
GetMinSize() const { return m_minSize
; }
2220 Sets the minimum object size as calculated by Layout. This allows
2221 us to constrain an object to its absolute minimum size if necessary.
2223 virtual void SetMinSize(const wxSize
& sz
) { m_minSize
= sz
; }
2226 Gets the 'natural' size for an object. For an image, it would be the
2229 virtual wxTextAttrSize
GetNaturalSize() const { return wxTextAttrSize(); }
2232 Returns the object position in pixels.
2234 virtual wxPoint
GetPosition() const { return m_pos
; }
2237 Sets the object position in pixels.
2239 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
2242 Returns the absolute object position, by traversing up the child/parent hierarchy.
2243 TODO: may not be needed, if all object positions are in fact relative to the
2244 top of the coordinate space.
2246 virtual wxPoint
GetAbsolutePosition() const;
2249 Returns the rectangle enclosing the object.
2251 virtual wxRect
GetRect() const { return wxRect(GetPosition(), GetCachedSize()); }
2254 Sets the object's range within its container.
2256 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
2259 Returns the object's range.
2261 const wxRichTextRange
& GetRange() const { return m_range
; }
2264 Returns the object's range.
2266 wxRichTextRange
& GetRange() { return m_range
; }
2269 Set the object's own range, for a top-level object with its own position space.
2271 void SetOwnRange(const wxRichTextRange
& range
) { m_ownRange
= range
; }
2274 Returns the object's own range (valid if top-level).
2276 const wxRichTextRange
& GetOwnRange() const { return m_ownRange
; }
2279 Returns the object's own range (valid if top-level).
2281 wxRichTextRange
& GetOwnRange() { return m_ownRange
; }
2284 Returns the object's own range only if a top-level object.
2286 wxRichTextRange
GetOwnRangeIfTopLevel() const { return IsTopLevel() ? m_ownRange
: m_range
; }
2289 Returns @true if this object this composite.
2291 virtual bool IsComposite() const { return false; }
2294 Returns a pointer to the parent object.
2296 virtual wxRichTextObject
* GetParent() const { return m_parent
; }
2299 Sets the pointer to the parent object.
2301 virtual void SetParent(wxRichTextObject
* parent
) { m_parent
= parent
; }
2304 Returns the top-level container of this object.
2305 May return itself if it's a container; use GetParentContainer to return
2306 a different container.
2308 virtual wxRichTextParagraphLayoutBox
* GetContainer() const;
2311 Returns the top-level container of this object.
2312 Returns a different container than itself, unless there's no parent, in which case it will return NULL.
2314 virtual wxRichTextParagraphLayoutBox
* GetParentContainer() const { return GetParent() ? GetParent()->GetContainer() : GetContainer(); }
2317 Set the margin around the object, in pixels.
2319 virtual void SetMargins(int margin
);
2322 Set the margin around the object, in pixels.
2324 virtual void SetMargins(int leftMargin
, int rightMargin
, int topMargin
, int bottomMargin
);
2327 Returns the left margin of the object, in pixels.
2329 virtual int GetLeftMargin() const;
2332 Returns the right margin of the object, in pixels.
2334 virtual int GetRightMargin() const;
2337 Returns the top margin of the object, in pixels.
2339 virtual int GetTopMargin() const;
2342 Returns the bottom margin of the object, in pixels.
2344 virtual int GetBottomMargin() const;
2347 Calculates the available content space in the given rectangle, given the
2348 margins, border and padding specified in the object's attributes.
2350 virtual wxRect
GetAvailableContentArea(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& outerRect
) const;
2353 Lays out the object first with a given amount of space, and then if no width was specified in attr,
2354 lays out the object again using the minimum size. @a availableParentSpace is the maximum space
2355 for the object, whereas @a availableContainerSpace is the container with which relative positions and
2356 sizes should be computed. For example, a text box whose space has already been constrained
2357 in a previous layout pass to @a availableParentSpace, but should have a width of 50% of @a availableContainerSpace.
2358 (If these two rects were the same, a 2nd pass could see the object getting too small.)
2360 virtual bool LayoutToBestSize(wxDC
& dc
, wxRichTextDrawingContext
& context
, wxRichTextBuffer
* buffer
,
2361 const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& attr
,
2362 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
, int style
);
2365 Sets the object's attributes.
2367 void SetAttributes(const wxRichTextAttr
& attr
) { m_attributes
= attr
; }
2370 Returns the object's attributes.
2372 const wxRichTextAttr
& GetAttributes() const { return m_attributes
; }
2375 Returns the object's attributes.
2377 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
2380 Sets the object's properties.
2382 wxRichTextProperties
& GetProperties() { return m_properties
; }
2385 Returns the object's properties.
2387 const wxRichTextProperties
& GetProperties() const { return m_properties
; }
2390 Returns the object's properties.
2392 void SetProperties(const wxRichTextProperties
& props
) { m_properties
= props
; }
2395 Sets the stored descent value.
2397 void SetDescent(int descent
) { m_descent
= descent
; }
2400 Returns the stored descent value.
2402 int GetDescent() const { return m_descent
; }
2405 Returns the containing buffer.
2407 wxRichTextBuffer
* GetBuffer() const;
2410 Sets the identifying name for this object as a property using the "name" key.
2412 void SetName(const wxString
& name
) { m_properties
.SetProperty(wxT("name"), name
); }
2415 Returns the identifying name for this object from the properties, using the "name" key.
2417 wxString
GetName() const { return m_properties
.GetPropertyString(wxT("name")); }
2420 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
2422 virtual bool IsTopLevel() const { return false; }
2425 Returns @true if the object will be shown, @false otherwise.
2427 bool IsShown() const { return m_show
; }
2432 Call to show or hide this object. This function does not cause the content to be
2433 laid out or redrawn.
2435 virtual void Show(bool show
) { m_show
= show
; }
2440 virtual wxRichTextObject
* Clone() const { return NULL
; }
2445 void Copy(const wxRichTextObject
& obj
);
2448 Reference-counting allows us to use the same object in multiple
2449 lists (not yet used).
2452 void Reference() { m_refCount
++; }
2455 Reference-counting allows us to use the same object in multiple
2456 lists (not yet used).
2461 Moves the object recursively, by adding the offset from old to new.
2463 virtual void Move(const wxPoint
& pt
);
2466 Converts units in tenths of a millimetre to device units.
2468 int ConvertTenthsMMToPixels(wxDC
& dc
, int units
) const;
2471 Converts units in tenths of a millimetre to device units.
2473 static int ConvertTenthsMMToPixels(int ppi
, int units
, double scale
= 1.0);
2476 Convert units in pixels to tenths of a millimetre.
2478 int ConvertPixelsToTenthsMM(wxDC
& dc
, int pixels
) const;
2481 Convert units in pixels to tenths of a millimetre.
2483 static int ConvertPixelsToTenthsMM(int ppi
, int pixels
, double scale
= 1.0);
2486 Draws the borders and background for the given rectangle and attributes.
2487 @a boxRect is taken to be the outer margin box, not the box around the content.
2489 static bool DrawBoxAttributes(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, const wxRect
& boxRect
, int flags
= 0);
2494 static bool DrawBorder(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxTextAttrBorders
& attr
, const wxRect
& rect
, int flags
= 0);
2497 Returns the various rectangles of the box model in pixels. You can either specify @a contentRect (inner)
2498 or @a marginRect (outer), and the other must be the default rectangle (no width or height).
2499 Note that the outline doesn't affect the position of the rectangle, it's drawn in whatever space
2502 static bool GetBoxRects(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, wxRect
& marginRect
, wxRect
& borderRect
, wxRect
& contentRect
, wxRect
& paddingRect
, wxRect
& outlineRect
);
2505 Returns the total margin for the object in pixels, taking into account margin, padding and border size.
2507 static bool GetTotalMargin(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, int& leftMargin
, int& rightMargin
,
2508 int& topMargin
, int& bottomMargin
);
2511 Returns the rectangle which the child has available to it given restrictions specified in the
2512 child attribute, e.g. 50% width of the parent, 400 pixels, x position 20% of the parent, etc.
2513 availableContainerSpace might be a parent that the cell has to compute its width relative to.
2514 E.g. a cell that's 50% of its parent.
2516 static wxRect
AdjustAvailableSpace(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& childAttr
,
2517 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
);
2524 int m_descent
; // Descent for this object (if any)
2527 wxRichTextObject
* m_parent
;
2529 // The range of this object (start position to end position)
2530 wxRichTextRange m_range
;
2532 // The internal range of this object, if it's a top-level object with its own range space
2533 wxRichTextRange m_ownRange
;
2536 wxRichTextAttr m_attributes
;
2539 wxRichTextProperties m_properties
;
2542 WX_DECLARE_LIST_WITH_DECL( wxRichTextObject
, wxRichTextObjectList
, class WXDLLIMPEXP_RICHTEXT
);
2545 @class wxRichTextCompositeObject
2547 Objects of this class can contain other objects.
2549 @library{wxrichtext}
2552 @see wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2555 class WXDLLIMPEXP_RICHTEXT wxRichTextCompositeObject
: public wxRichTextObject
2557 DECLARE_CLASS(wxRichTextCompositeObject
)
2561 wxRichTextCompositeObject(wxRichTextObject
* parent
= NULL
);
2562 virtual ~wxRichTextCompositeObject();
2566 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2568 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
2570 virtual void CalculateRange(long start
, long& end
);
2572 virtual bool DeleteRange(const wxRichTextRange
& range
);
2574 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2576 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
2578 virtual void Dump(wxTextOutputStream
& stream
);
2580 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2585 Returns the children.
2587 wxRichTextObjectList
& GetChildren() { return m_children
; }
2589 Returns the children.
2591 const wxRichTextObjectList
& GetChildren() const { return m_children
; }
2594 Returns the number of children.
2596 size_t GetChildCount() const ;
2599 Returns the nth child.
2601 wxRichTextObject
* GetChild(size_t n
) const ;
2604 Returns @true if this object is composite.
2606 virtual bool IsComposite() const { return true; }
2609 Returns true if the buffer is empty.
2611 virtual bool IsEmpty() const { return GetChildCount() == 0; }
2614 Returns the child object at the given character position.
2616 virtual wxRichTextObject
* GetChildAtPosition(long pos
) const;
2620 void Copy(const wxRichTextCompositeObject
& obj
);
2622 void operator= (const wxRichTextCompositeObject
& obj
) { Copy(obj
); }
2625 Appends a child, returning the position.
2627 size_t AppendChild(wxRichTextObject
* child
) ;
2630 Inserts the child in front of the given object, or at the beginning.
2632 bool InsertChild(wxRichTextObject
* child
, wxRichTextObject
* inFrontOf
) ;
2635 Removes and optionally deletes the specified child.
2637 bool RemoveChild(wxRichTextObject
* child
, bool deleteChild
= false) ;
2640 Deletes all the children.
2642 bool DeleteChildren() ;
2645 Recursively merges all pieces that can be merged.
2647 bool Defragment(const wxRichTextRange
& range
= wxRICHTEXT_ALL
);
2650 Moves the object recursively, by adding the offset from old to new.
2652 virtual void Move(const wxPoint
& pt
);
2655 wxRichTextObjectList m_children
;
2659 @class wxRichTextParagraphBox
2661 This class knows how to lay out paragraphs.
2663 @library{wxrichtext}
2666 @see wxRichTextCompositeObject, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2669 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraphLayoutBox
: public wxRichTextCompositeObject
2671 DECLARE_DYNAMIC_CLASS(wxRichTextParagraphLayoutBox
)
2675 wxRichTextParagraphLayoutBox(wxRichTextObject
* parent
= NULL
);
2676 wxRichTextParagraphLayoutBox(const wxRichTextParagraphLayoutBox
& obj
): wxRichTextCompositeObject() { Init(); Copy(obj
); }
2677 ~wxRichTextParagraphLayoutBox();
2681 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2683 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2685 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
2687 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
2689 virtual bool DeleteRange(const wxRichTextRange
& range
);
2691 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2694 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2697 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2698 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2701 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2702 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2705 virtual wxString
GetXMLNodeName() const { return wxT("paragraphlayout"); }
2707 virtual bool AcceptsFocus() const { return true; }
2712 Associates a control with the buffer, for operations that for example require refreshing the window.
2714 void SetRichTextCtrl(wxRichTextCtrl
* ctrl
) { m_ctrl
= ctrl
; }
2717 Returns the associated control.
2719 wxRichTextCtrl
* GetRichTextCtrl() const { return m_ctrl
; }
2722 Sets a flag indicating whether the last paragraph is partial or complete.
2724 void SetPartialParagraph(bool partialPara
) { m_partialParagraph
= partialPara
; }
2727 Returns a flag indicating whether the last paragraph is partial or complete.
2729 bool GetPartialParagraph() const { return m_partialParagraph
; }
2732 Returns the style sheet associated with the overall buffer.
2734 virtual wxRichTextStyleSheet
* GetStyleSheet() const;
2736 virtual bool IsTopLevel() const { return true; }
2741 Submits a command to insert paragraphs.
2743 bool InsertParagraphsWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2746 Submits a command to insert the given text.
2748 bool InsertTextWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2751 Submits a command to insert the given text.
2753 bool InsertNewlineWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2756 Submits a command to insert the given image.
2758 bool InsertImageWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextImageBlock
& imageBlock
,
2759 wxRichTextCtrl
* ctrl
, int flags
,
2760 const wxRichTextAttr
& textAttr
);
2763 Returns the style that is appropriate for a new paragraph at this position.
2764 If the previous paragraph has a paragraph style name, looks up the next-paragraph
2767 wxRichTextAttr
GetStyleForNewParagraph(wxRichTextBuffer
* buffer
, long pos
, bool caretPosition
= false, bool lookUpNewParaStyle
=false) const;
2772 wxRichTextObject
* InsertObjectWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2775 Submits a command to delete this range.
2777 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
, wxRichTextBuffer
* buffer
);
2780 Draws the floating objects in this buffer.
2782 void DrawFloats(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2785 Moves an anchored object to another paragraph.
2787 void MoveAnchoredObjectToParagraph(wxRichTextParagraph
* from
, wxRichTextParagraph
* to
, wxRichTextObject
* obj
);
2790 Initializes the object.
2795 Clears all the children.
2797 virtual void Clear();
2800 Clears and initializes with one blank paragraph.
2802 virtual void Reset();
2805 Convenience function to add a paragraph of text.
2807 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2810 Convenience function to add an image.
2812 virtual wxRichTextRange
AddImage(const wxImage
& image
, wxRichTextAttr
* paraStyle
= NULL
);
2815 Adds multiple paragraphs, based on newlines.
2817 virtual wxRichTextRange
AddParagraphs(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2820 Returns the line at the given position. If @a caretPosition is true, the position is
2821 a caret position, which is normally a smaller number.
2823 virtual wxRichTextLine
* GetLineAtPosition(long pos
, bool caretPosition
= false) const;
2826 Returns the line at the given y pixel position, or the last line.
2828 virtual wxRichTextLine
* GetLineAtYPosition(int y
) const;
2831 Returns the paragraph at the given character or caret position.
2833 virtual wxRichTextParagraph
* GetParagraphAtPosition(long pos
, bool caretPosition
= false) const;
2836 Returns the line size at the given position.
2838 virtual wxSize
GetLineSizeAtPosition(long pos
, bool caretPosition
= false) const;
2841 Given a position, returns the number of the visible line (potentially many to a paragraph),
2842 starting from zero at the start of the buffer. We also have to pass a bool (@a startOfLine)
2843 that indicates whether the caret is being shown at the end of the previous line or at the start
2844 of the next, since the caret can be shown at two visible positions for the same underlying
2847 virtual long GetVisibleLineNumber(long pos
, bool caretPosition
= false, bool startOfLine
= false) const;
2850 Given a line number, returns the corresponding wxRichTextLine object.
2852 virtual wxRichTextLine
* GetLineForVisibleLineNumber(long lineNumber
) const;
2855 Returns the leaf object in a paragraph at this position.
2857 virtual wxRichTextObject
* GetLeafObjectAtPosition(long position
) const;
2860 Returns the paragraph by number.
2862 virtual wxRichTextParagraph
* GetParagraphAtLine(long paragraphNumber
) const;
2865 Returns the paragraph for a given line.
2867 virtual wxRichTextParagraph
* GetParagraphForLine(wxRichTextLine
* line
) const;
2870 Returns the length of the paragraph.
2872 virtual int GetParagraphLength(long paragraphNumber
) const;
2875 Returns the number of paragraphs.
2877 virtual int GetParagraphCount() const { return static_cast<int>(GetChildCount()); }
2880 Returns the number of visible lines.
2882 virtual int GetLineCount() const;
2885 Returns the text of the paragraph.
2887 virtual wxString
GetParagraphText(long paragraphNumber
) const;
2890 Converts zero-based line column and paragraph number to a position.
2892 virtual long XYToPosition(long x
, long y
) const;
2895 Converts a zero-based position to line column and paragraph number.
2897 virtual bool PositionToXY(long pos
, long* x
, long* y
) const;
2900 Sets the attributes for the given range. Pass flags to determine how the
2903 The end point of range is specified as the last character position of the span
2904 of text. So, for example, to set the style for a character at position 5,
2905 use the range (5,5).
2906 This differs from the wxRichTextCtrl API, where you would specify (5,6).
2908 @a flags may contain a bit list of the following values:
2909 - wxRICHTEXT_SETSTYLE_NONE: no style flag.
2910 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
2912 - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
2913 if the combined style at this point is already the style in question.
2914 - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
2915 applied to paragraphs, and not the content.
2916 This allows content styling to be preserved independently from that
2917 of e.g. a named paragraph style.
2918 - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
2919 applied to characters, and not the paragraph.
2920 This allows content styling to be preserved independently from that
2921 of e.g. a named paragraph style.
2922 - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
2924 - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style.
2925 Only the style flags are used in this operation.
2927 virtual bool SetStyle(const wxRichTextRange
& range
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
2930 Sets the attributes for the given object only, for example the box attributes for a text box.
2932 virtual void SetStyle(wxRichTextObject
*obj
, const wxRichTextAttr
& textAttr
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
2935 Returns the combined text attributes for this position.
2937 This function gets the @e uncombined style - that is, the attributes associated
2938 with the paragraph or character content, and not necessarily the combined
2939 attributes you see on the screen. To get the combined attributes, use GetStyle().
2940 If you specify (any) paragraph attribute in @e style's flags, this function
2941 will fetch the paragraph attributes.
2942 Otherwise, it will return the character attributes.
2944 virtual bool GetStyle(long position
, wxRichTextAttr
& style
);
2947 Returns the content (uncombined) attributes for this position.
2949 virtual bool GetUncombinedStyle(long position
, wxRichTextAttr
& style
);
2952 Implementation helper for GetStyle. If combineStyles is true, combine base, paragraph and
2955 virtual bool DoGetStyle(long position
, wxRichTextAttr
& style
, bool combineStyles
= true);
2958 This function gets a style representing the common, combined attributes in the
2960 Attributes which have different values within the specified range will not be
2961 included the style flags.
2963 The function is used to get the attributes to display in the formatting dialog:
2964 the user can edit the attributes common to the selection, and optionally specify the
2965 values of further attributes to be applied uniformly.
2967 To apply the edited attributes, you can use SetStyle() specifying
2968 the wxRICHTEXT_SETSTYLE_OPTIMIZE flag, which will only apply attributes that
2969 are different from the @e combined attributes within the range.
2970 So, the user edits the effective, displayed attributes for the range,
2971 but his choice won't be applied unnecessarily to content. As an example,
2972 say the style for a paragraph specifies bold, but the paragraph text doesn't
2974 The combined style is bold, and this is what the user will see on-screen and
2975 in the formatting dialog. The user now specifies red text, in addition to bold.
2976 When applying with SetStyle(), the content font weight attributes won't be
2977 changed to bold because this is already specified by the paragraph.
2978 However the text colour attributes @e will be changed to show red.
2980 virtual bool GetStyleForRange(const wxRichTextRange
& range
, wxRichTextAttr
& style
);
2983 Combines @a style with @a currentStyle for the purpose of summarising the attributes of a range of
2986 bool CollectStyle(wxRichTextAttr
& currentStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
2990 Sets the list attributes for the given range, passing flags to determine how
2991 the attributes are set.
2992 Either the style definition or the name of the style definition (in the current
2993 sheet) can be passed.
2995 @a flags is a bit list of the following:
2996 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
2997 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
2998 @a startFrom, otherwise existing attributes are used.
2999 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3000 as the level for all paragraphs, otherwise the current indentation will be used.
3002 @see NumberList(), PromoteList(), ClearListStyle().
3004 virtual bool SetListStyle(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3005 virtual bool SetListStyle(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3009 Clears the list style from the given range, clearing list-related attributes
3010 and applying any named paragraph style associated with each paragraph.
3012 @a flags is a bit list of the following:
3013 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3015 @see SetListStyle(), PromoteList(), NumberList()
3017 virtual bool ClearListStyle(const wxRichTextRange
& range
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3021 Numbers the paragraphs in the given range.
3023 Pass flags to determine how the attributes are set.
3024 Either the style definition or the name of the style definition (in the current
3025 sheet) can be passed.
3027 @a flags is a bit list of the following:
3028 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3029 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3030 @a startFrom, otherwise existing attributes are used.
3031 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3032 as the level for all paragraphs, otherwise the current indentation will be used.
3034 @a def can be NULL to indicate that the existing list style should be used.
3036 @see SetListStyle(), PromoteList(), ClearListStyle()
3038 virtual bool NumberList(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3039 virtual bool NumberList(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3044 Promotes the list items within the given range.
3045 A positive @a promoteBy produces a smaller indent, and a negative number
3046 produces a larger indent. Pass flags to determine how the attributes are set.
3047 Either the style definition or the name of the style definition (in the current
3048 sheet) can be passed.
3050 @a flags is a bit list of the following:
3051 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3052 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3053 @a startFrom, otherwise existing attributes are used.
3054 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3055 as the level for all paragraphs, otherwise the current indentation will be used.
3057 @see SetListStyle(), SetListStyle(), ClearListStyle()
3059 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3060 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3064 Helper for NumberList and PromoteList, that does renumbering and promotion simultaneously
3065 @a def can be NULL/empty to indicate that the existing list style should be used.
3067 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);
3070 Fills in the attributes for numbering a paragraph after previousParagraph.
3072 virtual bool FindNextParagraphNumber(wxRichTextParagraph
* previousParagraph
, wxRichTextAttr
& attr
) const;
3075 Sets the properties for the given range, passing flags to determine how the
3076 attributes are set. You can merge properties or replace them.
3078 The end point of range is specified as the last character position of the span
3079 of text, plus one. So, for example, to set the properties for a character at
3080 position 5, use the range (5,6).
3082 @a flags may contain a bit list of the following values:
3083 - wxRICHTEXT_SETPROPERTIES_NONE: no flag.
3084 - wxRICHTEXT_SETPROPERTIES_WITH_UNDO: specifies that this operation should be
3086 - wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY: specifies that the properties should only be
3087 applied to paragraphs, and not the content.
3088 - wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY: specifies that the properties should only be
3089 applied to characters, and not the paragraph.
3090 - wxRICHTEXT_SETPROPERTIES_RESET: resets (clears) the existing properties before applying
3092 - wxRICHTEXT_SETPROPERTIES_REMOVE: removes the specified properties.
3094 virtual bool SetProperties(const wxRichTextRange
& range
, const wxRichTextProperties
& properties
, int flags
= wxRICHTEXT_SETPROPERTIES_WITH_UNDO
);
3097 Test if this whole range has character attributes of the specified kind. If any
3098 of the attributes are different within the range, the test fails. You
3099 can use this to implement, for example, bold button updating. style must have
3100 flags indicating which attributes are of interest.
3102 virtual bool HasCharacterAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3105 Test if this whole range has paragraph attributes of the specified kind. If any
3106 of the attributes are different within the range, the test fails. You
3107 can use this to implement, for example, centering button updating. style must have
3108 flags indicating which attributes are of interest.
3110 virtual bool HasParagraphAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3112 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraphLayoutBox(*this); }
3115 Insert fragment into this box at the given position. If partialParagraph is true,
3116 it is assumed that the last (or only) paragraph is just a piece of data with no paragraph
3119 virtual bool InsertFragment(long position
, wxRichTextParagraphLayoutBox
& fragment
);
3122 Make a copy of the fragment corresponding to the given range, putting it in @a fragment.
3124 virtual bool CopyFragment(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
& fragment
);
3127 Apply the style sheet to the buffer, for example if the styles have changed.
3129 virtual bool ApplyStyleSheet(wxRichTextStyleSheet
* styleSheet
);
3131 void Copy(const wxRichTextParagraphLayoutBox
& obj
);
3133 void operator= (const wxRichTextParagraphLayoutBox
& obj
) { Copy(obj
); }
3138 virtual void UpdateRanges();
3143 virtual wxString
GetText() const;
3146 Sets the default style, affecting the style currently being applied
3147 (for example, setting the default style to bold will cause subsequently
3148 inserted text to be bold).
3150 This is not cumulative - setting the default style will replace the previous
3153 Setting it to a default attribute object makes new content take on the 'basic' style.
3155 virtual bool SetDefaultStyle(const wxRichTextAttr
& style
);
3158 Returns the current default style, affecting the style currently being applied
3159 (for example, setting the default style to bold will cause subsequently
3160 inserted text to be bold).
3162 virtual const wxRichTextAttr
& GetDefaultStyle() const { return m_defaultAttributes
; }
3165 Sets the basic (overall) style. This is the style of the whole
3166 buffer before further styles are applied, unlike the default style, which
3167 only affects the style currently being applied (for example, setting the default
3168 style to bold will cause subsequently inserted text to be bold).
3170 virtual void SetBasicStyle(const wxRichTextAttr
& style
) { m_attributes
= style
; }
3173 Returns the basic (overall) style.
3175 This is the style of the whole buffer before further styles are applied,
3176 unlike the default style, which only affects the style currently being
3177 applied (for example, setting the default style to bold will cause
3178 subsequently inserted text to be bold).
3180 virtual const wxRichTextAttr
& GetBasicStyle() const { return m_attributes
; }
3183 Invalidates the buffer. With no argument, invalidates whole buffer.
3185 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3188 Do the (in)validation for this object only.
3190 virtual void DoInvalidate(const wxRichTextRange
& invalidRange
);
3193 Do the (in)validation both up and down the hierarchy.
3195 virtual void InvalidateHierarchy(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3198 Gather information about floating objects. If untilObj is non-NULL,
3199 will stop getting information if the current object is this, since we
3200 will collect the rest later.
3202 virtual bool UpdateFloatingObjects(const wxRect
& availableRect
, wxRichTextObject
* untilObj
= NULL
);
3205 Get invalid range, rounding to entire paragraphs if argument is true.
3207 wxRichTextRange
GetInvalidRange(bool wholeParagraphs
= false) const;
3210 Returns @true if this object needs layout.
3212 bool IsDirty() const { return m_invalidRange
!= wxRICHTEXT_NONE
; }
3215 Returns the wxRichTextFloatCollector of this object.
3217 wxRichTextFloatCollector
* GetFloatCollector() { return m_floatCollector
; }
3220 Returns the number of floating objects at this level.
3222 int GetFloatingObjectCount() const;
3225 Returns a list of floating objects.
3227 bool GetFloatingObjects(wxRichTextObjectList
& objects
) const;
3230 wxRichTextCtrl
* m_ctrl
;
3231 wxRichTextAttr m_defaultAttributes
;
3233 // The invalidated range that will need full layout
3234 wxRichTextRange m_invalidRange
;
3236 // Is the last paragraph partial or complete?
3237 bool m_partialParagraph
;
3239 // The floating layout state
3240 wxRichTextFloatCollector
* m_floatCollector
;
3244 @class wxRichTextBox
3246 This class implements a floating or inline text box, containing paragraphs.
3248 @library{wxrichtext}
3251 @see wxRichTextParagraphLayoutBox, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
3254 class WXDLLIMPEXP_RICHTEXT wxRichTextBox
: public wxRichTextParagraphLayoutBox
3256 DECLARE_DYNAMIC_CLASS(wxRichTextBox
)
3261 Default constructor; optionally pass the parent object.
3264 wxRichTextBox(wxRichTextObject
* parent
= NULL
);
3270 wxRichTextBox(const wxRichTextBox
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3274 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3276 virtual wxString
GetXMLNodeName() const { return wxT("textbox"); }
3278 virtual bool CanEditProperties() const { return true; }
3280 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3282 virtual wxString
GetPropertiesMenuLabel() const { return _("&Box"); }
3288 virtual wxRichTextObject
* Clone() const { return new wxRichTextBox(*this); }
3290 void Copy(const wxRichTextBox
& obj
);
3296 @class wxRichTextLine
3298 This object represents a line in a paragraph, and stores
3299 offsets from the start of the paragraph representing the
3300 start and end positions of the line.
3302 @library{wxrichtext}
3305 @see wxRichTextBuffer, wxRichTextCtrl
3308 class WXDLLIMPEXP_RICHTEXT wxRichTextLine
3313 wxRichTextLine(wxRichTextParagraph
* parent
);
3314 wxRichTextLine(const wxRichTextLine
& obj
) { Init( NULL
); Copy(obj
); }
3315 virtual ~wxRichTextLine() {}
3322 Sets the range associated with this line.
3324 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
3326 Sets the range associated with this line.
3328 void SetRange(long from
, long to
) { m_range
= wxRichTextRange(from
, to
); }
3331 Returns the parent paragraph.
3333 wxRichTextParagraph
* GetParent() { return m_parent
; }
3338 const wxRichTextRange
& GetRange() const { return m_range
; }
3342 wxRichTextRange
& GetRange() { return m_range
; }
3345 Returns the absolute range.
3347 wxRichTextRange
GetAbsoluteRange() const;
3350 Returns the line size as calculated by Layout.
3352 virtual wxSize
GetSize() const { return m_size
; }
3355 Sets the line size as calculated by Layout.
3357 virtual void SetSize(const wxSize
& sz
) { m_size
= sz
; }
3360 Returns the object position relative to the parent.
3362 virtual wxPoint
GetPosition() const { return m_pos
; }
3365 Sets the object position relative to the parent.
3367 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
3370 Returns the absolute object position.
3372 virtual wxPoint
GetAbsolutePosition() const;
3375 Returns the rectangle enclosing the line.
3377 virtual wxRect
GetRect() const { return wxRect(GetAbsolutePosition(), GetSize()); }
3380 Sets the stored descent.
3382 void SetDescent(int descent
) { m_descent
= descent
; }
3385 Returns the stored descent.
3387 int GetDescent() const { return m_descent
; }
3389 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3390 wxArrayInt
& GetObjectSizes() { return m_objectSizes
; }
3391 const wxArrayInt
& GetObjectSizes() const { return m_objectSizes
; }
3397 Initialises the object.
3399 void Init(wxRichTextParagraph
* parent
);
3404 void Copy(const wxRichTextLine
& obj
);
3406 virtual wxRichTextLine
* Clone() const { return new wxRichTextLine(*this); }
3410 // The range of the line (start position to end position)
3411 // This is relative to the parent paragraph.
3412 wxRichTextRange m_range
;
3414 // Size and position measured relative to top of paragraph
3418 // Maximum descent for this line (location of text baseline)
3421 // The parent object
3422 wxRichTextParagraph
* m_parent
;
3424 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3425 wxArrayInt m_objectSizes
;
3429 WX_DECLARE_LIST_WITH_DECL( wxRichTextLine
, wxRichTextLineList
, class WXDLLIMPEXP_RICHTEXT
);
3432 @class wxRichTextParagraph
3434 This object represents a single paragraph containing various objects such as text content, images, and further paragraph layout objects.
3436 @library{wxrichtext}
3439 @see wxRichTextBuffer, wxRichTextCtrl
3442 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraph
: public wxRichTextCompositeObject
3444 DECLARE_DYNAMIC_CLASS(wxRichTextParagraph
)
3449 Constructor taking a parent and style.
3451 wxRichTextParagraph(wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
3453 Constructor taking a text string, a parent and paragraph and character attributes.
3455 wxRichTextParagraph(const wxString
& text
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* paraStyle
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
3456 virtual ~wxRichTextParagraph();
3457 wxRichTextParagraph(const wxRichTextParagraph
& obj
): wxRichTextCompositeObject() { Copy(obj
); }
3461 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3463 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3465 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3467 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
3469 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
3471 virtual void CalculateRange(long start
, long& end
);
3473 virtual wxString
GetXMLNodeName() const { return wxT("paragraph"); }
3478 Returns the cached lines.
3480 wxRichTextLineList
& GetLines() { return m_cachedLines
; }
3487 void Copy(const wxRichTextParagraph
& obj
);
3489 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraph(*this); }
3492 Clears the cached lines.
3499 Applies paragraph styles such as centering to the wrapped lines.
3501 virtual void ApplyParagraphStyle(wxRichTextLine
* line
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxDC
& dc
);
3504 Inserts text at the given position.
3506 virtual bool InsertText(long pos
, const wxString
& text
);
3509 Splits an object at this position if necessary, and returns
3510 the previous object, or NULL if inserting at the beginning.
3512 virtual wxRichTextObject
* SplitAt(long pos
, wxRichTextObject
** previousObject
= NULL
);
3515 Moves content to a list from this point.
3517 virtual void MoveToList(wxRichTextObject
* obj
, wxList
& list
);
3520 Adds content back from a list.
3522 virtual void MoveFromList(wxList
& list
);
3525 Returns the plain text searching from the start or end of the range.
3526 The resulting string may be shorter than the range given.
3528 bool GetContiguousPlainText(wxString
& text
, const wxRichTextRange
& range
, bool fromStart
= true);
3531 Finds a suitable wrap position. @a wrapPosition is the last position in the line to the left
3534 bool FindWrapPosition(const wxRichTextRange
& range
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int availableSpace
, long& wrapPosition
, wxArrayInt
* partialExtents
);
3537 Finds the object at the given position.
3539 wxRichTextObject
* FindObjectAtPosition(long position
);
3542 Returns the bullet text for this paragraph.
3544 wxString
GetBulletText();
3547 Allocates or reuses a line object.
3549 wxRichTextLine
* AllocateLine(int pos
);
3552 Clears remaining unused line objects, if any.
3554 bool ClearUnusedLines(int lineCount
);
3557 Returns combined attributes of the base style, paragraph style and character style. We use this to dynamically
3558 retrieve the actual style.
3560 wxRichTextAttr
GetCombinedAttributes(const wxRichTextAttr
& contentStyle
, bool includingBoxAttr
= false) const;
3563 Returns the combined attributes of the base style and paragraph style.
3565 wxRichTextAttr
GetCombinedAttributes(bool includingBoxAttr
= false) const;
3568 Returns the first position from pos that has a line break character.
3570 long GetFirstLineBreakPosition(long pos
);
3573 Creates a default tabstop array.
3575 static void InitDefaultTabs();
3578 Clears the default tabstop array.
3580 static void ClearDefaultTabs();
3583 Returns the default tabstop array.
3585 static const wxArrayInt
& GetDefaultTabs() { return sm_defaultTabs
; }
3588 Lays out the floating objects.
3590 void LayoutFloat(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, int style
, wxRichTextFloatCollector
* floatCollector
);
3594 // The lines that make up the wrapped paragraph
3595 wxRichTextLineList m_cachedLines
;
3598 static wxArrayInt sm_defaultTabs
;
3600 friend class wxRichTextFloatCollector
;
3604 @class wxRichTextPlainText
3606 This object represents a single piece of text.
3608 @library{wxrichtext}
3611 @see wxRichTextBuffer, wxRichTextCtrl
3614 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainText
: public wxRichTextObject
3616 DECLARE_DYNAMIC_CLASS(wxRichTextPlainText
)
3623 wxRichTextPlainText(const wxString
& text
= wxEmptyString
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
3628 wxRichTextPlainText(const wxRichTextPlainText
& obj
): wxRichTextObject() { Copy(obj
); }
3632 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3634 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3636 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3638 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
3640 virtual wxRichTextObject
* DoSplit(long pos
);
3642 virtual void CalculateRange(long start
, long& end
);
3644 virtual bool DeleteRange(const wxRichTextRange
& range
);
3646 virtual bool IsEmpty() const { return m_text
.empty(); }
3648 virtual bool CanMerge(wxRichTextObject
* object
) const;
3650 virtual bool Merge(wxRichTextObject
* object
);
3652 virtual void Dump(wxTextOutputStream
& stream
);
3655 Get the first position from pos that has a line break character.
3657 long GetFirstLineBreakPosition(long pos
);
3659 /// Does this object take note of paragraph attributes? Text and image objects don't.
3660 virtual bool UsesParagraphAttributes() const { return false; }
3663 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
3666 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
3667 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
3670 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
3671 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
3674 virtual wxString
GetXMLNodeName() const { return wxT("text"); }
3681 const wxString
& GetText() const { return m_text
; }
3686 void SetText(const wxString
& text
) { m_text
= text
; }
3690 // Copies the text object,
3691 void Copy(const wxRichTextPlainText
& obj
);
3693 // Clones the text object.
3694 virtual wxRichTextObject
* Clone() const { return new wxRichTextPlainText(*this); }
3697 bool DrawTabbedString(wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxString
& str
, wxCoord
& x
, wxCoord
& y
, bool selected
);
3704 @class wxRichTextImageBlock
3706 This class stores information about an image, in binary in-memory form.
3708 @library{wxrichtext}
3711 @see wxRichTextBuffer, wxRichTextCtrl
3714 class WXDLLIMPEXP_RICHTEXT wxRichTextImageBlock
: public wxObject
3720 wxRichTextImageBlock();
3725 wxRichTextImageBlock(const wxRichTextImageBlock
& block
);
3726 virtual ~wxRichTextImageBlock();
3729 Initialises the block.
3740 Load the original image into a memory block.
3741 If the image is not a JPEG, we must convert it into a JPEG
3743 If it's not a JPEG we can make use of @a image, already scaled, so we don't have to
3744 load the image a second time.
3746 virtual bool MakeImageBlock(const wxString
& filename
, wxBitmapType imageType
,
3747 wxImage
& image
, bool convertToJPEG
= true);
3750 Make an image block from the wxImage in the given
3753 virtual bool MakeImageBlock(wxImage
& image
, wxBitmapType imageType
, int quality
= 80);
3756 Uses a const wxImage for efficiency, but can't set quality (only relevant for JPEG)
3758 virtual bool MakeImageBlockDefaultQuality(const wxImage
& image
, wxBitmapType imageType
);
3761 Makes the image block.
3763 virtual bool DoMakeImageBlock(const wxImage
& image
, wxBitmapType imageType
);
3766 Writes the block to a file.
3768 bool Write(const wxString
& filename
);
3771 Writes the data in hex to a stream.
3773 bool WriteHex(wxOutputStream
& stream
);
3776 Reads the data in hex from a stream.
3778 bool ReadHex(wxInputStream
& stream
, int length
, wxBitmapType imageType
);
3783 void Copy(const wxRichTextImageBlock
& block
);
3785 // Load a wxImage from the block
3788 bool Load(wxImage
& image
);
3793 Assignment operation.
3795 void operator=(const wxRichTextImageBlock
& block
);
3800 Returns the raw data.
3802 unsigned char* GetData() const { return m_data
; }
3805 Returns the data size in bytes.
3807 size_t GetDataSize() const { return m_dataSize
; }
3810 Returns the image type.
3812 wxBitmapType
GetImageType() const { return m_imageType
; }
3816 void SetData(unsigned char* image
) { m_data
= image
; }
3821 void SetDataSize(size_t size
) { m_dataSize
= size
; }
3824 Sets the image type.
3826 void SetImageType(wxBitmapType imageType
) { m_imageType
= imageType
; }
3829 Returns @true if the data is non-NULL.
3831 bool IsOk() const { return GetData() != NULL
; }
3832 bool Ok() const { return IsOk(); }
3835 Gets the extension for the block's type.
3837 wxString
GetExtension() const;
3842 Allocates and reads from a stream as a block of memory.
3844 static unsigned char* ReadBlock(wxInputStream
& stream
, size_t size
);
3847 Allocates and reads from a file as a block of memory.
3849 static unsigned char* ReadBlock(const wxString
& filename
, size_t size
);
3852 Writes a memory block to stream.
3854 static bool WriteBlock(wxOutputStream
& stream
, unsigned char* block
, size_t size
);
3857 Writes a memory block to a file.
3859 static bool WriteBlock(const wxString
& filename
, unsigned char* block
, size_t size
);
3862 // Size in bytes of the image stored.
3863 // This is in the raw, original form such as a JPEG file.
3864 unsigned char* m_data
;
3866 wxBitmapType m_imageType
;
3870 @class wxRichTextImage
3872 This class implements a graphic object.
3874 @library{wxrichtext}
3877 @see wxRichTextBuffer, wxRichTextCtrl, wxRichTextImageBlock
3880 class WXDLLIMPEXP_RICHTEXT wxRichTextImage
: public wxRichTextObject
3882 DECLARE_DYNAMIC_CLASS(wxRichTextImage
)
3887 Default constructor.
3889 wxRichTextImage(wxRichTextObject
* parent
= NULL
): wxRichTextObject(parent
) { }
3892 Creates a wxRichTextImage from a wxImage.
3894 wxRichTextImage(const wxImage
& image
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
3897 Creates a wxRichTextImage from an image block.
3899 wxRichTextImage(const wxRichTextImageBlock
& imageBlock
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
3904 wxRichTextImage(const wxRichTextImage
& obj
): wxRichTextObject(obj
) { Copy(obj
); }
3908 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3910 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3912 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3915 Returns the 'natural' size for this object - the image size.
3917 virtual wxTextAttrSize
GetNaturalSize() const;
3919 virtual bool IsEmpty() const { return false; /* !m_imageBlock.IsOk(); */ }
3921 virtual bool CanEditProperties() const { return true; }
3923 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3925 virtual wxString
GetPropertiesMenuLabel() const { return _("&Picture"); }
3927 virtual bool UsesParagraphAttributes() const { return false; }
3930 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
3933 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
3934 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
3937 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
3938 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
3941 // Images can be floatable (optionally).
3942 virtual bool IsFloatable() const { return true; }
3944 virtual wxString
GetXMLNodeName() const { return wxT("image"); }
3949 Returns the image cache (a scaled bitmap).
3951 const wxBitmap
& GetImageCache() const { return m_imageCache
; }
3954 Sets the image cache.
3956 void SetImageCache(const wxBitmap
& bitmap
) { m_imageCache
= bitmap
; }
3959 Resets the image cache.
3961 void ResetImageCache() { m_imageCache
= wxNullBitmap
; }
3964 Returns the image block containing the raw data.
3966 wxRichTextImageBlock
& GetImageBlock() { return m_imageBlock
; }
3971 Copies the image object.
3973 void Copy(const wxRichTextImage
& obj
);
3976 Clones the image object.
3978 virtual wxRichTextObject
* Clone() const { return new wxRichTextImage(*this); }
3981 Creates a cached image at the required size.
3983 virtual bool LoadImageCache(wxDC
& dc
, bool resetCache
= false);
3986 wxRichTextImageBlock m_imageBlock
;
3987 wxBitmap m_imageCache
;
3990 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCommand
;
3991 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
3994 @class wxRichTextBuffer
3996 This is a kind of paragraph layout box, used to represent the whole buffer.
3998 @library{wxrichtext}
4001 @see wxRichTextParagraphLayoutBox, wxRichTextCtrl
4004 class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer
: public wxRichTextParagraphLayoutBox
4006 DECLARE_DYNAMIC_CLASS(wxRichTextBuffer
)
4011 Default constructor.
4013 wxRichTextBuffer() { Init(); }
4018 wxRichTextBuffer(const wxRichTextBuffer
& obj
): wxRichTextParagraphLayoutBox() { Init(); Copy(obj
); }
4020 virtual ~wxRichTextBuffer() ;
4025 Returns the command processor.
4026 A text buffer always creates its own command processor when it is initialized.
4028 wxCommandProcessor
* GetCommandProcessor() const { return m_commandProcessor
; }
4031 Sets style sheet, if any. This will allow the application to use named character and paragraph
4032 styles found in the style sheet.
4034 Neither the buffer nor the control owns the style sheet so must be deleted by the application.
4036 void SetStyleSheet(wxRichTextStyleSheet
* styleSheet
) { m_styleSheet
= styleSheet
; }
4039 Returns the style sheet.
4041 virtual wxRichTextStyleSheet
* GetStyleSheet() const { return m_styleSheet
; }
4044 Sets the style sheet and sends a notification of the change.
4046 bool SetStyleSheetAndNotify(wxRichTextStyleSheet
* sheet
);
4049 Pushes the style sheet to the top of the style sheet stack.
4051 bool PushStyleSheet(wxRichTextStyleSheet
* styleSheet
);
4054 Pops the style sheet from the top of the style sheet stack.
4056 wxRichTextStyleSheet
* PopStyleSheet();
4059 Returns the table storing fonts, for quick access and font reuse.
4061 wxRichTextFontTable
& GetFontTable() { return m_fontTable
; }
4064 Returns the table storing fonts, for quick access and font reuse.
4066 const wxRichTextFontTable
& GetFontTable() const { return m_fontTable
; }
4069 Sets table storing fonts, for quick access and font reuse.
4071 void SetFontTable(const wxRichTextFontTable
& table
) { m_fontTable
= table
; }
4081 Clears the buffer, adds an empty paragraph, and clears the command processor.
4083 virtual void ResetAndClearCommands();
4087 Loads content from a stream or file.
4088 Not all handlers will implement file loading.
4090 virtual bool LoadFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4091 virtual bool LoadFile(wxInputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4096 Saves content to a stream or file.
4097 Not all handlers will implement file saving.
4099 virtual bool SaveFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4100 virtual bool SaveFile(wxOutputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4104 Sets the handler flags, controlling loading and saving.
4106 void SetHandlerFlags(int flags
) { m_handlerFlags
= flags
; }
4109 Gets the handler flags, controlling loading and saving.
4111 int GetHandlerFlags() const { return m_handlerFlags
; }
4114 Convenience function to add a paragraph of text.
4116 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
) { Modify(); return wxRichTextParagraphLayoutBox::AddParagraph(text
, paraStyle
); }
4119 Begin collapsing undo/redo commands. Note that this may not work properly
4120 if combining commands that delete or insert content, changing ranges for
4123 @a cmdName should be the name of the combined command that will appear
4124 next to Undo and Redo in the edit menu.
4126 virtual bool BeginBatchUndo(const wxString
& cmdName
);
4129 End collapsing undo/redo commands.
4131 virtual bool EndBatchUndo();
4134 Returns @true if we are collapsing commands.
4136 virtual bool BatchingUndo() const { return m_batchedCommandDepth
> 0; }
4139 Submit the action immediately, or delay according to whether collapsing is on.
4141 virtual bool SubmitAction(wxRichTextAction
* action
);
4144 Returns the collapsed command.
4146 virtual wxRichTextCommand
* GetBatchedCommand() const { return m_batchedCommand
; }
4149 Begin suppressing undo/redo commands. The way undo is suppressed may be implemented
4150 differently by each command. If not dealt with by a command implementation, then
4151 it will be implemented automatically by not storing the command in the undo history
4152 when the action is submitted to the command processor.
4154 virtual bool BeginSuppressUndo();
4157 End suppressing undo/redo commands.
4159 virtual bool EndSuppressUndo();
4162 Are we suppressing undo??
4164 virtual bool SuppressingUndo() const { return m_suppressUndo
> 0; }
4167 Copy the range to the clipboard.
4169 virtual bool CopyToClipboard(const wxRichTextRange
& range
);
4172 Paste the clipboard content to the buffer.
4174 virtual bool PasteFromClipboard(long position
);
4177 Returns @true if we can paste from the clipboard.
4179 virtual bool CanPasteFromClipboard() const;
4182 Begin using a style.
4184 virtual bool BeginStyle(const wxRichTextAttr
& style
);
4189 virtual bool EndStyle();
4194 virtual bool EndAllStyles();
4197 Clears the style stack.
4199 virtual void ClearStyleStack();
4202 Returns the size of the style stack, for example to check correct nesting.
4204 virtual size_t GetStyleStackSize() const { return m_attributeStack
.GetCount(); }
4214 bool EndBold() { return EndStyle(); }
4217 Begins using italic.
4224 bool EndItalic() { return EndStyle(); }
4227 Begins using underline.
4229 bool BeginUnderline();
4232 Ends using underline.
4234 bool EndUnderline() { return EndStyle(); }
4237 Begins using point size.
4239 bool BeginFontSize(int pointSize
);
4242 Ends using point size.
4244 bool EndFontSize() { return EndStyle(); }
4247 Begins using this font.
4249 bool BeginFont(const wxFont
& font
);
4254 bool EndFont() { return EndStyle(); }
4257 Begins using this colour.
4259 bool BeginTextColour(const wxColour
& colour
);
4262 Ends using a colour.
4264 bool EndTextColour() { return EndStyle(); }
4267 Begins using alignment.
4269 bool BeginAlignment(wxTextAttrAlignment alignment
);
4274 bool EndAlignment() { return EndStyle(); }
4277 Begins using @a leftIndent for the left indent, and optionally @a leftSubIndent for
4278 the sub-indent. Both are expressed in tenths of a millimetre.
4280 The sub-indent is an offset from the left of the paragraph, and is used for all
4281 but the first line in a paragraph. A positive value will cause the first line to appear
4282 to the left of the subsequent lines, and a negative value will cause the first line to be
4283 indented relative to the subsequent lines.
4285 bool BeginLeftIndent(int leftIndent
, int leftSubIndent
= 0);
4290 bool EndLeftIndent() { return EndStyle(); }
4293 Begins a right indent, specified in tenths of a millimetre.
4295 bool BeginRightIndent(int rightIndent
);
4300 bool EndRightIndent() { return EndStyle(); }
4303 Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
4304 in tenths of a millimetre.
4306 bool BeginParagraphSpacing(int before
, int after
);
4309 Ends paragraph spacing.
4311 bool EndParagraphSpacing() { return EndStyle(); }
4314 Begins line spacing using the specified value. @e spacing is a multiple, where
4315 10 means single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
4317 The ::wxTextAttrLineSpacing enumeration values are defined for convenience.
4319 bool BeginLineSpacing(int lineSpacing
);
4324 bool EndLineSpacing() { return EndStyle(); }
4327 Begins numbered bullet.
4329 This call will be needed for each item in the list, and the
4330 application should take care of incrementing the numbering.
4332 @a bulletNumber is a number, usually starting with 1.
4333 @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
4334 @a bulletStyle is a bitlist of the following values:
4336 wxRichTextBuffer uses indentation to render a bulleted item.
4337 The left indent is the distance between the margin and the bullet.
4338 The content of the paragraph, including the first line, starts
4339 at leftMargin + leftSubIndent.
4340 So the distance between the left edge of the bullet and the
4341 left of the actual paragraph is leftSubIndent.
4343 bool BeginNumberedBullet(int bulletNumber
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_ARABIC
|wxTEXT_ATTR_BULLET_STYLE_PERIOD
);
4346 Ends numbered bullet.
4348 bool EndNumberedBullet() { return EndStyle(); }
4351 Begins applying a symbol bullet, using a character from the current font.
4353 See BeginNumberedBullet() for an explanation of how indentation is used
4354 to render the bulleted paragraph.
4356 bool BeginSymbolBullet(const wxString
& symbol
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_SYMBOL
);
4361 bool EndSymbolBullet() { return EndStyle(); }
4364 Begins applying a standard bullet, using one of the standard bullet names
4365 (currently @c standard/circle or @c standard/square.
4367 See BeginNumberedBullet() for an explanation of how indentation is used to
4368 render the bulleted paragraph.
4370 bool BeginStandardBullet(const wxString
& bulletName
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_STANDARD
);
4373 Ends standard bullet.
4375 bool EndStandardBullet() { return EndStyle(); }
4378 Begins named character style.
4380 bool BeginCharacterStyle(const wxString
& characterStyle
);
4383 Ends named character style.
4385 bool EndCharacterStyle() { return EndStyle(); }
4388 Begins named paragraph style.
4390 bool BeginParagraphStyle(const wxString
& paragraphStyle
);
4393 Ends named character style.
4395 bool EndParagraphStyle() { return EndStyle(); }
4398 Begins named list style.
4400 Optionally, you can also pass a level and a number.
4402 bool BeginListStyle(const wxString
& listStyle
, int level
= 1, int number
= 1);
4405 Ends named character style.
4407 bool EndListStyle() { return EndStyle(); }
4410 Begins applying wxTEXT_ATTR_URL to the content.
4412 Pass a URL and optionally, a character style to apply, since it is common
4413 to mark a URL with a familiar style such as blue text with underlining.
4415 bool BeginURL(const wxString
& url
, const wxString
& characterStyle
= wxEmptyString
);
4420 bool EndURL() { return EndStyle(); }
4425 Adds an event handler.
4427 A buffer associated with a control has the control as the only event handler,
4428 but the application is free to add more if further notification is required.
4429 All handlers are notified of an event originating from the buffer, such as
4430 the replacement of a style sheet during loading.
4432 The buffer never deletes any of the event handlers, unless RemoveEventHandler()
4433 is called with @true as the second argument.
4435 bool AddEventHandler(wxEvtHandler
* handler
);
4438 Removes an event handler from the buffer's list of handlers, deleting the
4439 object if @a deleteHandler is @true.
4441 bool RemoveEventHandler(wxEvtHandler
* handler
, bool deleteHandler
= false);
4444 Clear event handlers.
4446 void ClearEventHandlers();
4449 Send event to event handlers. If sendToAll is true, will send to all event handlers,
4450 otherwise will stop at the first successful one.
4452 bool SendEvent(wxEvent
& event
, bool sendToAll
= true);
4456 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
4461 void Copy(const wxRichTextBuffer
& obj
);
4464 Assignment operator.
4466 void operator= (const wxRichTextBuffer
& obj
) { Copy(obj
); }
4471 virtual wxRichTextObject
* Clone() const { return new wxRichTextBuffer(*this); }
4474 Submits a command to insert paragraphs.
4476 bool InsertParagraphsWithUndo(wxRichTextCtrl
* ctrl
, long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, int flags
= 0);
4479 Submits a command to insert the given text.
4481 bool InsertTextWithUndo(long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4484 Submits a command to insert a newline.
4486 bool InsertNewlineWithUndo(long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4489 Submits a command to insert the given image.
4491 bool InsertImageWithUndo(long pos
, const wxRichTextImageBlock
& imageBlock
, wxRichTextCtrl
* ctrl
, int flags
= 0,
4492 const wxRichTextAttr
& textAttr
= wxRichTextAttr());
4495 Submits a command to insert an object.
4497 wxRichTextObject
* InsertObjectWithUndo(long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
);
4500 Submits a command to delete this range.
4502 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
);
4507 void Modify(bool modify
= true) { m_modified
= modify
; }
4510 Returns @true if the buffer was modified.
4512 bool IsModified() const { return m_modified
; }
4516 Dumps contents of buffer for debugging purposes.
4518 virtual void Dump();
4519 virtual void Dump(wxTextOutputStream
& stream
) { wxRichTextParagraphLayoutBox::Dump(stream
); }
4523 Returns the file handlers.
4525 static wxList
& GetHandlers() { return sm_handlers
; }
4528 Adds a file handler to the end.
4530 static void AddHandler(wxRichTextFileHandler
*handler
);
4533 Inserts a file handler at the front.
4535 static void InsertHandler(wxRichTextFileHandler
*handler
);
4538 Removes a file handler.
4540 static bool RemoveHandler(const wxString
& name
);
4543 Finds a file handler by name.
4545 static wxRichTextFileHandler
*FindHandler(const wxString
& name
);
4548 Finds a file handler by extension and type.
4550 static wxRichTextFileHandler
*FindHandler(const wxString
& extension
, wxRichTextFileType imageType
);
4553 Finds a handler by filename or, if supplied, type.
4555 static wxRichTextFileHandler
*FindHandlerFilenameOrType(const wxString
& filename
,
4556 wxRichTextFileType imageType
);
4559 Finds a handler by type.
4561 static wxRichTextFileHandler
*FindHandler(wxRichTextFileType imageType
);
4564 Gets a wildcard incorporating all visible handlers. If @a types is present,
4565 it will be filled with the file type corresponding to each filter. This can be
4566 used to determine the type to pass to LoadFile given a selected filter.
4568 static wxString
GetExtWildcard(bool combine
= false, bool save
= false, wxArrayInt
* types
= NULL
);
4571 Clean up file handlers.
4573 static void CleanUpHandlers();
4576 Initialise the standard file handlers.
4577 Currently, only the plain text loading/saving handler is initialised by default.
4579 static void InitStandardHandlers();
4582 Returns the drawing handlers.
4584 static wxList
& GetDrawingHandlers() { return sm_drawingHandlers
; }
4587 Adds a drawing handler to the end.
4589 static void AddDrawingHandler(wxRichTextDrawingHandler
*handler
);
4592 Inserts a drawing handler at the front.
4594 static void InsertDrawingHandler(wxRichTextDrawingHandler
*handler
);
4597 Removes a drawing handler.
4599 static bool RemoveDrawingHandler(const wxString
& name
);
4602 Finds a drawing handler by name.
4604 static wxRichTextDrawingHandler
*FindDrawingHandler(const wxString
& name
);
4607 Clean up drawing handlers.
4609 static void CleanUpDrawingHandlers();
4612 Returns the renderer object.
4614 static wxRichTextRenderer
* GetRenderer() { return sm_renderer
; }
4617 Sets @a renderer as the object to be used to render certain aspects of the
4618 content, such as bullets.
4620 You can override default rendering by deriving a new class from
4621 wxRichTextRenderer or wxRichTextStdRenderer, overriding one or more
4622 virtual functions, and setting an instance of the class using this function.
4624 static void SetRenderer(wxRichTextRenderer
* renderer
);
4627 Returns the minimum margin between bullet and paragraph in 10ths of a mm.
4629 static int GetBulletRightMargin() { return sm_bulletRightMargin
; }
4632 Sets the minimum margin between bullet and paragraph in 10ths of a mm.
4634 static void SetBulletRightMargin(int margin
) { sm_bulletRightMargin
= margin
; }
4637 Returns the factor to multiply by character height to get a reasonable bullet size.
4639 static float GetBulletProportion() { return sm_bulletProportion
; }
4642 Sets the factor to multiply by character height to get a reasonable bullet size.
4644 static void SetBulletProportion(float prop
) { sm_bulletProportion
= prop
; }
4647 Returns the scale factor for calculating dimensions.
4649 double GetScale() const { return m_scale
; }
4652 Sets the scale factor for calculating dimensions.
4654 void SetScale(double scale
) { m_scale
= scale
; }
4658 /// Command processor
4659 wxCommandProcessor
* m_commandProcessor
;
4661 /// Table storing fonts
4662 wxRichTextFontTable m_fontTable
;
4664 /// Has been modified?
4667 /// Collapsed command stack
4668 int m_batchedCommandDepth
;
4670 /// Name for collapsed command
4671 wxString m_batchedCommandsName
;
4673 /// Current collapsed command accumulating actions
4674 wxRichTextCommand
* m_batchedCommand
;
4676 /// Whether to suppress undo
4679 /// Style sheet, if any
4680 wxRichTextStyleSheet
* m_styleSheet
;
4682 /// List of event handlers that will be notified of events
4683 wxList m_eventHandlers
;
4685 /// Stack of attributes for convenience functions
4686 wxList m_attributeStack
;
4688 /// Flags to be passed to handlers
4692 static wxList sm_handlers
;
4694 /// Drawing handlers
4695 static wxList sm_drawingHandlers
;
4698 static wxRichTextRenderer
* sm_renderer
;
4700 /// Minimum margin between bullet and paragraph in 10ths of a mm
4701 static int sm_bulletRightMargin
;
4703 /// Factor to multiply by character height to get a reasonable bullet size
4704 static float sm_bulletProportion
;
4706 /// Scaling factor in use: needed to calculate correct dimensions when printing
4711 @class wxRichTextCell
4713 wxRichTextCell is the cell in a table.
4716 class WXDLLIMPEXP_RICHTEXT wxRichTextCell
: public wxRichTextBox
4718 DECLARE_DYNAMIC_CLASS(wxRichTextCell
)
4723 Default constructor; optionally pass the parent object.
4726 wxRichTextCell(wxRichTextObject
* parent
= NULL
);
4732 wxRichTextCell(const wxRichTextCell
& obj
): wxRichTextBox() { Copy(obj
); }
4736 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4738 virtual wxString
GetXMLNodeName() const { return wxT("cell"); }
4740 virtual bool CanEditProperties() const { return true; }
4742 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
4744 virtual wxString
GetPropertiesMenuLabel() const { return _("&Cell"); }
4750 virtual wxRichTextObject
* Clone() const { return new wxRichTextCell(*this); }
4752 void Copy(const wxRichTextCell
& obj
);
4758 @class wxRichTextTable
4760 wxRichTextTable represents a table with arbitrary columns and rows.
4763 WX_DEFINE_ARRAY_PTR(wxRichTextObject
*, wxRichTextObjectPtrArray
);
4764 WX_DECLARE_OBJARRAY(wxRichTextObjectPtrArray
, wxRichTextObjectPtrArrayArray
);
4766 class WXDLLIMPEXP_RICHTEXT wxRichTextTable
: public wxRichTextBox
4768 DECLARE_DYNAMIC_CLASS(wxRichTextTable
)
4774 Default constructor; optionally pass the parent object.
4777 wxRichTextTable(wxRichTextObject
* parent
= NULL
);
4783 wxRichTextTable(const wxRichTextTable
& obj
): wxRichTextBox() { Copy(obj
); }
4787 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4789 virtual wxString
GetXMLNodeName() const { return wxT("table"); }
4791 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4793 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
4795 virtual bool DeleteRange(const wxRichTextRange
& range
);
4797 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
4800 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4803 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4804 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4807 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4808 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4811 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
4813 virtual void CalculateRange(long start
, long& end
);
4815 // Can this object handle the selections of its children? FOr example, a table.
4816 virtual bool HandlesChildSelections() const { return true; }
4818 /// Returns a selection object specifying the selections between start and end character positions.
4819 /// For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
4820 virtual wxRichTextSelection
GetSelection(long start
, long end
) const;
4822 virtual bool CanEditProperties() const { return true; }
4824 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
4826 virtual wxString
GetPropertiesMenuLabel() const { return _("&Table"); }
4828 // Returns true if objects of this class can accept the focus, i.e. a call to SetFocusObject
4829 // is possible. For example, containers supporting text, such as a text box object, can accept the focus,
4830 // but a table can't (set the focus to individual cells instead).
4831 virtual bool AcceptsFocus() const { return false; }
4836 Returns the cells array.
4838 const wxRichTextObjectPtrArrayArray
& GetCells() const { return m_cells
; }
4841 Returns the cells array.
4843 wxRichTextObjectPtrArrayArray
& GetCells() { return m_cells
; }
4846 Returns the row count.
4848 int GetRowCount() const { return m_rowCount
; }
4851 Returns the column count.
4853 int GetColumnCount() const { return m_colCount
; }
4856 Returns the cell at the given row/column position.
4858 virtual wxRichTextCell
* GetCell(int row
, int col
) const;
4861 Returns the cell at the given character position (in the range of the table).
4863 virtual wxRichTextCell
* GetCell(long pos
) const;
4866 Returns the row/column for a given character position.
4868 virtual bool GetCellRowColumnPosition(long pos
, int& row
, int& col
) const;
4876 virtual void ClearTable();
4879 Creates a table of the given dimensions.
4882 virtual bool CreateTable(int rows
, int cols
);
4885 Sets the attributes for the cells specified by the selection.
4888 virtual bool SetCellStyle(const wxRichTextSelection
& selection
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
4891 Deletes rows from the given row position.
4894 virtual bool DeleteRows(int startRow
, int noRows
= 1);
4897 Deletes columns from the given column position.
4900 virtual bool DeleteColumns(int startCol
, int noCols
= 1);
4903 Adds rows from the given row position.
4906 virtual bool AddRows(int startRow
, int noRows
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
4909 Adds columns from the given column position.
4912 virtual bool AddColumns(int startCol
, int noCols
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
4914 // Makes a clone of this object.
4915 virtual wxRichTextObject
* Clone() const { return new wxRichTextTable(*this); }
4917 // Copies this object.
4918 void Copy(const wxRichTextTable
& obj
);
4925 // An array of rows, each of which is a wxRichTextObjectPtrArray containing
4926 // the cell objects. The cell objects are also children of this object.
4927 // Problem: if boxes are immediate children of a box, this will cause problems
4928 // with wxRichTextParagraphLayoutBox functions (and functions elsewhere) that
4929 // expect to find just paragraphs. May have to adjust the way we handle the
4930 // hierarchy to accept non-paragraph objects in a paragraph layout box.
4931 // We'll be overriding much wxRichTextParagraphLayoutBox functionality so this
4932 // may not be such a problem. Perhaps the table should derive from a different
4934 wxRichTextObjectPtrArrayArray m_cells
;
4939 The command identifiers for Do/Undo.
4942 enum wxRichTextCommandId
4946 wxRICHTEXT_CHANGE_ATTRIBUTES
,
4947 wxRICHTEXT_CHANGE_STYLE
,
4948 wxRICHTEXT_CHANGE_OBJECT
4952 @class wxRichTextObjectAddress
4954 A class for specifying an object anywhere in an object hierarchy,
4955 without using a pointer, necessary since wxRTC commands may delete
4956 and recreate sub-objects so physical object addresses change. An array
4957 of positions (one per hierarchy level) is used.
4959 @library{wxrichtext}
4962 @see wxRichTextCommand
4965 class WXDLLIMPEXP_RICHTEXT wxRichTextObjectAddress
4969 Creates the address given a container and an object.
4971 wxRichTextObjectAddress(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
) { Create(topLevelContainer
, obj
); }
4974 wxRichTextObjectAddress() { Init(); }
4977 wxRichTextObjectAddress(const wxRichTextObjectAddress
& address
) { Copy(address
); }
4984 void Copy(const wxRichTextObjectAddress
& address
) { m_address
= address
.m_address
; }
4987 Assignment operator.
4989 void operator=(const wxRichTextObjectAddress
& address
) { Copy(address
); }
4992 Returns the object specified by the address, given a top level container.
4994 wxRichTextObject
* GetObject(wxRichTextParagraphLayoutBox
* topLevelContainer
) const;
4997 Creates the address given a container and an object.
4999 bool Create(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
);
5002 Returns the array of integers representing the object address.
5004 wxArrayInt
& GetAddress() { return m_address
; }
5007 Returns the array of integers representing the object address.
5009 const wxArrayInt
& GetAddress() const { return m_address
; }
5012 Sets the address from an array of integers.
5014 void SetAddress(const wxArrayInt
& address
) { m_address
= address
; }
5018 wxArrayInt m_address
;
5021 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
5024 @class wxRichTextCommand
5026 Implements a command on the undo/redo stack. A wxRichTextCommand object contains one or more wxRichTextAction
5027 objects, allowing aggregation of a number of operations into one command.
5029 @library{wxrichtext}
5032 @see wxRichTextAction
5035 class WXDLLIMPEXP_RICHTEXT wxRichTextCommand
: public wxCommand
5039 Constructor for one action.
5041 wxRichTextCommand(const wxString
& name
, wxRichTextCommandId id
, wxRichTextBuffer
* buffer
,
5042 wxRichTextParagraphLayoutBox
* container
, wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5045 Constructor for multiple actions.
5047 wxRichTextCommand(const wxString
& name
);
5049 virtual ~wxRichTextCommand();
5052 Performs the command.
5062 Adds an action to the action list.
5064 void AddAction(wxRichTextAction
* action
);
5067 Clears the action list.
5069 void ClearActions();
5072 Returns the action list.
5074 wxList
& GetActions() { return m_actions
; }
5082 @class wxRichTextAction
5084 Implements a part of a command.
5086 @library{wxrichtext}
5089 @see wxRichTextCommand
5092 class WXDLLIMPEXP_RICHTEXT wxRichTextAction
: public wxObject
5096 Constructor. @a buffer is the top-level buffer, while @a container is the object within
5097 which the action is taking place. In the simplest case, they are the same.
5099 wxRichTextAction(wxRichTextCommand
* cmd
, const wxString
& name
, wxRichTextCommandId id
,
5100 wxRichTextBuffer
* buffer
, wxRichTextParagraphLayoutBox
* container
,
5101 wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5103 virtual ~wxRichTextAction();
5106 Performs the action.
5116 Updates the control appearance, optimizing if possible given information from the call to Layout.
5118 void UpdateAppearance(long caretPosition
, bool sendUpdateEvent
= false,
5119 wxArrayInt
* optimizationLineCharPositions
= NULL
, wxArrayInt
* optimizationLineYPositions
= NULL
, bool isDoCmd
= true);
5122 Replaces the buffer paragraphs with the given fragment.
5124 void ApplyParagraphs(const wxRichTextParagraphLayoutBox
& fragment
);
5127 Returns the new fragments.
5129 wxRichTextParagraphLayoutBox
& GetNewParagraphs() { return m_newParagraphs
; }
5132 Returns the old fragments.
5134 wxRichTextParagraphLayoutBox
& GetOldParagraphs() { return m_oldParagraphs
; }
5137 Returns the attributes, for single-object commands.
5139 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
5142 Returns the object to replace the one at the position defined by the container address
5143 and the action's range start position.
5145 wxRichTextObject
* GetObject() const { return m_object
; }
5148 Sets the object to replace the one at the position defined by the container address
5149 and the action's range start position.
5151 void SetObject(wxRichTextObject
* obj
) { m_object
= obj
; m_objectAddress
.Create(m_buffer
, m_object
); }
5154 Makes an address from the given object.
5156 void MakeObject(wxRichTextObject
* obj
) { m_objectAddress
.Create(m_buffer
, obj
); }
5159 Calculate arrays for refresh optimization.
5161 void CalculateRefreshOptimizations(wxArrayInt
& optimizationLineCharPositions
, wxArrayInt
& optimizationLineYPositions
);
5164 Sets the position used for e.g. insertion.
5166 void SetPosition(long pos
) { m_position
= pos
; }
5169 Returns the position used for e.g. insertion.
5171 long GetPosition() const { return m_position
; }
5174 Sets the range for e.g. deletion.
5176 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
5179 Returns the range for e.g. deletion.
5181 const wxRichTextRange
& GetRange() const { return m_range
; }
5184 Returns the address (nested position) of the container within the buffer being manipulated.
5186 wxRichTextObjectAddress
& GetContainerAddress() { return m_containerAddress
; }
5189 Returns the address (nested position) of the container within the buffer being manipulated.
5191 const wxRichTextObjectAddress
& GetContainerAddress() const { return m_containerAddress
; }
5194 Sets the address (nested position) of the container within the buffer being manipulated.
5196 void SetContainerAddress(const wxRichTextObjectAddress
& address
) { m_containerAddress
= address
; }
5199 Sets the address (nested position) of the container within the buffer being manipulated.
5201 void SetContainerAddress(wxRichTextParagraphLayoutBox
* container
, wxRichTextObject
* obj
) { m_containerAddress
.Create(container
, obj
); }
5204 Returns the container that this action refers to, using the container address and top-level buffer.
5206 wxRichTextParagraphLayoutBox
* GetContainer() const;
5209 Returns the action name.
5211 const wxString
& GetName() const { return m_name
; }
5218 wxRichTextBuffer
* m_buffer
;
5220 // The address (nested position) of the container being manipulated.
5221 // This is necessary because objects are deleted, and we can't
5222 // therefore store actual pointers.
5223 wxRichTextObjectAddress m_containerAddress
;
5226 wxRichTextCtrl
* m_ctrl
;
5228 // Stores the new paragraphs
5229 wxRichTextParagraphLayoutBox m_newParagraphs
;
5231 // Stores the old paragraphs
5232 wxRichTextParagraphLayoutBox m_oldParagraphs
;
5234 // Stores an object to replace the one at the position
5235 // defined by the container address and the action's range start position.
5236 wxRichTextObject
* m_object
;
5238 // Stores the attributes
5239 wxRichTextAttr m_attributes
;
5241 // The address of the object being manipulated (used for changing an individual object or its attributes)
5242 wxRichTextObjectAddress m_objectAddress
;
5244 // Stores the old attributes
5245 // wxRichTextAttr m_oldAttributes;
5247 // The affected range
5248 wxRichTextRange m_range
;
5250 // The insertion point for this command
5253 // Ignore 1st 'Do' operation because we already did it
5256 // The command identifier
5257 wxRichTextCommandId m_cmdId
;
5264 // Include style sheet when loading and saving
5265 #define wxRICHTEXT_HANDLER_INCLUDE_STYLESHEET 0x0001
5267 // Save images to memory file system in HTML handler
5268 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY 0x0010
5270 // Save images to files in HTML handler
5271 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_FILES 0x0020
5273 // Save images as inline base64 data in HTML handler
5274 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_BASE64 0x0040
5276 // Don't write header and footer (or BODY), so we can include the fragment
5277 // in a larger document
5278 #define wxRICHTEXT_HANDLER_NO_HEADER_FOOTER 0x0080
5280 // Convert the more common face names to names that will work on the current platform
5281 // in a larger document
5282 #define wxRICHTEXT_HANDLER_CONVERT_FACENAMES 0x0100
5285 @class wxRichTextFileHandler
5287 The base class for file handlers.
5289 @library{wxrichtext}
5292 @see wxRichTextBuffer, wxRichTextCtrl
5295 class WXDLLIMPEXP_RICHTEXT wxRichTextFileHandler
: public wxObject
5297 DECLARE_CLASS(wxRichTextFileHandler
)
5300 Creates a file handler object.
5302 wxRichTextFileHandler(const wxString
& name
= wxEmptyString
, const wxString
& ext
= wxEmptyString
, int type
= 0)
5303 : m_name(name
), m_extension(ext
), m_type(type
), m_flags(0), m_visible(true)
5308 Loads the buffer from a stream.
5309 Not all handlers will implement file loading.
5311 bool LoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
)
5312 { return DoLoadFile(buffer
, stream
); }
5315 Saves the buffer to a stream.
5316 Not all handlers will implement file saving.
5318 bool SaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
)
5319 { return DoSaveFile(buffer
, stream
); }
5322 #if wxUSE_FFILE && wxUSE_STREAMS
5324 Loads the buffer from a file.
5326 virtual bool LoadFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5329 Saves the buffer to a file.
5331 virtual bool SaveFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5332 #endif // wxUSE_STREAMS && wxUSE_STREAMS
5335 Returns @true if we handle this filename (if using files). By default, checks the extension.
5337 virtual bool CanHandle(const wxString
& filename
) const;
5340 Returns @true if we can save using this handler.
5342 virtual bool CanSave() const { return false; }
5345 Returns @true if we can load using this handler.
5347 virtual bool CanLoad() const { return false; }
5350 Returns @true if this handler should be visible to the user.
5352 virtual bool IsVisible() const { return m_visible
; }
5355 Sets whether the handler should be visible to the user (via the application's
5356 load and save dialogs).
5358 virtual void SetVisible(bool visible
) { m_visible
= visible
; }
5361 Sets the name of the nandler.
5363 void SetName(const wxString
& name
) { m_name
= name
; }
5366 Returns the name of the nandler.
5368 wxString
GetName() const { return m_name
; }
5371 Sets the default extension to recognise.
5373 void SetExtension(const wxString
& ext
) { m_extension
= ext
; }
5376 Returns the default extension to recognise.
5378 wxString
GetExtension() const { return m_extension
; }
5381 Sets the handler type.
5383 void SetType(int type
) { m_type
= type
; }
5386 Returns the handler type.
5388 int GetType() const { return m_type
; }
5391 Sets flags that change the behaviour of loading or saving.
5392 See the documentation for each handler class to see what flags are relevant
5395 You call this function directly if you are using a file handler explicitly
5396 (without going through the text control or buffer LoadFile/SaveFile API).
5397 Or, you can call the control or buffer's SetHandlerFlags function to set
5398 the flags that will be used for subsequent load and save operations.
5400 void SetFlags(int flags
) { m_flags
= flags
; }
5403 Returns flags controlling how loading and saving is done.
5405 int GetFlags() const { return m_flags
; }
5408 Sets the encoding to use when saving a file. If empty, a suitable encoding is chosen.
5410 void SetEncoding(const wxString
& encoding
) { m_encoding
= encoding
; }
5413 Returns the encoding to use when saving a file. If empty, a suitable encoding is chosen.
5415 const wxString
& GetEncoding() const { return m_encoding
; }
5421 Override to load content from @a stream into @a buffer.
5423 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
) = 0;
5426 Override to save content to @a stream from @a buffer.
5428 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
) = 0;
5432 wxString m_encoding
;
5433 wxString m_extension
;
5440 @class wxRichTextPlainTextHandler
5442 Implements saving a buffer to plain text.
5444 @library{wxrichtext}
5447 @see wxRichTextFileHandler, wxRichTextBuffer, wxRichTextCtrl
5450 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainTextHandler
: public wxRichTextFileHandler
5452 DECLARE_CLASS(wxRichTextPlainTextHandler
)
5454 wxRichTextPlainTextHandler(const wxString
& name
= wxT("Text"),
5455 const wxString
& ext
= wxT("txt"),
5456 wxRichTextFileType type
= wxRICHTEXT_TYPE_TEXT
)
5457 : wxRichTextFileHandler(name
, ext
, type
)
5460 // Can we save using this handler?
5461 virtual bool CanSave() const { return true; }
5463 // Can we load using this handler?
5464 virtual bool CanLoad() const { return true; }
5469 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
);
5470 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
);
5476 @class wxRichTextDrawingHandler
5478 The base class for custom drawing handlers.
5479 Currently, drawing handlers can provide virtual handlers.
5481 @library{wxrichtext}
5484 @see wxRichTextBuffer, wxRichTextCtrl
5487 class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingHandler
: public wxObject
5489 DECLARE_CLASS(wxRichTextDrawingHandler
)
5492 Creates a drawing handler object.
5494 wxRichTextDrawingHandler(const wxString
& name
= wxEmptyString
)
5499 Returns @true if this object has virtual attributes that we can provide.
5501 virtual bool HasVirtualAttributes(wxRichTextObject
* obj
) const = 0;
5504 Provides virtual attributes that we can provide.
5506 virtual bool GetVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const = 0;
5509 Sets the name of the nandler.
5511 void SetName(const wxString
& name
) { m_name
= name
; }
5514 Returns the name of the nandler.
5516 wxString
GetName() const { return m_name
; }
5526 @class wxRichTextBufferDataObject
5528 Implements a rich text data object for clipboard transfer.
5530 @library{wxrichtext}
5533 @see wxDataObjectSimple, wxRichTextBuffer, wxRichTextCtrl
5536 class WXDLLIMPEXP_RICHTEXT wxRichTextBufferDataObject
: public wxDataObjectSimple
5540 The constructor doesn't copy the pointer, so it shouldn't go away while this object
5543 wxRichTextBufferDataObject(wxRichTextBuffer
* richTextBuffer
= NULL
);
5544 virtual ~wxRichTextBufferDataObject();
5547 After a call to this function, the buffer is owned by the caller and it
5548 is responsible for deleting it.
5550 wxRichTextBuffer
* GetRichTextBuffer();
5553 Returns the id for the new data format.
5555 static const wxChar
* GetRichTextBufferFormatId() { return ms_richTextBufferFormatId
; }
5557 // base class pure virtuals
5559 virtual wxDataFormat
GetPreferredFormat(Direction dir
) const;
5560 virtual size_t GetDataSize() const;
5561 virtual bool GetDataHere(void *pBuf
) const;
5562 virtual bool SetData(size_t len
, const void *buf
);
5566 virtual size_t GetDataSize(const wxDataFormat
&) const { return GetDataSize(); }
5567 virtual bool GetDataHere(const wxDataFormat
&, void *buf
) const { return GetDataHere(buf
); }
5568 virtual bool SetData(const wxDataFormat
&, size_t len
, const void *buf
) { return SetData(len
, buf
); }
5571 wxDataFormat m_formatRichTextBuffer
; // our custom format
5572 wxRichTextBuffer
* m_richTextBuffer
; // our data
5573 static const wxChar
* ms_richTextBufferFormatId
; // our format id
5579 @class wxRichTextRenderer
5581 This class isolates some common drawing functionality.
5583 @library{wxrichtext}
5586 @see wxRichTextBuffer, wxRichTextCtrl
5589 class WXDLLIMPEXP_RICHTEXT wxRichTextRenderer
: public wxObject
5595 wxRichTextRenderer() {}
5596 virtual ~wxRichTextRenderer() {}
5599 Draws a standard bullet, as specified by the value of GetBulletName. This function should be overridden.
5601 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
5604 Draws a bullet that can be described by text, such as numbered or symbol bullets. This function should be overridden.
5606 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
) = 0;
5609 Draws a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName. This function should be overridden.
5611 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
5614 Enumerate the standard bullet names currently supported. This function should be overridden.
5616 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
) = 0;
5620 @class wxRichTextStdRenderer
5622 The standard renderer for drawing bullets.
5624 @library{wxrichtext}
5627 @see wxRichTextRenderer, wxRichTextBuffer, wxRichTextCtrl
5630 class WXDLLIMPEXP_RICHTEXT wxRichTextStdRenderer
: public wxRichTextRenderer
5636 wxRichTextStdRenderer() {}
5638 // Draw a standard bullet, as specified by the value of GetBulletName
5639 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
5641 // Draw a bullet that can be described by text, such as numbered or symbol bullets
5642 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
);
5644 // Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
5645 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
5647 // Enumerate the standard bullet names currently supported
5648 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
);
5656 inline bool wxRichTextHasStyle(int flags
, int style
)
5658 return ((flags
& style
) == style
);
5661 /// Compare two attribute objects
5662 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
5663 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
5665 /// Compare two attribute objects, but take into account the flags
5666 /// specifying attributes of interest.
5667 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEqPartial(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
5669 /// Apply one style to another
5670 WXDLLIMPEXP_RICHTEXT
bool wxRichTextApplyStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
* compareWith
= NULL
);
5672 // Remove attributes
5673 WXDLLIMPEXP_RICHTEXT
bool wxRichTextRemoveStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
);
5675 /// Combine two bitlists
5676 WXDLLIMPEXP_RICHTEXT
bool wxRichTextCombineBitlists(int& valueA
, int valueB
, int& flagsA
, int flagsB
);
5678 /// Compare two bitlists
5679 WXDLLIMPEXP_RICHTEXT
bool wxRichTextBitlistsEqPartial(int valueA
, int valueB
, int flags
);
5681 /// Split into paragraph and character styles
5682 WXDLLIMPEXP_RICHTEXT
bool wxRichTextSplitParaCharStyles(const wxRichTextAttr
& style
, wxRichTextAttr
& parStyle
, wxRichTextAttr
& charStyle
);
5685 WXDLLIMPEXP_RICHTEXT
bool wxRichTextTabsEq(const wxArrayInt
& tabs1
, const wxArrayInt
& tabs2
);
5687 /// Convert a decimal to Roman numerals
5688 WXDLLIMPEXP_RICHTEXT wxString
wxRichTextDecimalToRoman(long n
);
5690 // Collects the attributes that are common to a range of content, building up a note of
5691 // which attributes are absent in some objects and which clash in some objects.
5692 WXDLLIMPEXP_RICHTEXT
void wxTextAttrCollectCommonAttributes(wxTextAttr
& currentStyle
, const wxTextAttr
& attr
, wxTextAttr
& clashingAttr
, wxTextAttr
& absentAttr
);
5694 WXDLLIMPEXP_RICHTEXT
void wxRichTextModuleInit();