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,
82 // Don't recurse into objects marked as atomic
83 wxRICHTEXT_HITTEST_HONOUR_ATOMIC
= 0x80
87 Flags for GetRangeSize.
90 #define wxRICHTEXT_FORMATTED 0x01
91 #define wxRICHTEXT_UNFORMATTED 0x02
92 #define wxRICHTEXT_CACHE_SIZE 0x04
93 #define wxRICHTEXT_HEIGHT_ONLY 0x08
96 Flags for SetStyle/SetListStyle.
99 #define wxRICHTEXT_SETSTYLE_NONE 0x00
101 // Specifies that this operation should be undoable
102 #define wxRICHTEXT_SETSTYLE_WITH_UNDO 0x01
104 // Specifies that the style should not be applied if the
105 // combined style at this point is already the style in question.
106 #define wxRICHTEXT_SETSTYLE_OPTIMIZE 0x02
108 // Specifies that the style should only be applied to paragraphs,
109 // and not the content. This allows content styling to be
110 // preserved independently from that of e.g. a named paragraph style.
111 #define wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY 0x04
113 // Specifies that the style should only be applied to characters,
114 // and not the paragraph. This allows content styling to be
115 // preserved independently from that of e.g. a named paragraph style.
116 #define wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY 0x08
118 // For SetListStyle only: specifies starting from the given number, otherwise
119 // deduces number from existing attributes
120 #define wxRICHTEXT_SETSTYLE_RENUMBER 0x10
122 // For SetListStyle only: specifies the list level for all paragraphs, otherwise
123 // the current indentation will be used
124 #define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20
126 // Resets the existing style before applying the new style
127 #define wxRICHTEXT_SETSTYLE_RESET 0x40
129 // Removes the given style instead of applying it
130 #define wxRICHTEXT_SETSTYLE_REMOVE 0x80
133 Flags for SetProperties.
136 #define wxRICHTEXT_SETPROPERTIES_NONE 0x00
138 // Specifies that this operation should be undoable
139 #define wxRICHTEXT_SETPROPERTIES_WITH_UNDO 0x01
141 // Specifies that the properties should only be applied to paragraphs,
142 // and not the content.
143 #define wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY 0x02
145 // Specifies that the properties should only be applied to characters,
146 // and not the paragraph.
147 #define wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY 0x04
149 // Resets the existing properties before applying the new properties.
150 #define wxRICHTEXT_SETPROPERTIES_RESET 0x08
152 // Removes the given properties instead of applying them.
153 #define wxRICHTEXT_SETPROPERTIES_REMOVE 0x10
156 Flags for object insertion.
159 #define wxRICHTEXT_INSERT_NONE 0x00
160 #define wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE 0x01
161 #define wxRICHTEXT_INSERT_INTERACTIVE 0x02
163 // A special flag telling the buffer to keep the first paragraph style
164 // as-is, when deleting a paragraph marker. In future we might pass a
165 // flag to InsertFragment and DeleteRange to indicate the appropriate mode.
166 #define wxTEXT_ATTR_KEEP_FIRST_PARA_STYLE 0x10000000
169 Default superscript/subscript font multiplication factor.
172 #define wxSCRIPT_MUL_FACTOR 1.5
175 The type for wxTextAttrDimension flags.
177 typedef unsigned short wxTextAttrDimensionFlags
;
180 Miscellaneous text box flags
182 enum wxTextBoxAttrFlags
184 wxTEXT_BOX_ATTR_FLOAT
= 0x00000001,
185 wxTEXT_BOX_ATTR_CLEAR
= 0x00000002,
186 wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
= 0x00000004,
187 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
= 0x00000008
191 Whether a value is present, used in dimension flags.
193 enum wxTextAttrValueFlags
195 wxTEXT_ATTR_VALUE_VALID
= 0x1000,
196 wxTEXT_ATTR_VALUE_VALID_MASK
= 0x1000
200 Units, included in the dimension value.
204 wxTEXT_ATTR_UNITS_TENTHS_MM
= 0x0001,
205 wxTEXT_ATTR_UNITS_PIXELS
= 0x0002,
206 wxTEXT_ATTR_UNITS_PERCENTAGE
= 0x0004,
207 wxTEXT_ATTR_UNITS_POINTS
= 0x0008,
209 wxTEXT_ATTR_UNITS_MASK
= 0x000F
213 Position alternatives, included in the dimension flags.
215 enum wxTextBoxAttrPosition
217 wxTEXT_BOX_ATTR_POSITION_STATIC
= 0x0000, // Default is static, i.e. as per normal layout
218 wxTEXT_BOX_ATTR_POSITION_RELATIVE
= 0x0010, // Relative to the relevant edge
219 wxTEXT_BOX_ATTR_POSITION_ABSOLUTE
= 0x0020,
221 wxTEXT_BOX_ATTR_POSITION_MASK
= 0x00F0
225 @class wxTextAttrDimension
227 A class representing a rich text dimension, including units and position.
232 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimensions
235 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimension
241 wxTextAttrDimension() { Reset(); }
243 Constructor taking value and units flag.
245 wxTextAttrDimension(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { m_value
= value
; m_flags
= units
|wxTEXT_ATTR_VALUE_VALID
; }
248 Resets the dimension value and flags.
250 void Reset() { m_value
= 0; m_flags
= 0; }
253 Partial equality test.
255 bool EqPartial(const wxTextAttrDimension
& dim
) const;
257 /** Apply the dimension, but not those identical to @a compareWith if present.
259 bool Apply(const wxTextAttrDimension
& dim
, const wxTextAttrDimension
* compareWith
= NULL
);
261 /** Collects the attributes that are common to a range of content, building up a note of
262 which attributes are absent in some objects and which clash in some objects.
264 void CollectCommonAttributes(const wxTextAttrDimension
& attr
, wxTextAttrDimension
& clashingAttr
, wxTextAttrDimension
& absentAttr
);
269 bool operator==(const wxTextAttrDimension
& dim
) const { return m_value
== dim
.m_value
&& m_flags
== dim
.m_flags
; }
272 Returns the integer value of the dimension.
274 int GetValue() const { return m_value
; }
277 Returns the floating-pointing value of the dimension in mm.
280 float GetValueMM() const { return float(m_value
) / 10.0; }
283 Sets the value of the dimension in mm.
285 void SetValueMM(float value
) { m_value
= (int) ((value
* 10.0) + 0.5); m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
288 Sets the integer value of the dimension.
290 void SetValue(int value
) { m_value
= value
; m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
293 Sets the integer value of the dimension, passing dimension flags.
295 void SetValue(int value
, wxTextAttrDimensionFlags flags
) { SetValue(value
); m_flags
= flags
; }
298 Sets the integer value and units.
300 void SetValue(int value
, wxTextAttrUnits units
) { m_value
= value
; m_flags
= units
| wxTEXT_ATTR_VALUE_VALID
; }
305 void SetValue(const wxTextAttrDimension
& dim
) { (*this) = dim
; }
308 Gets the units of the dimension.
310 wxTextAttrUnits
GetUnits() const { return (wxTextAttrUnits
) (m_flags
& wxTEXT_ATTR_UNITS_MASK
); }
313 Sets the units of the dimension.
315 void SetUnits(wxTextAttrUnits units
) { m_flags
&= ~wxTEXT_ATTR_UNITS_MASK
; m_flags
|= units
; }
318 Gets the position flags.
320 wxTextBoxAttrPosition
GetPosition() const { return (wxTextBoxAttrPosition
) (m_flags
& wxTEXT_BOX_ATTR_POSITION_MASK
); }
323 Sets the position flags.
325 void SetPosition(wxTextBoxAttrPosition pos
) { m_flags
&= ~wxTEXT_BOX_ATTR_POSITION_MASK
; m_flags
|= pos
; }
328 Returns @true if the dimension is valid.
330 bool IsValid() const { return (m_flags
& wxTEXT_ATTR_VALUE_VALID
) != 0; }
335 void SetValid(bool b
) { m_flags
&= ~wxTEXT_ATTR_VALUE_VALID_MASK
; m_flags
|= (b
? wxTEXT_ATTR_VALUE_VALID
: 0); }
338 Gets the dimension flags.
340 wxTextAttrDimensionFlags
GetFlags() const { return m_flags
; }
343 Sets the dimension flags.
345 void SetFlags(wxTextAttrDimensionFlags flags
) { m_flags
= flags
; }
348 wxTextAttrDimensionFlags m_flags
;
352 @class wxTextAttrDimensions
353 A class for left, right, top and bottom dimensions.
358 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
361 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensions
367 wxTextAttrDimensions() {}
370 Resets the value and flags for all dimensions.
372 void Reset() { m_left
.Reset(); m_top
.Reset(); m_right
.Reset(); m_bottom
.Reset(); }
377 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
; }
380 Partial equality test.
383 bool EqPartial(const wxTextAttrDimensions
& dims
) const;
386 Apply border to 'this', but not if the same as @a compareWith.
389 bool Apply(const wxTextAttrDimensions
& dims
, const wxTextAttrDimensions
* compareWith
= NULL
);
392 Collects the attributes that are common to a range of content, building up a note of
393 which attributes are absent in some objects and which clash in some objects.
396 void CollectCommonAttributes(const wxTextAttrDimensions
& attr
, wxTextAttrDimensions
& clashingAttr
, wxTextAttrDimensions
& absentAttr
);
399 Remove specified attributes from this object.
401 bool RemoveStyle(const wxTextAttrDimensions
& attr
);
404 Gets the left dimension.
406 const wxTextAttrDimension
& GetLeft() const { return m_left
; }
407 wxTextAttrDimension
& GetLeft() { return m_left
; }
410 Gets the right dimension.
413 const wxTextAttrDimension
& GetRight() const { return m_right
; }
414 wxTextAttrDimension
& GetRight() { return m_right
; }
417 Gets the top dimension.
420 const wxTextAttrDimension
& GetTop() const { return m_top
; }
421 wxTextAttrDimension
& GetTop() { return m_top
; }
424 Gets the bottom dimension.
427 const wxTextAttrDimension
& GetBottom() const { return m_bottom
; }
428 wxTextAttrDimension
& GetBottom() { return m_bottom
; }
431 Are all dimensions valid?
434 bool IsValid() const { return m_left
.IsValid() && m_top
.IsValid() && m_right
.IsValid() && m_bottom
.IsValid(); }
436 wxTextAttrDimension m_left
;
437 wxTextAttrDimension m_top
;
438 wxTextAttrDimension m_right
;
439 wxTextAttrDimension m_bottom
;
443 @class wxTextAttrSize
444 A class for representing width and height.
449 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
452 class WXDLLIMPEXP_RICHTEXT wxTextAttrSize
461 Resets the width and height dimensions.
463 void Reset() { m_width
.Reset(); m_height
.Reset(); }
468 bool operator==(const wxTextAttrSize
& size
) const { return m_width
== size
.m_width
&& m_height
== size
.m_height
; }
471 Partial equality test.
473 bool EqPartial(const wxTextAttrSize
& dims
) const;
476 Apply border to this object, but not if the same as @a compareWith.
478 bool Apply(const wxTextAttrSize
& dims
, const wxTextAttrSize
* compareWith
= NULL
);
481 Collects the attributes that are common to a range of content, building up a note of
482 which attributes are absent in some objects and which clash in some objects.
484 void CollectCommonAttributes(const wxTextAttrSize
& attr
, wxTextAttrSize
& clashingAttr
, wxTextAttrSize
& absentAttr
);
487 Removes the specified attributes from this object.
489 bool RemoveStyle(const wxTextAttrSize
& attr
);
494 wxTextAttrDimension
& GetWidth() { return m_width
; }
495 const wxTextAttrDimension
& GetWidth() const { return m_width
; }
500 void SetWidth(int value
, wxTextAttrDimensionFlags flags
) { m_width
.SetValue(value
, flags
); }
505 void SetWidth(int value
, wxTextAttrUnits units
) { m_width
.SetValue(value
, units
); }
510 void SetWidth(const wxTextAttrDimension
& dim
) { m_width
.SetValue(dim
); }
515 wxTextAttrDimension
& GetHeight() { return m_height
; }
516 const wxTextAttrDimension
& GetHeight() const { return m_height
; }
521 void SetHeight(int value
, wxTextAttrDimensionFlags flags
) { m_height
.SetValue(value
, flags
); }
526 void SetHeight(int value
, wxTextAttrUnits units
) { m_height
.SetValue(value
, units
); }
531 void SetHeight(const wxTextAttrDimension
& dim
) { m_height
.SetValue(dim
); }
536 bool IsValid() const { return m_width
.IsValid() && m_height
.IsValid(); }
538 wxTextAttrDimension m_width
;
539 wxTextAttrDimension m_height
;
543 @class wxTextAttrDimensionConverter
544 A class to make it easier to convert dimensions.
549 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
552 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensionConverter
558 wxTextAttrDimensionConverter(wxDC
& dc
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
562 wxTextAttrDimensionConverter(int ppi
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
565 Gets the pixel size for the given dimension.
567 int GetPixels(const wxTextAttrDimension
& dim
, int direction
= wxHORIZONTAL
) const;
569 Gets the mm size for the given dimension.
571 int GetTenthsMM(const wxTextAttrDimension
& dim
) const;
574 Converts tenths of a mm to pixels.
576 int ConvertTenthsMMToPixels(int units
) const;
578 Converts pixels to tenths of a mm.
580 int ConvertPixelsToTenthsMM(int pixels
) const;
588 Border styles, used with wxTextAttrBorder.
590 enum wxTextAttrBorderStyle
592 wxTEXT_BOX_ATTR_BORDER_NONE
= 0,
593 wxTEXT_BOX_ATTR_BORDER_SOLID
= 1,
594 wxTEXT_BOX_ATTR_BORDER_DOTTED
= 2,
595 wxTEXT_BOX_ATTR_BORDER_DASHED
= 3,
596 wxTEXT_BOX_ATTR_BORDER_DOUBLE
= 4,
597 wxTEXT_BOX_ATTR_BORDER_GROOVE
= 5,
598 wxTEXT_BOX_ATTR_BORDER_RIDGE
= 6,
599 wxTEXT_BOX_ATTR_BORDER_INSET
= 7,
600 wxTEXT_BOX_ATTR_BORDER_OUTSET
= 8
604 Border style presence flags, used with wxTextAttrBorder.
606 enum wxTextAttrBorderFlags
608 wxTEXT_BOX_ATTR_BORDER_STYLE
= 0x0001,
609 wxTEXT_BOX_ATTR_BORDER_COLOUR
= 0x0002
613 Border width symbols for qualitative widths, used with wxTextAttrBorder.
615 enum wxTextAttrBorderWidth
617 wxTEXT_BOX_ATTR_BORDER_THIN
= -1,
618 wxTEXT_BOX_ATTR_BORDER_MEDIUM
= -2,
619 wxTEXT_BOX_ATTR_BORDER_THICK
= -3
625 enum wxTextBoxAttrFloatStyle
627 wxTEXT_BOX_ATTR_FLOAT_NONE
= 0,
628 wxTEXT_BOX_ATTR_FLOAT_LEFT
= 1,
629 wxTEXT_BOX_ATTR_FLOAT_RIGHT
= 2
635 enum wxTextBoxAttrClearStyle
637 wxTEXT_BOX_ATTR_CLEAR_NONE
= 0,
638 wxTEXT_BOX_ATTR_CLEAR_LEFT
= 1,
639 wxTEXT_BOX_ATTR_CLEAR_RIGHT
= 2,
640 wxTEXT_BOX_ATTR_CLEAR_BOTH
= 3
644 Collapse mode styles. TODO: can they be switched on per side?
646 enum wxTextBoxAttrCollapseMode
648 wxTEXT_BOX_ATTR_COLLAPSE_NONE
= 0,
649 wxTEXT_BOX_ATTR_COLLAPSE_FULL
= 1
653 Vertical alignment values.
655 enum wxTextBoxAttrVerticalAlignment
657 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_NONE
= 0,
658 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_TOP
= 1,
659 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_CENTRE
= 2,
660 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_BOTTOM
= 3
664 @class wxTextAttrBorder
665 A class representing a rich text object border.
670 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorders
673 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorder
679 wxTextAttrBorder() { Reset(); }
684 bool operator==(const wxTextAttrBorder
& border
) const
686 return m_flags
== border
.m_flags
&& m_borderStyle
== border
.m_borderStyle
&&
687 m_borderColour
== border
.m_borderColour
&& m_borderWidth
== border
.m_borderWidth
;
691 Resets the border style, colour, width and flags.
693 void Reset() { m_borderStyle
= 0; m_borderColour
= 0; m_flags
= 0; m_borderWidth
.Reset(); }
696 Partial equality test.
698 bool EqPartial(const wxTextAttrBorder
& border
) const;
701 Applies the border to this object, but not if the same as @a compareWith.
704 bool Apply(const wxTextAttrBorder
& border
, const wxTextAttrBorder
* compareWith
= NULL
);
707 Removes the specified attributes from this object.
709 bool RemoveStyle(const wxTextAttrBorder
& attr
);
712 Collects the attributes that are common to a range of content, building up a note of
713 which attributes are absent in some objects and which clash in some objects.
715 void CollectCommonAttributes(const wxTextAttrBorder
& attr
, wxTextAttrBorder
& clashingAttr
, wxTextAttrBorder
& absentAttr
);
718 Sets the border style.
720 void SetStyle(int style
) { m_borderStyle
= style
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_STYLE
; }
723 Gets the border style.
726 int GetStyle() const { return m_borderStyle
; }
729 Sets the border colour.
731 void SetColour(unsigned long colour
) { m_borderColour
= colour
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
734 Sets the border colour.
736 void SetColour(const wxColour
& colour
) { m_borderColour
= colour
.GetRGB(); m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
739 Gets the colour as a long.
741 unsigned long GetColourLong() const { return m_borderColour
; }
746 wxColour
GetColour() const { return wxColour(m_borderColour
); }
749 Gets the border width.
751 wxTextAttrDimension
& GetWidth() { return m_borderWidth
; }
752 const wxTextAttrDimension
& GetWidth() const { return m_borderWidth
; }
755 Sets the border width.
757 void SetWidth(const wxTextAttrDimension
& width
) { m_borderWidth
= width
; }
759 Sets the border width.
761 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
764 True if the border has a valid style.
766 bool HasStyle() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_STYLE
) != 0; }
769 True if the border has a valid colour.
771 bool HasColour() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_COLOUR
) != 0; }
774 True if the border has a valid width.
776 bool HasWidth() const { return m_borderWidth
.IsValid(); }
779 True if the border is valid.
781 bool IsValid() const { return HasWidth(); }
784 Set the valid flag for this border.
786 void MakeValid() { m_borderWidth
.SetValid(true); }
789 Returns the border flags.
791 int GetFlags() const { return m_flags
; }
794 Sets the border flags.
796 void SetFlags(int flags
) { m_flags
= flags
; }
801 void AddFlag(int flag
) { m_flags
|= flag
; }
804 Removes a border flag.
806 void RemoveFlag(int flag
) { m_flags
&= ~flag
; }
809 unsigned long m_borderColour
;
810 wxTextAttrDimension m_borderWidth
;
815 @class wxTextAttrBorders
816 A class representing a rich text object's borders.
821 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorder
824 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorders
830 wxTextAttrBorders() { }
835 bool operator==(const wxTextAttrBorders
& borders
) const
837 return m_left
== borders
.m_left
&& m_right
== borders
.m_right
&&
838 m_top
== borders
.m_top
&& m_bottom
== borders
.m_bottom
;
842 Sets the style of all borders.
844 void SetStyle(int style
);
847 Sets colour of all borders.
849 void SetColour(unsigned long colour
);
852 Sets the colour for all borders.
854 void SetColour(const wxColour
& colour
);
857 Sets the width of all borders.
859 void SetWidth(const wxTextAttrDimension
& width
);
862 Sets the width of all borders.
864 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
869 void Reset() { m_left
.Reset(); m_right
.Reset(); m_top
.Reset(); m_bottom
.Reset(); }
872 Partial equality test.
874 bool EqPartial(const wxTextAttrBorders
& borders
) const;
877 Applies border to this object, but not if the same as @a compareWith.
879 bool Apply(const wxTextAttrBorders
& borders
, const wxTextAttrBorders
* compareWith
= NULL
);
882 Removes the specified attributes from this object.
884 bool RemoveStyle(const wxTextAttrBorders
& attr
);
887 Collects the attributes that are common to a range of content, building up a note of
888 which attributes are absent in some objects and which clash in some objects.
890 void CollectCommonAttributes(const wxTextAttrBorders
& attr
, wxTextAttrBorders
& clashingAttr
, wxTextAttrBorders
& absentAttr
);
893 Returns @true if all borders are valid.
895 bool IsValid() const { return m_left
.IsValid() || m_right
.IsValid() || m_top
.IsValid() || m_bottom
.IsValid(); }
898 Returns the left border.
900 const wxTextAttrBorder
& GetLeft() const { return m_left
; }
901 wxTextAttrBorder
& GetLeft() { return m_left
; }
904 Returns the right border.
906 const wxTextAttrBorder
& GetRight() const { return m_right
; }
907 wxTextAttrBorder
& GetRight() { return m_right
; }
910 Returns the top border.
912 const wxTextAttrBorder
& GetTop() const { return m_top
; }
913 wxTextAttrBorder
& GetTop() { return m_top
; }
916 Returns the bottom border.
918 const wxTextAttrBorder
& GetBottom() const { return m_bottom
; }
919 wxTextAttrBorder
& GetBottom() { return m_bottom
; }
921 wxTextAttrBorder m_left
, m_right
, m_top
, m_bottom
;
927 A class representing the box attributes of a rich text object.
932 @see wxRichTextAttr, wxRichTextCtrl
935 class WXDLLIMPEXP_RICHTEXT wxTextBoxAttr
941 wxTextBoxAttr() { Init(); }
946 wxTextBoxAttr(const wxTextBoxAttr
& attr
) { Init(); (*this) = attr
; }
949 Initialises this object.
951 void Init() { Reset(); }
958 // Copy. Unnecessary since we let it do a binary copy
959 //void Copy(const wxTextBoxAttr& attr);
962 //void operator= (const wxTextBoxAttr& attr);
967 bool operator== (const wxTextBoxAttr
& attr
) const;
970 Partial equality test, ignoring unset attributes.
973 bool EqPartial(const wxTextBoxAttr
& attr
) const;
976 Merges the given attributes. If @a compareWith is non-NULL, then it will be used
977 to mask out those attributes that are the same in style and @a compareWith, for
978 situations where we don't want to explicitly set inherited attributes.
980 bool Apply(const wxTextBoxAttr
& style
, const wxTextBoxAttr
* compareWith
= NULL
);
983 Collects the attributes that are common to a range of content, building up a note of
984 which attributes are absent in some objects and which clash in some objects.
986 void CollectCommonAttributes(const wxTextBoxAttr
& attr
, wxTextBoxAttr
& clashingAttr
, wxTextBoxAttr
& absentAttr
);
989 Removes the specified attributes from this object.
991 bool RemoveStyle(const wxTextBoxAttr
& attr
);
996 void SetFlags(int flags
) { m_flags
= flags
; }
1001 int GetFlags() const { return m_flags
; }
1004 Is this flag present?
1006 bool HasFlag(wxTextBoxAttrFlags flag
) const { return (m_flags
& flag
) != 0; }
1011 void RemoveFlag(wxTextBoxAttrFlags flag
) { m_flags
&= ~flag
; }
1016 void AddFlag(wxTextBoxAttrFlags flag
) { m_flags
|= flag
; }
1019 Returns @true if no attributes are set.
1021 bool IsDefault() const;
1024 Returns the float mode.
1026 wxTextBoxAttrFloatStyle
GetFloatMode() const { return m_floatMode
; }
1029 Sets the float mode.
1031 void SetFloatMode(wxTextBoxAttrFloatStyle mode
) { m_floatMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_FLOAT
; }
1034 Returns @true if float mode is active.
1036 bool HasFloatMode() const { return HasFlag(wxTEXT_BOX_ATTR_FLOAT
); }
1039 Returns @true if this object is floating.
1041 bool IsFloating() const { return HasFloatMode() && GetFloatMode() != wxTEXT_BOX_ATTR_FLOAT_NONE
; }
1044 Returns the clear mode - whether to wrap text after object. Currently unimplemented.
1046 wxTextBoxAttrClearStyle
GetClearMode() const { return m_clearMode
; }
1049 Set the clear mode. Currently unimplemented.
1051 void SetClearMode(wxTextBoxAttrClearStyle mode
) { m_clearMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_CLEAR
; }
1054 Returns @true if we have a clear flag.
1056 bool HasClearMode() const { return HasFlag(wxTEXT_BOX_ATTR_CLEAR
); }
1059 Returns the collapse mode - whether to collapse borders. Currently unimplemented.
1061 wxTextBoxAttrCollapseMode
GetCollapseBorders() const { return m_collapseMode
; }
1064 Sets the collapse mode - whether to collapse borders. Currently unimplemented.
1066 void SetCollapseBorders(wxTextBoxAttrCollapseMode collapse
) { m_collapseMode
= collapse
; m_flags
|= wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
; }
1069 Returns @true if the collapse borders flag is present.
1071 bool HasCollapseBorders() const { return HasFlag(wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
); }
1074 Returns the vertical alignment.
1076 wxTextBoxAttrVerticalAlignment
GetVerticalAlignment() const { return m_verticalAlignment
; }
1079 Sets the vertical alignment.
1081 void SetVerticalAlignment(wxTextBoxAttrVerticalAlignment verticalAlignment
) { m_verticalAlignment
= verticalAlignment
; m_flags
|= wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
; }
1084 Returns @true if a vertical alignment flag is present.
1086 bool HasVerticalAlignment() const { return HasFlag(wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
); }
1089 Returns the margin values.
1091 wxTextAttrDimensions
& GetMargins() { return m_margins
; }
1092 const wxTextAttrDimensions
& GetMargins() const { return m_margins
; }
1095 Returns the left margin.
1097 wxTextAttrDimension
& GetLeftMargin() { return m_margins
.m_left
; }
1098 const wxTextAttrDimension
& GetLeftMargin() const { return m_margins
.m_left
; }
1101 Returns the right margin.
1103 wxTextAttrDimension
& GetRightMargin() { return m_margins
.m_right
; }
1104 const wxTextAttrDimension
& GetRightMargin() const { return m_margins
.m_right
; }
1107 Returns the top margin.
1109 wxTextAttrDimension
& GetTopMargin() { return m_margins
.m_top
; }
1110 const wxTextAttrDimension
& GetTopMargin() const { return m_margins
.m_top
; }
1113 Returns the bottom margin.
1115 wxTextAttrDimension
& GetBottomMargin() { return m_margins
.m_bottom
; }
1116 const wxTextAttrDimension
& GetBottomMargin() const { return m_margins
.m_bottom
; }
1119 Returns the position.
1121 wxTextAttrDimensions
& GetPosition() { return m_position
; }
1122 const wxTextAttrDimensions
& GetPosition() const { return m_position
; }
1125 Returns the left position.
1127 wxTextAttrDimension
& GetLeft() { return m_position
.m_left
; }
1128 const wxTextAttrDimension
& GetLeft() const { return m_position
.m_left
; }
1131 Returns the right position.
1133 wxTextAttrDimension
& GetRight() { return m_position
.m_right
; }
1134 const wxTextAttrDimension
& GetRight() const { return m_position
.m_right
; }
1137 Returns the top position.
1139 wxTextAttrDimension
& GetTop() { return m_position
.m_top
; }
1140 const wxTextAttrDimension
& GetTop() const { return m_position
.m_top
; }
1143 Returns the bottom position.
1145 wxTextAttrDimension
& GetBottom() { return m_position
.m_bottom
; }
1146 const wxTextAttrDimension
& GetBottom() const { return m_position
.m_bottom
; }
1149 Returns the padding values.
1151 wxTextAttrDimensions
& GetPadding() { return m_padding
; }
1152 const wxTextAttrDimensions
& GetPadding() const { return m_padding
; }
1155 Returns the left padding value.
1157 wxTextAttrDimension
& GetLeftPadding() { return m_padding
.m_left
; }
1158 const wxTextAttrDimension
& GetLeftPadding() const { return m_padding
.m_left
; }
1161 Returns the right padding value.
1163 wxTextAttrDimension
& GetRightPadding() { return m_padding
.m_right
; }
1164 const wxTextAttrDimension
& GetRightPadding() const { return m_padding
.m_right
; }
1167 Returns the top padding value.
1169 wxTextAttrDimension
& GetTopPadding() { return m_padding
.m_top
; }
1170 const wxTextAttrDimension
& GetTopPadding() const { return m_padding
.m_top
; }
1173 Returns the bottom padding value.
1175 wxTextAttrDimension
& GetBottomPadding() { return m_padding
.m_bottom
; }
1176 const wxTextAttrDimension
& GetBottomPadding() const { return m_padding
.m_bottom
; }
1179 Returns the borders.
1181 wxTextAttrBorders
& GetBorder() { return m_border
; }
1182 const wxTextAttrBorders
& GetBorder() const { return m_border
; }
1185 Returns the left border.
1187 wxTextAttrBorder
& GetLeftBorder() { return m_border
.m_left
; }
1188 const wxTextAttrBorder
& GetLeftBorder() const { return m_border
.m_left
; }
1191 Returns the top border.
1193 wxTextAttrBorder
& GetTopBorder() { return m_border
.m_top
; }
1194 const wxTextAttrBorder
& GetTopBorder() const { return m_border
.m_top
; }
1197 Returns the right border.
1199 wxTextAttrBorder
& GetRightBorder() { return m_border
.m_right
; }
1200 const wxTextAttrBorder
& GetRightBorder() const { return m_border
.m_right
; }
1203 Returns the bottom border.
1205 wxTextAttrBorder
& GetBottomBorder() { return m_border
.m_bottom
; }
1206 const wxTextAttrBorder
& GetBottomBorder() const { return m_border
.m_bottom
; }
1209 Returns the outline.
1211 wxTextAttrBorders
& GetOutline() { return m_outline
; }
1212 const wxTextAttrBorders
& GetOutline() const { return m_outline
; }
1215 Returns the left outline.
1217 wxTextAttrBorder
& GetLeftOutline() { return m_outline
.m_left
; }
1218 const wxTextAttrBorder
& GetLeftOutline() const { return m_outline
.m_left
; }
1221 Returns the top outline.
1223 wxTextAttrBorder
& GetTopOutline() { return m_outline
.m_top
; }
1224 const wxTextAttrBorder
& GetTopOutline() const { return m_outline
.m_top
; }
1227 Returns the right outline.
1229 wxTextAttrBorder
& GetRightOutline() { return m_outline
.m_right
; }
1230 const wxTextAttrBorder
& GetRightOutline() const { return m_outline
.m_right
; }
1233 Returns the bottom outline.
1235 wxTextAttrBorder
& GetBottomOutline() { return m_outline
.m_bottom
; }
1236 const wxTextAttrBorder
& GetBottomOutline() const { return m_outline
.m_bottom
; }
1239 Returns the object size.
1241 wxTextAttrSize
& GetSize() { return m_size
; }
1242 const wxTextAttrSize
& GetSize() const { return m_size
; }
1245 Returns the object minimum size.
1248 wxTextAttrSize
& GetMinSize() { return m_minSize
; }
1249 const wxTextAttrSize
& GetMinSize() const { return m_minSize
; }
1252 Returns the object maximum size.
1255 wxTextAttrSize
& GetMaxSize() { return m_maxSize
; }
1256 const wxTextAttrSize
& GetMaxSize() const { return m_maxSize
; }
1259 Sets the object size.
1261 void SetSize(const wxTextAttrSize
& sz
) { m_size
= sz
; }
1264 Sets the object minimum size.
1266 void SetMinSize(const wxTextAttrSize
& sz
) { m_minSize
= sz
; }
1269 Sets the object maximum size.
1271 void SetMaxSize(const wxTextAttrSize
& sz
) { m_maxSize
= sz
; }
1274 Returns the object width.
1276 wxTextAttrDimension
& GetWidth() { return m_size
.m_width
; }
1277 const wxTextAttrDimension
& GetWidth() const { return m_size
.m_width
; }
1280 Returns the object height.
1282 wxTextAttrDimension
& GetHeight() { return m_size
.m_height
; }
1283 const wxTextAttrDimension
& GetHeight() const { return m_size
.m_height
; }
1286 Returns the box style name.
1288 const wxString
& GetBoxStyleName() const { return m_boxStyleName
; }
1291 Sets the box style name.
1293 void SetBoxStyleName(const wxString
& name
) { m_boxStyleName
= name
; AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1296 Returns @true if the box style name is present.
1298 bool HasBoxStyleName() const { return HasFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1304 wxTextAttrDimensions m_margins
;
1305 wxTextAttrDimensions m_padding
;
1306 wxTextAttrDimensions m_position
;
1308 wxTextAttrSize m_size
;
1309 wxTextAttrSize m_minSize
;
1310 wxTextAttrSize m_maxSize
;
1312 wxTextAttrBorders m_border
;
1313 wxTextAttrBorders m_outline
;
1315 wxTextBoxAttrFloatStyle m_floatMode
;
1316 wxTextBoxAttrClearStyle m_clearMode
;
1317 wxTextBoxAttrCollapseMode m_collapseMode
;
1318 wxTextBoxAttrVerticalAlignment m_verticalAlignment
;
1319 wxString m_boxStyleName
;
1323 @class wxRichTextAttr
1324 A class representing enhanced attributes for rich text objects.
1325 This adds a wxTextBoxAttr member to the basic wxTextAttr class.
1327 @library{wxrichtext}
1330 @see wxRichTextAttr, wxTextBoxAttr, wxRichTextCtrl
1333 class WXDLLIMPEXP_RICHTEXT wxRichTextAttr
: public wxTextAttr
1337 Constructor taking a wxTextAttr.
1339 wxRichTextAttr(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1344 wxRichTextAttr(const wxRichTextAttr
& attr
): wxTextAttr() { Copy(attr
); }
1347 Default constructor.
1354 void Copy(const wxRichTextAttr
& attr
);
1357 Assignment operator.
1359 void operator=(const wxRichTextAttr
& attr
) { Copy(attr
); }
1362 Assignment operator.
1364 void operator=(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1369 bool operator==(const wxRichTextAttr
& attr
) const;
1372 Partial equality test taking comparison object into account.
1374 bool EqPartial(const wxRichTextAttr
& attr
) const;
1377 Merges the given attributes. If @a compareWith
1378 is non-NULL, then it will be used to mask out those attributes that are the same in style
1379 and @a compareWith, for situations where we don't want to explicitly set inherited attributes.
1381 bool Apply(const wxRichTextAttr
& style
, const wxRichTextAttr
* compareWith
= NULL
);
1384 Collects the attributes that are common to a range of content, building up a note of
1385 which attributes are absent in some objects and which clash in some objects.
1387 void CollectCommonAttributes(const wxRichTextAttr
& attr
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
1390 Removes the specified attributes from this object.
1392 bool RemoveStyle(const wxRichTextAttr
& attr
);
1395 Returns the text box attributes.
1397 wxTextBoxAttr
& GetTextBoxAttr() { return m_textBoxAttr
; }
1398 const wxTextBoxAttr
& GetTextBoxAttr() const { return m_textBoxAttr
; }
1401 Set the text box attributes.
1403 void SetTextBoxAttr(const wxTextBoxAttr
& attr
) { m_textBoxAttr
= attr
; }
1405 wxTextBoxAttr m_textBoxAttr
;
1408 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxVariant
, wxRichTextVariantArray
, WXDLLIMPEXP_RICHTEXT
);
1411 @class wxRichTextProperties
1412 A simple property class using wxVariants. This is used to give each rich text object the
1413 ability to store custom properties that can be used by the application.
1415 @library{wxrichtext}
1418 @see wxRichTextBuffer, wxRichTextObject, wxRichTextCtrl
1421 class WXDLLIMPEXP_RICHTEXT wxRichTextProperties
: public wxObject
1423 DECLARE_DYNAMIC_CLASS(wxRichTextProperties
)
1427 Default constructor.
1429 wxRichTextProperties() {}
1434 wxRichTextProperties(const wxRichTextProperties
& props
): wxObject() { Copy(props
); }
1437 Assignment operator.
1439 void operator=(const wxRichTextProperties
& props
) { Copy(props
); }
1444 bool operator==(const wxRichTextProperties
& props
) const;
1447 Copies from @a props.
1449 void Copy(const wxRichTextProperties
& props
) { m_properties
= props
.m_properties
; }
1452 Returns the variant at the given index.
1454 const wxVariant
& operator[](size_t idx
) const { return m_properties
[idx
]; }
1457 Returns the variant at the given index.
1459 wxVariant
& operator[](size_t idx
) { return m_properties
[idx
]; }
1462 Clears the properties.
1464 void Clear() { m_properties
.Clear(); }
1467 Returns the array of variants implementing the properties.
1469 const wxRichTextVariantArray
& GetProperties() const { return m_properties
; }
1472 Returns the array of variants implementing the properties.
1474 wxRichTextVariantArray
& GetProperties() { return m_properties
; }
1477 Sets the array of variants.
1479 void SetProperties(const wxRichTextVariantArray
& props
) { m_properties
= props
; }
1482 Returns all the property names.
1484 wxArrayString
GetPropertyNames() const;
1487 Returns a count of the properties.
1489 size_t GetCount() const { return m_properties
.GetCount(); }
1492 Returns @true if the given property is found.
1494 bool HasProperty(const wxString
& name
) const { return Find(name
) != -1; }
1497 Finds the given property.
1499 int Find(const wxString
& name
) const;
1502 Removes the given property.
1504 bool Remove(const wxString
& name
);
1507 Gets the property variant by name.
1509 const wxVariant
& GetProperty(const wxString
& name
) const;
1512 Finds or creates a property with the given name, returning a pointer to the variant.
1514 wxVariant
* FindOrCreateProperty(const wxString
& name
);
1517 Gets the value of the named property as a string.
1519 wxString
GetPropertyString(const wxString
& name
) const;
1522 Gets the value of the named property as a long integer.
1524 long GetPropertyLong(const wxString
& name
) const;
1527 Gets the value of the named property as a boolean.
1529 bool GetPropertyBool(const wxString
& name
) const;
1532 Gets the value of the named property as a double.
1534 double GetPropertyDouble(const wxString
& name
) const;
1537 Sets the property by passing a variant which contains a name and value.
1539 void SetProperty(const wxVariant
& variant
);
1542 Sets a property by name and variant.
1544 void SetProperty(const wxString
& name
, const wxVariant
& variant
);
1547 Sets a property by name and string value.
1549 void SetProperty(const wxString
& name
, const wxString
& value
);
1552 Sets property by name and long integer value.
1554 void SetProperty(const wxString
& name
, long value
);
1557 Sets property by name and double value.
1559 void SetProperty(const wxString
& name
, double value
);
1562 Sets property by name and boolean value.
1564 void SetProperty(const wxString
& name
, bool value
);
1567 Removes the given properties from these properties.
1569 void RemoveProperties(const wxRichTextProperties
& properties
);
1572 Merges the given properties with these properties.
1574 void MergeProperties(const wxRichTextProperties
& properties
);
1577 wxRichTextVariantArray m_properties
;
1582 @class wxRichTextFontTable
1583 Manages quick access to a pool of fonts for rendering rich text.
1585 @library{wxrichtext}
1588 @see wxRichTextBuffer, wxRichTextCtrl
1591 class WXDLLIMPEXP_RICHTEXT wxRichTextFontTable
: public wxObject
1595 Default constructor.
1597 wxRichTextFontTable();
1602 wxRichTextFontTable(const wxRichTextFontTable
& table
);
1603 virtual ~wxRichTextFontTable();
1606 Returns @true if the font table is valid.
1608 bool IsOk() const { return m_refData
!= NULL
; }
1611 Finds a font for the given attribute object.
1613 wxFont
FindFont(const wxRichTextAttr
& fontSpec
);
1616 Clears the font table.
1621 Assignment operator.
1623 void operator= (const wxRichTextFontTable
& table
);
1628 bool operator == (const wxRichTextFontTable
& table
) const;
1631 Inequality operator.
1633 bool operator != (const wxRichTextFontTable
& table
) const { return !(*this == table
); }
1637 DECLARE_DYNAMIC_CLASS(wxRichTextFontTable
)
1641 @class wxRichTextRange
1643 This stores beginning and end positions for a range of data.
1645 @library{wxrichtext}
1648 @see wxRichTextBuffer, wxRichTextCtrl
1651 class WXDLLIMPEXP_RICHTEXT wxRichTextRange
1657 Default constructor.
1659 wxRichTextRange() { m_start
= 0; m_end
= 0; }
1662 Constructor taking start and end positions.
1664 wxRichTextRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1669 wxRichTextRange(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1670 ~wxRichTextRange() {}
1673 Assigns @a range to this range.
1675 void operator =(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1678 Equality operator. Returns @true if @a range is the same as this range.
1680 bool operator ==(const wxRichTextRange
& range
) const { return (m_start
== range
.m_start
&& m_end
== range
.m_end
); }
1683 Inequality operator.
1685 bool operator !=(const wxRichTextRange
& range
) const { return (m_start
!= range
.m_start
|| m_end
!= range
.m_end
); }
1688 Subtracts a range from this range.
1690 wxRichTextRange
operator -(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
- range
.m_start
, m_end
- range
.m_end
); }
1693 Adds a range to this range.
1695 wxRichTextRange
operator +(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
+ range
.m_start
, m_end
+ range
.m_end
); }
1698 Sets the range start and end positions.
1700 void SetRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1703 Sets the start position.
1705 void SetStart(long start
) { m_start
= start
; }
1708 Returns the start position.
1710 long GetStart() const { return m_start
; }
1713 Sets the end position.
1715 void SetEnd(long end
) { m_end
= end
; }
1718 Gets the end position.
1720 long GetEnd() const { return m_end
; }
1723 Returns true if this range is completely outside @a range.
1725 bool IsOutside(const wxRichTextRange
& range
) const { return range
.m_start
> m_end
|| range
.m_end
< m_start
; }
1728 Returns true if this range is completely within @a range.
1730 bool IsWithin(const wxRichTextRange
& range
) const { return m_start
>= range
.m_start
&& m_end
<= range
.m_end
; }
1733 Returns true if @a pos was within the range. Does not match if the range is empty.
1735 bool Contains(long pos
) const { return pos
>= m_start
&& pos
<= m_end
; }
1738 Limit this range to be within @a range.
1740 bool LimitTo(const wxRichTextRange
& range
) ;
1743 Gets the length of the range.
1745 long GetLength() const { return m_end
- m_start
+ 1; }
1748 Swaps the start and end.
1750 void Swap() { long tmp
= m_start
; m_start
= m_end
; m_end
= tmp
; }
1753 Converts the API-standard range, whose end is one past the last character in
1754 the range, to the internal form, which uses the first and last character
1755 positions of the range. In other words, one is subtracted from the end position.
1756 (n, n) is the range of a single character.
1758 wxRichTextRange
ToInternal() const { return wxRichTextRange(m_start
, m_end
-1); }
1761 Converts the internal range, which uses the first and last character positions
1762 of the range, to the API-standard range, whose end is one past the last
1763 character in the range. In other words, one is added to the end position.
1764 (n, n+1) is the range of a single character.
1766 wxRichTextRange
FromInternal() const { return wxRichTextRange(m_start
, m_end
+1); }
1773 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextRange
, wxRichTextRangeArray
, WXDLLIMPEXP_RICHTEXT
);
1775 #define wxRICHTEXT_ALL wxRichTextRange(-2, -2)
1776 #define wxRICHTEXT_NONE wxRichTextRange(-1, -1)
1778 #define wxRICHTEXT_NO_SELECTION wxRichTextRange(-2, -2)
1781 @class wxRichTextSelection
1783 Stores selection information. The selection does not have to be contiguous, though currently non-contiguous
1784 selections are only supported for a range of table cells (a geometric block of cells can consist
1785 of a set of non-contiguous positions).
1787 The selection consists of an array of ranges, and the container that is the context for the selection. It
1788 follows that a single selection object can only represent ranges with the same parent container.
1790 @library{wxrichtext}
1793 @see wxRichTextBuffer, wxRichTextCtrl
1796 class WXDLLIMPEXP_RICHTEXT wxRichTextSelection
1802 wxRichTextSelection(const wxRichTextSelection
& sel
) { Copy(sel
); }
1805 Creates a selection from a range and a container.
1807 wxRichTextSelection(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
) { m_ranges
.Add(range
); m_container
= container
; }
1810 Default constructor.
1812 wxRichTextSelection() { Reset(); }
1815 Resets the selection.
1817 void Reset() { m_ranges
.Clear(); m_container
= NULL
; }
1823 void Set(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
)
1824 { m_ranges
.Clear(); m_ranges
.Add(range
); m_container
= container
; }
1827 Adds a range to the selection.
1829 void Add(const wxRichTextRange
& range
)
1830 { m_ranges
.Add(range
); }
1833 Sets the selections from an array of ranges and a container object.
1835 void Set(const wxRichTextRangeArray
& ranges
, wxRichTextParagraphLayoutBox
* container
)
1836 { m_ranges
= ranges
; m_container
= container
; }
1841 void Copy(const wxRichTextSelection
& sel
)
1842 { m_ranges
= sel
.m_ranges
; m_container
= sel
.m_container
; }
1845 Assignment operator.
1847 void operator=(const wxRichTextSelection
& sel
) { Copy(sel
); }
1852 bool operator==(const wxRichTextSelection
& sel
) const;
1857 wxRichTextRange
operator[](size_t i
) const { return GetRange(i
); }
1860 Returns the selection ranges.
1862 wxRichTextRangeArray
& GetRanges() { return m_ranges
; }
1865 Returns the selection ranges.
1867 const wxRichTextRangeArray
& GetRanges() const { return m_ranges
; }
1870 Sets the selection ranges.
1872 void SetRanges(const wxRichTextRangeArray
& ranges
) { m_ranges
= ranges
; }
1875 Returns the number of ranges in the selection.
1877 size_t GetCount() const { return m_ranges
.GetCount(); }
1880 Returns the range at the given index.
1883 wxRichTextRange
GetRange(size_t i
) const { return m_ranges
[i
]; }
1886 Returns the first range if there is one, otherwise wxRICHTEXT_NO_SELECTION.
1888 wxRichTextRange
GetRange() const { return (m_ranges
.GetCount() > 0) ? (m_ranges
[0]) : wxRICHTEXT_NO_SELECTION
; }
1891 Sets a single range.
1893 void SetRange(const wxRichTextRange
& range
) { m_ranges
.Clear(); m_ranges
.Add(range
); }
1896 Returns the container for which the selection is valid.
1898 wxRichTextParagraphLayoutBox
* GetContainer() const { return m_container
; }
1901 Sets the container for which the selection is valid.
1903 void SetContainer(wxRichTextParagraphLayoutBox
* container
) { m_container
= container
; }
1906 Returns @true if the selection is valid.
1908 bool IsValid() const { return m_ranges
.GetCount() > 0 && GetContainer(); }
1911 Returns the selection appropriate to the specified object, if any; returns an empty array if none
1912 at the level of the object's container.
1914 wxRichTextRangeArray
GetSelectionForObject(wxRichTextObject
* obj
) const;
1917 Returns @true if the given position is within the selection.
1919 bool WithinSelection(long pos
, wxRichTextObject
* obj
) const;
1922 Returns @true if the given position is within the selection.
1925 bool WithinSelection(long pos
) const { return WithinSelection(pos
, m_ranges
); }
1928 Returns @true if the given position is within the selection range.
1930 static bool WithinSelection(long pos
, const wxRichTextRangeArray
& ranges
);
1933 Returns @true if the given range is within the selection range.
1935 static bool WithinSelection(const wxRichTextRange
& range
, const wxRichTextRangeArray
& ranges
);
1937 wxRichTextRangeArray m_ranges
;
1938 wxRichTextParagraphLayoutBox
* m_container
;
1942 @class wxRichTextDrawingContext
1944 A class for passing information to drawing and measuring functions.
1946 @library{wxrichtext}
1949 @see wxRichTextBuffer, wxRichTextCtrl
1952 class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingContext
: public wxObject
1954 DECLARE_CLASS(wxRichTextDrawingContext
)
1958 Pass the buffer to the context so the context can retrieve information
1959 such as virtual attributes.
1961 wxRichTextDrawingContext(wxRichTextBuffer
* buffer
) { Init(); m_buffer
= buffer
; }
1963 void Init() { m_buffer
= NULL
; }
1966 Does this object have virtual attributes?
1967 Virtual attributes can be provided for visual cues without
1968 affecting the actual styling.
1970 bool HasVirtualAttributes(wxRichTextObject
* obj
) const;
1973 Returns the virtual attributes for this object.
1974 Virtual attributes can be provided for visual cues without
1975 affecting the actual styling.
1977 wxRichTextAttr
GetVirtualAttributes(wxRichTextObject
* obj
) const;
1980 Applies any virtual attributes relevant to this object.
1982 bool ApplyVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const;
1984 wxRichTextBuffer
* m_buffer
;
1988 @class wxRichTextObject
1990 This is the base for drawable rich text objects.
1992 @library{wxrichtext}
1995 @see wxRichTextBuffer, wxRichTextCtrl
1998 class WXDLLIMPEXP_RICHTEXT wxRichTextObject
: public wxObject
2000 DECLARE_CLASS(wxRichTextObject
)
2003 Constructor, taking an optional parent pointer.
2005 wxRichTextObject(wxRichTextObject
* parent
= NULL
);
2007 virtual ~wxRichTextObject();
2012 Draw the item, within the given range. Some objects may ignore the range (for
2013 example paragraphs) while others must obey it (lines, to implement wrapping)
2015 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
2018 Lay the item out at the specified position with the given size constraint.
2019 Layout must set the cached size. @rect is the available space for the object,
2020 and @a parentRect is the container that is used to determine a relative size
2021 or position (for example if a text box must be 50% of the parent text box).
2023 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
2026 Hit-testing: returns a flag indicating hit test details, plus
2027 information about position. @a contextObj is returned to specify what object
2028 position is relevant to, since otherwise there's an ambiguity.
2029 @ obj might not be a child of @a contextObj, since we may be referring to the container itself
2030 if we have no hit on a child - for example if we click outside an object.
2032 The function puts the position in @a textPosition if one is found.
2033 @a pt is in logical units (a zero y position is at the beginning of the buffer).
2035 @return One of the ::wxRichTextHitTestFlags values.
2038 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2041 Finds the absolute position and row height for the given character position.
2043 virtual bool FindPosition(wxDC
& WXUNUSED(dc
), wxRichTextDrawingContext
& WXUNUSED(context
), long WXUNUSED(index
), wxPoint
& WXUNUSED(pt
), int* WXUNUSED(height
), bool WXUNUSED(forceLineStart
)) { return false; }
2046 Returns the best size, i.e. the ideal starting size for this object irrespective
2047 of available space. For a short text string, it will be the size that exactly encloses
2048 the text. For a longer string, it might use the parent width for example.
2050 virtual wxSize
GetBestSize() const { return m_size
; }
2053 Returns the object size for the given range. Returns @false if the range
2054 is invalid for this object.
2057 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;
2060 Do a split from @a pos, returning an object containing the second part, and setting
2061 the first part in 'this'.
2063 virtual wxRichTextObject
* DoSplit(long WXUNUSED(pos
)) { return NULL
; }
2066 Calculates the range of the object. By default, guess that the object is 1 unit long.
2068 virtual void CalculateRange(long start
, long& end
) { end
= start
; m_range
.SetRange(start
, end
); }
2071 Deletes the given range.
2073 virtual bool DeleteRange(const wxRichTextRange
& WXUNUSED(range
)) { return false; }
2076 Returns @true if the object is empty.
2078 virtual bool IsEmpty() const { return false; }
2081 Returns @true if this class of object is floatable.
2083 virtual bool IsFloatable() const { return false; }
2086 Returns @true if this object is currently floating.
2088 virtual bool IsFloating() const { return GetAttributes().GetTextBoxAttr().IsFloating(); }
2091 Returns the floating direction.
2093 virtual int GetFloatDirection() const { return GetAttributes().GetTextBoxAttr().GetFloatMode(); }
2096 Returns any text in this object for the given range.
2098 virtual wxString
GetTextForRange(const wxRichTextRange
& WXUNUSED(range
)) const { return wxEmptyString
; }
2101 Returns @true if this object can merge itself with the given one.
2103 virtual bool CanMerge(wxRichTextObject
* WXUNUSED(object
)) const { return false; }
2106 Returns @true if this object merged itself with the given one.
2107 The calling code will then delete the given object.
2109 virtual bool Merge(wxRichTextObject
* WXUNUSED(object
)) { return false; }
2112 Dump object data to the given output stream for debugging.
2114 virtual void Dump(wxTextOutputStream
& stream
);
2117 Returns @true if we can edit the object's properties via a GUI.
2119 virtual bool CanEditProperties() const { return false; }
2122 Edits the object's properties via a GUI.
2124 virtual bool EditProperties(wxWindow
* WXUNUSED(parent
), wxRichTextBuffer
* WXUNUSED(buffer
)) { return false; }
2127 Returns the label to be used for the properties context menu item.
2129 virtual wxString
GetPropertiesMenuLabel() const { return wxEmptyString
; }
2132 Returns @true if objects of this class can accept the focus, i.e. a call to SetFocusObject
2133 is possible. For example, containers supporting text, such as a text box object, can accept the focus,
2134 but a table can't (set the focus to individual cells instead).
2136 virtual bool AcceptsFocus() const { return false; }
2140 Imports this object from XML.
2142 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2145 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2147 Exports this object directly to the given stream, bypassing the creation of a wxXmlNode hierarchy.
2148 This method is considerably faster than creating a tree first. However, both versions of ExportXML must be
2149 implemented so that if the tree method is made efficient in the future, we can deprecate the
2150 more verbose direct output method. Compiled only if wxRICHTEXT_HAVE_DIRECT_OUTPUT is defined (on by default).
2152 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2155 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2157 Exports this object to the given parent node, usually creating at least one child node.
2158 This method is less efficient than the direct-to-stream method but is retained to allow for
2159 switching to this method if we make it more efficient. Compiled only if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT is defined
2162 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2166 Returns @true if this object takes note of paragraph attributes (text and image objects don't).
2168 virtual bool UsesParagraphAttributes() const { return true; }
2171 Returns the XML node name of this object. This must be overridden for wxXmlNode-base XML export to work.
2173 virtual wxString
GetXMLNodeName() const { return wxT("unknown"); }
2176 Invalidates the object at the given range. With no argument, invalidates the whole object.
2178 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2181 Returns @true if this object can handle the selections of its children, fOr example a table.
2182 Required for composite selection handling to work.
2184 virtual bool HandlesChildSelections() const { return false; }
2187 Returns a selection object specifying the selections between start and end character positions.
2188 For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
2190 virtual wxRichTextSelection
GetSelection(long WXUNUSED(start
), long WXUNUSED(end
)) const { return wxRichTextSelection(); }
2195 Gets the cached object size as calculated by Layout.
2197 virtual wxSize
GetCachedSize() const { return m_size
; }
2200 Sets the cached object size as calculated by Layout.
2202 virtual void SetCachedSize(const wxSize
& sz
) { m_size
= sz
; }
2205 Gets the maximum object size as calculated by Layout. This allows
2206 us to fit an object to its contents or allocate extra space if required.
2208 virtual wxSize
GetMaxSize() const { return m_maxSize
; }
2211 Sets the maximum object size as calculated by Layout. This allows
2212 us to fit an object to its contents or allocate extra space if required.
2214 virtual void SetMaxSize(const wxSize
& sz
) { m_maxSize
= sz
; }
2217 Gets the minimum object size as calculated by Layout. This allows
2218 us to constrain an object to its absolute minimum size if necessary.
2220 virtual wxSize
GetMinSize() const { return m_minSize
; }
2223 Sets the minimum object size as calculated by Layout. This allows
2224 us to constrain an object to its absolute minimum size if necessary.
2226 virtual void SetMinSize(const wxSize
& sz
) { m_minSize
= sz
; }
2229 Gets the 'natural' size for an object. For an image, it would be the
2232 virtual wxTextAttrSize
GetNaturalSize() const { return wxTextAttrSize(); }
2235 Returns the object position in pixels.
2237 virtual wxPoint
GetPosition() const { return m_pos
; }
2240 Sets the object position in pixels.
2242 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
2245 Returns the absolute object position, by traversing up the child/parent hierarchy.
2246 TODO: may not be needed, if all object positions are in fact relative to the
2247 top of the coordinate space.
2249 virtual wxPoint
GetAbsolutePosition() const;
2252 Returns the rectangle enclosing the object.
2254 virtual wxRect
GetRect() const { return wxRect(GetPosition(), GetCachedSize()); }
2257 Sets the object's range within its container.
2259 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
2262 Returns the object's range.
2264 const wxRichTextRange
& GetRange() const { return m_range
; }
2267 Returns the object's range.
2269 wxRichTextRange
& GetRange() { return m_range
; }
2272 Set the object's own range, for a top-level object with its own position space.
2274 void SetOwnRange(const wxRichTextRange
& range
) { m_ownRange
= range
; }
2277 Returns the object's own range (valid if top-level).
2279 const wxRichTextRange
& GetOwnRange() const { return m_ownRange
; }
2282 Returns the object's own range (valid if top-level).
2284 wxRichTextRange
& GetOwnRange() { return m_ownRange
; }
2287 Returns the object's own range only if a top-level object.
2289 wxRichTextRange
GetOwnRangeIfTopLevel() const { return IsTopLevel() ? m_ownRange
: m_range
; }
2292 Returns @true if this object is composite.
2294 virtual bool IsComposite() const { return false; }
2297 Returns @true if no user editing can be done inside the object. This returns @true for simple objects,
2298 @false for most composite objects, but @true for fields, which if composite, should not be user-edited.
2300 virtual bool IsAtomic() const { return true; }
2303 Returns a pointer to the parent object.
2305 virtual wxRichTextObject
* GetParent() const { return m_parent
; }
2308 Sets the pointer to the parent object.
2310 virtual void SetParent(wxRichTextObject
* parent
) { m_parent
= parent
; }
2313 Returns the top-level container of this object.
2314 May return itself if it's a container; use GetParentContainer to return
2315 a different container.
2317 virtual wxRichTextParagraphLayoutBox
* GetContainer() const;
2320 Returns the top-level container of this object.
2321 Returns a different container than itself, unless there's no parent, in which case it will return NULL.
2323 virtual wxRichTextParagraphLayoutBox
* GetParentContainer() const { return GetParent() ? GetParent()->GetContainer() : GetContainer(); }
2326 Set the margin around the object, in pixels.
2328 virtual void SetMargins(int margin
);
2331 Set the margin around the object, in pixels.
2333 virtual void SetMargins(int leftMargin
, int rightMargin
, int topMargin
, int bottomMargin
);
2336 Returns the left margin of the object, in pixels.
2338 virtual int GetLeftMargin() const;
2341 Returns the right margin of the object, in pixels.
2343 virtual int GetRightMargin() const;
2346 Returns the top margin of the object, in pixels.
2348 virtual int GetTopMargin() const;
2351 Returns the bottom margin of the object, in pixels.
2353 virtual int GetBottomMargin() const;
2356 Calculates the available content space in the given rectangle, given the
2357 margins, border and padding specified in the object's attributes.
2359 virtual wxRect
GetAvailableContentArea(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& outerRect
) const;
2362 Lays out the object first with a given amount of space, and then if no width was specified in attr,
2363 lays out the object again using the minimum size. @a availableParentSpace is the maximum space
2364 for the object, whereas @a availableContainerSpace is the container with which relative positions and
2365 sizes should be computed. For example, a text box whose space has already been constrained
2366 in a previous layout pass to @a availableParentSpace, but should have a width of 50% of @a availableContainerSpace.
2367 (If these two rects were the same, a 2nd pass could see the object getting too small.)
2369 virtual bool LayoutToBestSize(wxDC
& dc
, wxRichTextDrawingContext
& context
, wxRichTextBuffer
* buffer
,
2370 const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& attr
,
2371 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
, int style
);
2374 Sets the object's attributes.
2376 void SetAttributes(const wxRichTextAttr
& attr
) { m_attributes
= attr
; }
2379 Returns the object's attributes.
2381 const wxRichTextAttr
& GetAttributes() const { return m_attributes
; }
2384 Returns the object's attributes.
2386 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
2389 Returns the object's properties.
2391 wxRichTextProperties
& GetProperties() { return m_properties
; }
2394 Returns the object's properties.
2396 const wxRichTextProperties
& GetProperties() const { return m_properties
; }
2399 Sets the object's properties.
2401 void SetProperties(const wxRichTextProperties
& props
) { m_properties
= props
; }
2404 Sets the stored descent value.
2406 void SetDescent(int descent
) { m_descent
= descent
; }
2409 Returns the stored descent value.
2411 int GetDescent() const { return m_descent
; }
2414 Returns the containing buffer.
2416 wxRichTextBuffer
* GetBuffer() const;
2419 Sets the identifying name for this object as a property using the "name" key.
2421 void SetName(const wxString
& name
) { m_properties
.SetProperty(wxT("name"), name
); }
2424 Returns the identifying name for this object from the properties, using the "name" key.
2426 wxString
GetName() const { return m_properties
.GetPropertyString(wxT("name")); }
2429 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
2431 virtual bool IsTopLevel() const { return false; }
2434 Returns @true if the object will be shown, @false otherwise.
2436 bool IsShown() const { return m_show
; }
2441 Call to show or hide this object. This function does not cause the content to be
2442 laid out or redrawn.
2444 virtual void Show(bool show
) { m_show
= show
; }
2449 virtual wxRichTextObject
* Clone() const { return NULL
; }
2454 void Copy(const wxRichTextObject
& obj
);
2457 Reference-counting allows us to use the same object in multiple
2458 lists (not yet used).
2461 void Reference() { m_refCount
++; }
2464 Reference-counting allows us to use the same object in multiple
2465 lists (not yet used).
2470 Moves the object recursively, by adding the offset from old to new.
2472 virtual void Move(const wxPoint
& pt
);
2475 Converts units in tenths of a millimetre to device units.
2477 int ConvertTenthsMMToPixels(wxDC
& dc
, int units
) const;
2480 Converts units in tenths of a millimetre to device units.
2482 static int ConvertTenthsMMToPixels(int ppi
, int units
, double scale
= 1.0);
2485 Convert units in pixels to tenths of a millimetre.
2487 int ConvertPixelsToTenthsMM(wxDC
& dc
, int pixels
) const;
2490 Convert units in pixels to tenths of a millimetre.
2492 static int ConvertPixelsToTenthsMM(int ppi
, int pixels
, double scale
= 1.0);
2495 Draws the borders and background for the given rectangle and attributes.
2496 @a boxRect is taken to be the outer margin box, not the box around the content.
2498 static bool DrawBoxAttributes(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, const wxRect
& boxRect
, int flags
= 0);
2503 static bool DrawBorder(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxTextAttrBorders
& attr
, const wxRect
& rect
, int flags
= 0);
2506 Returns the various rectangles of the box model in pixels. You can either specify @a contentRect (inner)
2507 or @a marginRect (outer), and the other must be the default rectangle (no width or height).
2508 Note that the outline doesn't affect the position of the rectangle, it's drawn in whatever space
2511 static bool GetBoxRects(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, wxRect
& marginRect
, wxRect
& borderRect
, wxRect
& contentRect
, wxRect
& paddingRect
, wxRect
& outlineRect
);
2514 Returns the total margin for the object in pixels, taking into account margin, padding and border size.
2516 static bool GetTotalMargin(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, int& leftMargin
, int& rightMargin
,
2517 int& topMargin
, int& bottomMargin
);
2520 Returns the rectangle which the child has available to it given restrictions specified in the
2521 child attribute, e.g. 50% width of the parent, 400 pixels, x position 20% of the parent, etc.
2522 availableContainerSpace might be a parent that the cell has to compute its width relative to.
2523 E.g. a cell that's 50% of its parent.
2525 static wxRect
AdjustAvailableSpace(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& childAttr
,
2526 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
);
2533 int m_descent
; // Descent for this object (if any)
2536 wxRichTextObject
* m_parent
;
2538 // The range of this object (start position to end position)
2539 wxRichTextRange m_range
;
2541 // The internal range of this object, if it's a top-level object with its own range space
2542 wxRichTextRange m_ownRange
;
2545 wxRichTextAttr m_attributes
;
2548 wxRichTextProperties m_properties
;
2551 WX_DECLARE_LIST_WITH_DECL( wxRichTextObject
, wxRichTextObjectList
, class WXDLLIMPEXP_RICHTEXT
);
2554 @class wxRichTextCompositeObject
2556 Objects of this class can contain other objects.
2558 @library{wxrichtext}
2561 @see wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2564 class WXDLLIMPEXP_RICHTEXT wxRichTextCompositeObject
: public wxRichTextObject
2566 DECLARE_CLASS(wxRichTextCompositeObject
)
2570 wxRichTextCompositeObject(wxRichTextObject
* parent
= NULL
);
2571 virtual ~wxRichTextCompositeObject();
2575 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2577 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
2579 virtual void CalculateRange(long start
, long& end
);
2581 virtual bool DeleteRange(const wxRichTextRange
& range
);
2583 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2585 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;
2587 virtual void Dump(wxTextOutputStream
& stream
);
2589 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2594 Returns the children.
2596 wxRichTextObjectList
& GetChildren() { return m_children
; }
2598 Returns the children.
2600 const wxRichTextObjectList
& GetChildren() const { return m_children
; }
2603 Returns the number of children.
2605 size_t GetChildCount() const ;
2608 Returns the nth child.
2610 wxRichTextObject
* GetChild(size_t n
) const ;
2613 Returns @true if this object is composite.
2615 virtual bool IsComposite() const { return true; }
2618 Returns @true if no user editing can be done inside the object. This returns @true for simple objects,
2619 @false for most composite objects, but @true for fields, which if composite, should not be user-edited.
2621 virtual bool IsAtomic() const { return false; }
2624 Returns true if the buffer is empty.
2626 virtual bool IsEmpty() const { return GetChildCount() == 0; }
2629 Returns the child object at the given character position.
2631 virtual wxRichTextObject
* GetChildAtPosition(long pos
) const;
2635 void Copy(const wxRichTextCompositeObject
& obj
);
2637 void operator= (const wxRichTextCompositeObject
& obj
) { Copy(obj
); }
2640 Appends a child, returning the position.
2642 size_t AppendChild(wxRichTextObject
* child
) ;
2645 Inserts the child in front of the given object, or at the beginning.
2647 bool InsertChild(wxRichTextObject
* child
, wxRichTextObject
* inFrontOf
) ;
2650 Removes and optionally deletes the specified child.
2652 bool RemoveChild(wxRichTextObject
* child
, bool deleteChild
= false) ;
2655 Deletes all the children.
2657 bool DeleteChildren() ;
2660 Recursively merges all pieces that can be merged.
2662 bool Defragment(const wxRichTextRange
& range
= wxRICHTEXT_ALL
);
2665 Moves the object recursively, by adding the offset from old to new.
2667 virtual void Move(const wxPoint
& pt
);
2670 wxRichTextObjectList m_children
;
2674 @class wxRichTextParagraphBox
2676 This class knows how to lay out paragraphs.
2678 @library{wxrichtext}
2681 @see wxRichTextCompositeObject, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2684 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraphLayoutBox
: public wxRichTextCompositeObject
2686 DECLARE_DYNAMIC_CLASS(wxRichTextParagraphLayoutBox
)
2690 wxRichTextParagraphLayoutBox(wxRichTextObject
* parent
= NULL
);
2691 wxRichTextParagraphLayoutBox(const wxRichTextParagraphLayoutBox
& obj
): wxRichTextCompositeObject() { Init(); Copy(obj
); }
2692 ~wxRichTextParagraphLayoutBox();
2696 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2698 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2700 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
2702 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;
2704 virtual bool DeleteRange(const wxRichTextRange
& range
);
2706 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2709 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2712 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2713 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2716 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2717 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2720 virtual wxString
GetXMLNodeName() const { return wxT("paragraphlayout"); }
2722 virtual bool AcceptsFocus() const { return true; }
2727 Associates a control with the buffer, for operations that for example require refreshing the window.
2729 void SetRichTextCtrl(wxRichTextCtrl
* ctrl
) { m_ctrl
= ctrl
; }
2732 Returns the associated control.
2734 wxRichTextCtrl
* GetRichTextCtrl() const { return m_ctrl
; }
2737 Sets a flag indicating whether the last paragraph is partial or complete.
2739 void SetPartialParagraph(bool partialPara
) { m_partialParagraph
= partialPara
; }
2742 Returns a flag indicating whether the last paragraph is partial or complete.
2744 bool GetPartialParagraph() const { return m_partialParagraph
; }
2747 Returns the style sheet associated with the overall buffer.
2749 virtual wxRichTextStyleSheet
* GetStyleSheet() const;
2751 virtual bool IsTopLevel() const { return true; }
2756 Submits a command to insert paragraphs.
2758 bool InsertParagraphsWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2761 Submits a command to insert the given text.
2763 bool InsertTextWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2766 Submits a command to insert the given text.
2768 bool InsertNewlineWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2771 Submits a command to insert the given image.
2773 bool InsertImageWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextImageBlock
& imageBlock
,
2774 wxRichTextCtrl
* ctrl
, int flags
,
2775 const wxRichTextAttr
& textAttr
);
2778 Submits a command to insert the given field. Field data can be included in properties.
2780 @see wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
2782 wxRichTextField
* InsertFieldWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& fieldType
,
2783 const wxRichTextProperties
& properties
,
2784 wxRichTextCtrl
* ctrl
, int flags
,
2785 const wxRichTextAttr
& textAttr
);
2788 Returns the style that is appropriate for a new paragraph at this position.
2789 If the previous paragraph has a paragraph style name, looks up the next-paragraph
2792 wxRichTextAttr
GetStyleForNewParagraph(wxRichTextBuffer
* buffer
, long pos
, bool caretPosition
= false, bool lookUpNewParaStyle
=false) const;
2797 wxRichTextObject
* InsertObjectWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2800 Submits a command to delete this range.
2802 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
, wxRichTextBuffer
* buffer
);
2805 Draws the floating objects in this buffer.
2807 void DrawFloats(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2810 Moves an anchored object to another paragraph.
2812 void MoveAnchoredObjectToParagraph(wxRichTextParagraph
* from
, wxRichTextParagraph
* to
, wxRichTextObject
* obj
);
2815 Initializes the object.
2820 Clears all the children.
2822 virtual void Clear();
2825 Clears and initializes with one blank paragraph.
2827 virtual void Reset();
2830 Convenience function to add a paragraph of text.
2832 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2835 Convenience function to add an image.
2837 virtual wxRichTextRange
AddImage(const wxImage
& image
, wxRichTextAttr
* paraStyle
= NULL
);
2840 Adds multiple paragraphs, based on newlines.
2842 virtual wxRichTextRange
AddParagraphs(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2845 Returns the line at the given position. If @a caretPosition is true, the position is
2846 a caret position, which is normally a smaller number.
2848 virtual wxRichTextLine
* GetLineAtPosition(long pos
, bool caretPosition
= false) const;
2851 Returns the line at the given y pixel position, or the last line.
2853 virtual wxRichTextLine
* GetLineAtYPosition(int y
) const;
2856 Returns the paragraph at the given character or caret position.
2858 virtual wxRichTextParagraph
* GetParagraphAtPosition(long pos
, bool caretPosition
= false) const;
2861 Returns the line size at the given position.
2863 virtual wxSize
GetLineSizeAtPosition(long pos
, bool caretPosition
= false) const;
2866 Given a position, returns the number of the visible line (potentially many to a paragraph),
2867 starting from zero at the start of the buffer. We also have to pass a bool (@a startOfLine)
2868 that indicates whether the caret is being shown at the end of the previous line or at the start
2869 of the next, since the caret can be shown at two visible positions for the same underlying
2872 virtual long GetVisibleLineNumber(long pos
, bool caretPosition
= false, bool startOfLine
= false) const;
2875 Given a line number, returns the corresponding wxRichTextLine object.
2877 virtual wxRichTextLine
* GetLineForVisibleLineNumber(long lineNumber
) const;
2880 Returns the leaf object in a paragraph at this position.
2882 virtual wxRichTextObject
* GetLeafObjectAtPosition(long position
) const;
2885 Returns the paragraph by number.
2887 virtual wxRichTextParagraph
* GetParagraphAtLine(long paragraphNumber
) const;
2890 Returns the paragraph for a given line.
2892 virtual wxRichTextParagraph
* GetParagraphForLine(wxRichTextLine
* line
) const;
2895 Returns the length of the paragraph.
2897 virtual int GetParagraphLength(long paragraphNumber
) const;
2900 Returns the number of paragraphs.
2902 virtual int GetParagraphCount() const { return static_cast<int>(GetChildCount()); }
2905 Returns the number of visible lines.
2907 virtual int GetLineCount() const;
2910 Returns the text of the paragraph.
2912 virtual wxString
GetParagraphText(long paragraphNumber
) const;
2915 Converts zero-based line column and paragraph number to a position.
2917 virtual long XYToPosition(long x
, long y
) const;
2920 Converts a zero-based position to line column and paragraph number.
2922 virtual bool PositionToXY(long pos
, long* x
, long* y
) const;
2925 Sets the attributes for the given range. Pass flags to determine how the
2928 The end point of range is specified as the last character position of the span
2929 of text. So, for example, to set the style for a character at position 5,
2930 use the range (5,5).
2931 This differs from the wxRichTextCtrl API, where you would specify (5,6).
2933 @a flags may contain a bit list of the following values:
2934 - wxRICHTEXT_SETSTYLE_NONE: no style flag.
2935 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
2937 - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
2938 if the combined style at this point is already the style in question.
2939 - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
2940 applied to paragraphs, and not the content.
2941 This allows content styling to be preserved independently from that
2942 of e.g. a named paragraph style.
2943 - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
2944 applied to characters, and not the paragraph.
2945 This allows content styling to be preserved independently from that
2946 of e.g. a named paragraph style.
2947 - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
2949 - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style.
2950 Only the style flags are used in this operation.
2952 virtual bool SetStyle(const wxRichTextRange
& range
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
2955 Sets the attributes for the given object only, for example the box attributes for a text box.
2957 virtual void SetStyle(wxRichTextObject
*obj
, const wxRichTextAttr
& textAttr
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
2960 Returns the combined text attributes for this position.
2962 This function gets the @e uncombined style - that is, the attributes associated
2963 with the paragraph or character content, and not necessarily the combined
2964 attributes you see on the screen. To get the combined attributes, use GetStyle().
2965 If you specify (any) paragraph attribute in @e style's flags, this function
2966 will fetch the paragraph attributes.
2967 Otherwise, it will return the character attributes.
2969 virtual bool GetStyle(long position
, wxRichTextAttr
& style
);
2972 Returns the content (uncombined) attributes for this position.
2974 virtual bool GetUncombinedStyle(long position
, wxRichTextAttr
& style
);
2977 Implementation helper for GetStyle. If combineStyles is true, combine base, paragraph and
2980 virtual bool DoGetStyle(long position
, wxRichTextAttr
& style
, bool combineStyles
= true);
2983 This function gets a style representing the common, combined attributes in the
2985 Attributes which have different values within the specified range will not be
2986 included the style flags.
2988 The function is used to get the attributes to display in the formatting dialog:
2989 the user can edit the attributes common to the selection, and optionally specify the
2990 values of further attributes to be applied uniformly.
2992 To apply the edited attributes, you can use SetStyle() specifying
2993 the wxRICHTEXT_SETSTYLE_OPTIMIZE flag, which will only apply attributes that
2994 are different from the @e combined attributes within the range.
2995 So, the user edits the effective, displayed attributes for the range,
2996 but his choice won't be applied unnecessarily to content. As an example,
2997 say the style for a paragraph specifies bold, but the paragraph text doesn't
2999 The combined style is bold, and this is what the user will see on-screen and
3000 in the formatting dialog. The user now specifies red text, in addition to bold.
3001 When applying with SetStyle(), the content font weight attributes won't be
3002 changed to bold because this is already specified by the paragraph.
3003 However the text colour attributes @e will be changed to show red.
3005 virtual bool GetStyleForRange(const wxRichTextRange
& range
, wxRichTextAttr
& style
);
3008 Combines @a style with @a currentStyle for the purpose of summarising the attributes of a range of
3011 bool CollectStyle(wxRichTextAttr
& currentStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
3015 Sets the list attributes for the given range, passing flags to determine how
3016 the attributes are set.
3017 Either the style definition or the name of the style definition (in the current
3018 sheet) can be passed.
3020 @a flags is a bit list of the following:
3021 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3022 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3023 @a startFrom, otherwise existing attributes are used.
3024 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3025 as the level for all paragraphs, otherwise the current indentation will be used.
3027 @see NumberList(), PromoteList(), ClearListStyle().
3029 virtual bool SetListStyle(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3030 virtual bool SetListStyle(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3034 Clears the list style from the given range, clearing list-related attributes
3035 and applying any named paragraph style associated with each paragraph.
3037 @a flags is a bit list of the following:
3038 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3040 @see SetListStyle(), PromoteList(), NumberList()
3042 virtual bool ClearListStyle(const wxRichTextRange
& range
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3046 Numbers the paragraphs in the given range.
3048 Pass flags to determine how the attributes are set.
3049 Either the style definition or the name of the style definition (in the current
3050 sheet) can be passed.
3052 @a flags is a bit list of the following:
3053 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3054 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3055 @a startFrom, otherwise existing attributes are used.
3056 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3057 as the level for all paragraphs, otherwise the current indentation will be used.
3059 @a def can be NULL to indicate that the existing list style should be used.
3061 @see SetListStyle(), PromoteList(), ClearListStyle()
3063 virtual bool NumberList(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3064 virtual bool NumberList(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3069 Promotes the list items within the given range.
3070 A positive @a promoteBy produces a smaller indent, and a negative number
3071 produces a larger indent. Pass flags to determine how the attributes are set.
3072 Either the style definition or the name of the style definition (in the current
3073 sheet) can be passed.
3075 @a flags is a bit list of the following:
3076 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3077 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3078 @a startFrom, otherwise existing attributes are used.
3079 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3080 as the level for all paragraphs, otherwise the current indentation will be used.
3082 @see SetListStyle(), SetListStyle(), ClearListStyle()
3084 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3085 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3089 Helper for NumberList and PromoteList, that does renumbering and promotion simultaneously
3090 @a def can be NULL/empty to indicate that the existing list style should be used.
3092 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);
3095 Fills in the attributes for numbering a paragraph after previousParagraph.
3097 virtual bool FindNextParagraphNumber(wxRichTextParagraph
* previousParagraph
, wxRichTextAttr
& attr
) const;
3100 Sets the properties for the given range, passing flags to determine how the
3101 attributes are set. You can merge properties or replace them.
3103 The end point of range is specified as the last character position of the span
3104 of text, plus one. So, for example, to set the properties for a character at
3105 position 5, use the range (5,6).
3107 @a flags may contain a bit list of the following values:
3108 - wxRICHTEXT_SETPROPERTIES_NONE: no flag.
3109 - wxRICHTEXT_SETPROPERTIES_WITH_UNDO: specifies that this operation should be
3111 - wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY: specifies that the properties should only be
3112 applied to paragraphs, and not the content.
3113 - wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY: specifies that the properties should only be
3114 applied to characters, and not the paragraph.
3115 - wxRICHTEXT_SETPROPERTIES_RESET: resets (clears) the existing properties before applying
3117 - wxRICHTEXT_SETPROPERTIES_REMOVE: removes the specified properties.
3119 virtual bool SetProperties(const wxRichTextRange
& range
, const wxRichTextProperties
& properties
, int flags
= wxRICHTEXT_SETPROPERTIES_WITH_UNDO
);
3122 Test if this whole range has character attributes of the specified kind. If any
3123 of the attributes are different within the range, the test fails. You
3124 can use this to implement, for example, bold button updating. style must have
3125 flags indicating which attributes are of interest.
3127 virtual bool HasCharacterAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3130 Test if this whole range has paragraph attributes of the specified kind. If any
3131 of the attributes are different within the range, the test fails. You
3132 can use this to implement, for example, centering button updating. style must have
3133 flags indicating which attributes are of interest.
3135 virtual bool HasParagraphAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3137 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraphLayoutBox(*this); }
3140 Prepares the content just before insertion (or after buffer reset).
3141 Currently is only called if undo mode is on.
3143 virtual void PrepareContent(wxRichTextParagraphLayoutBox
& container
);
3146 Insert fragment into this box at the given position. If partialParagraph is true,
3147 it is assumed that the last (or only) paragraph is just a piece of data with no paragraph
3150 virtual bool InsertFragment(long position
, wxRichTextParagraphLayoutBox
& fragment
);
3153 Make a copy of the fragment corresponding to the given range, putting it in @a fragment.
3155 virtual bool CopyFragment(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
& fragment
);
3158 Apply the style sheet to the buffer, for example if the styles have changed.
3160 virtual bool ApplyStyleSheet(wxRichTextStyleSheet
* styleSheet
);
3162 void Copy(const wxRichTextParagraphLayoutBox
& obj
);
3164 void operator= (const wxRichTextParagraphLayoutBox
& obj
) { Copy(obj
); }
3169 virtual void UpdateRanges();
3174 virtual wxString
GetText() const;
3177 Sets the default style, affecting the style currently being applied
3178 (for example, setting the default style to bold will cause subsequently
3179 inserted text to be bold).
3181 This is not cumulative - setting the default style will replace the previous
3184 Setting it to a default attribute object makes new content take on the 'basic' style.
3186 virtual bool SetDefaultStyle(const wxRichTextAttr
& style
);
3189 Returns the current default style, affecting the style currently being applied
3190 (for example, setting the default style to bold will cause subsequently
3191 inserted text to be bold).
3193 virtual const wxRichTextAttr
& GetDefaultStyle() const { return m_defaultAttributes
; }
3196 Sets the basic (overall) style. This is the style of the whole
3197 buffer before further styles are applied, unlike the default style, which
3198 only affects the style currently being applied (for example, setting the default
3199 style to bold will cause subsequently inserted text to be bold).
3201 virtual void SetBasicStyle(const wxRichTextAttr
& style
) { m_attributes
= style
; }
3204 Returns the basic (overall) style.
3206 This is the style of the whole buffer before further styles are applied,
3207 unlike the default style, which only affects the style currently being
3208 applied (for example, setting the default style to bold will cause
3209 subsequently inserted text to be bold).
3211 virtual const wxRichTextAttr
& GetBasicStyle() const { return m_attributes
; }
3214 Invalidates the buffer. With no argument, invalidates whole buffer.
3216 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3219 Do the (in)validation for this object only.
3221 virtual void DoInvalidate(const wxRichTextRange
& invalidRange
);
3224 Do the (in)validation both up and down the hierarchy.
3226 virtual void InvalidateHierarchy(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3229 Gather information about floating objects. If untilObj is non-NULL,
3230 will stop getting information if the current object is this, since we
3231 will collect the rest later.
3233 virtual bool UpdateFloatingObjects(const wxRect
& availableRect
, wxRichTextObject
* untilObj
= NULL
);
3236 Get invalid range, rounding to entire paragraphs if argument is true.
3238 wxRichTextRange
GetInvalidRange(bool wholeParagraphs
= false) const;
3241 Returns @true if this object needs layout.
3243 bool IsDirty() const { return m_invalidRange
!= wxRICHTEXT_NONE
; }
3246 Returns the wxRichTextFloatCollector of this object.
3248 wxRichTextFloatCollector
* GetFloatCollector() { return m_floatCollector
; }
3251 Returns the number of floating objects at this level.
3253 int GetFloatingObjectCount() const;
3256 Returns a list of floating objects.
3258 bool GetFloatingObjects(wxRichTextObjectList
& objects
) const;
3261 wxRichTextCtrl
* m_ctrl
;
3262 wxRichTextAttr m_defaultAttributes
;
3264 // The invalidated range that will need full layout
3265 wxRichTextRange m_invalidRange
;
3267 // Is the last paragraph partial or complete?
3268 bool m_partialParagraph
;
3270 // The floating layout state
3271 wxRichTextFloatCollector
* m_floatCollector
;
3275 @class wxRichTextBox
3277 This class implements a floating or inline text box, containing paragraphs.
3279 @library{wxrichtext}
3282 @see wxRichTextParagraphLayoutBox, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
3285 class WXDLLIMPEXP_RICHTEXT wxRichTextBox
: public wxRichTextParagraphLayoutBox
3287 DECLARE_DYNAMIC_CLASS(wxRichTextBox
)
3292 Default constructor; optionally pass the parent object.
3295 wxRichTextBox(wxRichTextObject
* parent
= NULL
);
3301 wxRichTextBox(const wxRichTextBox
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3305 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3307 virtual wxString
GetXMLNodeName() const { return wxT("textbox"); }
3309 virtual bool CanEditProperties() const { return true; }
3311 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3313 virtual wxString
GetPropertiesMenuLabel() const { return _("&Box"); }
3319 virtual wxRichTextObject
* Clone() const { return new wxRichTextBox(*this); }
3321 void Copy(const wxRichTextBox
& obj
);
3327 @class wxRichTextField
3329 This class implements the general concept of a field, an object that represents
3330 additional functionality such as a footnote, a bookmark, a page number, a table
3331 of contents, and so on. Extra information (such as a bookmark name) can be stored
3332 in the object properties.
3334 Drawing, layout, and property editing is delegated to classes derived
3335 from wxRichTextFieldType, such as instances of wxRichTextFieldTypeStandard; this makes
3336 the use of fields an efficient method of introducing extra functionality, since
3337 most of the information required to draw a field (such as a bitmap) is kept centrally
3338 in a single field type definition.
3340 The FieldType property, accessed by SetFieldType/GetFieldType, is used to retrieve
3341 the field type definition. So be careful not to overwrite this property.
3343 wxRichTextField is derived from wxRichTextParagraphLayoutBox, which means that it
3344 can contain its own read-only content, refreshed when the application calls the UpdateField
3345 function. Whether a field is treated as a composite or a single graphic is determined
3346 by the field type definition. If using wxRichTextFieldTypeStandard, passing the display
3347 type wxRICHTEXT_FIELD_STYLE_COMPOSITE to the field type definition causes the field
3348 to behave like a composite; the other display styles display a simple graphic.
3349 When implementing a composite field, you will still need to derive from wxRichTextFieldTypeStandard
3350 or wxRichTextFieldType, if only to implement UpdateField to refresh the field content
3351 appropriately. wxRichTextFieldTypeStandard is only one possible implementation, but
3352 covers common needs especially for simple, static fields using text or a bitmap.
3354 Register field types on application initialisation with the static function
3355 wxRichTextParagraphLayoutBox::AddFieldType. They will be deleted automatically
3356 on application exit.
3358 An application can write a field to a control with wxRichTextCtrl::WriteField,
3359 taking a field type, the properties for the field, and optional attributes.
3361 @library{wxrichtext}
3364 @see wxRichTextFieldTypeStandard, wxRichTextFieldType, wxRichTextParagraphLayoutBox, wxRichTextProperties, wxRichTextCtrl
3367 class WXDLLIMPEXP_RICHTEXT wxRichTextField
: public wxRichTextParagraphLayoutBox
3369 DECLARE_DYNAMIC_CLASS(wxRichTextField
)
3374 Default constructor; optionally pass the parent object.
3377 wxRichTextField(const wxString
& fieldType
= wxEmptyString
, wxRichTextObject
* parent
= NULL
);
3383 wxRichTextField(const wxRichTextField
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3387 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3389 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3391 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;
3393 virtual wxString
GetXMLNodeName() const { return wxT("field"); }
3395 virtual bool CanEditProperties() const;
3397 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3399 virtual wxString
GetPropertiesMenuLabel() const;
3401 virtual bool AcceptsFocus() const { return false; }
3403 virtual void CalculateRange(long start
, long& end
);
3406 If a field has children, we don't want the user to be able to edit it.
3408 virtual bool IsAtomic() const { return true; }
3410 virtual bool IsEmpty() const { return false; }
3412 virtual bool IsTopLevel() const;
3416 void SetFieldType(const wxString
& fieldType
) { GetProperties().SetProperty(wxT("FieldType"), fieldType
); }
3417 wxString
GetFieldType() const { return GetProperties().GetPropertyString(wxT("FieldType")); }
3422 Update the field; delegated to the associated field type. This would typically expand the field to its value,
3423 if this is a dynamically changing and/or composite field.
3425 virtual bool UpdateField();
3427 virtual wxRichTextObject
* Clone() const { return new wxRichTextField(*this); }
3429 void Copy(const wxRichTextField
& obj
);
3435 @class wxRichTextFieldType
3437 The base class for custom field types. Each type definition handles one
3438 field type. Override functions to provide drawing, layout, updating and
3439 property editing functionality for a field.
3441 Register field types on application initialisation with the static function
3442 wxRichTextParagraphLayoutBox::AddFieldType. They will be deleted automatically
3443 on application exit.
3445 @library{wxrichtext}
3448 @see wxRichTextFieldTypeStandard, wxRichTextField, wxRichTextCtrl
3451 class WXDLLIMPEXP_RICHTEXT wxRichTextFieldType
: public wxObject
3453 DECLARE_CLASS(wxRichTextFieldType
)
3456 Creates a field type definition.
3458 wxRichTextFieldType(const wxString
& name
= wxEmptyString
)
3465 wxRichTextFieldType(const wxRichTextFieldType
& fieldType
) { Copy(fieldType
); }
3467 void Copy(const wxRichTextFieldType
& fieldType
) { m_name
= fieldType
.m_name
; }
3470 Draw the item, within the given range. Some objects may ignore the range (for
3471 example paragraphs) while others must obey it (lines, to implement wrapping)
3473 virtual bool Draw(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
3476 Lay the item out at the specified position with the given size constraint.
3477 Layout must set the cached size. @rect is the available space for the object,
3478 and @a parentRect is the container that is used to determine a relative size
3479 or position (for example if a text box must be 50% of the parent text box).
3481 virtual bool Layout(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
3484 Returns the object size for the given range. Returns @false if the range
3485 is invalid for this object.
3487 virtual bool GetRangeSize(wxRichTextField
* obj
, const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const = 0;
3490 Returns @true if we can edit the object's properties via a GUI.
3492 virtual bool CanEditProperties(wxRichTextField
* WXUNUSED(obj
)) const { return false; }
3495 Edits the object's properties via a GUI.
3497 virtual bool EditProperties(wxRichTextField
* WXUNUSED(obj
), wxWindow
* WXUNUSED(parent
), wxRichTextBuffer
* WXUNUSED(buffer
)) { return false; }
3500 Returns the label to be used for the properties context menu item.
3502 virtual wxString
GetPropertiesMenuLabel(wxRichTextField
* WXUNUSED(obj
)) const { return wxEmptyString
; }
3505 Update the field. This would typically expand the field to its value,
3506 if this is a dynamically changing and/or composite field.
3508 virtual bool UpdateField(wxRichTextField
* WXUNUSED(obj
)) { return false; }
3511 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
3513 virtual bool IsTopLevel(wxRichTextField
* WXUNUSED(obj
)) const { return true; }
3516 Sets the field type name. There should be a unique name per field type object.
3518 void SetName(const wxString
& name
) { m_name
= name
; }
3521 Returns the field type name. There should be a unique name per field type object.
3523 wxString
GetName() const { return m_name
; }
3530 WX_DECLARE_STRING_HASH_MAP(wxRichTextFieldType
*, wxRichTextFieldTypeHashMap
);
3533 @class wxRichTextFieldTypeStandard
3535 A field type that can handle fields with text or bitmap labels, with a small range
3536 of styles for implementing rectangular fields and fields that can be used for start
3539 The border, text and background colours can be customised; the default is
3540 white text on a black background.
3542 The following display styles can be used.
3545 @style{wxRICHTEXT_FIELD_STYLE_COMPOSITE}
3546 Creates a composite field; you will probably need to derive a new class to implement UpdateField.
3547 @style{wxRICHTEXT_FIELD_STYLE_RECTANGLE}
3548 Shows a rounded rectangle background.
3549 @style{wxRICHTEXT_FIELD_STYLE_NO_BORDER}
3550 Suppresses the background and border; mostly used with a bitmap label.
3551 @style{wxRICHTEXT_FIELD_STYLE_START_TAG}
3552 Shows a start tag background, with the pointy end facing right.
3553 @style{wxRICHTEXT_FIELD_STYLE_END_TAG}
3554 Shows an end tag background, with the pointy end facing left.
3557 @library{wxrichtext}
3560 @see wxRichTextFieldType, wxRichTextField, wxRichTextBuffer, wxRichTextCtrl
3563 class WXDLLIMPEXP_RICHTEXT wxRichTextFieldTypeStandard
: public wxRichTextFieldType
3565 DECLARE_CLASS(wxRichTextFieldTypeStandard
)
3568 // Display style types
3569 enum { wxRICHTEXT_FIELD_STYLE_COMPOSITE
= 0x01,
3570 wxRICHTEXT_FIELD_STYLE_RECTANGLE
= 0x02,
3571 wxRICHTEXT_FIELD_STYLE_NO_BORDER
= 0x04,
3572 wxRICHTEXT_FIELD_STYLE_START_TAG
= 0x08,
3573 wxRICHTEXT_FIELD_STYLE_END_TAG
= 0x10
3577 Constructor, creating a field type definition with a text label.
3580 The name of the type definition. This must be unique, and is the type
3581 name used when adding a field to a control.
3583 The text label to be shown on the field.
3585 The display style: one of wxRICHTEXT_FIELD_STYLE_RECTANGLE,
3586 wxRICHTEXT_FIELD_STYLE_NO_BORDER, wxRICHTEXT_FIELD_STYLE_START_TAG,
3587 wxRICHTEXT_FIELD_STYLE_END_TAG.
3590 wxRichTextFieldTypeStandard(const wxString
& name
, const wxString
& label
, int displayStyle
= wxRICHTEXT_FIELD_STYLE_RECTANGLE
);
3593 Constructor, creating a field type definition with a bitmap label.
3596 The name of the type definition. This must be unique, and is the type
3597 name used when adding a field to a control.
3599 The bitmap label to be shown on the field.
3601 The display style: one of wxRICHTEXT_FIELD_STYLE_RECTANGLE,
3602 wxRICHTEXT_FIELD_STYLE_NO_BORDER, wxRICHTEXT_FIELD_STYLE_START_TAG,
3603 wxRICHTEXT_FIELD_STYLE_END_TAG.
3606 wxRichTextFieldTypeStandard(const wxString
& name
, const wxBitmap
& bitmap
, int displayStyle
= wxRICHTEXT_FIELD_STYLE_NO_BORDER
);
3609 The default constructor.
3612 wxRichTextFieldTypeStandard() { Init(); }
3615 The copy constructor.
3618 wxRichTextFieldTypeStandard(const wxRichTextFieldTypeStandard
& field
) { Copy(field
); }
3621 Initialises the object.
3628 void Copy(const wxRichTextFieldTypeStandard
& field
);
3631 The assignment operator.
3633 void operator=(const wxRichTextFieldTypeStandard
& field
) { Copy(field
); }
3636 Draw the item, within the given range. Some objects may ignore the range (for
3637 example paragraphs) while others must obey it (lines, to implement wrapping)
3639 virtual bool Draw(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3642 Lay the item out at the specified position with the given size constraint.
3643 Layout must set the cached size. @rect is the available space for the object,
3644 and @a parentRect is the container that is used to determine a relative size
3645 or position (for example if a text box must be 50% of the parent text box).
3647 virtual bool Layout(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3650 Returns the object size for the given range. Returns @false if the range
3651 is invalid for this object.
3653 virtual bool GetRangeSize(wxRichTextField
* obj
, const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3656 Get the size of the field, given the label, font size, and so on.
3658 wxSize
GetSize(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int style
) const;
3661 Returns @true if the display type is wxRICHTEXT_FIELD_STYLE_COMPOSITE, @false otherwise.
3663 virtual bool IsTopLevel(wxRichTextField
* WXUNUSED(obj
)) const { return (GetDisplayStyle() & wxRICHTEXT_FIELD_STYLE_COMPOSITE
) != 0; }
3666 Sets the text label for fields of this type.
3668 void SetLabel(const wxString
& label
) { m_label
= label
; }
3671 Returns the text label for fields of this type.
3673 const wxString
& GetLabel() const { return m_label
; }
3676 Sets the bitmap label for fields of this type.
3678 void SetBitmap(const wxBitmap
& bitmap
) { m_bitmap
= bitmap
; }
3681 Gets the bitmap label for fields of this type.
3683 const wxBitmap
& GetBitmap() const { return m_bitmap
; }
3686 Gets the display style for fields of this type.
3688 int GetDisplayStyle() const { return m_displayStyle
; }
3691 Sets the display style for fields of this type.
3693 void SetDisplayStyle(int displayStyle
) { m_displayStyle
= displayStyle
; }
3696 Gets the font used for drawing the text label.
3698 const wxFont
& GetFont() const { return m_font
; }
3701 Sets the font used for drawing the text label.
3703 void SetFont(const wxFont
& font
) { m_font
= font
; }
3706 Gets the colour used for drawing the text label.
3708 const wxColour
& GetTextColour() const { return m_textColour
; }
3711 Sets the colour used for drawing the text label.
3713 void SetTextColour(const wxColour
& colour
) { m_textColour
= colour
; }
3716 Gets the colour used for drawing the field border.
3718 const wxColour
& GetBorderColour() const { return m_borderColour
; }
3721 Sets the colour used for drawing the field border.
3723 void SetBorderColour(const wxColour
& colour
) { m_borderColour
= colour
; }
3726 Gets the colour used for drawing the field background.
3728 const wxColour
& GetBackgroundColour() const { return m_backgroundColour
; }
3731 Sets the colour used for drawing the field background.
3733 void SetBackgroundColour(const wxColour
& colour
) { m_backgroundColour
= colour
; }
3736 Sets the vertical padding (the distance between the border and the text).
3738 void SetVerticalPadding(int padding
) { m_verticalPadding
= padding
; }
3741 Gets the vertical padding (the distance between the border and the text).
3743 int GetVerticalPadding() const { return m_verticalPadding
; }
3746 Sets the horizontal padding (the distance between the border and the text).
3748 void SetHorizontalPadding(int padding
) { m_horizontalPadding
= padding
; }
3751 Sets the horizontal padding (the distance between the border and the text).
3753 int GetHorizontalPadding() const { return m_horizontalPadding
; }
3756 Sets the horizontal margin surrounding the field object.
3758 void SetHorizontalMargin(int margin
) { m_horizontalMargin
= margin
; }
3761 Gets the horizontal margin surrounding the field object.
3763 int GetHorizontalMargin() const { return m_horizontalMargin
; }
3766 Sets the vertical margin surrounding the field object.
3768 void SetVerticalMargin(int margin
) { m_verticalMargin
= margin
; }
3771 Gets the vertical margin surrounding the field object.
3773 int GetVerticalMargin() const { return m_verticalMargin
; }
3780 wxColour m_textColour
;
3781 wxColour m_borderColour
;
3782 wxColour m_backgroundColour
;
3783 int m_verticalPadding
;
3784 int m_horizontalPadding
;
3785 int m_horizontalMargin
;
3786 int m_verticalMargin
;
3791 @class wxRichTextLine
3793 This object represents a line in a paragraph, and stores
3794 offsets from the start of the paragraph representing the
3795 start and end positions of the line.
3797 @library{wxrichtext}
3800 @see wxRichTextBuffer, wxRichTextCtrl
3803 class WXDLLIMPEXP_RICHTEXT wxRichTextLine
3808 wxRichTextLine(wxRichTextParagraph
* parent
);
3809 wxRichTextLine(const wxRichTextLine
& obj
) { Init( NULL
); Copy(obj
); }
3810 virtual ~wxRichTextLine() {}
3817 Sets the range associated with this line.
3819 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
3821 Sets the range associated with this line.
3823 void SetRange(long from
, long to
) { m_range
= wxRichTextRange(from
, to
); }
3826 Returns the parent paragraph.
3828 wxRichTextParagraph
* GetParent() { return m_parent
; }
3833 const wxRichTextRange
& GetRange() const { return m_range
; }
3837 wxRichTextRange
& GetRange() { return m_range
; }
3840 Returns the absolute range.
3842 wxRichTextRange
GetAbsoluteRange() const;
3845 Returns the line size as calculated by Layout.
3847 virtual wxSize
GetSize() const { return m_size
; }
3850 Sets the line size as calculated by Layout.
3852 virtual void SetSize(const wxSize
& sz
) { m_size
= sz
; }
3855 Returns the object position relative to the parent.
3857 virtual wxPoint
GetPosition() const { return m_pos
; }
3860 Sets the object position relative to the parent.
3862 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
3865 Returns the absolute object position.
3867 virtual wxPoint
GetAbsolutePosition() const;
3870 Returns the rectangle enclosing the line.
3872 virtual wxRect
GetRect() const { return wxRect(GetAbsolutePosition(), GetSize()); }
3875 Sets the stored descent.
3877 void SetDescent(int descent
) { m_descent
= descent
; }
3880 Returns the stored descent.
3882 int GetDescent() const { return m_descent
; }
3884 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3885 wxArrayInt
& GetObjectSizes() { return m_objectSizes
; }
3886 const wxArrayInt
& GetObjectSizes() const { return m_objectSizes
; }
3892 Initialises the object.
3894 void Init(wxRichTextParagraph
* parent
);
3899 void Copy(const wxRichTextLine
& obj
);
3901 virtual wxRichTextLine
* Clone() const { return new wxRichTextLine(*this); }
3905 // The range of the line (start position to end position)
3906 // This is relative to the parent paragraph.
3907 wxRichTextRange m_range
;
3909 // Size and position measured relative to top of paragraph
3913 // Maximum descent for this line (location of text baseline)
3916 // The parent object
3917 wxRichTextParagraph
* m_parent
;
3919 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3920 wxArrayInt m_objectSizes
;
3924 WX_DECLARE_LIST_WITH_DECL( wxRichTextLine
, wxRichTextLineList
, class WXDLLIMPEXP_RICHTEXT
);
3927 @class wxRichTextParagraph
3929 This object represents a single paragraph containing various objects such as text content, images, and further paragraph layout objects.
3931 @library{wxrichtext}
3934 @see wxRichTextBuffer, wxRichTextCtrl
3937 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraph
: public wxRichTextCompositeObject
3939 DECLARE_DYNAMIC_CLASS(wxRichTextParagraph
)
3944 Constructor taking a parent and style.
3946 wxRichTextParagraph(wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
3948 Constructor taking a text string, a parent and paragraph and character attributes.
3950 wxRichTextParagraph(const wxString
& text
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* paraStyle
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
3951 virtual ~wxRichTextParagraph();
3952 wxRichTextParagraph(const wxRichTextParagraph
& obj
): wxRichTextCompositeObject() { Copy(obj
); }
3956 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3958 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3960 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;
3962 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
3964 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
3966 virtual void CalculateRange(long start
, long& end
);
3968 virtual wxString
GetXMLNodeName() const { return wxT("paragraph"); }
3973 Returns the cached lines.
3975 wxRichTextLineList
& GetLines() { return m_cachedLines
; }
3982 void Copy(const wxRichTextParagraph
& obj
);
3984 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraph(*this); }
3987 Clears the cached lines.
3994 Applies paragraph styles such as centering to the wrapped lines.
3996 virtual void ApplyParagraphStyle(wxRichTextLine
* line
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxDC
& dc
);
3999 Inserts text at the given position.
4001 virtual bool InsertText(long pos
, const wxString
& text
);
4004 Splits an object at this position if necessary, and returns
4005 the previous object, or NULL if inserting at the beginning.
4007 virtual wxRichTextObject
* SplitAt(long pos
, wxRichTextObject
** previousObject
= NULL
);
4010 Moves content to a list from this point.
4012 virtual void MoveToList(wxRichTextObject
* obj
, wxList
& list
);
4015 Adds content back from a list.
4017 virtual void MoveFromList(wxList
& list
);
4020 Returns the plain text searching from the start or end of the range.
4021 The resulting string may be shorter than the range given.
4023 bool GetContiguousPlainText(wxString
& text
, const wxRichTextRange
& range
, bool fromStart
= true);
4026 Finds a suitable wrap position. @a wrapPosition is the last position in the line to the left
4029 bool FindWrapPosition(const wxRichTextRange
& range
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int availableSpace
, long& wrapPosition
, wxArrayInt
* partialExtents
);
4032 Finds the object at the given position.
4034 wxRichTextObject
* FindObjectAtPosition(long position
);
4037 Returns the bullet text for this paragraph.
4039 wxString
GetBulletText();
4042 Allocates or reuses a line object.
4044 wxRichTextLine
* AllocateLine(int pos
);
4047 Clears remaining unused line objects, if any.
4049 bool ClearUnusedLines(int lineCount
);
4052 Returns combined attributes of the base style, paragraph style and character style. We use this to dynamically
4053 retrieve the actual style.
4055 wxRichTextAttr
GetCombinedAttributes(const wxRichTextAttr
& contentStyle
, bool includingBoxAttr
= false) const;
4058 Returns the combined attributes of the base style and paragraph style.
4060 wxRichTextAttr
GetCombinedAttributes(bool includingBoxAttr
= false) const;
4063 Returns the first position from pos that has a line break character.
4065 long GetFirstLineBreakPosition(long pos
);
4068 Creates a default tabstop array.
4070 static void InitDefaultTabs();
4073 Clears the default tabstop array.
4075 static void ClearDefaultTabs();
4078 Returns the default tabstop array.
4080 static const wxArrayInt
& GetDefaultTabs() { return sm_defaultTabs
; }
4083 Lays out the floating objects.
4085 void LayoutFloat(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, int style
, wxRichTextFloatCollector
* floatCollector
);
4089 // The lines that make up the wrapped paragraph
4090 wxRichTextLineList m_cachedLines
;
4093 static wxArrayInt sm_defaultTabs
;
4095 friend class wxRichTextFloatCollector
;
4099 @class wxRichTextPlainText
4101 This object represents a single piece of text.
4103 @library{wxrichtext}
4106 @see wxRichTextBuffer, wxRichTextCtrl
4109 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainText
: public wxRichTextObject
4111 DECLARE_DYNAMIC_CLASS(wxRichTextPlainText
)
4118 wxRichTextPlainText(const wxString
& text
= wxEmptyString
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
4123 wxRichTextPlainText(const wxRichTextPlainText
& obj
): wxRichTextObject() { Copy(obj
); }
4127 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4129 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4131 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;
4133 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
4135 virtual wxRichTextObject
* DoSplit(long pos
);
4137 virtual void CalculateRange(long start
, long& end
);
4139 virtual bool DeleteRange(const wxRichTextRange
& range
);
4141 virtual bool IsEmpty() const { return m_text
.empty(); }
4143 virtual bool CanMerge(wxRichTextObject
* object
) const;
4145 virtual bool Merge(wxRichTextObject
* object
);
4147 virtual void Dump(wxTextOutputStream
& stream
);
4150 Get the first position from pos that has a line break character.
4152 long GetFirstLineBreakPosition(long pos
);
4154 /// Does this object take note of paragraph attributes? Text and image objects don't.
4155 virtual bool UsesParagraphAttributes() const { return false; }
4158 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4161 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4162 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4165 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4166 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4169 virtual wxString
GetXMLNodeName() const { return wxT("text"); }
4176 const wxString
& GetText() const { return m_text
; }
4181 void SetText(const wxString
& text
) { m_text
= text
; }
4185 // Copies the text object,
4186 void Copy(const wxRichTextPlainText
& obj
);
4188 // Clones the text object.
4189 virtual wxRichTextObject
* Clone() const { return new wxRichTextPlainText(*this); }
4192 bool DrawTabbedString(wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxString
& str
, wxCoord
& x
, wxCoord
& y
, bool selected
);
4199 @class wxRichTextImageBlock
4201 This class stores information about an image, in binary in-memory form.
4203 @library{wxrichtext}
4206 @see wxRichTextBuffer, wxRichTextCtrl
4209 class WXDLLIMPEXP_RICHTEXT wxRichTextImageBlock
: public wxObject
4215 wxRichTextImageBlock();
4220 wxRichTextImageBlock(const wxRichTextImageBlock
& block
);
4221 virtual ~wxRichTextImageBlock();
4224 Initialises the block.
4235 Load the original image into a memory block.
4236 If the image is not a JPEG, we must convert it into a JPEG
4238 If it's not a JPEG we can make use of @a image, already scaled, so we don't have to
4239 load the image a second time.
4241 virtual bool MakeImageBlock(const wxString
& filename
, wxBitmapType imageType
,
4242 wxImage
& image
, bool convertToJPEG
= true);
4245 Make an image block from the wxImage in the given
4248 virtual bool MakeImageBlock(wxImage
& image
, wxBitmapType imageType
, int quality
= 80);
4251 Uses a const wxImage for efficiency, but can't set quality (only relevant for JPEG)
4253 virtual bool MakeImageBlockDefaultQuality(const wxImage
& image
, wxBitmapType imageType
);
4256 Makes the image block.
4258 virtual bool DoMakeImageBlock(const wxImage
& image
, wxBitmapType imageType
);
4261 Writes the block to a file.
4263 bool Write(const wxString
& filename
);
4266 Writes the data in hex to a stream.
4268 bool WriteHex(wxOutputStream
& stream
);
4271 Reads the data in hex from a stream.
4273 bool ReadHex(wxInputStream
& stream
, int length
, wxBitmapType imageType
);
4278 void Copy(const wxRichTextImageBlock
& block
);
4280 // Load a wxImage from the block
4283 bool Load(wxImage
& image
);
4288 Assignment operation.
4290 void operator=(const wxRichTextImageBlock
& block
);
4295 Returns the raw data.
4297 unsigned char* GetData() const { return m_data
; }
4300 Returns the data size in bytes.
4302 size_t GetDataSize() const { return m_dataSize
; }
4305 Returns the image type.
4307 wxBitmapType
GetImageType() const { return m_imageType
; }
4311 void SetData(unsigned char* image
) { m_data
= image
; }
4316 void SetDataSize(size_t size
) { m_dataSize
= size
; }
4319 Sets the image type.
4321 void SetImageType(wxBitmapType imageType
) { m_imageType
= imageType
; }
4324 Returns @true if the data is non-NULL.
4326 bool IsOk() const { return GetData() != NULL
; }
4327 bool Ok() const { return IsOk(); }
4330 Gets the extension for the block's type.
4332 wxString
GetExtension() const;
4337 Allocates and reads from a stream as a block of memory.
4339 static unsigned char* ReadBlock(wxInputStream
& stream
, size_t size
);
4342 Allocates and reads from a file as a block of memory.
4344 static unsigned char* ReadBlock(const wxString
& filename
, size_t size
);
4347 Writes a memory block to stream.
4349 static bool WriteBlock(wxOutputStream
& stream
, unsigned char* block
, size_t size
);
4352 Writes a memory block to a file.
4354 static bool WriteBlock(const wxString
& filename
, unsigned char* block
, size_t size
);
4357 // Size in bytes of the image stored.
4358 // This is in the raw, original form such as a JPEG file.
4359 unsigned char* m_data
;
4361 wxBitmapType m_imageType
;
4365 @class wxRichTextImage
4367 This class implements a graphic object.
4369 @library{wxrichtext}
4372 @see wxRichTextBuffer, wxRichTextCtrl, wxRichTextImageBlock
4375 class WXDLLIMPEXP_RICHTEXT wxRichTextImage
: public wxRichTextObject
4377 DECLARE_DYNAMIC_CLASS(wxRichTextImage
)
4382 Default constructor.
4384 wxRichTextImage(wxRichTextObject
* parent
= NULL
): wxRichTextObject(parent
) { }
4387 Creates a wxRichTextImage from a wxImage.
4389 wxRichTextImage(const wxImage
& image
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4392 Creates a wxRichTextImage from an image block.
4394 wxRichTextImage(const wxRichTextImageBlock
& imageBlock
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4399 wxRichTextImage(const wxRichTextImage
& obj
): wxRichTextObject(obj
) { Copy(obj
); }
4403 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4405 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4407 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;
4410 Returns the 'natural' size for this object - the image size.
4412 virtual wxTextAttrSize
GetNaturalSize() const;
4414 virtual bool IsEmpty() const { return false; /* !m_imageBlock.IsOk(); */ }
4416 virtual bool CanEditProperties() const { return true; }
4418 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
4420 virtual wxString
GetPropertiesMenuLabel() const { return _("&Picture"); }
4422 virtual bool UsesParagraphAttributes() const { return false; }
4425 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4428 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4429 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4432 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4433 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4436 // Images can be floatable (optionally).
4437 virtual bool IsFloatable() const { return true; }
4439 virtual wxString
GetXMLNodeName() const { return wxT("image"); }
4444 Returns the image cache (a scaled bitmap).
4446 const wxBitmap
& GetImageCache() const { return m_imageCache
; }
4449 Sets the image cache.
4451 void SetImageCache(const wxBitmap
& bitmap
) { m_imageCache
= bitmap
; }
4454 Resets the image cache.
4456 void ResetImageCache() { m_imageCache
= wxNullBitmap
; }
4459 Returns the image block containing the raw data.
4461 wxRichTextImageBlock
& GetImageBlock() { return m_imageBlock
; }
4464 Gets the original image size.
4466 wxSize
GetOriginalImageSize() const;
4469 Sets the original image size.
4471 void SetOriginalImageSize(const wxSize
& sz
);
4476 Copies the image object.
4478 void Copy(const wxRichTextImage
& obj
);
4481 Clones the image object.
4483 virtual wxRichTextObject
* Clone() const { return new wxRichTextImage(*this); }
4486 Creates a cached image at the required size.
4488 virtual bool LoadImageCache(wxDC
& dc
, bool resetCache
= false);
4491 wxRichTextImageBlock m_imageBlock
;
4492 wxBitmap m_imageCache
;
4495 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCommand
;
4496 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
4499 @class wxRichTextBuffer
4501 This is a kind of paragraph layout box, used to represent the whole buffer.
4503 @library{wxrichtext}
4506 @see wxRichTextParagraphLayoutBox, wxRichTextCtrl
4509 class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer
: public wxRichTextParagraphLayoutBox
4511 DECLARE_DYNAMIC_CLASS(wxRichTextBuffer
)
4516 Default constructor.
4518 wxRichTextBuffer() { Init(); }
4523 wxRichTextBuffer(const wxRichTextBuffer
& obj
): wxRichTextParagraphLayoutBox() { Init(); Copy(obj
); }
4525 virtual ~wxRichTextBuffer() ;
4530 Returns the command processor.
4531 A text buffer always creates its own command processor when it is initialized.
4533 wxCommandProcessor
* GetCommandProcessor() const { return m_commandProcessor
; }
4536 Sets style sheet, if any. This will allow the application to use named character and paragraph
4537 styles found in the style sheet.
4539 Neither the buffer nor the control owns the style sheet so must be deleted by the application.
4541 void SetStyleSheet(wxRichTextStyleSheet
* styleSheet
) { m_styleSheet
= styleSheet
; }
4544 Returns the style sheet.
4546 virtual wxRichTextStyleSheet
* GetStyleSheet() const { return m_styleSheet
; }
4549 Sets the style sheet and sends a notification of the change.
4551 bool SetStyleSheetAndNotify(wxRichTextStyleSheet
* sheet
);
4554 Pushes the style sheet to the top of the style sheet stack.
4556 bool PushStyleSheet(wxRichTextStyleSheet
* styleSheet
);
4559 Pops the style sheet from the top of the style sheet stack.
4561 wxRichTextStyleSheet
* PopStyleSheet();
4564 Returns the table storing fonts, for quick access and font reuse.
4566 wxRichTextFontTable
& GetFontTable() { return m_fontTable
; }
4569 Returns the table storing fonts, for quick access and font reuse.
4571 const wxRichTextFontTable
& GetFontTable() const { return m_fontTable
; }
4574 Sets table storing fonts, for quick access and font reuse.
4576 void SetFontTable(const wxRichTextFontTable
& table
) { m_fontTable
= table
; }
4586 Clears the buffer, adds an empty paragraph, and clears the command processor.
4588 virtual void ResetAndClearCommands();
4592 Loads content from a stream or file.
4593 Not all handlers will implement file loading.
4595 virtual bool LoadFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4596 virtual bool LoadFile(wxInputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4601 Saves content to a stream or file.
4602 Not all handlers will implement file saving.
4604 virtual bool SaveFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4605 virtual bool SaveFile(wxOutputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4609 Sets the handler flags, controlling loading and saving.
4611 void SetHandlerFlags(int flags
) { m_handlerFlags
= flags
; }
4614 Gets the handler flags, controlling loading and saving.
4616 int GetHandlerFlags() const { return m_handlerFlags
; }
4619 Convenience function to add a paragraph of text.
4621 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
) { Modify(); return wxRichTextParagraphLayoutBox::AddParagraph(text
, paraStyle
); }
4624 Begin collapsing undo/redo commands. Note that this may not work properly
4625 if combining commands that delete or insert content, changing ranges for
4628 @a cmdName should be the name of the combined command that will appear
4629 next to Undo and Redo in the edit menu.
4631 virtual bool BeginBatchUndo(const wxString
& cmdName
);
4634 End collapsing undo/redo commands.
4636 virtual bool EndBatchUndo();
4639 Returns @true if we are collapsing commands.
4641 virtual bool BatchingUndo() const { return m_batchedCommandDepth
> 0; }
4644 Submit the action immediately, or delay according to whether collapsing is on.
4646 virtual bool SubmitAction(wxRichTextAction
* action
);
4649 Returns the collapsed command.
4651 virtual wxRichTextCommand
* GetBatchedCommand() const { return m_batchedCommand
; }
4654 Begin suppressing undo/redo commands. The way undo is suppressed may be implemented
4655 differently by each command. If not dealt with by a command implementation, then
4656 it will be implemented automatically by not storing the command in the undo history
4657 when the action is submitted to the command processor.
4659 virtual bool BeginSuppressUndo();
4662 End suppressing undo/redo commands.
4664 virtual bool EndSuppressUndo();
4667 Are we suppressing undo??
4669 virtual bool SuppressingUndo() const { return m_suppressUndo
> 0; }
4672 Copy the range to the clipboard.
4674 virtual bool CopyToClipboard(const wxRichTextRange
& range
);
4677 Paste the clipboard content to the buffer.
4679 virtual bool PasteFromClipboard(long position
);
4682 Returns @true if we can paste from the clipboard.
4684 virtual bool CanPasteFromClipboard() const;
4687 Begin using a style.
4689 virtual bool BeginStyle(const wxRichTextAttr
& style
);
4694 virtual bool EndStyle();
4699 virtual bool EndAllStyles();
4702 Clears the style stack.
4704 virtual void ClearStyleStack();
4707 Returns the size of the style stack, for example to check correct nesting.
4709 virtual size_t GetStyleStackSize() const { return m_attributeStack
.GetCount(); }
4719 bool EndBold() { return EndStyle(); }
4722 Begins using italic.
4729 bool EndItalic() { return EndStyle(); }
4732 Begins using underline.
4734 bool BeginUnderline();
4737 Ends using underline.
4739 bool EndUnderline() { return EndStyle(); }
4742 Begins using point size.
4744 bool BeginFontSize(int pointSize
);
4747 Ends using point size.
4749 bool EndFontSize() { return EndStyle(); }
4752 Begins using this font.
4754 bool BeginFont(const wxFont
& font
);
4759 bool EndFont() { return EndStyle(); }
4762 Begins using this colour.
4764 bool BeginTextColour(const wxColour
& colour
);
4767 Ends using a colour.
4769 bool EndTextColour() { return EndStyle(); }
4772 Begins using alignment.
4774 bool BeginAlignment(wxTextAttrAlignment alignment
);
4779 bool EndAlignment() { return EndStyle(); }
4782 Begins using @a leftIndent for the left indent, and optionally @a leftSubIndent for
4783 the sub-indent. Both are expressed in tenths of a millimetre.
4785 The sub-indent is an offset from the left of the paragraph, and is used for all
4786 but the first line in a paragraph. A positive value will cause the first line to appear
4787 to the left of the subsequent lines, and a negative value will cause the first line to be
4788 indented relative to the subsequent lines.
4790 bool BeginLeftIndent(int leftIndent
, int leftSubIndent
= 0);
4795 bool EndLeftIndent() { return EndStyle(); }
4798 Begins a right indent, specified in tenths of a millimetre.
4800 bool BeginRightIndent(int rightIndent
);
4805 bool EndRightIndent() { return EndStyle(); }
4808 Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
4809 in tenths of a millimetre.
4811 bool BeginParagraphSpacing(int before
, int after
);
4814 Ends paragraph spacing.
4816 bool EndParagraphSpacing() { return EndStyle(); }
4819 Begins line spacing using the specified value. @e spacing is a multiple, where
4820 10 means single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
4822 The ::wxTextAttrLineSpacing enumeration values are defined for convenience.
4824 bool BeginLineSpacing(int lineSpacing
);
4829 bool EndLineSpacing() { return EndStyle(); }
4832 Begins numbered bullet.
4834 This call will be needed for each item in the list, and the
4835 application should take care of incrementing the numbering.
4837 @a bulletNumber is a number, usually starting with 1.
4838 @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
4839 @a bulletStyle is a bitlist of the following values:
4841 wxRichTextBuffer uses indentation to render a bulleted item.
4842 The left indent is the distance between the margin and the bullet.
4843 The content of the paragraph, including the first line, starts
4844 at leftMargin + leftSubIndent.
4845 So the distance between the left edge of the bullet and the
4846 left of the actual paragraph is leftSubIndent.
4848 bool BeginNumberedBullet(int bulletNumber
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_ARABIC
|wxTEXT_ATTR_BULLET_STYLE_PERIOD
);
4851 Ends numbered bullet.
4853 bool EndNumberedBullet() { return EndStyle(); }
4856 Begins applying a symbol bullet, using a character from the current font.
4858 See BeginNumberedBullet() for an explanation of how indentation is used
4859 to render the bulleted paragraph.
4861 bool BeginSymbolBullet(const wxString
& symbol
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_SYMBOL
);
4866 bool EndSymbolBullet() { return EndStyle(); }
4869 Begins applying a standard bullet, using one of the standard bullet names
4870 (currently @c standard/circle or @c standard/square.
4872 See BeginNumberedBullet() for an explanation of how indentation is used to
4873 render the bulleted paragraph.
4875 bool BeginStandardBullet(const wxString
& bulletName
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_STANDARD
);
4878 Ends standard bullet.
4880 bool EndStandardBullet() { return EndStyle(); }
4883 Begins named character style.
4885 bool BeginCharacterStyle(const wxString
& characterStyle
);
4888 Ends named character style.
4890 bool EndCharacterStyle() { return EndStyle(); }
4893 Begins named paragraph style.
4895 bool BeginParagraphStyle(const wxString
& paragraphStyle
);
4898 Ends named character style.
4900 bool EndParagraphStyle() { return EndStyle(); }
4903 Begins named list style.
4905 Optionally, you can also pass a level and a number.
4907 bool BeginListStyle(const wxString
& listStyle
, int level
= 1, int number
= 1);
4910 Ends named character style.
4912 bool EndListStyle() { return EndStyle(); }
4915 Begins applying wxTEXT_ATTR_URL to the content.
4917 Pass a URL and optionally, a character style to apply, since it is common
4918 to mark a URL with a familiar style such as blue text with underlining.
4920 bool BeginURL(const wxString
& url
, const wxString
& characterStyle
= wxEmptyString
);
4925 bool EndURL() { return EndStyle(); }
4930 Adds an event handler.
4932 A buffer associated with a control has the control as the only event handler,
4933 but the application is free to add more if further notification is required.
4934 All handlers are notified of an event originating from the buffer, such as
4935 the replacement of a style sheet during loading.
4937 The buffer never deletes any of the event handlers, unless RemoveEventHandler()
4938 is called with @true as the second argument.
4940 bool AddEventHandler(wxEvtHandler
* handler
);
4943 Removes an event handler from the buffer's list of handlers, deleting the
4944 object if @a deleteHandler is @true.
4946 bool RemoveEventHandler(wxEvtHandler
* handler
, bool deleteHandler
= false);
4949 Clear event handlers.
4951 void ClearEventHandlers();
4954 Send event to event handlers. If sendToAll is true, will send to all event handlers,
4955 otherwise will stop at the first successful one.
4957 bool SendEvent(wxEvent
& event
, bool sendToAll
= true);
4961 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
4966 void Copy(const wxRichTextBuffer
& obj
);
4969 Assignment operator.
4971 void operator= (const wxRichTextBuffer
& obj
) { Copy(obj
); }
4976 virtual wxRichTextObject
* Clone() const { return new wxRichTextBuffer(*this); }
4979 Submits a command to insert paragraphs.
4981 bool InsertParagraphsWithUndo(long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4984 Submits a command to insert the given text.
4986 bool InsertTextWithUndo(long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4989 Submits a command to insert a newline.
4991 bool InsertNewlineWithUndo(long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4994 Submits a command to insert the given image.
4996 bool InsertImageWithUndo(long pos
, const wxRichTextImageBlock
& imageBlock
, wxRichTextCtrl
* ctrl
, int flags
= 0,
4997 const wxRichTextAttr
& textAttr
= wxRichTextAttr());
5000 Submits a command to insert an object.
5002 wxRichTextObject
* InsertObjectWithUndo(long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
);
5005 Submits a command to delete this range.
5007 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
);
5012 void Modify(bool modify
= true) { m_modified
= modify
; }
5015 Returns @true if the buffer was modified.
5017 bool IsModified() const { return m_modified
; }
5021 Dumps contents of buffer for debugging purposes.
5023 virtual void Dump();
5024 virtual void Dump(wxTextOutputStream
& stream
) { wxRichTextParagraphLayoutBox::Dump(stream
); }
5028 Returns the file handlers.
5030 static wxList
& GetHandlers() { return sm_handlers
; }
5033 Adds a file handler to the end.
5035 static void AddHandler(wxRichTextFileHandler
*handler
);
5038 Inserts a file handler at the front.
5040 static void InsertHandler(wxRichTextFileHandler
*handler
);
5043 Removes a file handler.
5045 static bool RemoveHandler(const wxString
& name
);
5048 Finds a file handler by name.
5050 static wxRichTextFileHandler
*FindHandler(const wxString
& name
);
5053 Finds a file handler by extension and type.
5055 static wxRichTextFileHandler
*FindHandler(const wxString
& extension
, wxRichTextFileType imageType
);
5058 Finds a handler by filename or, if supplied, type.
5060 static wxRichTextFileHandler
*FindHandlerFilenameOrType(const wxString
& filename
,
5061 wxRichTextFileType imageType
);
5064 Finds a handler by type.
5066 static wxRichTextFileHandler
*FindHandler(wxRichTextFileType imageType
);
5069 Gets a wildcard incorporating all visible handlers. If @a types is present,
5070 it will be filled with the file type corresponding to each filter. This can be
5071 used to determine the type to pass to LoadFile given a selected filter.
5073 static wxString
GetExtWildcard(bool combine
= false, bool save
= false, wxArrayInt
* types
= NULL
);
5076 Clean up file handlers.
5078 static void CleanUpHandlers();
5081 Initialise the standard file handlers.
5082 Currently, only the plain text loading/saving handler is initialised by default.
5084 static void InitStandardHandlers();
5087 Returns the drawing handlers.
5089 static wxList
& GetDrawingHandlers() { return sm_drawingHandlers
; }
5092 Adds a drawing handler to the end.
5094 static void AddDrawingHandler(wxRichTextDrawingHandler
*handler
);
5097 Inserts a drawing handler at the front.
5099 static void InsertDrawingHandler(wxRichTextDrawingHandler
*handler
);
5102 Removes a drawing handler.
5104 static bool RemoveDrawingHandler(const wxString
& name
);
5107 Finds a drawing handler by name.
5109 static wxRichTextDrawingHandler
*FindDrawingHandler(const wxString
& name
);
5112 Clean up drawing handlers.
5114 static void CleanUpDrawingHandlers();
5117 Returns the field types.
5119 static wxRichTextFieldTypeHashMap
& GetFieldTypes() { return sm_fieldTypes
; }
5124 @see RemoveFieldType(), FindFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5127 static void AddFieldType(wxRichTextFieldType
*fieldType
);
5130 Removes a field type by name.
5132 @see AddFieldType(), FindFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5134 static bool RemoveFieldType(const wxString
& name
);
5137 Finds a field type by name.
5139 @see RemoveFieldType(), AddFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5141 static wxRichTextFieldType
*FindFieldType(const wxString
& name
);
5144 Cleans up field types.
5146 static void CleanUpFieldTypes();
5149 Returns the renderer object.
5151 static wxRichTextRenderer
* GetRenderer() { return sm_renderer
; }
5154 Sets @a renderer as the object to be used to render certain aspects of the
5155 content, such as bullets.
5157 You can override default rendering by deriving a new class from
5158 wxRichTextRenderer or wxRichTextStdRenderer, overriding one or more
5159 virtual functions, and setting an instance of the class using this function.
5161 static void SetRenderer(wxRichTextRenderer
* renderer
);
5164 Returns the minimum margin between bullet and paragraph in 10ths of a mm.
5166 static int GetBulletRightMargin() { return sm_bulletRightMargin
; }
5169 Sets the minimum margin between bullet and paragraph in 10ths of a mm.
5171 static void SetBulletRightMargin(int margin
) { sm_bulletRightMargin
= margin
; }
5174 Returns the factor to multiply by character height to get a reasonable bullet size.
5176 static float GetBulletProportion() { return sm_bulletProportion
; }
5179 Sets the factor to multiply by character height to get a reasonable bullet size.
5181 static void SetBulletProportion(float prop
) { sm_bulletProportion
= prop
; }
5184 Returns the scale factor for calculating dimensions.
5186 double GetScale() const { return m_scale
; }
5189 Sets the scale factor for calculating dimensions.
5191 void SetScale(double scale
) { m_scale
= scale
; }
5195 /// Command processor
5196 wxCommandProcessor
* m_commandProcessor
;
5198 /// Table storing fonts
5199 wxRichTextFontTable m_fontTable
;
5201 /// Has been modified?
5204 /// Collapsed command stack
5205 int m_batchedCommandDepth
;
5207 /// Name for collapsed command
5208 wxString m_batchedCommandsName
;
5210 /// Current collapsed command accumulating actions
5211 wxRichTextCommand
* m_batchedCommand
;
5213 /// Whether to suppress undo
5216 /// Style sheet, if any
5217 wxRichTextStyleSheet
* m_styleSheet
;
5219 /// List of event handlers that will be notified of events
5220 wxList m_eventHandlers
;
5222 /// Stack of attributes for convenience functions
5223 wxList m_attributeStack
;
5225 /// Flags to be passed to handlers
5229 static wxList sm_handlers
;
5231 /// Drawing handlers
5232 static wxList sm_drawingHandlers
;
5235 static wxRichTextFieldTypeHashMap sm_fieldTypes
;
5238 static wxRichTextRenderer
* sm_renderer
;
5240 /// Minimum margin between bullet and paragraph in 10ths of a mm
5241 static int sm_bulletRightMargin
;
5243 /// Factor to multiply by character height to get a reasonable bullet size
5244 static float sm_bulletProportion
;
5246 /// Scaling factor in use: needed to calculate correct dimensions when printing
5251 @class wxRichTextCell
5253 wxRichTextCell is the cell in a table.
5256 class WXDLLIMPEXP_RICHTEXT wxRichTextCell
: public wxRichTextBox
5258 DECLARE_DYNAMIC_CLASS(wxRichTextCell
)
5263 Default constructor; optionally pass the parent object.
5266 wxRichTextCell(wxRichTextObject
* parent
= NULL
);
5272 wxRichTextCell(const wxRichTextCell
& obj
): wxRichTextBox() { Copy(obj
); }
5276 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
5278 virtual wxString
GetXMLNodeName() const { return wxT("cell"); }
5280 virtual bool CanEditProperties() const { return true; }
5282 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
5284 virtual wxString
GetPropertiesMenuLabel() const { return _("&Cell"); }
5290 virtual wxRichTextObject
* Clone() const { return new wxRichTextCell(*this); }
5292 void Copy(const wxRichTextCell
& obj
);
5298 @class wxRichTextTable
5300 wxRichTextTable represents a table with arbitrary columns and rows.
5303 WX_DEFINE_ARRAY_PTR(wxRichTextObject
*, wxRichTextObjectPtrArray
);
5304 WX_DECLARE_OBJARRAY(wxRichTextObjectPtrArray
, wxRichTextObjectPtrArrayArray
);
5306 class WXDLLIMPEXP_RICHTEXT wxRichTextTable
: public wxRichTextBox
5308 DECLARE_DYNAMIC_CLASS(wxRichTextTable
)
5314 Default constructor; optionally pass the parent object.
5317 wxRichTextTable(wxRichTextObject
* parent
= NULL
);
5323 wxRichTextTable(const wxRichTextTable
& obj
): wxRichTextBox() { Copy(obj
); }
5327 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
5329 virtual wxString
GetXMLNodeName() const { return wxT("table"); }
5331 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
5333 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;
5335 virtual bool DeleteRange(const wxRichTextRange
& range
);
5337 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
5340 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
5343 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
5344 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
5347 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
5348 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
5351 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
5353 virtual void CalculateRange(long start
, long& end
);
5355 // Can this object handle the selections of its children? FOr example, a table.
5356 virtual bool HandlesChildSelections() const { return true; }
5358 /// Returns a selection object specifying the selections between start and end character positions.
5359 /// For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
5360 virtual wxRichTextSelection
GetSelection(long start
, long end
) const;
5362 virtual bool CanEditProperties() const { return true; }
5364 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
5366 virtual wxString
GetPropertiesMenuLabel() const { return _("&Table"); }
5368 // Returns true if objects of this class can accept the focus, i.e. a call to SetFocusObject
5369 // is possible. For example, containers supporting text, such as a text box object, can accept the focus,
5370 // but a table can't (set the focus to individual cells instead).
5371 virtual bool AcceptsFocus() const { return false; }
5376 Returns the cells array.
5378 const wxRichTextObjectPtrArrayArray
& GetCells() const { return m_cells
; }
5381 Returns the cells array.
5383 wxRichTextObjectPtrArrayArray
& GetCells() { return m_cells
; }
5386 Returns the row count.
5388 int GetRowCount() const { return m_rowCount
; }
5391 Returns the column count.
5393 int GetColumnCount() const { return m_colCount
; }
5396 Returns the cell at the given row/column position.
5398 virtual wxRichTextCell
* GetCell(int row
, int col
) const;
5401 Returns the cell at the given character position (in the range of the table).
5403 virtual wxRichTextCell
* GetCell(long pos
) const;
5406 Returns the row/column for a given character position.
5408 virtual bool GetCellRowColumnPosition(long pos
, int& row
, int& col
) const;
5416 virtual void ClearTable();
5419 Creates a table of the given dimensions.
5422 virtual bool CreateTable(int rows
, int cols
);
5425 Sets the attributes for the cells specified by the selection.
5428 virtual bool SetCellStyle(const wxRichTextSelection
& selection
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
5431 Deletes rows from the given row position.
5434 virtual bool DeleteRows(int startRow
, int noRows
= 1);
5437 Deletes columns from the given column position.
5440 virtual bool DeleteColumns(int startCol
, int noCols
= 1);
5443 Adds rows from the given row position.
5446 virtual bool AddRows(int startRow
, int noRows
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
5449 Adds columns from the given column position.
5452 virtual bool AddColumns(int startCol
, int noCols
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
5454 // Makes a clone of this object.
5455 virtual wxRichTextObject
* Clone() const { return new wxRichTextTable(*this); }
5457 // Copies this object.
5458 void Copy(const wxRichTextTable
& obj
);
5465 // An array of rows, each of which is a wxRichTextObjectPtrArray containing
5466 // the cell objects. The cell objects are also children of this object.
5467 // Problem: if boxes are immediate children of a box, this will cause problems
5468 // with wxRichTextParagraphLayoutBox functions (and functions elsewhere) that
5469 // expect to find just paragraphs. May have to adjust the way we handle the
5470 // hierarchy to accept non-paragraph objects in a paragraph layout box.
5471 // We'll be overriding much wxRichTextParagraphLayoutBox functionality so this
5472 // may not be such a problem. Perhaps the table should derive from a different
5474 wxRichTextObjectPtrArrayArray m_cells
;
5479 The command identifiers for Do/Undo.
5482 enum wxRichTextCommandId
5486 wxRICHTEXT_CHANGE_ATTRIBUTES
,
5487 wxRICHTEXT_CHANGE_STYLE
,
5488 wxRICHTEXT_CHANGE_OBJECT
5492 @class wxRichTextObjectAddress
5494 A class for specifying an object anywhere in an object hierarchy,
5495 without using a pointer, necessary since wxRTC commands may delete
5496 and recreate sub-objects so physical object addresses change. An array
5497 of positions (one per hierarchy level) is used.
5499 @library{wxrichtext}
5502 @see wxRichTextCommand
5505 class WXDLLIMPEXP_RICHTEXT wxRichTextObjectAddress
5509 Creates the address given a container and an object.
5511 wxRichTextObjectAddress(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
) { Create(topLevelContainer
, obj
); }
5514 wxRichTextObjectAddress() { Init(); }
5517 wxRichTextObjectAddress(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5524 void Copy(const wxRichTextObjectAddress
& address
) { m_address
= address
.m_address
; }
5527 Assignment operator.
5529 void operator=(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5532 Returns the object specified by the address, given a top level container.
5534 wxRichTextObject
* GetObject(wxRichTextParagraphLayoutBox
* topLevelContainer
) const;
5537 Creates the address given a container and an object.
5539 bool Create(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
);
5542 Returns the array of integers representing the object address.
5544 wxArrayInt
& GetAddress() { return m_address
; }
5547 Returns the array of integers representing the object address.
5549 const wxArrayInt
& GetAddress() const { return m_address
; }
5552 Sets the address from an array of integers.
5554 void SetAddress(const wxArrayInt
& address
) { m_address
= address
; }
5558 wxArrayInt m_address
;
5561 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
5564 @class wxRichTextCommand
5566 Implements a command on the undo/redo stack. A wxRichTextCommand object contains one or more wxRichTextAction
5567 objects, allowing aggregation of a number of operations into one command.
5569 @library{wxrichtext}
5572 @see wxRichTextAction
5575 class WXDLLIMPEXP_RICHTEXT wxRichTextCommand
: public wxCommand
5579 Constructor for one action.
5581 wxRichTextCommand(const wxString
& name
, wxRichTextCommandId id
, wxRichTextBuffer
* buffer
,
5582 wxRichTextParagraphLayoutBox
* container
, wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5585 Constructor for multiple actions.
5587 wxRichTextCommand(const wxString
& name
);
5589 virtual ~wxRichTextCommand();
5592 Performs the command.
5602 Adds an action to the action list.
5604 void AddAction(wxRichTextAction
* action
);
5607 Clears the action list.
5609 void ClearActions();
5612 Returns the action list.
5614 wxList
& GetActions() { return m_actions
; }
5622 @class wxRichTextAction
5624 Implements a part of a command.
5626 @library{wxrichtext}
5629 @see wxRichTextCommand
5632 class WXDLLIMPEXP_RICHTEXT wxRichTextAction
: public wxObject
5636 Constructor. @a buffer is the top-level buffer, while @a container is the object within
5637 which the action is taking place. In the simplest case, they are the same.
5639 wxRichTextAction(wxRichTextCommand
* cmd
, const wxString
& name
, wxRichTextCommandId id
,
5640 wxRichTextBuffer
* buffer
, wxRichTextParagraphLayoutBox
* container
,
5641 wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5643 virtual ~wxRichTextAction();
5646 Performs the action.
5656 Updates the control appearance, optimizing if possible given information from the call to Layout.
5658 void UpdateAppearance(long caretPosition
, bool sendUpdateEvent
= false,
5659 wxArrayInt
* optimizationLineCharPositions
= NULL
, wxArrayInt
* optimizationLineYPositions
= NULL
, bool isDoCmd
= true);
5662 Replaces the buffer paragraphs with the given fragment.
5664 void ApplyParagraphs(const wxRichTextParagraphLayoutBox
& fragment
);
5667 Returns the new fragments.
5669 wxRichTextParagraphLayoutBox
& GetNewParagraphs() { return m_newParagraphs
; }
5672 Returns the old fragments.
5674 wxRichTextParagraphLayoutBox
& GetOldParagraphs() { return m_oldParagraphs
; }
5677 Returns the attributes, for single-object commands.
5679 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
5682 Returns the object to replace the one at the position defined by the container address
5683 and the action's range start position.
5685 wxRichTextObject
* GetObject() const { return m_object
; }
5688 Sets the object to replace the one at the position defined by the container address
5689 and the action's range start position.
5691 void SetObject(wxRichTextObject
* obj
) { m_object
= obj
; m_objectAddress
.Create(m_buffer
, m_object
); }
5694 Makes an address from the given object.
5696 void MakeObject(wxRichTextObject
* obj
) { m_objectAddress
.Create(m_buffer
, obj
); }
5699 Calculate arrays for refresh optimization.
5701 void CalculateRefreshOptimizations(wxArrayInt
& optimizationLineCharPositions
, wxArrayInt
& optimizationLineYPositions
);
5704 Sets the position used for e.g. insertion.
5706 void SetPosition(long pos
) { m_position
= pos
; }
5709 Returns the position used for e.g. insertion.
5711 long GetPosition() const { return m_position
; }
5714 Sets the range for e.g. deletion.
5716 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
5719 Returns the range for e.g. deletion.
5721 const wxRichTextRange
& GetRange() const { return m_range
; }
5724 Returns the address (nested position) of the container within the buffer being manipulated.
5726 wxRichTextObjectAddress
& GetContainerAddress() { return m_containerAddress
; }
5729 Returns the address (nested position) of the container within the buffer being manipulated.
5731 const wxRichTextObjectAddress
& GetContainerAddress() const { return m_containerAddress
; }
5734 Sets the address (nested position) of the container within the buffer being manipulated.
5736 void SetContainerAddress(const wxRichTextObjectAddress
& address
) { m_containerAddress
= address
; }
5739 Sets the address (nested position) of the container within the buffer being manipulated.
5741 void SetContainerAddress(wxRichTextParagraphLayoutBox
* container
, wxRichTextObject
* obj
) { m_containerAddress
.Create(container
, obj
); }
5744 Returns the container that this action refers to, using the container address and top-level buffer.
5746 wxRichTextParagraphLayoutBox
* GetContainer() const;
5749 Returns the action name.
5751 const wxString
& GetName() const { return m_name
; }
5758 wxRichTextBuffer
* m_buffer
;
5760 // The address (nested position) of the container being manipulated.
5761 // This is necessary because objects are deleted, and we can't
5762 // therefore store actual pointers.
5763 wxRichTextObjectAddress m_containerAddress
;
5766 wxRichTextCtrl
* m_ctrl
;
5768 // Stores the new paragraphs
5769 wxRichTextParagraphLayoutBox m_newParagraphs
;
5771 // Stores the old paragraphs
5772 wxRichTextParagraphLayoutBox m_oldParagraphs
;
5774 // Stores an object to replace the one at the position
5775 // defined by the container address and the action's range start position.
5776 wxRichTextObject
* m_object
;
5778 // Stores the attributes
5779 wxRichTextAttr m_attributes
;
5781 // The address of the object being manipulated (used for changing an individual object or its attributes)
5782 wxRichTextObjectAddress m_objectAddress
;
5784 // Stores the old attributes
5785 // wxRichTextAttr m_oldAttributes;
5787 // The affected range
5788 wxRichTextRange m_range
;
5790 // The insertion point for this command
5793 // Ignore 1st 'Do' operation because we already did it
5796 // The command identifier
5797 wxRichTextCommandId m_cmdId
;
5804 // Include style sheet when loading and saving
5805 #define wxRICHTEXT_HANDLER_INCLUDE_STYLESHEET 0x0001
5807 // Save images to memory file system in HTML handler
5808 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY 0x0010
5810 // Save images to files in HTML handler
5811 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_FILES 0x0020
5813 // Save images as inline base64 data in HTML handler
5814 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_BASE64 0x0040
5816 // Don't write header and footer (or BODY), so we can include the fragment
5817 // in a larger document
5818 #define wxRICHTEXT_HANDLER_NO_HEADER_FOOTER 0x0080
5820 // Convert the more common face names to names that will work on the current platform
5821 // in a larger document
5822 #define wxRICHTEXT_HANDLER_CONVERT_FACENAMES 0x0100
5825 @class wxRichTextFileHandler
5827 The base class for file handlers.
5829 @library{wxrichtext}
5832 @see wxRichTextBuffer, wxRichTextCtrl
5835 class WXDLLIMPEXP_RICHTEXT wxRichTextFileHandler
: public wxObject
5837 DECLARE_CLASS(wxRichTextFileHandler
)
5840 Creates a file handler object.
5842 wxRichTextFileHandler(const wxString
& name
= wxEmptyString
, const wxString
& ext
= wxEmptyString
, int type
= 0)
5843 : m_name(name
), m_extension(ext
), m_type(type
), m_flags(0), m_visible(true)
5848 Loads the buffer from a stream.
5849 Not all handlers will implement file loading.
5851 bool LoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
)
5852 { return DoLoadFile(buffer
, stream
); }
5855 Saves the buffer to a stream.
5856 Not all handlers will implement file saving.
5858 bool SaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
)
5859 { return DoSaveFile(buffer
, stream
); }
5862 #if wxUSE_FFILE && wxUSE_STREAMS
5864 Loads the buffer from a file.
5866 virtual bool LoadFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5869 Saves the buffer to a file.
5871 virtual bool SaveFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5872 #endif // wxUSE_STREAMS && wxUSE_STREAMS
5875 Returns @true if we handle this filename (if using files). By default, checks the extension.
5877 virtual bool CanHandle(const wxString
& filename
) const;
5880 Returns @true if we can save using this handler.
5882 virtual bool CanSave() const { return false; }
5885 Returns @true if we can load using this handler.
5887 virtual bool CanLoad() const { return false; }
5890 Returns @true if this handler should be visible to the user.
5892 virtual bool IsVisible() const { return m_visible
; }
5895 Sets whether the handler should be visible to the user (via the application's
5896 load and save dialogs).
5898 virtual void SetVisible(bool visible
) { m_visible
= visible
; }
5901 Sets the name of the handler.
5903 void SetName(const wxString
& name
) { m_name
= name
; }
5906 Returns the name of the handler.
5908 wxString
GetName() const { return m_name
; }
5911 Sets the default extension to recognise.
5913 void SetExtension(const wxString
& ext
) { m_extension
= ext
; }
5916 Returns the default extension to recognise.
5918 wxString
GetExtension() const { return m_extension
; }
5921 Sets the handler type.
5923 void SetType(int type
) { m_type
= type
; }
5926 Returns the handler type.
5928 int GetType() const { return m_type
; }
5931 Sets flags that change the behaviour of loading or saving.
5932 See the documentation for each handler class to see what flags are relevant
5935 You call this function directly if you are using a file handler explicitly
5936 (without going through the text control or buffer LoadFile/SaveFile API).
5937 Or, you can call the control or buffer's SetHandlerFlags function to set
5938 the flags that will be used for subsequent load and save operations.
5940 void SetFlags(int flags
) { m_flags
= flags
; }
5943 Returns flags controlling how loading and saving is done.
5945 int GetFlags() const { return m_flags
; }
5948 Sets the encoding to use when saving a file. If empty, a suitable encoding is chosen.
5950 void SetEncoding(const wxString
& encoding
) { m_encoding
= encoding
; }
5953 Returns the encoding to use when saving a file. If empty, a suitable encoding is chosen.
5955 const wxString
& GetEncoding() const { return m_encoding
; }
5961 Override to load content from @a stream into @a buffer.
5963 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
) = 0;
5966 Override to save content to @a stream from @a buffer.
5968 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
) = 0;
5972 wxString m_encoding
;
5973 wxString m_extension
;
5980 @class wxRichTextPlainTextHandler
5982 Implements saving a buffer to plain text.
5984 @library{wxrichtext}
5987 @see wxRichTextFileHandler, wxRichTextBuffer, wxRichTextCtrl
5990 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainTextHandler
: public wxRichTextFileHandler
5992 DECLARE_CLASS(wxRichTextPlainTextHandler
)
5994 wxRichTextPlainTextHandler(const wxString
& name
= wxT("Text"),
5995 const wxString
& ext
= wxT("txt"),
5996 wxRichTextFileType type
= wxRICHTEXT_TYPE_TEXT
)
5997 : wxRichTextFileHandler(name
, ext
, type
)
6000 // Can we save using this handler?
6001 virtual bool CanSave() const { return true; }
6003 // Can we load using this handler?
6004 virtual bool CanLoad() const { return true; }
6009 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
);
6010 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
);
6016 @class wxRichTextDrawingHandler
6018 The base class for custom drawing handlers.
6019 Currently, drawing handlers can provide virtual attributes.
6021 @library{wxrichtext}
6024 @see wxRichTextBuffer, wxRichTextCtrl
6027 class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingHandler
: public wxObject
6029 DECLARE_CLASS(wxRichTextDrawingHandler
)
6032 Creates a drawing handler object.
6034 wxRichTextDrawingHandler(const wxString
& name
= wxEmptyString
)
6039 Returns @true if this object has virtual attributes that we can provide.
6041 virtual bool HasVirtualAttributes(wxRichTextObject
* obj
) const = 0;
6044 Provides virtual attributes that we can provide.
6046 virtual bool GetVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const = 0;
6049 Sets the name of the handler.
6051 void SetName(const wxString
& name
) { m_name
= name
; }
6054 Returns the name of the handler.
6056 wxString
GetName() const { return m_name
; }
6066 @class wxRichTextBufferDataObject
6068 Implements a rich text data object for clipboard transfer.
6070 @library{wxrichtext}
6073 @see wxDataObjectSimple, wxRichTextBuffer, wxRichTextCtrl
6076 class WXDLLIMPEXP_RICHTEXT wxRichTextBufferDataObject
: public wxDataObjectSimple
6080 The constructor doesn't copy the pointer, so it shouldn't go away while this object
6083 wxRichTextBufferDataObject(wxRichTextBuffer
* richTextBuffer
= NULL
);
6084 virtual ~wxRichTextBufferDataObject();
6087 After a call to this function, the buffer is owned by the caller and it
6088 is responsible for deleting it.
6090 wxRichTextBuffer
* GetRichTextBuffer();
6093 Returns the id for the new data format.
6095 static const wxChar
* GetRichTextBufferFormatId() { return ms_richTextBufferFormatId
; }
6097 // base class pure virtuals
6099 virtual wxDataFormat
GetPreferredFormat(Direction dir
) const;
6100 virtual size_t GetDataSize() const;
6101 virtual bool GetDataHere(void *pBuf
) const;
6102 virtual bool SetData(size_t len
, const void *buf
);
6106 virtual size_t GetDataSize(const wxDataFormat
&) const { return GetDataSize(); }
6107 virtual bool GetDataHere(const wxDataFormat
&, void *buf
) const { return GetDataHere(buf
); }
6108 virtual bool SetData(const wxDataFormat
&, size_t len
, const void *buf
) { return SetData(len
, buf
); }
6111 wxDataFormat m_formatRichTextBuffer
; // our custom format
6112 wxRichTextBuffer
* m_richTextBuffer
; // our data
6113 static const wxChar
* ms_richTextBufferFormatId
; // our format id
6119 @class wxRichTextRenderer
6121 This class isolates some common drawing functionality.
6123 @library{wxrichtext}
6126 @see wxRichTextBuffer, wxRichTextCtrl
6129 class WXDLLIMPEXP_RICHTEXT wxRichTextRenderer
: public wxObject
6135 wxRichTextRenderer() {}
6136 virtual ~wxRichTextRenderer() {}
6139 Draws a standard bullet, as specified by the value of GetBulletName. This function should be overridden.
6141 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
6144 Draws a bullet that can be described by text, such as numbered or symbol bullets. This function should be overridden.
6146 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
) = 0;
6149 Draws a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName. This function should be overridden.
6151 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
6154 Enumerate the standard bullet names currently supported. This function should be overridden.
6156 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
) = 0;
6160 @class wxRichTextStdRenderer
6162 The standard renderer for drawing bullets.
6164 @library{wxrichtext}
6167 @see wxRichTextRenderer, wxRichTextBuffer, wxRichTextCtrl
6170 class WXDLLIMPEXP_RICHTEXT wxRichTextStdRenderer
: public wxRichTextRenderer
6176 wxRichTextStdRenderer() {}
6178 // Draw a standard bullet, as specified by the value of GetBulletName
6179 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
6181 // Draw a bullet that can be described by text, such as numbered or symbol bullets
6182 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
);
6184 // Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
6185 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
6187 // Enumerate the standard bullet names currently supported
6188 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
);
6196 inline bool wxRichTextHasStyle(int flags
, int style
)
6198 return ((flags
& style
) == style
);
6201 /// Compare two attribute objects
6202 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6203 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6205 /// Compare two attribute objects, but take into account the flags
6206 /// specifying attributes of interest.
6207 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEqPartial(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6209 /// Apply one style to another
6210 WXDLLIMPEXP_RICHTEXT
bool wxRichTextApplyStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
* compareWith
= NULL
);
6212 // Remove attributes
6213 WXDLLIMPEXP_RICHTEXT
bool wxRichTextRemoveStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
);
6215 /// Combine two bitlists
6216 WXDLLIMPEXP_RICHTEXT
bool wxRichTextCombineBitlists(int& valueA
, int valueB
, int& flagsA
, int flagsB
);
6218 /// Compare two bitlists
6219 WXDLLIMPEXP_RICHTEXT
bool wxRichTextBitlistsEqPartial(int valueA
, int valueB
, int flags
);
6221 /// Split into paragraph and character styles
6222 WXDLLIMPEXP_RICHTEXT
bool wxRichTextSplitParaCharStyles(const wxRichTextAttr
& style
, wxRichTextAttr
& parStyle
, wxRichTextAttr
& charStyle
);
6225 WXDLLIMPEXP_RICHTEXT
bool wxRichTextTabsEq(const wxArrayInt
& tabs1
, const wxArrayInt
& tabs2
);
6227 /// Convert a decimal to Roman numerals
6228 WXDLLIMPEXP_RICHTEXT wxString
wxRichTextDecimalToRoman(long n
);
6230 // Collects the attributes that are common to a range of content, building up a note of
6231 // which attributes are absent in some objects and which clash in some objects.
6232 WXDLLIMPEXP_RICHTEXT
void wxTextAttrCollectCommonAttributes(wxTextAttr
& currentStyle
, const wxTextAttr
& attr
, wxTextAttr
& clashingAttr
, wxTextAttr
& absentAttr
);
6234 WXDLLIMPEXP_RICHTEXT
void wxRichTextModuleInit();