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, // Relative to the parent
220 wxTEXT_BOX_ATTR_POSITION_FIXED
= 0x0040, // Relative to the top-level window
222 wxTEXT_BOX_ATTR_POSITION_MASK
= 0x00F0
226 @class wxTextAttrDimension
228 A class representing a rich text dimension, including units and position.
233 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimensions
236 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimension
242 wxTextAttrDimension() { Reset(); }
244 Constructor taking value and units flag.
246 wxTextAttrDimension(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { m_value
= value
; m_flags
= units
|wxTEXT_ATTR_VALUE_VALID
; }
249 Resets the dimension value and flags.
251 void Reset() { m_value
= 0; m_flags
= 0; }
254 Partial equality test.
256 bool EqPartial(const wxTextAttrDimension
& dim
) const;
258 /** Apply the dimension, but not those identical to @a compareWith if present.
260 bool Apply(const wxTextAttrDimension
& dim
, const wxTextAttrDimension
* compareWith
= NULL
);
262 /** Collects the attributes that are common to a range of content, building up a note of
263 which attributes are absent in some objects and which clash in some objects.
265 void CollectCommonAttributes(const wxTextAttrDimension
& attr
, wxTextAttrDimension
& clashingAttr
, wxTextAttrDimension
& absentAttr
);
270 bool operator==(const wxTextAttrDimension
& dim
) const { return m_value
== dim
.m_value
&& m_flags
== dim
.m_flags
; }
273 Returns the integer value of the dimension.
275 int GetValue() const { return m_value
; }
278 Returns the floating-pointing value of the dimension in mm.
281 float GetValueMM() const { return float(m_value
) / 10.0; }
284 Sets the value of the dimension in mm.
286 void SetValueMM(float value
) { m_value
= (int) ((value
* 10.0) + 0.5); m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
289 Sets the integer value of the dimension.
291 void SetValue(int value
) { m_value
= value
; m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
294 Sets the integer value of the dimension, passing dimension flags.
296 void SetValue(int value
, wxTextAttrDimensionFlags flags
) { SetValue(value
); m_flags
= flags
; }
299 Sets the integer value and units.
301 void SetValue(int value
, wxTextAttrUnits units
) { m_value
= value
; m_flags
= units
| wxTEXT_ATTR_VALUE_VALID
; }
306 void SetValue(const wxTextAttrDimension
& dim
) { (*this) = dim
; }
309 Gets the units of the dimension.
311 wxTextAttrUnits
GetUnits() const { return (wxTextAttrUnits
) (m_flags
& wxTEXT_ATTR_UNITS_MASK
); }
314 Sets the units of the dimension.
316 void SetUnits(wxTextAttrUnits units
) { m_flags
&= ~wxTEXT_ATTR_UNITS_MASK
; m_flags
|= units
; }
319 Gets the position flags.
321 wxTextBoxAttrPosition
GetPosition() const { return (wxTextBoxAttrPosition
) (m_flags
& wxTEXT_BOX_ATTR_POSITION_MASK
); }
324 Sets the position flags.
326 void SetPosition(wxTextBoxAttrPosition pos
) { m_flags
&= ~wxTEXT_BOX_ATTR_POSITION_MASK
; m_flags
|= pos
; }
329 Returns @true if the dimension is valid.
331 bool IsValid() const { return (m_flags
& wxTEXT_ATTR_VALUE_VALID
) != 0; }
336 void SetValid(bool b
) { m_flags
&= ~wxTEXT_ATTR_VALUE_VALID_MASK
; m_flags
|= (b
? wxTEXT_ATTR_VALUE_VALID
: 0); }
339 Gets the dimension flags.
341 wxTextAttrDimensionFlags
GetFlags() const { return m_flags
; }
344 Sets the dimension flags.
346 void SetFlags(wxTextAttrDimensionFlags flags
) { m_flags
= flags
; }
349 wxTextAttrDimensionFlags m_flags
;
353 @class wxTextAttrDimensions
354 A class for left, right, top and bottom dimensions.
359 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
362 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensions
368 wxTextAttrDimensions() {}
371 Resets the value and flags for all dimensions.
373 void Reset() { m_left
.Reset(); m_top
.Reset(); m_right
.Reset(); m_bottom
.Reset(); }
378 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
; }
381 Partial equality test.
384 bool EqPartial(const wxTextAttrDimensions
& dims
) const;
387 Apply to 'this', but not if the same as @a compareWith.
390 bool Apply(const wxTextAttrDimensions
& dims
, const wxTextAttrDimensions
* compareWith
= NULL
);
393 Collects the attributes that are common to a range of content, building up a note of
394 which attributes are absent in some objects and which clash in some objects.
397 void CollectCommonAttributes(const wxTextAttrDimensions
& attr
, wxTextAttrDimensions
& clashingAttr
, wxTextAttrDimensions
& absentAttr
);
400 Remove specified attributes from this object.
402 bool RemoveStyle(const wxTextAttrDimensions
& attr
);
405 Gets the left dimension.
407 const wxTextAttrDimension
& GetLeft() const { return m_left
; }
408 wxTextAttrDimension
& GetLeft() { return m_left
; }
411 Gets the right dimension.
414 const wxTextAttrDimension
& GetRight() const { return m_right
; }
415 wxTextAttrDimension
& GetRight() { return m_right
; }
418 Gets the top dimension.
421 const wxTextAttrDimension
& GetTop() const { return m_top
; }
422 wxTextAttrDimension
& GetTop() { return m_top
; }
425 Gets the bottom dimension.
428 const wxTextAttrDimension
& GetBottom() const { return m_bottom
; }
429 wxTextAttrDimension
& GetBottom() { return m_bottom
; }
432 Are all dimensions valid?
435 bool IsValid() const { return m_left
.IsValid() && m_top
.IsValid() && m_right
.IsValid() && m_bottom
.IsValid(); }
437 wxTextAttrDimension m_left
;
438 wxTextAttrDimension m_top
;
439 wxTextAttrDimension m_right
;
440 wxTextAttrDimension m_bottom
;
444 @class wxTextAttrSize
445 A class for representing width and height.
450 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
453 class WXDLLIMPEXP_RICHTEXT wxTextAttrSize
462 Resets the width and height dimensions.
464 void Reset() { m_width
.Reset(); m_height
.Reset(); }
469 bool operator==(const wxTextAttrSize
& size
) const { return m_width
== size
.m_width
&& m_height
== size
.m_height
; }
472 Partial equality test.
474 bool EqPartial(const wxTextAttrSize
& dims
) const;
477 Apply to this object, but not if the same as @a compareWith.
479 bool Apply(const wxTextAttrSize
& dims
, const wxTextAttrSize
* compareWith
= NULL
);
482 Collects the attributes that are common to a range of content, building up a note of
483 which attributes are absent in some objects and which clash in some objects.
485 void CollectCommonAttributes(const wxTextAttrSize
& attr
, wxTextAttrSize
& clashingAttr
, wxTextAttrSize
& absentAttr
);
488 Removes the specified attributes from this object.
490 bool RemoveStyle(const wxTextAttrSize
& attr
);
495 wxTextAttrDimension
& GetWidth() { return m_width
; }
496 const wxTextAttrDimension
& GetWidth() const { return m_width
; }
501 void SetWidth(int value
, wxTextAttrDimensionFlags flags
) { m_width
.SetValue(value
, flags
); }
506 void SetWidth(int value
, wxTextAttrUnits units
) { m_width
.SetValue(value
, units
); }
511 void SetWidth(const wxTextAttrDimension
& dim
) { m_width
.SetValue(dim
); }
516 wxTextAttrDimension
& GetHeight() { return m_height
; }
517 const wxTextAttrDimension
& GetHeight() const { return m_height
; }
522 void SetHeight(int value
, wxTextAttrDimensionFlags flags
) { m_height
.SetValue(value
, flags
); }
527 void SetHeight(int value
, wxTextAttrUnits units
) { m_height
.SetValue(value
, units
); }
532 void SetHeight(const wxTextAttrDimension
& dim
) { m_height
.SetValue(dim
); }
537 bool IsValid() const { return m_width
.IsValid() && m_height
.IsValid(); }
539 wxTextAttrDimension m_width
;
540 wxTextAttrDimension m_height
;
544 @class wxTextAttrDimensionConverter
545 A class to make it easier to convert dimensions.
550 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
553 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensionConverter
559 wxTextAttrDimensionConverter(wxDC
& dc
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
563 wxTextAttrDimensionConverter(int ppi
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
566 Gets the pixel size for the given dimension.
568 int GetPixels(const wxTextAttrDimension
& dim
, int direction
= wxHORIZONTAL
) const;
570 Gets the mm size for the given dimension.
572 int GetTenthsMM(const wxTextAttrDimension
& dim
) const;
575 Converts tenths of a mm to pixels.
577 int ConvertTenthsMMToPixels(int units
) const;
579 Converts pixels to tenths of a mm.
581 int ConvertPixelsToTenthsMM(int pixels
) const;
589 Border styles, used with wxTextAttrBorder.
591 enum wxTextAttrBorderStyle
593 wxTEXT_BOX_ATTR_BORDER_NONE
= 0,
594 wxTEXT_BOX_ATTR_BORDER_SOLID
= 1,
595 wxTEXT_BOX_ATTR_BORDER_DOTTED
= 2,
596 wxTEXT_BOX_ATTR_BORDER_DASHED
= 3,
597 wxTEXT_BOX_ATTR_BORDER_DOUBLE
= 4,
598 wxTEXT_BOX_ATTR_BORDER_GROOVE
= 5,
599 wxTEXT_BOX_ATTR_BORDER_RIDGE
= 6,
600 wxTEXT_BOX_ATTR_BORDER_INSET
= 7,
601 wxTEXT_BOX_ATTR_BORDER_OUTSET
= 8
605 Border style presence flags, used with wxTextAttrBorder.
607 enum wxTextAttrBorderFlags
609 wxTEXT_BOX_ATTR_BORDER_STYLE
= 0x0001,
610 wxTEXT_BOX_ATTR_BORDER_COLOUR
= 0x0002
614 Border width symbols for qualitative widths, used with wxTextAttrBorder.
616 enum wxTextAttrBorderWidth
618 wxTEXT_BOX_ATTR_BORDER_THIN
= -1,
619 wxTEXT_BOX_ATTR_BORDER_MEDIUM
= -2,
620 wxTEXT_BOX_ATTR_BORDER_THICK
= -3
626 enum wxTextBoxAttrFloatStyle
628 wxTEXT_BOX_ATTR_FLOAT_NONE
= 0,
629 wxTEXT_BOX_ATTR_FLOAT_LEFT
= 1,
630 wxTEXT_BOX_ATTR_FLOAT_RIGHT
= 2
636 enum wxTextBoxAttrClearStyle
638 wxTEXT_BOX_ATTR_CLEAR_NONE
= 0,
639 wxTEXT_BOX_ATTR_CLEAR_LEFT
= 1,
640 wxTEXT_BOX_ATTR_CLEAR_RIGHT
= 2,
641 wxTEXT_BOX_ATTR_CLEAR_BOTH
= 3
645 Collapse mode styles. TODO: can they be switched on per side?
647 enum wxTextBoxAttrCollapseMode
649 wxTEXT_BOX_ATTR_COLLAPSE_NONE
= 0,
650 wxTEXT_BOX_ATTR_COLLAPSE_FULL
= 1
654 Vertical alignment values.
656 enum wxTextBoxAttrVerticalAlignment
658 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_NONE
= 0,
659 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_TOP
= 1,
660 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_CENTRE
= 2,
661 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_BOTTOM
= 3
665 @class wxTextAttrBorder
666 A class representing a rich text object border.
671 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorders
674 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorder
680 wxTextAttrBorder() { Reset(); }
685 bool operator==(const wxTextAttrBorder
& border
) const
687 return m_flags
== border
.m_flags
&& m_borderStyle
== border
.m_borderStyle
&&
688 m_borderColour
== border
.m_borderColour
&& m_borderWidth
== border
.m_borderWidth
;
692 Resets the border style, colour, width and flags.
694 void Reset() { m_borderStyle
= 0; m_borderColour
= 0; m_flags
= 0; m_borderWidth
.Reset(); }
697 Partial equality test.
699 bool EqPartial(const wxTextAttrBorder
& border
) const;
702 Applies the border to this object, but not if the same as @a compareWith.
705 bool Apply(const wxTextAttrBorder
& border
, const wxTextAttrBorder
* compareWith
= NULL
);
708 Removes the specified attributes from this object.
710 bool RemoveStyle(const wxTextAttrBorder
& attr
);
713 Collects the attributes that are common to a range of content, building up a note of
714 which attributes are absent in some objects and which clash in some objects.
716 void CollectCommonAttributes(const wxTextAttrBorder
& attr
, wxTextAttrBorder
& clashingAttr
, wxTextAttrBorder
& absentAttr
);
719 Sets the border style.
721 void SetStyle(int style
) { m_borderStyle
= style
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_STYLE
; }
724 Gets the border style.
727 int GetStyle() const { return m_borderStyle
; }
730 Sets the border colour.
732 void SetColour(unsigned long colour
) { m_borderColour
= colour
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
735 Sets the border colour.
737 void SetColour(const wxColour
& colour
) { m_borderColour
= colour
.GetRGB(); m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
740 Gets the colour as a long.
742 unsigned long GetColourLong() const { return m_borderColour
; }
747 wxColour
GetColour() const { return wxColour(m_borderColour
); }
750 Gets the border width.
752 wxTextAttrDimension
& GetWidth() { return m_borderWidth
; }
753 const wxTextAttrDimension
& GetWidth() const { return m_borderWidth
; }
756 Sets the border width.
758 void SetWidth(const wxTextAttrDimension
& width
) { m_borderWidth
= width
; }
760 Sets the border width.
762 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
765 True if the border has a valid style.
767 bool HasStyle() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_STYLE
) != 0; }
770 True if the border has a valid colour.
772 bool HasColour() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_COLOUR
) != 0; }
775 True if the border has a valid width.
777 bool HasWidth() const { return m_borderWidth
.IsValid(); }
780 True if the border is valid.
782 bool IsValid() const { return HasWidth(); }
785 Set the valid flag for this border.
787 void MakeValid() { m_borderWidth
.SetValid(true); }
790 Returns the border flags.
792 int GetFlags() const { return m_flags
; }
795 Sets the border flags.
797 void SetFlags(int flags
) { m_flags
= flags
; }
802 void AddFlag(int flag
) { m_flags
|= flag
; }
805 Removes a border flag.
807 void RemoveFlag(int flag
) { m_flags
&= ~flag
; }
810 unsigned long m_borderColour
;
811 wxTextAttrDimension m_borderWidth
;
816 @class wxTextAttrBorders
817 A class representing a rich text object's borders.
822 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorder
825 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorders
831 wxTextAttrBorders() { }
836 bool operator==(const wxTextAttrBorders
& borders
) const
838 return m_left
== borders
.m_left
&& m_right
== borders
.m_right
&&
839 m_top
== borders
.m_top
&& m_bottom
== borders
.m_bottom
;
843 Sets the style of all borders.
845 void SetStyle(int style
);
848 Sets colour of all borders.
850 void SetColour(unsigned long colour
);
853 Sets the colour for all borders.
855 void SetColour(const wxColour
& colour
);
858 Sets the width of all borders.
860 void SetWidth(const wxTextAttrDimension
& width
);
863 Sets the width of all borders.
865 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
870 void Reset() { m_left
.Reset(); m_right
.Reset(); m_top
.Reset(); m_bottom
.Reset(); }
873 Partial equality test.
875 bool EqPartial(const wxTextAttrBorders
& borders
) const;
878 Applies border to this object, but not if the same as @a compareWith.
880 bool Apply(const wxTextAttrBorders
& borders
, const wxTextAttrBorders
* compareWith
= NULL
);
883 Removes the specified attributes from this object.
885 bool RemoveStyle(const wxTextAttrBorders
& attr
);
888 Collects the attributes that are common to a range of content, building up a note of
889 which attributes are absent in some objects and which clash in some objects.
891 void CollectCommonAttributes(const wxTextAttrBorders
& attr
, wxTextAttrBorders
& clashingAttr
, wxTextAttrBorders
& absentAttr
);
894 Returns @true if all borders are valid.
896 bool IsValid() const { return m_left
.IsValid() || m_right
.IsValid() || m_top
.IsValid() || m_bottom
.IsValid(); }
899 Returns the left border.
901 const wxTextAttrBorder
& GetLeft() const { return m_left
; }
902 wxTextAttrBorder
& GetLeft() { return m_left
; }
905 Returns the right border.
907 const wxTextAttrBorder
& GetRight() const { return m_right
; }
908 wxTextAttrBorder
& GetRight() { return m_right
; }
911 Returns the top border.
913 const wxTextAttrBorder
& GetTop() const { return m_top
; }
914 wxTextAttrBorder
& GetTop() { return m_top
; }
917 Returns the bottom border.
919 const wxTextAttrBorder
& GetBottom() const { return m_bottom
; }
920 wxTextAttrBorder
& GetBottom() { return m_bottom
; }
922 wxTextAttrBorder m_left
, m_right
, m_top
, m_bottom
;
928 A class representing the box attributes of a rich text object.
933 @see wxRichTextAttr, wxRichTextCtrl
936 class WXDLLIMPEXP_RICHTEXT wxTextBoxAttr
942 wxTextBoxAttr() { Init(); }
947 wxTextBoxAttr(const wxTextBoxAttr
& attr
) { Init(); (*this) = attr
; }
950 Initialises this object.
952 void Init() { Reset(); }
959 // Copy. Unnecessary since we let it do a binary copy
960 //void Copy(const wxTextBoxAttr& attr);
963 //void operator= (const wxTextBoxAttr& attr);
968 bool operator== (const wxTextBoxAttr
& attr
) const;
971 Partial equality test, ignoring unset attributes.
974 bool EqPartial(const wxTextBoxAttr
& attr
) const;
977 Merges the given attributes. If @a compareWith is non-NULL, then it will be used
978 to mask out those attributes that are the same in style and @a compareWith, for
979 situations where we don't want to explicitly set inherited attributes.
981 bool Apply(const wxTextBoxAttr
& style
, const wxTextBoxAttr
* compareWith
= NULL
);
984 Collects the attributes that are common to a range of content, building up a note of
985 which attributes are absent in some objects and which clash in some objects.
987 void CollectCommonAttributes(const wxTextBoxAttr
& attr
, wxTextBoxAttr
& clashingAttr
, wxTextBoxAttr
& absentAttr
);
990 Removes the specified attributes from this object.
992 bool RemoveStyle(const wxTextBoxAttr
& attr
);
997 void SetFlags(int flags
) { m_flags
= flags
; }
1002 int GetFlags() const { return m_flags
; }
1005 Is this flag present?
1007 bool HasFlag(wxTextBoxAttrFlags flag
) const { return (m_flags
& flag
) != 0; }
1012 void RemoveFlag(wxTextBoxAttrFlags flag
) { m_flags
&= ~flag
; }
1017 void AddFlag(wxTextBoxAttrFlags flag
) { m_flags
|= flag
; }
1020 Returns @true if no attributes are set.
1022 bool IsDefault() const;
1025 Returns the float mode.
1027 wxTextBoxAttrFloatStyle
GetFloatMode() const { return m_floatMode
; }
1030 Sets the float mode.
1032 void SetFloatMode(wxTextBoxAttrFloatStyle mode
) { m_floatMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_FLOAT
; }
1035 Returns @true if float mode is active.
1037 bool HasFloatMode() const { return HasFlag(wxTEXT_BOX_ATTR_FLOAT
); }
1040 Returns @true if this object is floating.
1042 bool IsFloating() const { return HasFloatMode() && GetFloatMode() != wxTEXT_BOX_ATTR_FLOAT_NONE
; }
1045 Returns the clear mode - whether to wrap text after object. Currently unimplemented.
1047 wxTextBoxAttrClearStyle
GetClearMode() const { return m_clearMode
; }
1050 Set the clear mode. Currently unimplemented.
1052 void SetClearMode(wxTextBoxAttrClearStyle mode
) { m_clearMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_CLEAR
; }
1055 Returns @true if we have a clear flag.
1057 bool HasClearMode() const { return HasFlag(wxTEXT_BOX_ATTR_CLEAR
); }
1060 Returns the collapse mode - whether to collapse borders. Currently unimplemented.
1062 wxTextBoxAttrCollapseMode
GetCollapseBorders() const { return m_collapseMode
; }
1065 Sets the collapse mode - whether to collapse borders. Currently unimplemented.
1067 void SetCollapseBorders(wxTextBoxAttrCollapseMode collapse
) { m_collapseMode
= collapse
; m_flags
|= wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
; }
1070 Returns @true if the collapse borders flag is present.
1072 bool HasCollapseBorders() const { return HasFlag(wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
); }
1075 Returns the vertical alignment.
1077 wxTextBoxAttrVerticalAlignment
GetVerticalAlignment() const { return m_verticalAlignment
; }
1080 Sets the vertical alignment.
1082 void SetVerticalAlignment(wxTextBoxAttrVerticalAlignment verticalAlignment
) { m_verticalAlignment
= verticalAlignment
; m_flags
|= wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
; }
1085 Returns @true if a vertical alignment flag is present.
1087 bool HasVerticalAlignment() const { return HasFlag(wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
); }
1090 Returns the margin values.
1092 wxTextAttrDimensions
& GetMargins() { return m_margins
; }
1093 const wxTextAttrDimensions
& GetMargins() const { return m_margins
; }
1096 Returns the left margin.
1098 wxTextAttrDimension
& GetLeftMargin() { return m_margins
.m_left
; }
1099 const wxTextAttrDimension
& GetLeftMargin() const { return m_margins
.m_left
; }
1102 Returns the right margin.
1104 wxTextAttrDimension
& GetRightMargin() { return m_margins
.m_right
; }
1105 const wxTextAttrDimension
& GetRightMargin() const { return m_margins
.m_right
; }
1108 Returns the top margin.
1110 wxTextAttrDimension
& GetTopMargin() { return m_margins
.m_top
; }
1111 const wxTextAttrDimension
& GetTopMargin() const { return m_margins
.m_top
; }
1114 Returns the bottom margin.
1116 wxTextAttrDimension
& GetBottomMargin() { return m_margins
.m_bottom
; }
1117 const wxTextAttrDimension
& GetBottomMargin() const { return m_margins
.m_bottom
; }
1120 Returns the position.
1122 wxTextAttrDimensions
& GetPosition() { return m_position
; }
1123 const wxTextAttrDimensions
& GetPosition() const { return m_position
; }
1126 Returns the left position.
1128 wxTextAttrDimension
& GetLeft() { return m_position
.m_left
; }
1129 const wxTextAttrDimension
& GetLeft() const { return m_position
.m_left
; }
1132 Returns the right position.
1134 wxTextAttrDimension
& GetRight() { return m_position
.m_right
; }
1135 const wxTextAttrDimension
& GetRight() const { return m_position
.m_right
; }
1138 Returns the top position.
1140 wxTextAttrDimension
& GetTop() { return m_position
.m_top
; }
1141 const wxTextAttrDimension
& GetTop() const { return m_position
.m_top
; }
1144 Returns the bottom position.
1146 wxTextAttrDimension
& GetBottom() { return m_position
.m_bottom
; }
1147 const wxTextAttrDimension
& GetBottom() const { return m_position
.m_bottom
; }
1150 Returns the padding values.
1152 wxTextAttrDimensions
& GetPadding() { return m_padding
; }
1153 const wxTextAttrDimensions
& GetPadding() const { return m_padding
; }
1156 Returns the left padding value.
1158 wxTextAttrDimension
& GetLeftPadding() { return m_padding
.m_left
; }
1159 const wxTextAttrDimension
& GetLeftPadding() const { return m_padding
.m_left
; }
1162 Returns the right padding value.
1164 wxTextAttrDimension
& GetRightPadding() { return m_padding
.m_right
; }
1165 const wxTextAttrDimension
& GetRightPadding() const { return m_padding
.m_right
; }
1168 Returns the top padding value.
1170 wxTextAttrDimension
& GetTopPadding() { return m_padding
.m_top
; }
1171 const wxTextAttrDimension
& GetTopPadding() const { return m_padding
.m_top
; }
1174 Returns the bottom padding value.
1176 wxTextAttrDimension
& GetBottomPadding() { return m_padding
.m_bottom
; }
1177 const wxTextAttrDimension
& GetBottomPadding() const { return m_padding
.m_bottom
; }
1180 Returns the borders.
1182 wxTextAttrBorders
& GetBorder() { return m_border
; }
1183 const wxTextAttrBorders
& GetBorder() const { return m_border
; }
1186 Returns the left border.
1188 wxTextAttrBorder
& GetLeftBorder() { return m_border
.m_left
; }
1189 const wxTextAttrBorder
& GetLeftBorder() const { return m_border
.m_left
; }
1192 Returns the top border.
1194 wxTextAttrBorder
& GetTopBorder() { return m_border
.m_top
; }
1195 const wxTextAttrBorder
& GetTopBorder() const { return m_border
.m_top
; }
1198 Returns the right border.
1200 wxTextAttrBorder
& GetRightBorder() { return m_border
.m_right
; }
1201 const wxTextAttrBorder
& GetRightBorder() const { return m_border
.m_right
; }
1204 Returns the bottom border.
1206 wxTextAttrBorder
& GetBottomBorder() { return m_border
.m_bottom
; }
1207 const wxTextAttrBorder
& GetBottomBorder() const { return m_border
.m_bottom
; }
1210 Returns the outline.
1212 wxTextAttrBorders
& GetOutline() { return m_outline
; }
1213 const wxTextAttrBorders
& GetOutline() const { return m_outline
; }
1216 Returns the left outline.
1218 wxTextAttrBorder
& GetLeftOutline() { return m_outline
.m_left
; }
1219 const wxTextAttrBorder
& GetLeftOutline() const { return m_outline
.m_left
; }
1222 Returns the top outline.
1224 wxTextAttrBorder
& GetTopOutline() { return m_outline
.m_top
; }
1225 const wxTextAttrBorder
& GetTopOutline() const { return m_outline
.m_top
; }
1228 Returns the right outline.
1230 wxTextAttrBorder
& GetRightOutline() { return m_outline
.m_right
; }
1231 const wxTextAttrBorder
& GetRightOutline() const { return m_outline
.m_right
; }
1234 Returns the bottom outline.
1236 wxTextAttrBorder
& GetBottomOutline() { return m_outline
.m_bottom
; }
1237 const wxTextAttrBorder
& GetBottomOutline() const { return m_outline
.m_bottom
; }
1240 Returns the object size.
1242 wxTextAttrSize
& GetSize() { return m_size
; }
1243 const wxTextAttrSize
& GetSize() const { return m_size
; }
1246 Returns the object minimum size.
1249 wxTextAttrSize
& GetMinSize() { return m_minSize
; }
1250 const wxTextAttrSize
& GetMinSize() const { return m_minSize
; }
1253 Returns the object maximum size.
1256 wxTextAttrSize
& GetMaxSize() { return m_maxSize
; }
1257 const wxTextAttrSize
& GetMaxSize() const { return m_maxSize
; }
1260 Sets the object size.
1262 void SetSize(const wxTextAttrSize
& sz
) { m_size
= sz
; }
1265 Sets the object minimum size.
1267 void SetMinSize(const wxTextAttrSize
& sz
) { m_minSize
= sz
; }
1270 Sets the object maximum size.
1272 void SetMaxSize(const wxTextAttrSize
& sz
) { m_maxSize
= sz
; }
1275 Returns the object width.
1277 wxTextAttrDimension
& GetWidth() { return m_size
.m_width
; }
1278 const wxTextAttrDimension
& GetWidth() const { return m_size
.m_width
; }
1281 Returns the object height.
1283 wxTextAttrDimension
& GetHeight() { return m_size
.m_height
; }
1284 const wxTextAttrDimension
& GetHeight() const { return m_size
.m_height
; }
1287 Returns the box style name.
1289 const wxString
& GetBoxStyleName() const { return m_boxStyleName
; }
1292 Sets the box style name.
1294 void SetBoxStyleName(const wxString
& name
) { m_boxStyleName
= name
; AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1297 Returns @true if the box style name is present.
1299 bool HasBoxStyleName() const { return HasFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1305 wxTextAttrDimensions m_margins
;
1306 wxTextAttrDimensions m_padding
;
1307 wxTextAttrDimensions m_position
;
1309 wxTextAttrSize m_size
;
1310 wxTextAttrSize m_minSize
;
1311 wxTextAttrSize m_maxSize
;
1313 wxTextAttrBorders m_border
;
1314 wxTextAttrBorders m_outline
;
1316 wxTextBoxAttrFloatStyle m_floatMode
;
1317 wxTextBoxAttrClearStyle m_clearMode
;
1318 wxTextBoxAttrCollapseMode m_collapseMode
;
1319 wxTextBoxAttrVerticalAlignment m_verticalAlignment
;
1320 wxString m_boxStyleName
;
1324 @class wxRichTextAttr
1325 A class representing enhanced attributes for rich text objects.
1326 This adds a wxTextBoxAttr member to the basic wxTextAttr class.
1328 @library{wxrichtext}
1331 @see wxRichTextAttr, wxTextBoxAttr, wxRichTextCtrl
1334 class WXDLLIMPEXP_RICHTEXT wxRichTextAttr
: public wxTextAttr
1338 Constructor taking a wxTextAttr.
1340 wxRichTextAttr(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1345 wxRichTextAttr(const wxRichTextAttr
& attr
): wxTextAttr() { Copy(attr
); }
1348 Default constructor.
1355 void Copy(const wxRichTextAttr
& attr
);
1358 Assignment operator.
1360 void operator=(const wxRichTextAttr
& attr
) { Copy(attr
); }
1363 Assignment operator.
1365 void operator=(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1370 bool operator==(const wxRichTextAttr
& attr
) const;
1373 Partial equality test taking comparison object into account.
1375 bool EqPartial(const wxRichTextAttr
& attr
) const;
1378 Merges the given attributes. If @a compareWith
1379 is non-NULL, then it will be used to mask out those attributes that are the same in style
1380 and @a compareWith, for situations where we don't want to explicitly set inherited attributes.
1382 bool Apply(const wxRichTextAttr
& style
, const wxRichTextAttr
* compareWith
= NULL
);
1385 Collects the attributes that are common to a range of content, building up a note of
1386 which attributes are absent in some objects and which clash in some objects.
1388 void CollectCommonAttributes(const wxRichTextAttr
& attr
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
1391 Removes the specified attributes from this object.
1393 bool RemoveStyle(const wxRichTextAttr
& attr
);
1396 Returns the text box attributes.
1398 wxTextBoxAttr
& GetTextBoxAttr() { return m_textBoxAttr
; }
1399 const wxTextBoxAttr
& GetTextBoxAttr() const { return m_textBoxAttr
; }
1402 Set the text box attributes.
1404 void SetTextBoxAttr(const wxTextBoxAttr
& attr
) { m_textBoxAttr
= attr
; }
1406 wxTextBoxAttr m_textBoxAttr
;
1409 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxVariant
, wxRichTextVariantArray
, WXDLLIMPEXP_RICHTEXT
);
1412 @class wxRichTextProperties
1413 A simple property class using wxVariants. This is used to give each rich text object the
1414 ability to store custom properties that can be used by the application.
1416 @library{wxrichtext}
1419 @see wxRichTextBuffer, wxRichTextObject, wxRichTextCtrl
1422 class WXDLLIMPEXP_RICHTEXT wxRichTextProperties
: public wxObject
1424 DECLARE_DYNAMIC_CLASS(wxRichTextProperties
)
1428 Default constructor.
1430 wxRichTextProperties() {}
1435 wxRichTextProperties(const wxRichTextProperties
& props
): wxObject() { Copy(props
); }
1438 Assignment operator.
1440 void operator=(const wxRichTextProperties
& props
) { Copy(props
); }
1445 bool operator==(const wxRichTextProperties
& props
) const;
1448 Copies from @a props.
1450 void Copy(const wxRichTextProperties
& props
) { m_properties
= props
.m_properties
; }
1453 Returns the variant at the given index.
1455 const wxVariant
& operator[](size_t idx
) const { return m_properties
[idx
]; }
1458 Returns the variant at the given index.
1460 wxVariant
& operator[](size_t idx
) { return m_properties
[idx
]; }
1463 Clears the properties.
1465 void Clear() { m_properties
.Clear(); }
1468 Returns the array of variants implementing the properties.
1470 const wxRichTextVariantArray
& GetProperties() const { return m_properties
; }
1473 Returns the array of variants implementing the properties.
1475 wxRichTextVariantArray
& GetProperties() { return m_properties
; }
1478 Sets the array of variants.
1480 void SetProperties(const wxRichTextVariantArray
& props
) { m_properties
= props
; }
1483 Returns all the property names.
1485 wxArrayString
GetPropertyNames() const;
1488 Returns a count of the properties.
1490 size_t GetCount() const { return m_properties
.GetCount(); }
1493 Returns @true if the given property is found.
1495 bool HasProperty(const wxString
& name
) const { return Find(name
) != -1; }
1498 Finds the given property.
1500 int Find(const wxString
& name
) const;
1503 Removes the given property.
1505 bool Remove(const wxString
& name
);
1508 Gets the property variant by name.
1510 const wxVariant
& GetProperty(const wxString
& name
) const;
1513 Finds or creates a property with the given name, returning a pointer to the variant.
1515 wxVariant
* FindOrCreateProperty(const wxString
& name
);
1518 Gets the value of the named property as a string.
1520 wxString
GetPropertyString(const wxString
& name
) const;
1523 Gets the value of the named property as a long integer.
1525 long GetPropertyLong(const wxString
& name
) const;
1528 Gets the value of the named property as a boolean.
1530 bool GetPropertyBool(const wxString
& name
) const;
1533 Gets the value of the named property as a double.
1535 double GetPropertyDouble(const wxString
& name
) const;
1538 Sets the property by passing a variant which contains a name and value.
1540 void SetProperty(const wxVariant
& variant
);
1543 Sets a property by name and variant.
1545 void SetProperty(const wxString
& name
, const wxVariant
& variant
);
1548 Sets a property by name and string value.
1550 void SetProperty(const wxString
& name
, const wxString
& value
);
1553 Sets property by name and long integer value.
1555 void SetProperty(const wxString
& name
, long value
);
1558 Sets property by name and double value.
1560 void SetProperty(const wxString
& name
, double value
);
1563 Sets property by name and boolean value.
1565 void SetProperty(const wxString
& name
, bool value
);
1568 Removes the given properties from these properties.
1570 void RemoveProperties(const wxRichTextProperties
& properties
);
1573 Merges the given properties with these properties.
1575 void MergeProperties(const wxRichTextProperties
& properties
);
1578 wxRichTextVariantArray m_properties
;
1583 @class wxRichTextFontTable
1584 Manages quick access to a pool of fonts for rendering rich text.
1586 @library{wxrichtext}
1589 @see wxRichTextBuffer, wxRichTextCtrl
1592 class WXDLLIMPEXP_RICHTEXT wxRichTextFontTable
: public wxObject
1596 Default constructor.
1598 wxRichTextFontTable();
1603 wxRichTextFontTable(const wxRichTextFontTable
& table
);
1604 virtual ~wxRichTextFontTable();
1607 Returns @true if the font table is valid.
1609 bool IsOk() const { return m_refData
!= NULL
; }
1612 Finds a font for the given attribute object.
1614 wxFont
FindFont(const wxRichTextAttr
& fontSpec
);
1617 Clears the font table.
1622 Assignment operator.
1624 void operator= (const wxRichTextFontTable
& table
);
1629 bool operator == (const wxRichTextFontTable
& table
) const;
1632 Inequality operator.
1634 bool operator != (const wxRichTextFontTable
& table
) const { return !(*this == table
); }
1638 DECLARE_DYNAMIC_CLASS(wxRichTextFontTable
)
1642 @class wxRichTextRange
1644 This stores beginning and end positions for a range of data.
1646 @library{wxrichtext}
1649 @see wxRichTextBuffer, wxRichTextCtrl
1652 class WXDLLIMPEXP_RICHTEXT wxRichTextRange
1658 Default constructor.
1660 wxRichTextRange() { m_start
= 0; m_end
= 0; }
1663 Constructor taking start and end positions.
1665 wxRichTextRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1670 wxRichTextRange(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1671 ~wxRichTextRange() {}
1674 Assigns @a range to this range.
1676 void operator =(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1679 Equality operator. Returns @true if @a range is the same as this range.
1681 bool operator ==(const wxRichTextRange
& range
) const { return (m_start
== range
.m_start
&& m_end
== range
.m_end
); }
1684 Inequality operator.
1686 bool operator !=(const wxRichTextRange
& range
) const { return (m_start
!= range
.m_start
|| m_end
!= range
.m_end
); }
1689 Subtracts a range from this range.
1691 wxRichTextRange
operator -(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
- range
.m_start
, m_end
- range
.m_end
); }
1694 Adds a range to this range.
1696 wxRichTextRange
operator +(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
+ range
.m_start
, m_end
+ range
.m_end
); }
1699 Sets the range start and end positions.
1701 void SetRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1704 Sets the start position.
1706 void SetStart(long start
) { m_start
= start
; }
1709 Returns the start position.
1711 long GetStart() const { return m_start
; }
1714 Sets the end position.
1716 void SetEnd(long end
) { m_end
= end
; }
1719 Gets the end position.
1721 long GetEnd() const { return m_end
; }
1724 Returns true if this range is completely outside @a range.
1726 bool IsOutside(const wxRichTextRange
& range
) const { return range
.m_start
> m_end
|| range
.m_end
< m_start
; }
1729 Returns true if this range is completely within @a range.
1731 bool IsWithin(const wxRichTextRange
& range
) const { return m_start
>= range
.m_start
&& m_end
<= range
.m_end
; }
1734 Returns true if @a pos was within the range. Does not match if the range is empty.
1736 bool Contains(long pos
) const { return pos
>= m_start
&& pos
<= m_end
; }
1739 Limit this range to be within @a range.
1741 bool LimitTo(const wxRichTextRange
& range
) ;
1744 Gets the length of the range.
1746 long GetLength() const { return m_end
- m_start
+ 1; }
1749 Swaps the start and end.
1751 void Swap() { long tmp
= m_start
; m_start
= m_end
; m_end
= tmp
; }
1754 Converts the API-standard range, whose end is one past the last character in
1755 the range, to the internal form, which uses the first and last character
1756 positions of the range. In other words, one is subtracted from the end position.
1757 (n, n) is the range of a single character.
1759 wxRichTextRange
ToInternal() const { return wxRichTextRange(m_start
, m_end
-1); }
1762 Converts the internal range, which uses the first and last character positions
1763 of the range, to the API-standard range, whose end is one past the last
1764 character in the range. In other words, one is added to the end position.
1765 (n, n+1) is the range of a single character.
1767 wxRichTextRange
FromInternal() const { return wxRichTextRange(m_start
, m_end
+1); }
1774 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextRange
, wxRichTextRangeArray
, WXDLLIMPEXP_RICHTEXT
);
1776 #define wxRICHTEXT_ALL wxRichTextRange(-2, -2)
1777 #define wxRICHTEXT_NONE wxRichTextRange(-1, -1)
1779 #define wxRICHTEXT_NO_SELECTION wxRichTextRange(-2, -2)
1782 @class wxRichTextSelection
1784 Stores selection information. The selection does not have to be contiguous, though currently non-contiguous
1785 selections are only supported for a range of table cells (a geometric block of cells can consist
1786 of a set of non-contiguous positions).
1788 The selection consists of an array of ranges, and the container that is the context for the selection. It
1789 follows that a single selection object can only represent ranges with the same parent container.
1791 @library{wxrichtext}
1794 @see wxRichTextBuffer, wxRichTextCtrl
1797 class WXDLLIMPEXP_RICHTEXT wxRichTextSelection
1803 wxRichTextSelection(const wxRichTextSelection
& sel
) { Copy(sel
); }
1806 Creates a selection from a range and a container.
1808 wxRichTextSelection(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
) { m_ranges
.Add(range
); m_container
= container
; }
1811 Default constructor.
1813 wxRichTextSelection() { Reset(); }
1816 Resets the selection.
1818 void Reset() { m_ranges
.Clear(); m_container
= NULL
; }
1824 void Set(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
)
1825 { m_ranges
.Clear(); m_ranges
.Add(range
); m_container
= container
; }
1828 Adds a range to the selection.
1830 void Add(const wxRichTextRange
& range
)
1831 { m_ranges
.Add(range
); }
1834 Sets the selections from an array of ranges and a container object.
1836 void Set(const wxRichTextRangeArray
& ranges
, wxRichTextParagraphLayoutBox
* container
)
1837 { m_ranges
= ranges
; m_container
= container
; }
1842 void Copy(const wxRichTextSelection
& sel
)
1843 { m_ranges
= sel
.m_ranges
; m_container
= sel
.m_container
; }
1846 Assignment operator.
1848 void operator=(const wxRichTextSelection
& sel
) { Copy(sel
); }
1853 bool operator==(const wxRichTextSelection
& sel
) const;
1858 wxRichTextRange
operator[](size_t i
) const { return GetRange(i
); }
1861 Returns the selection ranges.
1863 wxRichTextRangeArray
& GetRanges() { return m_ranges
; }
1866 Returns the selection ranges.
1868 const wxRichTextRangeArray
& GetRanges() const { return m_ranges
; }
1871 Sets the selection ranges.
1873 void SetRanges(const wxRichTextRangeArray
& ranges
) { m_ranges
= ranges
; }
1876 Returns the number of ranges in the selection.
1878 size_t GetCount() const { return m_ranges
.GetCount(); }
1881 Returns the range at the given index.
1884 wxRichTextRange
GetRange(size_t i
) const { return m_ranges
[i
]; }
1887 Returns the first range if there is one, otherwise wxRICHTEXT_NO_SELECTION.
1889 wxRichTextRange
GetRange() const { return (m_ranges
.GetCount() > 0) ? (m_ranges
[0]) : wxRICHTEXT_NO_SELECTION
; }
1892 Sets a single range.
1894 void SetRange(const wxRichTextRange
& range
) { m_ranges
.Clear(); m_ranges
.Add(range
); }
1897 Returns the container for which the selection is valid.
1899 wxRichTextParagraphLayoutBox
* GetContainer() const { return m_container
; }
1902 Sets the container for which the selection is valid.
1904 void SetContainer(wxRichTextParagraphLayoutBox
* container
) { m_container
= container
; }
1907 Returns @true if the selection is valid.
1909 bool IsValid() const { return m_ranges
.GetCount() > 0 && GetContainer(); }
1912 Returns the selection appropriate to the specified object, if any; returns an empty array if none
1913 at the level of the object's container.
1915 wxRichTextRangeArray
GetSelectionForObject(wxRichTextObject
* obj
) const;
1918 Returns @true if the given position is within the selection.
1920 bool WithinSelection(long pos
, wxRichTextObject
* obj
) const;
1923 Returns @true if the given position is within the selection.
1926 bool WithinSelection(long pos
) const { return WithinSelection(pos
, m_ranges
); }
1929 Returns @true if the given position is within the selection range.
1931 static bool WithinSelection(long pos
, const wxRichTextRangeArray
& ranges
);
1934 Returns @true if the given range is within the selection range.
1936 static bool WithinSelection(const wxRichTextRange
& range
, const wxRichTextRangeArray
& ranges
);
1938 wxRichTextRangeArray m_ranges
;
1939 wxRichTextParagraphLayoutBox
* m_container
;
1943 @class wxRichTextDrawingContext
1945 A class for passing information to drawing and measuring functions.
1947 @library{wxrichtext}
1950 @see wxRichTextBuffer, wxRichTextCtrl
1953 class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingContext
: public wxObject
1955 DECLARE_CLASS(wxRichTextDrawingContext
)
1959 Pass the buffer to the context so the context can retrieve information
1960 such as virtual attributes.
1962 wxRichTextDrawingContext(wxRichTextBuffer
* buffer
) { Init(); m_buffer
= buffer
; }
1964 void Init() { m_buffer
= NULL
; }
1967 Does this object have virtual attributes?
1968 Virtual attributes can be provided for visual cues without
1969 affecting the actual styling.
1971 bool HasVirtualAttributes(wxRichTextObject
* obj
) const;
1974 Returns the virtual attributes for this object.
1975 Virtual attributes can be provided for visual cues without
1976 affecting the actual styling.
1978 wxRichTextAttr
GetVirtualAttributes(wxRichTextObject
* obj
) const;
1981 Applies any virtual attributes relevant to this object.
1983 bool ApplyVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const;
1985 wxRichTextBuffer
* m_buffer
;
1989 @class wxRichTextObject
1991 This is the base for drawable rich text objects.
1993 @library{wxrichtext}
1996 @see wxRichTextBuffer, wxRichTextCtrl
1999 class WXDLLIMPEXP_RICHTEXT wxRichTextObject
: public wxObject
2001 DECLARE_CLASS(wxRichTextObject
)
2004 Constructor, taking an optional parent pointer.
2006 wxRichTextObject(wxRichTextObject
* parent
= NULL
);
2008 virtual ~wxRichTextObject();
2013 Draw the item, within the given range. Some objects may ignore the range (for
2014 example paragraphs) while others must obey it (lines, to implement wrapping)
2016 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
2019 Lay the item out at the specified position with the given size constraint.
2020 Layout must set the cached size. @rect is the available space for the object,
2021 and @a parentRect is the container that is used to determine a relative size
2022 or position (for example if a text box must be 50% of the parent text box).
2024 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
2027 Hit-testing: returns a flag indicating hit test details, plus
2028 information about position. @a contextObj is returned to specify what object
2029 position is relevant to, since otherwise there's an ambiguity.
2030 @ obj might not be a child of @a contextObj, since we may be referring to the container itself
2031 if we have no hit on a child - for example if we click outside an object.
2033 The function puts the position in @a textPosition if one is found.
2034 @a pt is in logical units (a zero y position is at the beginning of the buffer).
2036 @return One of the ::wxRichTextHitTestFlags values.
2039 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2042 Finds the absolute position and row height for the given character position.
2044 virtual bool FindPosition(wxDC
& WXUNUSED(dc
), wxRichTextDrawingContext
& WXUNUSED(context
), long WXUNUSED(index
), wxPoint
& WXUNUSED(pt
), int* WXUNUSED(height
), bool WXUNUSED(forceLineStart
)) { return false; }
2047 Returns the best size, i.e. the ideal starting size for this object irrespective
2048 of available space. For a short text string, it will be the size that exactly encloses
2049 the text. For a longer string, it might use the parent width for example.
2051 virtual wxSize
GetBestSize() const { return m_size
; }
2054 Returns the object size for the given range. Returns @false if the range
2055 is invalid for this object.
2058 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;
2061 Do a split from @a pos, returning an object containing the second part, and setting
2062 the first part in 'this'.
2064 virtual wxRichTextObject
* DoSplit(long WXUNUSED(pos
)) { return NULL
; }
2067 Calculates the range of the object. By default, guess that the object is 1 unit long.
2069 virtual void CalculateRange(long start
, long& end
) { end
= start
; m_range
.SetRange(start
, end
); }
2072 Deletes the given range.
2074 virtual bool DeleteRange(const wxRichTextRange
& WXUNUSED(range
)) { return false; }
2077 Returns @true if the object is empty.
2079 virtual bool IsEmpty() const { return false; }
2082 Returns @true if this class of object is floatable.
2084 virtual bool IsFloatable() const { return false; }
2087 Returns @true if this object is currently floating.
2089 virtual bool IsFloating() const { return GetAttributes().GetTextBoxAttr().IsFloating(); }
2092 Returns the floating direction.
2094 virtual int GetFloatDirection() const { return GetAttributes().GetTextBoxAttr().GetFloatMode(); }
2097 Returns any text in this object for the given range.
2099 virtual wxString
GetTextForRange(const wxRichTextRange
& WXUNUSED(range
)) const { return wxEmptyString
; }
2102 Returns @true if this object can merge itself with the given one.
2104 virtual bool CanMerge(wxRichTextObject
* WXUNUSED(object
)) const { return false; }
2107 Returns @true if this object merged itself with the given one.
2108 The calling code will then delete the given object.
2110 virtual bool Merge(wxRichTextObject
* WXUNUSED(object
)) { return false; }
2113 Dump object data to the given output stream for debugging.
2115 virtual void Dump(wxTextOutputStream
& stream
);
2118 Returns @true if we can edit the object's properties via a GUI.
2120 virtual bool CanEditProperties() const { return false; }
2123 Edits the object's properties via a GUI.
2125 virtual bool EditProperties(wxWindow
* WXUNUSED(parent
), wxRichTextBuffer
* WXUNUSED(buffer
)) { return false; }
2128 Returns the label to be used for the properties context menu item.
2130 virtual wxString
GetPropertiesMenuLabel() const { return wxEmptyString
; }
2133 Returns @true if objects of this class can accept the focus, i.e. a call to SetFocusObject
2134 is possible. For example, containers supporting text, such as a text box object, can accept the focus,
2135 but a table can't (set the focus to individual cells instead).
2137 virtual bool AcceptsFocus() const { return false; }
2141 Imports this object from XML.
2143 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2146 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2148 Exports this object directly to the given stream, bypassing the creation of a wxXmlNode hierarchy.
2149 This method is considerably faster than creating a tree first. However, both versions of ExportXML must be
2150 implemented so that if the tree method is made efficient in the future, we can deprecate the
2151 more verbose direct output method. Compiled only if wxRICHTEXT_HAVE_DIRECT_OUTPUT is defined (on by default).
2153 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2156 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2158 Exports this object to the given parent node, usually creating at least one child node.
2159 This method is less efficient than the direct-to-stream method but is retained to allow for
2160 switching to this method if we make it more efficient. Compiled only if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT is defined
2163 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2167 Returns @true if this object takes note of paragraph attributes (text and image objects don't).
2169 virtual bool UsesParagraphAttributes() const { return true; }
2172 Returns the XML node name of this object. This must be overridden for wxXmlNode-base XML export to work.
2174 virtual wxString
GetXMLNodeName() const { return wxT("unknown"); }
2177 Invalidates the object at the given range. With no argument, invalidates the whole object.
2179 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2182 Returns @true if this object can handle the selections of its children, fOr example a table.
2183 Required for composite selection handling to work.
2185 virtual bool HandlesChildSelections() const { return false; }
2188 Returns a selection object specifying the selections between start and end character positions.
2189 For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
2191 virtual wxRichTextSelection
GetSelection(long WXUNUSED(start
), long WXUNUSED(end
)) const { return wxRichTextSelection(); }
2196 Gets the cached object size as calculated by Layout.
2198 virtual wxSize
GetCachedSize() const { return m_size
; }
2201 Sets the cached object size as calculated by Layout.
2203 virtual void SetCachedSize(const wxSize
& sz
) { m_size
= sz
; }
2206 Gets the maximum object size as calculated by Layout. This allows
2207 us to fit an object to its contents or allocate extra space if required.
2209 virtual wxSize
GetMaxSize() const { return m_maxSize
; }
2212 Sets the maximum object size as calculated by Layout. This allows
2213 us to fit an object to its contents or allocate extra space if required.
2215 virtual void SetMaxSize(const wxSize
& sz
) { m_maxSize
= sz
; }
2218 Gets the minimum object size as calculated by Layout. This allows
2219 us to constrain an object to its absolute minimum size if necessary.
2221 virtual wxSize
GetMinSize() const { return m_minSize
; }
2224 Sets the minimum object size as calculated by Layout. This allows
2225 us to constrain an object to its absolute minimum size if necessary.
2227 virtual void SetMinSize(const wxSize
& sz
) { m_minSize
= sz
; }
2230 Gets the 'natural' size for an object. For an image, it would be the
2233 virtual wxTextAttrSize
GetNaturalSize() const { return wxTextAttrSize(); }
2236 Returns the object position in pixels.
2238 virtual wxPoint
GetPosition() const { return m_pos
; }
2241 Sets the object position in pixels.
2243 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
2246 Returns the absolute object position, by traversing up the child/parent hierarchy.
2247 TODO: may not be needed, if all object positions are in fact relative to the
2248 top of the coordinate space.
2250 virtual wxPoint
GetAbsolutePosition() const;
2253 Returns the rectangle enclosing the object.
2255 virtual wxRect
GetRect() const { return wxRect(GetPosition(), GetCachedSize()); }
2258 Sets the object's range within its container.
2260 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
2263 Returns the object's range.
2265 const wxRichTextRange
& GetRange() const { return m_range
; }
2268 Returns the object's range.
2270 wxRichTextRange
& GetRange() { return m_range
; }
2273 Set the object's own range, for a top-level object with its own position space.
2275 void SetOwnRange(const wxRichTextRange
& range
) { m_ownRange
= range
; }
2278 Returns the object's own range (valid if top-level).
2280 const wxRichTextRange
& GetOwnRange() const { return m_ownRange
; }
2283 Returns the object's own range (valid if top-level).
2285 wxRichTextRange
& GetOwnRange() { return m_ownRange
; }
2288 Returns the object's own range only if a top-level object.
2290 wxRichTextRange
GetOwnRangeIfTopLevel() const { return IsTopLevel() ? m_ownRange
: m_range
; }
2293 Returns @true if this object is composite.
2295 virtual bool IsComposite() const { return false; }
2298 Returns @true if no user editing can be done inside the object. This returns @true for simple objects,
2299 @false for most composite objects, but @true for fields, which if composite, should not be user-edited.
2301 virtual bool IsAtomic() const { return true; }
2304 Returns a pointer to the parent object.
2306 virtual wxRichTextObject
* GetParent() const { return m_parent
; }
2309 Sets the pointer to the parent object.
2311 virtual void SetParent(wxRichTextObject
* parent
) { m_parent
= parent
; }
2314 Returns the top-level container of this object.
2315 May return itself if it's a container; use GetParentContainer to return
2316 a different container.
2318 virtual wxRichTextParagraphLayoutBox
* GetContainer() const;
2321 Returns the top-level container of this object.
2322 Returns a different container than itself, unless there's no parent, in which case it will return NULL.
2324 virtual wxRichTextParagraphLayoutBox
* GetParentContainer() const { return GetParent() ? GetParent()->GetContainer() : GetContainer(); }
2327 Set the margin around the object, in pixels.
2329 virtual void SetMargins(int margin
);
2332 Set the margin around the object, in pixels.
2334 virtual void SetMargins(int leftMargin
, int rightMargin
, int topMargin
, int bottomMargin
);
2337 Returns the left margin of the object, in pixels.
2339 virtual int GetLeftMargin() const;
2342 Returns the right margin of the object, in pixels.
2344 virtual int GetRightMargin() const;
2347 Returns the top margin of the object, in pixels.
2349 virtual int GetTopMargin() const;
2352 Returns the bottom margin of the object, in pixels.
2354 virtual int GetBottomMargin() const;
2357 Calculates the available content space in the given rectangle, given the
2358 margins, border and padding specified in the object's attributes.
2360 virtual wxRect
GetAvailableContentArea(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& outerRect
) const;
2363 Lays out the object first with a given amount of space, and then if no width was specified in attr,
2364 lays out the object again using the minimum size. @a availableParentSpace is the maximum space
2365 for the object, whereas @a availableContainerSpace is the container with which relative positions and
2366 sizes should be computed. For example, a text box whose space has already been constrained
2367 in a previous layout pass to @a availableParentSpace, but should have a width of 50% of @a availableContainerSpace.
2368 (If these two rects were the same, a 2nd pass could see the object getting too small.)
2370 virtual bool LayoutToBestSize(wxDC
& dc
, wxRichTextDrawingContext
& context
, wxRichTextBuffer
* buffer
,
2371 const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& attr
,
2372 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
, int style
);
2375 Sets the object's attributes.
2377 void SetAttributes(const wxRichTextAttr
& attr
) { m_attributes
= attr
; }
2380 Returns the object's attributes.
2382 const wxRichTextAttr
& GetAttributes() const { return m_attributes
; }
2385 Returns the object's attributes.
2387 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
2390 Returns the object's properties.
2392 wxRichTextProperties
& GetProperties() { return m_properties
; }
2395 Returns the object's properties.
2397 const wxRichTextProperties
& GetProperties() const { return m_properties
; }
2400 Sets the object's properties.
2402 void SetProperties(const wxRichTextProperties
& props
) { m_properties
= props
; }
2405 Sets the stored descent value.
2407 void SetDescent(int descent
) { m_descent
= descent
; }
2410 Returns the stored descent value.
2412 int GetDescent() const { return m_descent
; }
2415 Returns the containing buffer.
2417 wxRichTextBuffer
* GetBuffer() const;
2420 Sets the identifying name for this object as a property using the "name" key.
2422 void SetName(const wxString
& name
) { m_properties
.SetProperty(wxT("name"), name
); }
2425 Returns the identifying name for this object from the properties, using the "name" key.
2427 wxString
GetName() const { return m_properties
.GetPropertyString(wxT("name")); }
2430 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
2432 virtual bool IsTopLevel() const { return false; }
2435 Returns @true if the object will be shown, @false otherwise.
2437 bool IsShown() const { return m_show
; }
2442 Call to show or hide this object. This function does not cause the content to be
2443 laid out or redrawn.
2445 virtual void Show(bool show
) { m_show
= show
; }
2450 virtual wxRichTextObject
* Clone() const { return NULL
; }
2455 void Copy(const wxRichTextObject
& obj
);
2458 Reference-counting allows us to use the same object in multiple
2459 lists (not yet used).
2462 void Reference() { m_refCount
++; }
2465 Reference-counting allows us to use the same object in multiple
2466 lists (not yet used).
2471 Moves the object recursively, by adding the offset from old to new.
2473 virtual void Move(const wxPoint
& pt
);
2476 Converts units in tenths of a millimetre to device units.
2478 int ConvertTenthsMMToPixels(wxDC
& dc
, int units
) const;
2481 Converts units in tenths of a millimetre to device units.
2483 static int ConvertTenthsMMToPixels(int ppi
, int units
, double scale
= 1.0);
2486 Convert units in pixels to tenths of a millimetre.
2488 int ConvertPixelsToTenthsMM(wxDC
& dc
, int pixels
) const;
2491 Convert units in pixels to tenths of a millimetre.
2493 static int ConvertPixelsToTenthsMM(int ppi
, int pixels
, double scale
= 1.0);
2496 Draws the borders and background for the given rectangle and attributes.
2497 @a boxRect is taken to be the outer margin box, not the box around the content.
2499 static bool DrawBoxAttributes(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, const wxRect
& boxRect
, int flags
= 0);
2504 static bool DrawBorder(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxTextAttrBorders
& attr
, const wxRect
& rect
, int flags
= 0);
2507 Returns the various rectangles of the box model in pixels. You can either specify @a contentRect (inner)
2508 or @a marginRect (outer), and the other must be the default rectangle (no width or height).
2509 Note that the outline doesn't affect the position of the rectangle, it's drawn in whatever space
2512 static bool GetBoxRects(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, wxRect
& marginRect
, wxRect
& borderRect
, wxRect
& contentRect
, wxRect
& paddingRect
, wxRect
& outlineRect
);
2515 Returns the total margin for the object in pixels, taking into account margin, padding and border size.
2517 static bool GetTotalMargin(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, int& leftMargin
, int& rightMargin
,
2518 int& topMargin
, int& bottomMargin
);
2521 Returns the rectangle which the child has available to it given restrictions specified in the
2522 child attribute, e.g. 50% width of the parent, 400 pixels, x position 20% of the parent, etc.
2523 availableContainerSpace might be a parent that the cell has to compute its width relative to.
2524 E.g. a cell that's 50% of its parent.
2526 static wxRect
AdjustAvailableSpace(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& childAttr
,
2527 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
);
2534 int m_descent
; // Descent for this object (if any)
2537 wxRichTextObject
* m_parent
;
2539 // The range of this object (start position to end position)
2540 wxRichTextRange m_range
;
2542 // The internal range of this object, if it's a top-level object with its own range space
2543 wxRichTextRange m_ownRange
;
2546 wxRichTextAttr m_attributes
;
2549 wxRichTextProperties m_properties
;
2552 WX_DECLARE_LIST_WITH_DECL( wxRichTextObject
, wxRichTextObjectList
, class WXDLLIMPEXP_RICHTEXT
);
2555 @class wxRichTextCompositeObject
2557 Objects of this class can contain other objects.
2559 @library{wxrichtext}
2562 @see wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2565 class WXDLLIMPEXP_RICHTEXT wxRichTextCompositeObject
: public wxRichTextObject
2567 DECLARE_CLASS(wxRichTextCompositeObject
)
2571 wxRichTextCompositeObject(wxRichTextObject
* parent
= NULL
);
2572 virtual ~wxRichTextCompositeObject();
2576 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2578 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
2580 virtual void CalculateRange(long start
, long& end
);
2582 virtual bool DeleteRange(const wxRichTextRange
& range
);
2584 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2586 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;
2588 virtual void Dump(wxTextOutputStream
& stream
);
2590 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2595 Returns the children.
2597 wxRichTextObjectList
& GetChildren() { return m_children
; }
2599 Returns the children.
2601 const wxRichTextObjectList
& GetChildren() const { return m_children
; }
2604 Returns the number of children.
2606 size_t GetChildCount() const ;
2609 Returns the nth child.
2611 wxRichTextObject
* GetChild(size_t n
) const ;
2614 Returns @true if this object is composite.
2616 virtual bool IsComposite() const { return true; }
2619 Returns @true if no user editing can be done inside the object. This returns @true for simple objects,
2620 @false for most composite objects, but @true for fields, which if composite, should not be user-edited.
2622 virtual bool IsAtomic() const { return false; }
2625 Returns true if the buffer is empty.
2627 virtual bool IsEmpty() const { return GetChildCount() == 0; }
2630 Returns the child object at the given character position.
2632 virtual wxRichTextObject
* GetChildAtPosition(long pos
) const;
2636 void Copy(const wxRichTextCompositeObject
& obj
);
2638 void operator= (const wxRichTextCompositeObject
& obj
) { Copy(obj
); }
2641 Appends a child, returning the position.
2643 size_t AppendChild(wxRichTextObject
* child
) ;
2646 Inserts the child in front of the given object, or at the beginning.
2648 bool InsertChild(wxRichTextObject
* child
, wxRichTextObject
* inFrontOf
) ;
2651 Removes and optionally deletes the specified child.
2653 bool RemoveChild(wxRichTextObject
* child
, bool deleteChild
= false) ;
2656 Deletes all the children.
2658 bool DeleteChildren() ;
2661 Recursively merges all pieces that can be merged.
2663 bool Defragment(const wxRichTextRange
& range
= wxRICHTEXT_ALL
);
2666 Moves the object recursively, by adding the offset from old to new.
2668 virtual void Move(const wxPoint
& pt
);
2671 wxRichTextObjectList m_children
;
2675 @class wxRichTextParagraphBox
2677 This class knows how to lay out paragraphs.
2679 @library{wxrichtext}
2682 @see wxRichTextCompositeObject, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2685 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraphLayoutBox
: public wxRichTextCompositeObject
2687 DECLARE_DYNAMIC_CLASS(wxRichTextParagraphLayoutBox
)
2691 wxRichTextParagraphLayoutBox(wxRichTextObject
* parent
= NULL
);
2692 wxRichTextParagraphLayoutBox(const wxRichTextParagraphLayoutBox
& obj
): wxRichTextCompositeObject() { Init(); Copy(obj
); }
2693 ~wxRichTextParagraphLayoutBox();
2697 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2699 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2701 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
2703 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;
2705 virtual bool DeleteRange(const wxRichTextRange
& range
);
2707 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2710 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2713 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2714 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2717 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2718 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2721 virtual wxString
GetXMLNodeName() const { return wxT("paragraphlayout"); }
2723 virtual bool AcceptsFocus() const { return true; }
2728 Associates a control with the buffer, for operations that for example require refreshing the window.
2730 void SetRichTextCtrl(wxRichTextCtrl
* ctrl
) { m_ctrl
= ctrl
; }
2733 Returns the associated control.
2735 wxRichTextCtrl
* GetRichTextCtrl() const { return m_ctrl
; }
2738 Sets a flag indicating whether the last paragraph is partial or complete.
2740 void SetPartialParagraph(bool partialPara
) { m_partialParagraph
= partialPara
; }
2743 Returns a flag indicating whether the last paragraph is partial or complete.
2745 bool GetPartialParagraph() const { return m_partialParagraph
; }
2748 Returns the style sheet associated with the overall buffer.
2750 virtual wxRichTextStyleSheet
* GetStyleSheet() const;
2752 virtual bool IsTopLevel() const { return true; }
2757 Submits a command to insert paragraphs.
2759 bool InsertParagraphsWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2762 Submits a command to insert the given text.
2764 bool InsertTextWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2767 Submits a command to insert the given text.
2769 bool InsertNewlineWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2772 Submits a command to insert the given image.
2774 bool InsertImageWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextImageBlock
& imageBlock
,
2775 wxRichTextCtrl
* ctrl
, int flags
,
2776 const wxRichTextAttr
& textAttr
);
2779 Submits a command to insert the given field. Field data can be included in properties.
2781 @see wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
2783 wxRichTextField
* InsertFieldWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& fieldType
,
2784 const wxRichTextProperties
& properties
,
2785 wxRichTextCtrl
* ctrl
, int flags
,
2786 const wxRichTextAttr
& textAttr
);
2789 Returns the style that is appropriate for a new paragraph at this position.
2790 If the previous paragraph has a paragraph style name, looks up the next-paragraph
2793 wxRichTextAttr
GetStyleForNewParagraph(wxRichTextBuffer
* buffer
, long pos
, bool caretPosition
= false, bool lookUpNewParaStyle
=false) const;
2798 wxRichTextObject
* InsertObjectWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2801 Submits a command to delete this range.
2803 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
, wxRichTextBuffer
* buffer
);
2806 Draws the floating objects in this buffer.
2808 void DrawFloats(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2811 Moves an anchored object to another paragraph.
2813 void MoveAnchoredObjectToParagraph(wxRichTextParagraph
* from
, wxRichTextParagraph
* to
, wxRichTextObject
* obj
);
2816 Initializes the object.
2821 Clears all the children.
2823 virtual void Clear();
2826 Clears and initializes with one blank paragraph.
2828 virtual void Reset();
2831 Convenience function to add a paragraph of text.
2833 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2836 Convenience function to add an image.
2838 virtual wxRichTextRange
AddImage(const wxImage
& image
, wxRichTextAttr
* paraStyle
= NULL
);
2841 Adds multiple paragraphs, based on newlines.
2843 virtual wxRichTextRange
AddParagraphs(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2846 Returns the line at the given position. If @a caretPosition is true, the position is
2847 a caret position, which is normally a smaller number.
2849 virtual wxRichTextLine
* GetLineAtPosition(long pos
, bool caretPosition
= false) const;
2852 Returns the line at the given y pixel position, or the last line.
2854 virtual wxRichTextLine
* GetLineAtYPosition(int y
) const;
2857 Returns the paragraph at the given character or caret position.
2859 virtual wxRichTextParagraph
* GetParagraphAtPosition(long pos
, bool caretPosition
= false) const;
2862 Returns the line size at the given position.
2864 virtual wxSize
GetLineSizeAtPosition(long pos
, bool caretPosition
= false) const;
2867 Given a position, returns the number of the visible line (potentially many to a paragraph),
2868 starting from zero at the start of the buffer. We also have to pass a bool (@a startOfLine)
2869 that indicates whether the caret is being shown at the end of the previous line or at the start
2870 of the next, since the caret can be shown at two visible positions for the same underlying
2873 virtual long GetVisibleLineNumber(long pos
, bool caretPosition
= false, bool startOfLine
= false) const;
2876 Given a line number, returns the corresponding wxRichTextLine object.
2878 virtual wxRichTextLine
* GetLineForVisibleLineNumber(long lineNumber
) const;
2881 Returns the leaf object in a paragraph at this position.
2883 virtual wxRichTextObject
* GetLeafObjectAtPosition(long position
) const;
2886 Returns the paragraph by number.
2888 virtual wxRichTextParagraph
* GetParagraphAtLine(long paragraphNumber
) const;
2891 Returns the paragraph for a given line.
2893 virtual wxRichTextParagraph
* GetParagraphForLine(wxRichTextLine
* line
) const;
2896 Returns the length of the paragraph.
2898 virtual int GetParagraphLength(long paragraphNumber
) const;
2901 Returns the number of paragraphs.
2903 virtual int GetParagraphCount() const { return static_cast<int>(GetChildCount()); }
2906 Returns the number of visible lines.
2908 virtual int GetLineCount() const;
2911 Returns the text of the paragraph.
2913 virtual wxString
GetParagraphText(long paragraphNumber
) const;
2916 Converts zero-based line column and paragraph number to a position.
2918 virtual long XYToPosition(long x
, long y
) const;
2921 Converts a zero-based position to line column and paragraph number.
2923 virtual bool PositionToXY(long pos
, long* x
, long* y
) const;
2926 Sets the attributes for the given range. Pass flags to determine how the
2929 The end point of range is specified as the last character position of the span
2930 of text. So, for example, to set the style for a character at position 5,
2931 use the range (5,5).
2932 This differs from the wxRichTextCtrl API, where you would specify (5,6).
2934 @a flags may contain a bit list of the following values:
2935 - wxRICHTEXT_SETSTYLE_NONE: no style flag.
2936 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
2938 - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
2939 if the combined style at this point is already the style in question.
2940 - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
2941 applied to paragraphs, and not the content.
2942 This allows content styling to be preserved independently from that
2943 of e.g. a named paragraph style.
2944 - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
2945 applied to characters, and not the paragraph.
2946 This allows content styling to be preserved independently from that
2947 of e.g. a named paragraph style.
2948 - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
2950 - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style.
2951 Only the style flags are used in this operation.
2953 virtual bool SetStyle(const wxRichTextRange
& range
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
2956 Sets the attributes for the given object only, for example the box attributes for a text box.
2958 virtual void SetStyle(wxRichTextObject
*obj
, const wxRichTextAttr
& textAttr
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
2961 Returns the combined text attributes for this position.
2963 This function gets the @e uncombined style - that is, the attributes associated
2964 with the paragraph or character content, and not necessarily the combined
2965 attributes you see on the screen. To get the combined attributes, use GetStyle().
2966 If you specify (any) paragraph attribute in @e style's flags, this function
2967 will fetch the paragraph attributes.
2968 Otherwise, it will return the character attributes.
2970 virtual bool GetStyle(long position
, wxRichTextAttr
& style
);
2973 Returns the content (uncombined) attributes for this position.
2975 virtual bool GetUncombinedStyle(long position
, wxRichTextAttr
& style
);
2978 Implementation helper for GetStyle. If combineStyles is true, combine base, paragraph and
2981 virtual bool DoGetStyle(long position
, wxRichTextAttr
& style
, bool combineStyles
= true);
2984 This function gets a style representing the common, combined attributes in the
2986 Attributes which have different values within the specified range will not be
2987 included the style flags.
2989 The function is used to get the attributes to display in the formatting dialog:
2990 the user can edit the attributes common to the selection, and optionally specify the
2991 values of further attributes to be applied uniformly.
2993 To apply the edited attributes, you can use SetStyle() specifying
2994 the wxRICHTEXT_SETSTYLE_OPTIMIZE flag, which will only apply attributes that
2995 are different from the @e combined attributes within the range.
2996 So, the user edits the effective, displayed attributes for the range,
2997 but his choice won't be applied unnecessarily to content. As an example,
2998 say the style for a paragraph specifies bold, but the paragraph text doesn't
3000 The combined style is bold, and this is what the user will see on-screen and
3001 in the formatting dialog. The user now specifies red text, in addition to bold.
3002 When applying with SetStyle(), the content font weight attributes won't be
3003 changed to bold because this is already specified by the paragraph.
3004 However the text colour attributes @e will be changed to show red.
3006 virtual bool GetStyleForRange(const wxRichTextRange
& range
, wxRichTextAttr
& style
);
3009 Combines @a style with @a currentStyle for the purpose of summarising the attributes of a range of
3012 bool CollectStyle(wxRichTextAttr
& currentStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
3016 Sets the list attributes for the given range, passing flags to determine how
3017 the attributes are set.
3018 Either the style definition or the name of the style definition (in the current
3019 sheet) can be passed.
3021 @a flags is a bit list of the following:
3022 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3023 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3024 @a startFrom, otherwise existing attributes are used.
3025 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3026 as the level for all paragraphs, otherwise the current indentation will be used.
3028 @see NumberList(), PromoteList(), ClearListStyle().
3030 virtual bool SetListStyle(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3031 virtual bool SetListStyle(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3035 Clears the list style from the given range, clearing list-related attributes
3036 and applying any named paragraph style associated with each paragraph.
3038 @a flags is a bit list of the following:
3039 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3041 @see SetListStyle(), PromoteList(), NumberList()
3043 virtual bool ClearListStyle(const wxRichTextRange
& range
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3047 Numbers the paragraphs in the given range.
3049 Pass flags to determine how the attributes are set.
3050 Either the style definition or the name of the style definition (in the current
3051 sheet) can be passed.
3053 @a flags is a bit list of the following:
3054 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3055 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3056 @a startFrom, otherwise existing attributes are used.
3057 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3058 as the level for all paragraphs, otherwise the current indentation will be used.
3060 @a def can be NULL to indicate that the existing list style should be used.
3062 @see SetListStyle(), PromoteList(), ClearListStyle()
3064 virtual bool NumberList(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3065 virtual bool NumberList(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3070 Promotes the list items within the given range.
3071 A positive @a promoteBy produces a smaller indent, and a negative number
3072 produces a larger indent. Pass flags to determine how the attributes are set.
3073 Either the style definition or the name of the style definition (in the current
3074 sheet) can be passed.
3076 @a flags is a bit list of the following:
3077 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3078 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3079 @a startFrom, otherwise existing attributes are used.
3080 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3081 as the level for all paragraphs, otherwise the current indentation will be used.
3083 @see SetListStyle(), SetListStyle(), ClearListStyle()
3085 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3086 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3090 Helper for NumberList and PromoteList, that does renumbering and promotion simultaneously
3091 @a def can be NULL/empty to indicate that the existing list style should be used.
3093 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);
3096 Fills in the attributes for numbering a paragraph after previousParagraph.
3098 virtual bool FindNextParagraphNumber(wxRichTextParagraph
* previousParagraph
, wxRichTextAttr
& attr
) const;
3101 Sets the properties for the given range, passing flags to determine how the
3102 attributes are set. You can merge properties or replace them.
3104 The end point of range is specified as the last character position of the span
3105 of text, plus one. So, for example, to set the properties for a character at
3106 position 5, use the range (5,6).
3108 @a flags may contain a bit list of the following values:
3109 - wxRICHTEXT_SETPROPERTIES_NONE: no flag.
3110 - wxRICHTEXT_SETPROPERTIES_WITH_UNDO: specifies that this operation should be
3112 - wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY: specifies that the properties should only be
3113 applied to paragraphs, and not the content.
3114 - wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY: specifies that the properties should only be
3115 applied to characters, and not the paragraph.
3116 - wxRICHTEXT_SETPROPERTIES_RESET: resets (clears) the existing properties before applying
3118 - wxRICHTEXT_SETPROPERTIES_REMOVE: removes the specified properties.
3120 virtual bool SetProperties(const wxRichTextRange
& range
, const wxRichTextProperties
& properties
, int flags
= wxRICHTEXT_SETPROPERTIES_WITH_UNDO
);
3123 Test if this whole range has character attributes of the specified kind. If any
3124 of the attributes are different within the range, the test fails. You
3125 can use this to implement, for example, bold button updating. style must have
3126 flags indicating which attributes are of interest.
3128 virtual bool HasCharacterAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3131 Test if this whole range has paragraph attributes of the specified kind. If any
3132 of the attributes are different within the range, the test fails. You
3133 can use this to implement, for example, centering button updating. style must have
3134 flags indicating which attributes are of interest.
3136 virtual bool HasParagraphAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3138 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraphLayoutBox(*this); }
3141 Prepares the content just before insertion (or after buffer reset).
3142 Currently is only called if undo mode is on.
3144 virtual void PrepareContent(wxRichTextParagraphLayoutBox
& container
);
3147 Insert fragment into this box at the given position. If partialParagraph is true,
3148 it is assumed that the last (or only) paragraph is just a piece of data with no paragraph
3151 virtual bool InsertFragment(long position
, wxRichTextParagraphLayoutBox
& fragment
);
3154 Make a copy of the fragment corresponding to the given range, putting it in @a fragment.
3156 virtual bool CopyFragment(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
& fragment
);
3159 Apply the style sheet to the buffer, for example if the styles have changed.
3161 virtual bool ApplyStyleSheet(wxRichTextStyleSheet
* styleSheet
);
3163 void Copy(const wxRichTextParagraphLayoutBox
& obj
);
3165 void operator= (const wxRichTextParagraphLayoutBox
& obj
) { Copy(obj
); }
3170 virtual void UpdateRanges();
3175 virtual wxString
GetText() const;
3178 Sets the default style, affecting the style currently being applied
3179 (for example, setting the default style to bold will cause subsequently
3180 inserted text to be bold).
3182 This is not cumulative - setting the default style will replace the previous
3185 Setting it to a default attribute object makes new content take on the 'basic' style.
3187 virtual bool SetDefaultStyle(const wxRichTextAttr
& style
);
3190 Returns the current default style, affecting the style currently being applied
3191 (for example, setting the default style to bold will cause subsequently
3192 inserted text to be bold).
3194 virtual const wxRichTextAttr
& GetDefaultStyle() const { return m_defaultAttributes
; }
3197 Sets the basic (overall) style. This is the style of the whole
3198 buffer before further styles are applied, unlike the default style, which
3199 only affects the style currently being applied (for example, setting the default
3200 style to bold will cause subsequently inserted text to be bold).
3202 virtual void SetBasicStyle(const wxRichTextAttr
& style
) { m_attributes
= style
; }
3205 Returns the basic (overall) style.
3207 This is the style of the whole buffer before further styles are applied,
3208 unlike the default style, which only affects the style currently being
3209 applied (for example, setting the default style to bold will cause
3210 subsequently inserted text to be bold).
3212 virtual const wxRichTextAttr
& GetBasicStyle() const { return m_attributes
; }
3215 Invalidates the buffer. With no argument, invalidates whole buffer.
3217 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3220 Do the (in)validation for this object only.
3222 virtual void DoInvalidate(const wxRichTextRange
& invalidRange
);
3225 Do the (in)validation both up and down the hierarchy.
3227 virtual void InvalidateHierarchy(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3230 Gather information about floating objects. If untilObj is non-NULL,
3231 will stop getting information if the current object is this, since we
3232 will collect the rest later.
3234 virtual bool UpdateFloatingObjects(const wxRect
& availableRect
, wxRichTextObject
* untilObj
= NULL
);
3237 Get invalid range, rounding to entire paragraphs if argument is true.
3239 wxRichTextRange
GetInvalidRange(bool wholeParagraphs
= false) const;
3242 Returns @true if this object needs layout.
3244 bool IsDirty() const { return m_invalidRange
!= wxRICHTEXT_NONE
; }
3247 Returns the wxRichTextFloatCollector of this object.
3249 wxRichTextFloatCollector
* GetFloatCollector() { return m_floatCollector
; }
3252 Returns the number of floating objects at this level.
3254 int GetFloatingObjectCount() const;
3257 Returns a list of floating objects.
3259 bool GetFloatingObjects(wxRichTextObjectList
& objects
) const;
3262 wxRichTextCtrl
* m_ctrl
;
3263 wxRichTextAttr m_defaultAttributes
;
3265 // The invalidated range that will need full layout
3266 wxRichTextRange m_invalidRange
;
3268 // Is the last paragraph partial or complete?
3269 bool m_partialParagraph
;
3271 // The floating layout state
3272 wxRichTextFloatCollector
* m_floatCollector
;
3276 @class wxRichTextBox
3278 This class implements a floating or inline text box, containing paragraphs.
3280 @library{wxrichtext}
3283 @see wxRichTextParagraphLayoutBox, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
3286 class WXDLLIMPEXP_RICHTEXT wxRichTextBox
: public wxRichTextParagraphLayoutBox
3288 DECLARE_DYNAMIC_CLASS(wxRichTextBox
)
3293 Default constructor; optionally pass the parent object.
3296 wxRichTextBox(wxRichTextObject
* parent
= NULL
);
3302 wxRichTextBox(const wxRichTextBox
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3306 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3308 virtual wxString
GetXMLNodeName() const { return wxT("textbox"); }
3310 virtual bool CanEditProperties() const { return true; }
3312 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3314 virtual wxString
GetPropertiesMenuLabel() const { return _("&Box"); }
3320 virtual wxRichTextObject
* Clone() const { return new wxRichTextBox(*this); }
3322 void Copy(const wxRichTextBox
& obj
);
3328 @class wxRichTextField
3330 This class implements the general concept of a field, an object that represents
3331 additional functionality such as a footnote, a bookmark, a page number, a table
3332 of contents, and so on. Extra information (such as a bookmark name) can be stored
3333 in the object properties.
3335 Drawing, layout, and property editing is delegated to classes derived
3336 from wxRichTextFieldType, such as instances of wxRichTextFieldTypeStandard; this makes
3337 the use of fields an efficient method of introducing extra functionality, since
3338 most of the information required to draw a field (such as a bitmap) is kept centrally
3339 in a single field type definition.
3341 The FieldType property, accessed by SetFieldType/GetFieldType, is used to retrieve
3342 the field type definition. So be careful not to overwrite this property.
3344 wxRichTextField is derived from wxRichTextParagraphLayoutBox, which means that it
3345 can contain its own read-only content, refreshed when the application calls the UpdateField
3346 function. Whether a field is treated as a composite or a single graphic is determined
3347 by the field type definition. If using wxRichTextFieldTypeStandard, passing the display
3348 type wxRICHTEXT_FIELD_STYLE_COMPOSITE to the field type definition causes the field
3349 to behave like a composite; the other display styles display a simple graphic.
3350 When implementing a composite field, you will still need to derive from wxRichTextFieldTypeStandard
3351 or wxRichTextFieldType, if only to implement UpdateField to refresh the field content
3352 appropriately. wxRichTextFieldTypeStandard is only one possible implementation, but
3353 covers common needs especially for simple, static fields using text or a bitmap.
3355 Register field types on application initialisation with the static function
3356 wxRichTextParagraphLayoutBox::AddFieldType. They will be deleted automatically
3357 on application exit.
3359 An application can write a field to a control with wxRichTextCtrl::WriteField,
3360 taking a field type, the properties for the field, and optional attributes.
3362 @library{wxrichtext}
3365 @see wxRichTextFieldTypeStandard, wxRichTextFieldType, wxRichTextParagraphLayoutBox, wxRichTextProperties, wxRichTextCtrl
3368 class WXDLLIMPEXP_RICHTEXT wxRichTextField
: public wxRichTextParagraphLayoutBox
3370 DECLARE_DYNAMIC_CLASS(wxRichTextField
)
3375 Default constructor; optionally pass the parent object.
3378 wxRichTextField(const wxString
& fieldType
= wxEmptyString
, wxRichTextObject
* parent
= NULL
);
3384 wxRichTextField(const wxRichTextField
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3388 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3390 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3392 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;
3394 virtual wxString
GetXMLNodeName() const { return wxT("field"); }
3396 virtual bool CanEditProperties() const;
3398 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3400 virtual wxString
GetPropertiesMenuLabel() const;
3402 virtual bool AcceptsFocus() const { return false; }
3404 virtual void CalculateRange(long start
, long& end
);
3407 If a field has children, we don't want the user to be able to edit it.
3409 virtual bool IsAtomic() const { return true; }
3411 virtual bool IsEmpty() const { return false; }
3413 virtual bool IsTopLevel() const;
3417 void SetFieldType(const wxString
& fieldType
) { GetProperties().SetProperty(wxT("FieldType"), fieldType
); }
3418 wxString
GetFieldType() const { return GetProperties().GetPropertyString(wxT("FieldType")); }
3423 Update the field; delegated to the associated field type. This would typically expand the field to its value,
3424 if this is a dynamically changing and/or composite field.
3426 virtual bool UpdateField();
3428 virtual wxRichTextObject
* Clone() const { return new wxRichTextField(*this); }
3430 void Copy(const wxRichTextField
& obj
);
3436 @class wxRichTextFieldType
3438 The base class for custom field types. Each type definition handles one
3439 field type. Override functions to provide drawing, layout, updating and
3440 property editing functionality for a field.
3442 Register field types on application initialisation with the static function
3443 wxRichTextParagraphLayoutBox::AddFieldType. They will be deleted automatically
3444 on application exit.
3446 @library{wxrichtext}
3449 @see wxRichTextFieldTypeStandard, wxRichTextField, wxRichTextCtrl
3452 class WXDLLIMPEXP_RICHTEXT wxRichTextFieldType
: public wxObject
3454 DECLARE_CLASS(wxRichTextFieldType
)
3457 Creates a field type definition.
3459 wxRichTextFieldType(const wxString
& name
= wxEmptyString
)
3466 wxRichTextFieldType(const wxRichTextFieldType
& fieldType
) { Copy(fieldType
); }
3468 void Copy(const wxRichTextFieldType
& fieldType
) { m_name
= fieldType
.m_name
; }
3471 Draw the item, within the given range. Some objects may ignore the range (for
3472 example paragraphs) while others must obey it (lines, to implement wrapping)
3474 virtual bool Draw(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
3477 Lay the item out at the specified position with the given size constraint.
3478 Layout must set the cached size. @rect is the available space for the object,
3479 and @a parentRect is the container that is used to determine a relative size
3480 or position (for example if a text box must be 50% of the parent text box).
3482 virtual bool Layout(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
3485 Returns the object size for the given range. Returns @false if the range
3486 is invalid for this object.
3488 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;
3491 Returns @true if we can edit the object's properties via a GUI.
3493 virtual bool CanEditProperties(wxRichTextField
* WXUNUSED(obj
)) const { return false; }
3496 Edits the object's properties via a GUI.
3498 virtual bool EditProperties(wxRichTextField
* WXUNUSED(obj
), wxWindow
* WXUNUSED(parent
), wxRichTextBuffer
* WXUNUSED(buffer
)) { return false; }
3501 Returns the label to be used for the properties context menu item.
3503 virtual wxString
GetPropertiesMenuLabel(wxRichTextField
* WXUNUSED(obj
)) const { return wxEmptyString
; }
3506 Update the field. This would typically expand the field to its value,
3507 if this is a dynamically changing and/or composite field.
3509 virtual bool UpdateField(wxRichTextField
* WXUNUSED(obj
)) { return false; }
3512 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
3514 virtual bool IsTopLevel(wxRichTextField
* WXUNUSED(obj
)) const { return true; }
3517 Sets the field type name. There should be a unique name per field type object.
3519 void SetName(const wxString
& name
) { m_name
= name
; }
3522 Returns the field type name. There should be a unique name per field type object.
3524 wxString
GetName() const { return m_name
; }
3531 WX_DECLARE_STRING_HASH_MAP(wxRichTextFieldType
*, wxRichTextFieldTypeHashMap
);
3534 @class wxRichTextFieldTypeStandard
3536 A field type that can handle fields with text or bitmap labels, with a small range
3537 of styles for implementing rectangular fields and fields that can be used for start
3540 The border, text and background colours can be customised; the default is
3541 white text on a black background.
3543 The following display styles can be used.
3546 @style{wxRICHTEXT_FIELD_STYLE_COMPOSITE}
3547 Creates a composite field; you will probably need to derive a new class to implement UpdateField.
3548 @style{wxRICHTEXT_FIELD_STYLE_RECTANGLE}
3549 Shows a rounded rectangle background.
3550 @style{wxRICHTEXT_FIELD_STYLE_NO_BORDER}
3551 Suppresses the background and border; mostly used with a bitmap label.
3552 @style{wxRICHTEXT_FIELD_STYLE_START_TAG}
3553 Shows a start tag background, with the pointy end facing right.
3554 @style{wxRICHTEXT_FIELD_STYLE_END_TAG}
3555 Shows an end tag background, with the pointy end facing left.
3558 @library{wxrichtext}
3561 @see wxRichTextFieldType, wxRichTextField, wxRichTextBuffer, wxRichTextCtrl
3564 class WXDLLIMPEXP_RICHTEXT wxRichTextFieldTypeStandard
: public wxRichTextFieldType
3566 DECLARE_CLASS(wxRichTextFieldTypeStandard
)
3569 // Display style types
3570 enum { wxRICHTEXT_FIELD_STYLE_COMPOSITE
= 0x01,
3571 wxRICHTEXT_FIELD_STYLE_RECTANGLE
= 0x02,
3572 wxRICHTEXT_FIELD_STYLE_NO_BORDER
= 0x04,
3573 wxRICHTEXT_FIELD_STYLE_START_TAG
= 0x08,
3574 wxRICHTEXT_FIELD_STYLE_END_TAG
= 0x10
3578 Constructor, creating a field type definition with a text label.
3581 The name of the type definition. This must be unique, and is the type
3582 name used when adding a field to a control.
3584 The text label to be shown on the field.
3586 The display style: one of wxRICHTEXT_FIELD_STYLE_RECTANGLE,
3587 wxRICHTEXT_FIELD_STYLE_NO_BORDER, wxRICHTEXT_FIELD_STYLE_START_TAG,
3588 wxRICHTEXT_FIELD_STYLE_END_TAG.
3591 wxRichTextFieldTypeStandard(const wxString
& name
, const wxString
& label
, int displayStyle
= wxRICHTEXT_FIELD_STYLE_RECTANGLE
);
3594 Constructor, creating a field type definition with a bitmap label.
3597 The name of the type definition. This must be unique, and is the type
3598 name used when adding a field to a control.
3600 The bitmap label to be shown on the field.
3602 The display style: one of wxRICHTEXT_FIELD_STYLE_RECTANGLE,
3603 wxRICHTEXT_FIELD_STYLE_NO_BORDER, wxRICHTEXT_FIELD_STYLE_START_TAG,
3604 wxRICHTEXT_FIELD_STYLE_END_TAG.
3607 wxRichTextFieldTypeStandard(const wxString
& name
, const wxBitmap
& bitmap
, int displayStyle
= wxRICHTEXT_FIELD_STYLE_NO_BORDER
);
3610 The default constructor.
3613 wxRichTextFieldTypeStandard() { Init(); }
3616 The copy constructor.
3619 wxRichTextFieldTypeStandard(const wxRichTextFieldTypeStandard
& field
) { Copy(field
); }
3622 Initialises the object.
3629 void Copy(const wxRichTextFieldTypeStandard
& field
);
3632 The assignment operator.
3634 void operator=(const wxRichTextFieldTypeStandard
& field
) { Copy(field
); }
3637 Draw the item, within the given range. Some objects may ignore the range (for
3638 example paragraphs) while others must obey it (lines, to implement wrapping)
3640 virtual bool Draw(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3643 Lay the item out at the specified position with the given size constraint.
3644 Layout must set the cached size. @rect is the available space for the object,
3645 and @a parentRect is the container that is used to determine a relative size
3646 or position (for example if a text box must be 50% of the parent text box).
3648 virtual bool Layout(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3651 Returns the object size for the given range. Returns @false if the range
3652 is invalid for this object.
3654 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;
3657 Get the size of the field, given the label, font size, and so on.
3659 wxSize
GetSize(wxRichTextField
* obj
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int style
) const;
3662 Returns @true if the display type is wxRICHTEXT_FIELD_STYLE_COMPOSITE, @false otherwise.
3664 virtual bool IsTopLevel(wxRichTextField
* WXUNUSED(obj
)) const { return (GetDisplayStyle() & wxRICHTEXT_FIELD_STYLE_COMPOSITE
) != 0; }
3667 Sets the text label for fields of this type.
3669 void SetLabel(const wxString
& label
) { m_label
= label
; }
3672 Returns the text label for fields of this type.
3674 const wxString
& GetLabel() const { return m_label
; }
3677 Sets the bitmap label for fields of this type.
3679 void SetBitmap(const wxBitmap
& bitmap
) { m_bitmap
= bitmap
; }
3682 Gets the bitmap label for fields of this type.
3684 const wxBitmap
& GetBitmap() const { return m_bitmap
; }
3687 Gets the display style for fields of this type.
3689 int GetDisplayStyle() const { return m_displayStyle
; }
3692 Sets the display style for fields of this type.
3694 void SetDisplayStyle(int displayStyle
) { m_displayStyle
= displayStyle
; }
3697 Gets the font used for drawing the text label.
3699 const wxFont
& GetFont() const { return m_font
; }
3702 Sets the font used for drawing the text label.
3704 void SetFont(const wxFont
& font
) { m_font
= font
; }
3707 Gets the colour used for drawing the text label.
3709 const wxColour
& GetTextColour() const { return m_textColour
; }
3712 Sets the colour used for drawing the text label.
3714 void SetTextColour(const wxColour
& colour
) { m_textColour
= colour
; }
3717 Gets the colour used for drawing the field border.
3719 const wxColour
& GetBorderColour() const { return m_borderColour
; }
3722 Sets the colour used for drawing the field border.
3724 void SetBorderColour(const wxColour
& colour
) { m_borderColour
= colour
; }
3727 Gets the colour used for drawing the field background.
3729 const wxColour
& GetBackgroundColour() const { return m_backgroundColour
; }
3732 Sets the colour used for drawing the field background.
3734 void SetBackgroundColour(const wxColour
& colour
) { m_backgroundColour
= colour
; }
3737 Sets the vertical padding (the distance between the border and the text).
3739 void SetVerticalPadding(int padding
) { m_verticalPadding
= padding
; }
3742 Gets the vertical padding (the distance between the border and the text).
3744 int GetVerticalPadding() const { return m_verticalPadding
; }
3747 Sets the horizontal padding (the distance between the border and the text).
3749 void SetHorizontalPadding(int padding
) { m_horizontalPadding
= padding
; }
3752 Sets the horizontal padding (the distance between the border and the text).
3754 int GetHorizontalPadding() const { return m_horizontalPadding
; }
3757 Sets the horizontal margin surrounding the field object.
3759 void SetHorizontalMargin(int margin
) { m_horizontalMargin
= margin
; }
3762 Gets the horizontal margin surrounding the field object.
3764 int GetHorizontalMargin() const { return m_horizontalMargin
; }
3767 Sets the vertical margin surrounding the field object.
3769 void SetVerticalMargin(int margin
) { m_verticalMargin
= margin
; }
3772 Gets the vertical margin surrounding the field object.
3774 int GetVerticalMargin() const { return m_verticalMargin
; }
3781 wxColour m_textColour
;
3782 wxColour m_borderColour
;
3783 wxColour m_backgroundColour
;
3784 int m_verticalPadding
;
3785 int m_horizontalPadding
;
3786 int m_horizontalMargin
;
3787 int m_verticalMargin
;
3792 @class wxRichTextLine
3794 This object represents a line in a paragraph, and stores
3795 offsets from the start of the paragraph representing the
3796 start and end positions of the line.
3798 @library{wxrichtext}
3801 @see wxRichTextBuffer, wxRichTextCtrl
3804 class WXDLLIMPEXP_RICHTEXT wxRichTextLine
3809 wxRichTextLine(wxRichTextParagraph
* parent
);
3810 wxRichTextLine(const wxRichTextLine
& obj
) { Init( NULL
); Copy(obj
); }
3811 virtual ~wxRichTextLine() {}
3818 Sets the range associated with this line.
3820 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
3822 Sets the range associated with this line.
3824 void SetRange(long from
, long to
) { m_range
= wxRichTextRange(from
, to
); }
3827 Returns the parent paragraph.
3829 wxRichTextParagraph
* GetParent() { return m_parent
; }
3834 const wxRichTextRange
& GetRange() const { return m_range
; }
3838 wxRichTextRange
& GetRange() { return m_range
; }
3841 Returns the absolute range.
3843 wxRichTextRange
GetAbsoluteRange() const;
3846 Returns the line size as calculated by Layout.
3848 virtual wxSize
GetSize() const { return m_size
; }
3851 Sets the line size as calculated by Layout.
3853 virtual void SetSize(const wxSize
& sz
) { m_size
= sz
; }
3856 Returns the object position relative to the parent.
3858 virtual wxPoint
GetPosition() const { return m_pos
; }
3861 Sets the object position relative to the parent.
3863 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
3866 Returns the absolute object position.
3868 virtual wxPoint
GetAbsolutePosition() const;
3871 Returns the rectangle enclosing the line.
3873 virtual wxRect
GetRect() const { return wxRect(GetAbsolutePosition(), GetSize()); }
3876 Sets the stored descent.
3878 void SetDescent(int descent
) { m_descent
= descent
; }
3881 Returns the stored descent.
3883 int GetDescent() const { return m_descent
; }
3885 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3886 wxArrayInt
& GetObjectSizes() { return m_objectSizes
; }
3887 const wxArrayInt
& GetObjectSizes() const { return m_objectSizes
; }
3893 Initialises the object.
3895 void Init(wxRichTextParagraph
* parent
);
3900 void Copy(const wxRichTextLine
& obj
);
3902 virtual wxRichTextLine
* Clone() const { return new wxRichTextLine(*this); }
3906 // The range of the line (start position to end position)
3907 // This is relative to the parent paragraph.
3908 wxRichTextRange m_range
;
3910 // Size and position measured relative to top of paragraph
3914 // Maximum descent for this line (location of text baseline)
3917 // The parent object
3918 wxRichTextParagraph
* m_parent
;
3920 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3921 wxArrayInt m_objectSizes
;
3925 WX_DECLARE_LIST_WITH_DECL( wxRichTextLine
, wxRichTextLineList
, class WXDLLIMPEXP_RICHTEXT
);
3928 @class wxRichTextParagraph
3930 This object represents a single paragraph containing various objects such as text content, images, and further paragraph layout objects.
3932 @library{wxrichtext}
3935 @see wxRichTextBuffer, wxRichTextCtrl
3938 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraph
: public wxRichTextCompositeObject
3940 DECLARE_DYNAMIC_CLASS(wxRichTextParagraph
)
3945 Constructor taking a parent and style.
3947 wxRichTextParagraph(wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
3949 Constructor taking a text string, a parent and paragraph and character attributes.
3951 wxRichTextParagraph(const wxString
& text
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* paraStyle
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
3952 virtual ~wxRichTextParagraph();
3953 wxRichTextParagraph(const wxRichTextParagraph
& obj
): wxRichTextCompositeObject() { Copy(obj
); }
3957 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3959 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3961 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;
3963 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
3965 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
3967 virtual void CalculateRange(long start
, long& end
);
3969 virtual wxString
GetXMLNodeName() const { return wxT("paragraph"); }
3974 Returns the cached lines.
3976 wxRichTextLineList
& GetLines() { return m_cachedLines
; }
3983 void Copy(const wxRichTextParagraph
& obj
);
3985 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraph(*this); }
3988 Clears the cached lines.
3995 Applies paragraph styles such as centering to the wrapped lines.
3997 virtual void ApplyParagraphStyle(wxRichTextLine
* line
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxDC
& dc
);
4000 Inserts text at the given position.
4002 virtual bool InsertText(long pos
, const wxString
& text
);
4005 Splits an object at this position if necessary, and returns
4006 the previous object, or NULL if inserting at the beginning.
4008 virtual wxRichTextObject
* SplitAt(long pos
, wxRichTextObject
** previousObject
= NULL
);
4011 Moves content to a list from this point.
4013 virtual void MoveToList(wxRichTextObject
* obj
, wxList
& list
);
4016 Adds content back from a list.
4018 virtual void MoveFromList(wxList
& list
);
4021 Returns the plain text searching from the start or end of the range.
4022 The resulting string may be shorter than the range given.
4024 bool GetContiguousPlainText(wxString
& text
, const wxRichTextRange
& range
, bool fromStart
= true);
4027 Finds a suitable wrap position. @a wrapPosition is the last position in the line to the left
4030 bool FindWrapPosition(const wxRichTextRange
& range
, wxDC
& dc
, wxRichTextDrawingContext
& context
, int availableSpace
, long& wrapPosition
, wxArrayInt
* partialExtents
);
4033 Finds the object at the given position.
4035 wxRichTextObject
* FindObjectAtPosition(long position
);
4038 Returns the bullet text for this paragraph.
4040 wxString
GetBulletText();
4043 Allocates or reuses a line object.
4045 wxRichTextLine
* AllocateLine(int pos
);
4048 Clears remaining unused line objects, if any.
4050 bool ClearUnusedLines(int lineCount
);
4053 Returns combined attributes of the base style, paragraph style and character style. We use this to dynamically
4054 retrieve the actual style.
4056 wxRichTextAttr
GetCombinedAttributes(const wxRichTextAttr
& contentStyle
, bool includingBoxAttr
= false) const;
4059 Returns the combined attributes of the base style and paragraph style.
4061 wxRichTextAttr
GetCombinedAttributes(bool includingBoxAttr
= false) const;
4064 Returns the first position from pos that has a line break character.
4066 long GetFirstLineBreakPosition(long pos
);
4069 Creates a default tabstop array.
4071 static void InitDefaultTabs();
4074 Clears the default tabstop array.
4076 static void ClearDefaultTabs();
4079 Returns the default tabstop array.
4081 static const wxArrayInt
& GetDefaultTabs() { return sm_defaultTabs
; }
4084 Lays out the floating objects.
4086 void LayoutFloat(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, int style
, wxRichTextFloatCollector
* floatCollector
);
4090 // The lines that make up the wrapped paragraph
4091 wxRichTextLineList m_cachedLines
;
4094 static wxArrayInt sm_defaultTabs
;
4096 friend class wxRichTextFloatCollector
;
4100 @class wxRichTextPlainText
4102 This object represents a single piece of text.
4104 @library{wxrichtext}
4107 @see wxRichTextBuffer, wxRichTextCtrl
4110 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainText
: public wxRichTextObject
4112 DECLARE_DYNAMIC_CLASS(wxRichTextPlainText
)
4119 wxRichTextPlainText(const wxString
& text
= wxEmptyString
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
4124 wxRichTextPlainText(const wxRichTextPlainText
& obj
): wxRichTextObject() { Copy(obj
); }
4128 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4130 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4132 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;
4134 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
4136 virtual wxRichTextObject
* DoSplit(long pos
);
4138 virtual void CalculateRange(long start
, long& end
);
4140 virtual bool DeleteRange(const wxRichTextRange
& range
);
4142 virtual bool IsEmpty() const { return m_text
.empty(); }
4144 virtual bool CanMerge(wxRichTextObject
* object
) const;
4146 virtual bool Merge(wxRichTextObject
* object
);
4148 virtual void Dump(wxTextOutputStream
& stream
);
4151 Get the first position from pos that has a line break character.
4153 long GetFirstLineBreakPosition(long pos
);
4155 /// Does this object take note of paragraph attributes? Text and image objects don't.
4156 virtual bool UsesParagraphAttributes() const { return false; }
4159 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4162 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4163 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4166 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4167 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4170 virtual wxString
GetXMLNodeName() const { return wxT("text"); }
4177 const wxString
& GetText() const { return m_text
; }
4182 void SetText(const wxString
& text
) { m_text
= text
; }
4186 // Copies the text object,
4187 void Copy(const wxRichTextPlainText
& obj
);
4189 // Clones the text object.
4190 virtual wxRichTextObject
* Clone() const { return new wxRichTextPlainText(*this); }
4193 bool DrawTabbedString(wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxString
& str
, wxCoord
& x
, wxCoord
& y
, bool selected
);
4200 @class wxRichTextImageBlock
4202 This class stores information about an image, in binary in-memory form.
4204 @library{wxrichtext}
4207 @see wxRichTextBuffer, wxRichTextCtrl
4210 class WXDLLIMPEXP_RICHTEXT wxRichTextImageBlock
: public wxObject
4216 wxRichTextImageBlock();
4221 wxRichTextImageBlock(const wxRichTextImageBlock
& block
);
4222 virtual ~wxRichTextImageBlock();
4225 Initialises the block.
4236 Load the original image into a memory block.
4237 If the image is not a JPEG, we must convert it into a JPEG
4239 If it's not a JPEG we can make use of @a image, already scaled, so we don't have to
4240 load the image a second time.
4242 virtual bool MakeImageBlock(const wxString
& filename
, wxBitmapType imageType
,
4243 wxImage
& image
, bool convertToJPEG
= true);
4246 Make an image block from the wxImage in the given
4249 virtual bool MakeImageBlock(wxImage
& image
, wxBitmapType imageType
, int quality
= 80);
4252 Uses a const wxImage for efficiency, but can't set quality (only relevant for JPEG)
4254 virtual bool MakeImageBlockDefaultQuality(const wxImage
& image
, wxBitmapType imageType
);
4257 Makes the image block.
4259 virtual bool DoMakeImageBlock(const wxImage
& image
, wxBitmapType imageType
);
4262 Writes the block to a file.
4264 bool Write(const wxString
& filename
);
4267 Writes the data in hex to a stream.
4269 bool WriteHex(wxOutputStream
& stream
);
4272 Reads the data in hex from a stream.
4274 bool ReadHex(wxInputStream
& stream
, int length
, wxBitmapType imageType
);
4279 void Copy(const wxRichTextImageBlock
& block
);
4281 // Load a wxImage from the block
4284 bool Load(wxImage
& image
);
4289 Assignment operation.
4291 void operator=(const wxRichTextImageBlock
& block
);
4296 Returns the raw data.
4298 unsigned char* GetData() const { return m_data
; }
4301 Returns the data size in bytes.
4303 size_t GetDataSize() const { return m_dataSize
; }
4306 Returns the image type.
4308 wxBitmapType
GetImageType() const { return m_imageType
; }
4312 void SetData(unsigned char* image
) { m_data
= image
; }
4317 void SetDataSize(size_t size
) { m_dataSize
= size
; }
4320 Sets the image type.
4322 void SetImageType(wxBitmapType imageType
) { m_imageType
= imageType
; }
4325 Returns @true if the data is non-NULL.
4327 bool IsOk() const { return GetData() != NULL
; }
4328 bool Ok() const { return IsOk(); }
4331 Gets the extension for the block's type.
4333 wxString
GetExtension() const;
4338 Allocates and reads from a stream as a block of memory.
4340 static unsigned char* ReadBlock(wxInputStream
& stream
, size_t size
);
4343 Allocates and reads from a file as a block of memory.
4345 static unsigned char* ReadBlock(const wxString
& filename
, size_t size
);
4348 Writes a memory block to stream.
4350 static bool WriteBlock(wxOutputStream
& stream
, unsigned char* block
, size_t size
);
4353 Writes a memory block to a file.
4355 static bool WriteBlock(const wxString
& filename
, unsigned char* block
, size_t size
);
4358 // Size in bytes of the image stored.
4359 // This is in the raw, original form such as a JPEG file.
4360 unsigned char* m_data
;
4362 wxBitmapType m_imageType
;
4366 @class wxRichTextImage
4368 This class implements a graphic object.
4370 @library{wxrichtext}
4373 @see wxRichTextBuffer, wxRichTextCtrl, wxRichTextImageBlock
4376 class WXDLLIMPEXP_RICHTEXT wxRichTextImage
: public wxRichTextObject
4378 DECLARE_DYNAMIC_CLASS(wxRichTextImage
)
4383 Default constructor.
4385 wxRichTextImage(wxRichTextObject
* parent
= NULL
): wxRichTextObject(parent
) { }
4388 Creates a wxRichTextImage from a wxImage.
4390 wxRichTextImage(const wxImage
& image
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4393 Creates a wxRichTextImage from an image block.
4395 wxRichTextImage(const wxRichTextImageBlock
& imageBlock
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
4400 wxRichTextImage(const wxRichTextImage
& obj
): wxRichTextObject(obj
) { Copy(obj
); }
4404 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4406 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4408 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;
4411 Returns the 'natural' size for this object - the image size.
4413 virtual wxTextAttrSize
GetNaturalSize() const;
4415 virtual bool IsEmpty() const { return false; /* !m_imageBlock.IsOk(); */ }
4417 virtual bool CanEditProperties() const { return true; }
4419 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
4421 virtual wxString
GetPropertiesMenuLabel() const { return _("&Picture"); }
4423 virtual bool UsesParagraphAttributes() const { return false; }
4426 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4429 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4430 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4433 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4434 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4437 // Images can be floatable (optionally).
4438 virtual bool IsFloatable() const { return true; }
4440 virtual wxString
GetXMLNodeName() const { return wxT("image"); }
4445 Returns the image cache (a scaled bitmap).
4447 const wxBitmap
& GetImageCache() const { return m_imageCache
; }
4450 Sets the image cache.
4452 void SetImageCache(const wxBitmap
& bitmap
) { m_imageCache
= bitmap
; }
4455 Resets the image cache.
4457 void ResetImageCache() { m_imageCache
= wxNullBitmap
; }
4460 Returns the image block containing the raw data.
4462 wxRichTextImageBlock
& GetImageBlock() { return m_imageBlock
; }
4465 Gets the original image size.
4467 wxSize
GetOriginalImageSize() const;
4470 Sets the original image size.
4472 void SetOriginalImageSize(const wxSize
& sz
);
4477 Copies the image object.
4479 void Copy(const wxRichTextImage
& obj
);
4482 Clones the image object.
4484 virtual wxRichTextObject
* Clone() const { return new wxRichTextImage(*this); }
4487 Creates a cached image at the required size.
4489 virtual bool LoadImageCache(wxDC
& dc
, bool resetCache
= false);
4492 wxRichTextImageBlock m_imageBlock
;
4493 wxBitmap m_imageCache
;
4496 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCommand
;
4497 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
4500 @class wxRichTextBuffer
4502 This is a kind of paragraph layout box, used to represent the whole buffer.
4504 @library{wxrichtext}
4507 @see wxRichTextParagraphLayoutBox, wxRichTextCtrl
4510 class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer
: public wxRichTextParagraphLayoutBox
4512 DECLARE_DYNAMIC_CLASS(wxRichTextBuffer
)
4517 Default constructor.
4519 wxRichTextBuffer() { Init(); }
4524 wxRichTextBuffer(const wxRichTextBuffer
& obj
): wxRichTextParagraphLayoutBox() { Init(); Copy(obj
); }
4526 virtual ~wxRichTextBuffer() ;
4531 Returns the command processor.
4532 A text buffer always creates its own command processor when it is initialized.
4534 wxCommandProcessor
* GetCommandProcessor() const { return m_commandProcessor
; }
4537 Sets style sheet, if any. This will allow the application to use named character and paragraph
4538 styles found in the style sheet.
4540 Neither the buffer nor the control owns the style sheet so must be deleted by the application.
4542 void SetStyleSheet(wxRichTextStyleSheet
* styleSheet
) { m_styleSheet
= styleSheet
; }
4545 Returns the style sheet.
4547 virtual wxRichTextStyleSheet
* GetStyleSheet() const { return m_styleSheet
; }
4550 Sets the style sheet and sends a notification of the change.
4552 bool SetStyleSheetAndNotify(wxRichTextStyleSheet
* sheet
);
4555 Pushes the style sheet to the top of the style sheet stack.
4557 bool PushStyleSheet(wxRichTextStyleSheet
* styleSheet
);
4560 Pops the style sheet from the top of the style sheet stack.
4562 wxRichTextStyleSheet
* PopStyleSheet();
4565 Returns the table storing fonts, for quick access and font reuse.
4567 wxRichTextFontTable
& GetFontTable() { return m_fontTable
; }
4570 Returns the table storing fonts, for quick access and font reuse.
4572 const wxRichTextFontTable
& GetFontTable() const { return m_fontTable
; }
4575 Sets table storing fonts, for quick access and font reuse.
4577 void SetFontTable(const wxRichTextFontTable
& table
) { m_fontTable
= table
; }
4587 Clears the buffer, adds an empty paragraph, and clears the command processor.
4589 virtual void ResetAndClearCommands();
4593 Loads content from a stream or file.
4594 Not all handlers will implement file loading.
4596 virtual bool LoadFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4597 virtual bool LoadFile(wxInputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4602 Saves content to a stream or file.
4603 Not all handlers will implement file saving.
4605 virtual bool SaveFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4606 virtual bool SaveFile(wxOutputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4610 Sets the handler flags, controlling loading and saving.
4612 void SetHandlerFlags(int flags
) { m_handlerFlags
= flags
; }
4615 Gets the handler flags, controlling loading and saving.
4617 int GetHandlerFlags() const { return m_handlerFlags
; }
4620 Convenience function to add a paragraph of text.
4622 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
) { Modify(); return wxRichTextParagraphLayoutBox::AddParagraph(text
, paraStyle
); }
4625 Begin collapsing undo/redo commands. Note that this may not work properly
4626 if combining commands that delete or insert content, changing ranges for
4629 @a cmdName should be the name of the combined command that will appear
4630 next to Undo and Redo in the edit menu.
4632 virtual bool BeginBatchUndo(const wxString
& cmdName
);
4635 End collapsing undo/redo commands.
4637 virtual bool EndBatchUndo();
4640 Returns @true if we are collapsing commands.
4642 virtual bool BatchingUndo() const { return m_batchedCommandDepth
> 0; }
4645 Submit the action immediately, or delay according to whether collapsing is on.
4647 virtual bool SubmitAction(wxRichTextAction
* action
);
4650 Returns the collapsed command.
4652 virtual wxRichTextCommand
* GetBatchedCommand() const { return m_batchedCommand
; }
4655 Begin suppressing undo/redo commands. The way undo is suppressed may be implemented
4656 differently by each command. If not dealt with by a command implementation, then
4657 it will be implemented automatically by not storing the command in the undo history
4658 when the action is submitted to the command processor.
4660 virtual bool BeginSuppressUndo();
4663 End suppressing undo/redo commands.
4665 virtual bool EndSuppressUndo();
4668 Are we suppressing undo??
4670 virtual bool SuppressingUndo() const { return m_suppressUndo
> 0; }
4673 Copy the range to the clipboard.
4675 virtual bool CopyToClipboard(const wxRichTextRange
& range
);
4678 Paste the clipboard content to the buffer.
4680 virtual bool PasteFromClipboard(long position
);
4683 Returns @true if we can paste from the clipboard.
4685 virtual bool CanPasteFromClipboard() const;
4688 Begin using a style.
4690 virtual bool BeginStyle(const wxRichTextAttr
& style
);
4695 virtual bool EndStyle();
4700 virtual bool EndAllStyles();
4703 Clears the style stack.
4705 virtual void ClearStyleStack();
4708 Returns the size of the style stack, for example to check correct nesting.
4710 virtual size_t GetStyleStackSize() const { return m_attributeStack
.GetCount(); }
4720 bool EndBold() { return EndStyle(); }
4723 Begins using italic.
4730 bool EndItalic() { return EndStyle(); }
4733 Begins using underline.
4735 bool BeginUnderline();
4738 Ends using underline.
4740 bool EndUnderline() { return EndStyle(); }
4743 Begins using point size.
4745 bool BeginFontSize(int pointSize
);
4748 Ends using point size.
4750 bool EndFontSize() { return EndStyle(); }
4753 Begins using this font.
4755 bool BeginFont(const wxFont
& font
);
4760 bool EndFont() { return EndStyle(); }
4763 Begins using this colour.
4765 bool BeginTextColour(const wxColour
& colour
);
4768 Ends using a colour.
4770 bool EndTextColour() { return EndStyle(); }
4773 Begins using alignment.
4775 bool BeginAlignment(wxTextAttrAlignment alignment
);
4780 bool EndAlignment() { return EndStyle(); }
4783 Begins using @a leftIndent for the left indent, and optionally @a leftSubIndent for
4784 the sub-indent. Both are expressed in tenths of a millimetre.
4786 The sub-indent is an offset from the left of the paragraph, and is used for all
4787 but the first line in a paragraph. A positive value will cause the first line to appear
4788 to the left of the subsequent lines, and a negative value will cause the first line to be
4789 indented relative to the subsequent lines.
4791 bool BeginLeftIndent(int leftIndent
, int leftSubIndent
= 0);
4796 bool EndLeftIndent() { return EndStyle(); }
4799 Begins a right indent, specified in tenths of a millimetre.
4801 bool BeginRightIndent(int rightIndent
);
4806 bool EndRightIndent() { return EndStyle(); }
4809 Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
4810 in tenths of a millimetre.
4812 bool BeginParagraphSpacing(int before
, int after
);
4815 Ends paragraph spacing.
4817 bool EndParagraphSpacing() { return EndStyle(); }
4820 Begins line spacing using the specified value. @e spacing is a multiple, where
4821 10 means single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
4823 The ::wxTextAttrLineSpacing enumeration values are defined for convenience.
4825 bool BeginLineSpacing(int lineSpacing
);
4830 bool EndLineSpacing() { return EndStyle(); }
4833 Begins numbered bullet.
4835 This call will be needed for each item in the list, and the
4836 application should take care of incrementing the numbering.
4838 @a bulletNumber is a number, usually starting with 1.
4839 @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
4840 @a bulletStyle is a bitlist of the following values:
4842 wxRichTextBuffer uses indentation to render a bulleted item.
4843 The left indent is the distance between the margin and the bullet.
4844 The content of the paragraph, including the first line, starts
4845 at leftMargin + leftSubIndent.
4846 So the distance between the left edge of the bullet and the
4847 left of the actual paragraph is leftSubIndent.
4849 bool BeginNumberedBullet(int bulletNumber
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_ARABIC
|wxTEXT_ATTR_BULLET_STYLE_PERIOD
);
4852 Ends numbered bullet.
4854 bool EndNumberedBullet() { return EndStyle(); }
4857 Begins applying a symbol bullet, using a character from the current font.
4859 See BeginNumberedBullet() for an explanation of how indentation is used
4860 to render the bulleted paragraph.
4862 bool BeginSymbolBullet(const wxString
& symbol
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_SYMBOL
);
4867 bool EndSymbolBullet() { return EndStyle(); }
4870 Begins applying a standard bullet, using one of the standard bullet names
4871 (currently @c standard/circle or @c standard/square.
4873 See BeginNumberedBullet() for an explanation of how indentation is used to
4874 render the bulleted paragraph.
4876 bool BeginStandardBullet(const wxString
& bulletName
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_STANDARD
);
4879 Ends standard bullet.
4881 bool EndStandardBullet() { return EndStyle(); }
4884 Begins named character style.
4886 bool BeginCharacterStyle(const wxString
& characterStyle
);
4889 Ends named character style.
4891 bool EndCharacterStyle() { return EndStyle(); }
4894 Begins named paragraph style.
4896 bool BeginParagraphStyle(const wxString
& paragraphStyle
);
4899 Ends named character style.
4901 bool EndParagraphStyle() { return EndStyle(); }
4904 Begins named list style.
4906 Optionally, you can also pass a level and a number.
4908 bool BeginListStyle(const wxString
& listStyle
, int level
= 1, int number
= 1);
4911 Ends named character style.
4913 bool EndListStyle() { return EndStyle(); }
4916 Begins applying wxTEXT_ATTR_URL to the content.
4918 Pass a URL and optionally, a character style to apply, since it is common
4919 to mark a URL with a familiar style such as blue text with underlining.
4921 bool BeginURL(const wxString
& url
, const wxString
& characterStyle
= wxEmptyString
);
4926 bool EndURL() { return EndStyle(); }
4931 Adds an event handler.
4933 A buffer associated with a control has the control as the only event handler,
4934 but the application is free to add more if further notification is required.
4935 All handlers are notified of an event originating from the buffer, such as
4936 the replacement of a style sheet during loading.
4938 The buffer never deletes any of the event handlers, unless RemoveEventHandler()
4939 is called with @true as the second argument.
4941 bool AddEventHandler(wxEvtHandler
* handler
);
4944 Removes an event handler from the buffer's list of handlers, deleting the
4945 object if @a deleteHandler is @true.
4947 bool RemoveEventHandler(wxEvtHandler
* handler
, bool deleteHandler
= false);
4950 Clear event handlers.
4952 void ClearEventHandlers();
4955 Send event to event handlers. If sendToAll is true, will send to all event handlers,
4956 otherwise will stop at the first successful one.
4958 bool SendEvent(wxEvent
& event
, bool sendToAll
= true);
4962 virtual int HitTest(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
4967 void Copy(const wxRichTextBuffer
& obj
);
4970 Assignment operator.
4972 void operator= (const wxRichTextBuffer
& obj
) { Copy(obj
); }
4977 virtual wxRichTextObject
* Clone() const { return new wxRichTextBuffer(*this); }
4980 Submits a command to insert paragraphs.
4982 bool InsertParagraphsWithUndo(long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4985 Submits a command to insert the given text.
4987 bool InsertTextWithUndo(long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4990 Submits a command to insert a newline.
4992 bool InsertNewlineWithUndo(long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4995 Submits a command to insert the given image.
4997 bool InsertImageWithUndo(long pos
, const wxRichTextImageBlock
& imageBlock
, wxRichTextCtrl
* ctrl
, int flags
= 0,
4998 const wxRichTextAttr
& textAttr
= wxRichTextAttr());
5001 Submits a command to insert an object.
5003 wxRichTextObject
* InsertObjectWithUndo(long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
);
5006 Submits a command to delete this range.
5008 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
);
5013 void Modify(bool modify
= true) { m_modified
= modify
; }
5016 Returns @true if the buffer was modified.
5018 bool IsModified() const { return m_modified
; }
5022 Dumps contents of buffer for debugging purposes.
5024 virtual void Dump();
5025 virtual void Dump(wxTextOutputStream
& stream
) { wxRichTextParagraphLayoutBox::Dump(stream
); }
5029 Returns the file handlers.
5031 static wxList
& GetHandlers() { return sm_handlers
; }
5034 Adds a file handler to the end.
5036 static void AddHandler(wxRichTextFileHandler
*handler
);
5039 Inserts a file handler at the front.
5041 static void InsertHandler(wxRichTextFileHandler
*handler
);
5044 Removes a file handler.
5046 static bool RemoveHandler(const wxString
& name
);
5049 Finds a file handler by name.
5051 static wxRichTextFileHandler
*FindHandler(const wxString
& name
);
5054 Finds a file handler by extension and type.
5056 static wxRichTextFileHandler
*FindHandler(const wxString
& extension
, wxRichTextFileType imageType
);
5059 Finds a handler by filename or, if supplied, type.
5061 static wxRichTextFileHandler
*FindHandlerFilenameOrType(const wxString
& filename
,
5062 wxRichTextFileType imageType
);
5065 Finds a handler by type.
5067 static wxRichTextFileHandler
*FindHandler(wxRichTextFileType imageType
);
5070 Gets a wildcard incorporating all visible handlers. If @a types is present,
5071 it will be filled with the file type corresponding to each filter. This can be
5072 used to determine the type to pass to LoadFile given a selected filter.
5074 static wxString
GetExtWildcard(bool combine
= false, bool save
= false, wxArrayInt
* types
= NULL
);
5077 Clean up file handlers.
5079 static void CleanUpHandlers();
5082 Initialise the standard file handlers.
5083 Currently, only the plain text loading/saving handler is initialised by default.
5085 static void InitStandardHandlers();
5088 Returns the drawing handlers.
5090 static wxList
& GetDrawingHandlers() { return sm_drawingHandlers
; }
5093 Adds a drawing handler to the end.
5095 static void AddDrawingHandler(wxRichTextDrawingHandler
*handler
);
5098 Inserts a drawing handler at the front.
5100 static void InsertDrawingHandler(wxRichTextDrawingHandler
*handler
);
5103 Removes a drawing handler.
5105 static bool RemoveDrawingHandler(const wxString
& name
);
5108 Finds a drawing handler by name.
5110 static wxRichTextDrawingHandler
*FindDrawingHandler(const wxString
& name
);
5113 Clean up drawing handlers.
5115 static void CleanUpDrawingHandlers();
5118 Returns the field types.
5120 static wxRichTextFieldTypeHashMap
& GetFieldTypes() { return sm_fieldTypes
; }
5125 @see RemoveFieldType(), FindFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5128 static void AddFieldType(wxRichTextFieldType
*fieldType
);
5131 Removes a field type by name.
5133 @see AddFieldType(), FindFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5135 static bool RemoveFieldType(const wxString
& name
);
5138 Finds a field type by name.
5140 @see RemoveFieldType(), AddFieldType(), wxRichTextField, wxRichTextFieldType, wxRichTextFieldTypeStandard
5142 static wxRichTextFieldType
*FindFieldType(const wxString
& name
);
5145 Cleans up field types.
5147 static void CleanUpFieldTypes();
5150 Returns the renderer object.
5152 static wxRichTextRenderer
* GetRenderer() { return sm_renderer
; }
5155 Sets @a renderer as the object to be used to render certain aspects of the
5156 content, such as bullets.
5158 You can override default rendering by deriving a new class from
5159 wxRichTextRenderer or wxRichTextStdRenderer, overriding one or more
5160 virtual functions, and setting an instance of the class using this function.
5162 static void SetRenderer(wxRichTextRenderer
* renderer
);
5165 Returns the minimum margin between bullet and paragraph in 10ths of a mm.
5167 static int GetBulletRightMargin() { return sm_bulletRightMargin
; }
5170 Sets the minimum margin between bullet and paragraph in 10ths of a mm.
5172 static void SetBulletRightMargin(int margin
) { sm_bulletRightMargin
= margin
; }
5175 Returns the factor to multiply by character height to get a reasonable bullet size.
5177 static float GetBulletProportion() { return sm_bulletProportion
; }
5180 Sets the factor to multiply by character height to get a reasonable bullet size.
5182 static void SetBulletProportion(float prop
) { sm_bulletProportion
= prop
; }
5185 Returns the scale factor for calculating dimensions.
5187 double GetScale() const { return m_scale
; }
5190 Sets the scale factor for calculating dimensions.
5192 void SetScale(double scale
) { m_scale
= scale
; }
5196 /// Command processor
5197 wxCommandProcessor
* m_commandProcessor
;
5199 /// Table storing fonts
5200 wxRichTextFontTable m_fontTable
;
5202 /// Has been modified?
5205 /// Collapsed command stack
5206 int m_batchedCommandDepth
;
5208 /// Name for collapsed command
5209 wxString m_batchedCommandsName
;
5211 /// Current collapsed command accumulating actions
5212 wxRichTextCommand
* m_batchedCommand
;
5214 /// Whether to suppress undo
5217 /// Style sheet, if any
5218 wxRichTextStyleSheet
* m_styleSheet
;
5220 /// List of event handlers that will be notified of events
5221 wxList m_eventHandlers
;
5223 /// Stack of attributes for convenience functions
5224 wxList m_attributeStack
;
5226 /// Flags to be passed to handlers
5230 static wxList sm_handlers
;
5232 /// Drawing handlers
5233 static wxList sm_drawingHandlers
;
5236 static wxRichTextFieldTypeHashMap sm_fieldTypes
;
5239 static wxRichTextRenderer
* sm_renderer
;
5241 /// Minimum margin between bullet and paragraph in 10ths of a mm
5242 static int sm_bulletRightMargin
;
5244 /// Factor to multiply by character height to get a reasonable bullet size
5245 static float sm_bulletProportion
;
5247 /// Scaling factor in use: needed to calculate correct dimensions when printing
5252 @class wxRichTextCell
5254 wxRichTextCell is the cell in a table.
5257 class WXDLLIMPEXP_RICHTEXT wxRichTextCell
: public wxRichTextBox
5259 DECLARE_DYNAMIC_CLASS(wxRichTextCell
)
5264 Default constructor; optionally pass the parent object.
5267 wxRichTextCell(wxRichTextObject
* parent
= NULL
);
5273 wxRichTextCell(const wxRichTextCell
& obj
): wxRichTextBox() { Copy(obj
); }
5277 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
5279 virtual wxString
GetXMLNodeName() const { return wxT("cell"); }
5281 virtual bool CanEditProperties() const { return true; }
5283 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
5285 virtual wxString
GetPropertiesMenuLabel() const { return _("&Cell"); }
5291 virtual wxRichTextObject
* Clone() const { return new wxRichTextCell(*this); }
5293 void Copy(const wxRichTextCell
& obj
);
5299 @class wxRichTextTable
5301 wxRichTextTable represents a table with arbitrary columns and rows.
5304 WX_DEFINE_ARRAY_PTR(wxRichTextObject
*, wxRichTextObjectPtrArray
);
5305 WX_DECLARE_OBJARRAY(wxRichTextObjectPtrArray
, wxRichTextObjectPtrArrayArray
);
5307 class WXDLLIMPEXP_RICHTEXT wxRichTextTable
: public wxRichTextBox
5309 DECLARE_DYNAMIC_CLASS(wxRichTextTable
)
5315 Default constructor; optionally pass the parent object.
5318 wxRichTextTable(wxRichTextObject
* parent
= NULL
);
5324 wxRichTextTable(const wxRichTextTable
& obj
): wxRichTextBox() { Copy(obj
); }
5328 virtual bool Draw(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
5330 virtual wxString
GetXMLNodeName() const { return wxT("table"); }
5332 virtual bool Layout(wxDC
& dc
, wxRichTextDrawingContext
& context
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
5334 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;
5336 virtual bool DeleteRange(const wxRichTextRange
& range
);
5338 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
5341 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
5344 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
5345 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
5348 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
5349 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
5352 virtual bool FindPosition(wxDC
& dc
, wxRichTextDrawingContext
& context
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
5354 virtual void CalculateRange(long start
, long& end
);
5356 // Can this object handle the selections of its children? FOr example, a table.
5357 virtual bool HandlesChildSelections() const { return true; }
5359 /// Returns a selection object specifying the selections between start and end character positions.
5360 /// For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
5361 virtual wxRichTextSelection
GetSelection(long start
, long end
) const;
5363 virtual bool CanEditProperties() const { return true; }
5365 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
5367 virtual wxString
GetPropertiesMenuLabel() const { return _("&Table"); }
5369 // Returns true if objects of this class can accept the focus, i.e. a call to SetFocusObject
5370 // is possible. For example, containers supporting text, such as a text box object, can accept the focus,
5371 // but a table can't (set the focus to individual cells instead).
5372 virtual bool AcceptsFocus() const { return false; }
5377 Returns the cells array.
5379 const wxRichTextObjectPtrArrayArray
& GetCells() const { return m_cells
; }
5382 Returns the cells array.
5384 wxRichTextObjectPtrArrayArray
& GetCells() { return m_cells
; }
5387 Returns the row count.
5389 int GetRowCount() const { return m_rowCount
; }
5392 Returns the column count.
5394 int GetColumnCount() const { return m_colCount
; }
5397 Returns the cell at the given row/column position.
5399 virtual wxRichTextCell
* GetCell(int row
, int col
) const;
5402 Returns the cell at the given character position (in the range of the table).
5404 virtual wxRichTextCell
* GetCell(long pos
) const;
5407 Returns the row/column for a given character position.
5409 virtual bool GetCellRowColumnPosition(long pos
, int& row
, int& col
) const;
5417 virtual void ClearTable();
5420 Creates a table of the given dimensions.
5423 virtual bool CreateTable(int rows
, int cols
);
5426 Sets the attributes for the cells specified by the selection.
5429 virtual bool SetCellStyle(const wxRichTextSelection
& selection
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
5432 Deletes rows from the given row position.
5435 virtual bool DeleteRows(int startRow
, int noRows
= 1);
5438 Deletes columns from the given column position.
5441 virtual bool DeleteColumns(int startCol
, int noCols
= 1);
5444 Adds rows from the given row position.
5447 virtual bool AddRows(int startRow
, int noRows
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
5450 Adds columns from the given column position.
5453 virtual bool AddColumns(int startCol
, int noCols
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
5455 // Makes a clone of this object.
5456 virtual wxRichTextObject
* Clone() const { return new wxRichTextTable(*this); }
5458 // Copies this object.
5459 void Copy(const wxRichTextTable
& obj
);
5466 // An array of rows, each of which is a wxRichTextObjectPtrArray containing
5467 // the cell objects. The cell objects are also children of this object.
5468 // Problem: if boxes are immediate children of a box, this will cause problems
5469 // with wxRichTextParagraphLayoutBox functions (and functions elsewhere) that
5470 // expect to find just paragraphs. May have to adjust the way we handle the
5471 // hierarchy to accept non-paragraph objects in a paragraph layout box.
5472 // We'll be overriding much wxRichTextParagraphLayoutBox functionality so this
5473 // may not be such a problem. Perhaps the table should derive from a different
5475 wxRichTextObjectPtrArrayArray m_cells
;
5480 The command identifiers for Do/Undo.
5483 enum wxRichTextCommandId
5487 wxRICHTEXT_CHANGE_ATTRIBUTES
,
5488 wxRICHTEXT_CHANGE_STYLE
,
5489 wxRICHTEXT_CHANGE_OBJECT
5493 @class wxRichTextObjectAddress
5495 A class for specifying an object anywhere in an object hierarchy,
5496 without using a pointer, necessary since wxRTC commands may delete
5497 and recreate sub-objects so physical object addresses change. An array
5498 of positions (one per hierarchy level) is used.
5500 @library{wxrichtext}
5503 @see wxRichTextCommand
5506 class WXDLLIMPEXP_RICHTEXT wxRichTextObjectAddress
5510 Creates the address given a container and an object.
5512 wxRichTextObjectAddress(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
) { Create(topLevelContainer
, obj
); }
5515 wxRichTextObjectAddress() { Init(); }
5518 wxRichTextObjectAddress(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5525 void Copy(const wxRichTextObjectAddress
& address
) { m_address
= address
.m_address
; }
5528 Assignment operator.
5530 void operator=(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5533 Returns the object specified by the address, given a top level container.
5535 wxRichTextObject
* GetObject(wxRichTextParagraphLayoutBox
* topLevelContainer
) const;
5538 Creates the address given a container and an object.
5540 bool Create(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
);
5543 Returns the array of integers representing the object address.
5545 wxArrayInt
& GetAddress() { return m_address
; }
5548 Returns the array of integers representing the object address.
5550 const wxArrayInt
& GetAddress() const { return m_address
; }
5553 Sets the address from an array of integers.
5555 void SetAddress(const wxArrayInt
& address
) { m_address
= address
; }
5559 wxArrayInt m_address
;
5562 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
5565 @class wxRichTextCommand
5567 Implements a command on the undo/redo stack. A wxRichTextCommand object contains one or more wxRichTextAction
5568 objects, allowing aggregation of a number of operations into one command.
5570 @library{wxrichtext}
5573 @see wxRichTextAction
5576 class WXDLLIMPEXP_RICHTEXT wxRichTextCommand
: public wxCommand
5580 Constructor for one action.
5582 wxRichTextCommand(const wxString
& name
, wxRichTextCommandId id
, wxRichTextBuffer
* buffer
,
5583 wxRichTextParagraphLayoutBox
* container
, wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5586 Constructor for multiple actions.
5588 wxRichTextCommand(const wxString
& name
);
5590 virtual ~wxRichTextCommand();
5593 Performs the command.
5603 Adds an action to the action list.
5605 void AddAction(wxRichTextAction
* action
);
5608 Clears the action list.
5610 void ClearActions();
5613 Returns the action list.
5615 wxList
& GetActions() { return m_actions
; }
5623 @class wxRichTextAction
5625 Implements a part of a command.
5627 @library{wxrichtext}
5630 @see wxRichTextCommand
5633 class WXDLLIMPEXP_RICHTEXT wxRichTextAction
: public wxObject
5637 Constructor. @a buffer is the top-level buffer, while @a container is the object within
5638 which the action is taking place. In the simplest case, they are the same.
5640 wxRichTextAction(wxRichTextCommand
* cmd
, const wxString
& name
, wxRichTextCommandId id
,
5641 wxRichTextBuffer
* buffer
, wxRichTextParagraphLayoutBox
* container
,
5642 wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5644 virtual ~wxRichTextAction();
5647 Performs the action.
5657 Updates the control appearance, optimizing if possible given information from the call to Layout.
5659 void UpdateAppearance(long caretPosition
, bool sendUpdateEvent
= false,
5660 wxArrayInt
* optimizationLineCharPositions
= NULL
, wxArrayInt
* optimizationLineYPositions
= NULL
, bool isDoCmd
= true);
5663 Replaces the buffer paragraphs with the given fragment.
5665 void ApplyParagraphs(const wxRichTextParagraphLayoutBox
& fragment
);
5668 Returns the new fragments.
5670 wxRichTextParagraphLayoutBox
& GetNewParagraphs() { return m_newParagraphs
; }
5673 Returns the old fragments.
5675 wxRichTextParagraphLayoutBox
& GetOldParagraphs() { return m_oldParagraphs
; }
5678 Returns the attributes, for single-object commands.
5680 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
5683 Returns the object to replace the one at the position defined by the container address
5684 and the action's range start position.
5686 wxRichTextObject
* GetObject() const { return m_object
; }
5689 Sets the object to replace the one at the position defined by the container address
5690 and the action's range start position.
5692 void SetObject(wxRichTextObject
* obj
) { m_object
= obj
; m_objectAddress
.Create(m_buffer
, m_object
); }
5695 Makes an address from the given object.
5697 void MakeObject(wxRichTextObject
* obj
) { m_objectAddress
.Create(m_buffer
, obj
); }
5700 Calculate arrays for refresh optimization.
5702 void CalculateRefreshOptimizations(wxArrayInt
& optimizationLineCharPositions
, wxArrayInt
& optimizationLineYPositions
);
5705 Sets the position used for e.g. insertion.
5707 void SetPosition(long pos
) { m_position
= pos
; }
5710 Returns the position used for e.g. insertion.
5712 long GetPosition() const { return m_position
; }
5715 Sets the range for e.g. deletion.
5717 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
5720 Returns the range for e.g. deletion.
5722 const wxRichTextRange
& GetRange() const { return m_range
; }
5725 Returns the address (nested position) of the container within the buffer being manipulated.
5727 wxRichTextObjectAddress
& GetContainerAddress() { return m_containerAddress
; }
5730 Returns the address (nested position) of the container within the buffer being manipulated.
5732 const wxRichTextObjectAddress
& GetContainerAddress() const { return m_containerAddress
; }
5735 Sets the address (nested position) of the container within the buffer being manipulated.
5737 void SetContainerAddress(const wxRichTextObjectAddress
& address
) { m_containerAddress
= address
; }
5740 Sets the address (nested position) of the container within the buffer being manipulated.
5742 void SetContainerAddress(wxRichTextParagraphLayoutBox
* container
, wxRichTextObject
* obj
) { m_containerAddress
.Create(container
, obj
); }
5745 Returns the container that this action refers to, using the container address and top-level buffer.
5747 wxRichTextParagraphLayoutBox
* GetContainer() const;
5750 Returns the action name.
5752 const wxString
& GetName() const { return m_name
; }
5759 wxRichTextBuffer
* m_buffer
;
5761 // The address (nested position) of the container being manipulated.
5762 // This is necessary because objects are deleted, and we can't
5763 // therefore store actual pointers.
5764 wxRichTextObjectAddress m_containerAddress
;
5767 wxRichTextCtrl
* m_ctrl
;
5769 // Stores the new paragraphs
5770 wxRichTextParagraphLayoutBox m_newParagraphs
;
5772 // Stores the old paragraphs
5773 wxRichTextParagraphLayoutBox m_oldParagraphs
;
5775 // Stores an object to replace the one at the position
5776 // defined by the container address and the action's range start position.
5777 wxRichTextObject
* m_object
;
5779 // Stores the attributes
5780 wxRichTextAttr m_attributes
;
5782 // The address of the object being manipulated (used for changing an individual object or its attributes)
5783 wxRichTextObjectAddress m_objectAddress
;
5785 // Stores the old attributes
5786 // wxRichTextAttr m_oldAttributes;
5788 // The affected range
5789 wxRichTextRange m_range
;
5791 // The insertion point for this command
5794 // Ignore 1st 'Do' operation because we already did it
5797 // The command identifier
5798 wxRichTextCommandId m_cmdId
;
5805 // Include style sheet when loading and saving
5806 #define wxRICHTEXT_HANDLER_INCLUDE_STYLESHEET 0x0001
5808 // Save images to memory file system in HTML handler
5809 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY 0x0010
5811 // Save images to files in HTML handler
5812 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_FILES 0x0020
5814 // Save images as inline base64 data in HTML handler
5815 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_BASE64 0x0040
5817 // Don't write header and footer (or BODY), so we can include the fragment
5818 // in a larger document
5819 #define wxRICHTEXT_HANDLER_NO_HEADER_FOOTER 0x0080
5821 // Convert the more common face names to names that will work on the current platform
5822 // in a larger document
5823 #define wxRICHTEXT_HANDLER_CONVERT_FACENAMES 0x0100
5826 @class wxRichTextFileHandler
5828 The base class for file handlers.
5830 @library{wxrichtext}
5833 @see wxRichTextBuffer, wxRichTextCtrl
5836 class WXDLLIMPEXP_RICHTEXT wxRichTextFileHandler
: public wxObject
5838 DECLARE_CLASS(wxRichTextFileHandler
)
5841 Creates a file handler object.
5843 wxRichTextFileHandler(const wxString
& name
= wxEmptyString
, const wxString
& ext
= wxEmptyString
, int type
= 0)
5844 : m_name(name
), m_extension(ext
), m_type(type
), m_flags(0), m_visible(true)
5849 Loads the buffer from a stream.
5850 Not all handlers will implement file loading.
5852 bool LoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
)
5853 { return DoLoadFile(buffer
, stream
); }
5856 Saves the buffer to a stream.
5857 Not all handlers will implement file saving.
5859 bool SaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
)
5860 { return DoSaveFile(buffer
, stream
); }
5863 #if wxUSE_FFILE && wxUSE_STREAMS
5865 Loads the buffer from a file.
5867 virtual bool LoadFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5870 Saves the buffer to a file.
5872 virtual bool SaveFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5873 #endif // wxUSE_STREAMS && wxUSE_STREAMS
5876 Returns @true if we handle this filename (if using files). By default, checks the extension.
5878 virtual bool CanHandle(const wxString
& filename
) const;
5881 Returns @true if we can save using this handler.
5883 virtual bool CanSave() const { return false; }
5886 Returns @true if we can load using this handler.
5888 virtual bool CanLoad() const { return false; }
5891 Returns @true if this handler should be visible to the user.
5893 virtual bool IsVisible() const { return m_visible
; }
5896 Sets whether the handler should be visible to the user (via the application's
5897 load and save dialogs).
5899 virtual void SetVisible(bool visible
) { m_visible
= visible
; }
5902 Sets the name of the handler.
5904 void SetName(const wxString
& name
) { m_name
= name
; }
5907 Returns the name of the handler.
5909 wxString
GetName() const { return m_name
; }
5912 Sets the default extension to recognise.
5914 void SetExtension(const wxString
& ext
) { m_extension
= ext
; }
5917 Returns the default extension to recognise.
5919 wxString
GetExtension() const { return m_extension
; }
5922 Sets the handler type.
5924 void SetType(int type
) { m_type
= type
; }
5927 Returns the handler type.
5929 int GetType() const { return m_type
; }
5932 Sets flags that change the behaviour of loading or saving.
5933 See the documentation for each handler class to see what flags are relevant
5936 You call this function directly if you are using a file handler explicitly
5937 (without going through the text control or buffer LoadFile/SaveFile API).
5938 Or, you can call the control or buffer's SetHandlerFlags function to set
5939 the flags that will be used for subsequent load and save operations.
5941 void SetFlags(int flags
) { m_flags
= flags
; }
5944 Returns flags controlling how loading and saving is done.
5946 int GetFlags() const { return m_flags
; }
5949 Sets the encoding to use when saving a file. If empty, a suitable encoding is chosen.
5951 void SetEncoding(const wxString
& encoding
) { m_encoding
= encoding
; }
5954 Returns the encoding to use when saving a file. If empty, a suitable encoding is chosen.
5956 const wxString
& GetEncoding() const { return m_encoding
; }
5962 Override to load content from @a stream into @a buffer.
5964 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
) = 0;
5967 Override to save content to @a stream from @a buffer.
5969 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
) = 0;
5973 wxString m_encoding
;
5974 wxString m_extension
;
5981 @class wxRichTextPlainTextHandler
5983 Implements saving a buffer to plain text.
5985 @library{wxrichtext}
5988 @see wxRichTextFileHandler, wxRichTextBuffer, wxRichTextCtrl
5991 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainTextHandler
: public wxRichTextFileHandler
5993 DECLARE_CLASS(wxRichTextPlainTextHandler
)
5995 wxRichTextPlainTextHandler(const wxString
& name
= wxT("Text"),
5996 const wxString
& ext
= wxT("txt"),
5997 wxRichTextFileType type
= wxRICHTEXT_TYPE_TEXT
)
5998 : wxRichTextFileHandler(name
, ext
, type
)
6001 // Can we save using this handler?
6002 virtual bool CanSave() const { return true; }
6004 // Can we load using this handler?
6005 virtual bool CanLoad() const { return true; }
6010 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
);
6011 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
);
6017 @class wxRichTextDrawingHandler
6019 The base class for custom drawing handlers.
6020 Currently, drawing handlers can provide virtual attributes.
6022 @library{wxrichtext}
6025 @see wxRichTextBuffer, wxRichTextCtrl
6028 class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingHandler
: public wxObject
6030 DECLARE_CLASS(wxRichTextDrawingHandler
)
6033 Creates a drawing handler object.
6035 wxRichTextDrawingHandler(const wxString
& name
= wxEmptyString
)
6040 Returns @true if this object has virtual attributes that we can provide.
6042 virtual bool HasVirtualAttributes(wxRichTextObject
* obj
) const = 0;
6045 Provides virtual attributes that we can provide.
6047 virtual bool GetVirtualAttributes(wxRichTextAttr
& attr
, wxRichTextObject
* obj
) const = 0;
6050 Sets the name of the handler.
6052 void SetName(const wxString
& name
) { m_name
= name
; }
6055 Returns the name of the handler.
6057 wxString
GetName() const { return m_name
; }
6067 @class wxRichTextBufferDataObject
6069 Implements a rich text data object for clipboard transfer.
6071 @library{wxrichtext}
6074 @see wxDataObjectSimple, wxRichTextBuffer, wxRichTextCtrl
6077 class WXDLLIMPEXP_RICHTEXT wxRichTextBufferDataObject
: public wxDataObjectSimple
6081 The constructor doesn't copy the pointer, so it shouldn't go away while this object
6084 wxRichTextBufferDataObject(wxRichTextBuffer
* richTextBuffer
= NULL
);
6085 virtual ~wxRichTextBufferDataObject();
6088 After a call to this function, the buffer is owned by the caller and it
6089 is responsible for deleting it.
6091 wxRichTextBuffer
* GetRichTextBuffer();
6094 Returns the id for the new data format.
6096 static const wxChar
* GetRichTextBufferFormatId() { return ms_richTextBufferFormatId
; }
6098 // base class pure virtuals
6100 virtual wxDataFormat
GetPreferredFormat(Direction dir
) const;
6101 virtual size_t GetDataSize() const;
6102 virtual bool GetDataHere(void *pBuf
) const;
6103 virtual bool SetData(size_t len
, const void *buf
);
6107 virtual size_t GetDataSize(const wxDataFormat
&) const { return GetDataSize(); }
6108 virtual bool GetDataHere(const wxDataFormat
&, void *buf
) const { return GetDataHere(buf
); }
6109 virtual bool SetData(const wxDataFormat
&, size_t len
, const void *buf
) { return SetData(len
, buf
); }
6112 wxDataFormat m_formatRichTextBuffer
; // our custom format
6113 wxRichTextBuffer
* m_richTextBuffer
; // our data
6114 static const wxChar
* ms_richTextBufferFormatId
; // our format id
6120 @class wxRichTextRenderer
6122 This class isolates some common drawing functionality.
6124 @library{wxrichtext}
6127 @see wxRichTextBuffer, wxRichTextCtrl
6130 class WXDLLIMPEXP_RICHTEXT wxRichTextRenderer
: public wxObject
6136 wxRichTextRenderer() {}
6137 virtual ~wxRichTextRenderer() {}
6140 Draws a standard bullet, as specified by the value of GetBulletName. This function should be overridden.
6142 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
6145 Draws a bullet that can be described by text, such as numbered or symbol bullets. This function should be overridden.
6147 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
) = 0;
6150 Draws a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName. This function should be overridden.
6152 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
6155 Enumerate the standard bullet names currently supported. This function should be overridden.
6157 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
) = 0;
6161 @class wxRichTextStdRenderer
6163 The standard renderer for drawing bullets.
6165 @library{wxrichtext}
6168 @see wxRichTextRenderer, wxRichTextBuffer, wxRichTextCtrl
6171 class WXDLLIMPEXP_RICHTEXT wxRichTextStdRenderer
: public wxRichTextRenderer
6177 wxRichTextStdRenderer() {}
6179 // Draw a standard bullet, as specified by the value of GetBulletName
6180 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
6182 // Draw a bullet that can be described by text, such as numbered or symbol bullets
6183 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
);
6185 // Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
6186 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
6188 // Enumerate the standard bullet names currently supported
6189 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
);
6197 inline bool wxRichTextHasStyle(int flags
, int style
)
6199 return ((flags
& style
) == style
);
6202 /// Compare two attribute objects
6203 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6204 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6206 /// Compare two attribute objects, but take into account the flags
6207 /// specifying attributes of interest.
6208 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEqPartial(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
6210 /// Apply one style to another
6211 WXDLLIMPEXP_RICHTEXT
bool wxRichTextApplyStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
* compareWith
= NULL
);
6213 // Remove attributes
6214 WXDLLIMPEXP_RICHTEXT
bool wxRichTextRemoveStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
);
6216 /// Combine two bitlists
6217 WXDLLIMPEXP_RICHTEXT
bool wxRichTextCombineBitlists(int& valueA
, int valueB
, int& flagsA
, int flagsB
);
6219 /// Compare two bitlists
6220 WXDLLIMPEXP_RICHTEXT
bool wxRichTextBitlistsEqPartial(int valueA
, int valueB
, int flags
);
6222 /// Split into paragraph and character styles
6223 WXDLLIMPEXP_RICHTEXT
bool wxRichTextSplitParaCharStyles(const wxRichTextAttr
& style
, wxRichTextAttr
& parStyle
, wxRichTextAttr
& charStyle
);
6226 WXDLLIMPEXP_RICHTEXT
bool wxRichTextTabsEq(const wxArrayInt
& tabs1
, const wxArrayInt
& tabs2
);
6228 /// Convert a decimal to Roman numerals
6229 WXDLLIMPEXP_RICHTEXT wxString
wxRichTextDecimalToRoman(long n
);
6231 // Collects the attributes that are common to a range of content, building up a note of
6232 // which attributes are absent in some objects and which clash in some objects.
6233 WXDLLIMPEXP_RICHTEXT
void wxTextAttrCollectCommonAttributes(wxTextAttr
& currentStyle
, const wxTextAttr
& attr
, wxTextAttr
& clashingAttr
, wxTextAttr
& absentAttr
);
6235 WXDLLIMPEXP_RICHTEXT
void wxRichTextModuleInit();