1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/richtext/richtextbuffer.h
3 // Purpose: Buffer for wxRichTextCtrl
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 The line break character that can be embedded in content.
16 extern WXDLLIMPEXP_RICHTEXT
const wxChar wxRichTextLineBreakChar
;
19 File types in wxRichText context.
21 enum wxRichTextFileType
23 wxRICHTEXT_TYPE_ANY
= 0,
32 Flags determining the available space, passed to Layout.
35 #define wxRICHTEXT_FIXED_WIDTH 0x01
36 #define wxRICHTEXT_FIXED_HEIGHT 0x02
37 #define wxRICHTEXT_VARIABLE_WIDTH 0x04
38 #define wxRICHTEXT_VARIABLE_HEIGHT 0x08
40 // Only lay out the part of the buffer that lies within
41 // the rect passed to Layout.
42 #define wxRICHTEXT_LAYOUT_SPECIFIED_RECT 0x10
48 // Ignore paragraph cache optimization, e.g. for printing purposes
49 // where one line may be drawn higher (on the next page) compared
50 // with the previous line
51 #define wxRICHTEXT_DRAW_IGNORE_CACHE 0x01
52 #define wxRICHTEXT_DRAW_SELECTED 0x02
53 #define wxRICHTEXT_DRAW_PRINT 0x04
54 #define wxRICHTEXT_DRAW_GUIDELINES 0x08
57 Flags returned from hit-testing, or passed to hit-test function.
59 enum wxRichTextHitTestFlags
61 // The point was not on this object
62 wxRICHTEXT_HITTEST_NONE
= 0x01,
64 // The point was before the position returned from HitTest
65 wxRICHTEXT_HITTEST_BEFORE
= 0x02,
67 // The point was after the position returned from HitTest
68 wxRICHTEXT_HITTEST_AFTER
= 0x04,
70 // The point was on the position returned from HitTest
71 wxRICHTEXT_HITTEST_ON
= 0x08,
73 // The point was on space outside content
74 wxRICHTEXT_HITTEST_OUTSIDE
= 0x10,
76 // Only do hit-testing at the current level (don't traverse into top-level objects)
77 wxRICHTEXT_HITTEST_NO_NESTED_OBJECTS
= 0x20,
79 // Ignore floating objects
80 wxRICHTEXT_HITTEST_NO_FLOATING_OBJECTS
= 0x40
84 Flags for GetRangeSize.
87 #define wxRICHTEXT_FORMATTED 0x01
88 #define wxRICHTEXT_UNFORMATTED 0x02
89 #define wxRICHTEXT_CACHE_SIZE 0x04
90 #define wxRICHTEXT_HEIGHT_ONLY 0x08
93 Flags for SetStyle/SetListStyle.
96 #define wxRICHTEXT_SETSTYLE_NONE 0x00
98 // Specifies that this operation should be undoable
99 #define wxRICHTEXT_SETSTYLE_WITH_UNDO 0x01
101 // Specifies that the style should not be applied if the
102 // combined style at this point is already the style in question.
103 #define wxRICHTEXT_SETSTYLE_OPTIMIZE 0x02
105 // Specifies that the style should only be applied to paragraphs,
106 // and not the content. This allows content styling to be
107 // preserved independently from that of e.g. a named paragraph style.
108 #define wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY 0x04
110 // Specifies that the style should only be applied to characters,
111 // and not the paragraph. This allows content styling to be
112 // preserved independently from that of e.g. a named paragraph style.
113 #define wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY 0x08
115 // For SetListStyle only: specifies starting from the given number, otherwise
116 // deduces number from existing attributes
117 #define wxRICHTEXT_SETSTYLE_RENUMBER 0x10
119 // For SetListStyle only: specifies the list level for all paragraphs, otherwise
120 // the current indentation will be used
121 #define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20
123 // Resets the existing style before applying the new style
124 #define wxRICHTEXT_SETSTYLE_RESET 0x40
126 // Removes the given style instead of applying it
127 #define wxRICHTEXT_SETSTYLE_REMOVE 0x80
130 Flags for object insertion.
133 #define wxRICHTEXT_INSERT_NONE 0x00
134 #define wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE 0x01
135 #define wxRICHTEXT_INSERT_INTERACTIVE 0x02
137 // A special flag telling the buffer to keep the first paragraph style
138 // as-is, when deleting a paragraph marker. In future we might pass a
139 // flag to InsertFragment and DeleteRange to indicate the appropriate mode.
140 #define wxTEXT_ATTR_KEEP_FIRST_PARA_STYLE 0x10000000
143 Default superscript/subscript font multiplication factor.
146 #define wxSCRIPT_MUL_FACTOR 1.5
149 The type for wxTextAttrDimension flags.
151 typedef unsigned short wxTextAttrDimensionFlags
;
154 Miscellaneous text box flags
156 enum wxTextBoxAttrFlags
158 wxTEXT_BOX_ATTR_FLOAT
= 0x00000001,
159 wxTEXT_BOX_ATTR_CLEAR
= 0x00000002,
160 wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
= 0x00000004,
161 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
= 0x00000008
165 Whether a value is present, used in dimension flags.
167 enum wxTextAttrValueFlags
169 wxTEXT_ATTR_VALUE_VALID
= 0x1000,
170 wxTEXT_ATTR_VALUE_VALID_MASK
= 0x1000
174 Units, included in the dimension value.
178 wxTEXT_ATTR_UNITS_TENTHS_MM
= 0x0001,
179 wxTEXT_ATTR_UNITS_PIXELS
= 0x0002,
180 wxTEXT_ATTR_UNITS_PERCENTAGE
= 0x0004,
181 wxTEXT_ATTR_UNITS_POINTS
= 0x0008,
183 wxTEXT_ATTR_UNITS_MASK
= 0x000F
187 Position alternatives, included in the dimension flags.
189 enum wxTextBoxAttrPosition
191 wxTEXT_BOX_ATTR_POSITION_STATIC
= 0x0000, // Default is static, i.e. as per normal layout
192 wxTEXT_BOX_ATTR_POSITION_RELATIVE
= 0x0010, // Relative to the relevant edge
193 wxTEXT_BOX_ATTR_POSITION_ABSOLUTE
= 0x0020,
195 wxTEXT_BOX_ATTR_POSITION_MASK
= 0x00F0
199 @class wxTextAttrDimension
201 A class representing a rich text dimension, including units and position.
206 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimensions
209 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimension
215 wxTextAttrDimension() { Reset(); }
217 Constructor taking value and units flag.
219 wxTextAttrDimension(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { m_value
= value
; m_flags
= units
|wxTEXT_ATTR_VALUE_VALID
; }
222 Resets the dimension value and flags.
224 void Reset() { m_value
= 0; m_flags
= 0; }
227 Partial equality test.
229 bool EqPartial(const wxTextAttrDimension
& dim
) const;
231 /** Apply the dimension, but not those identical to @a compareWith if present.
233 bool Apply(const wxTextAttrDimension
& dim
, const wxTextAttrDimension
* compareWith
= NULL
);
235 /** Collects the attributes that are common to a range of content, building up a note of
236 which attributes are absent in some objects and which clash in some objects.
238 void CollectCommonAttributes(const wxTextAttrDimension
& attr
, wxTextAttrDimension
& clashingAttr
, wxTextAttrDimension
& absentAttr
);
243 bool operator==(const wxTextAttrDimension
& dim
) const { return m_value
== dim
.m_value
&& m_flags
== dim
.m_flags
; }
246 Returns the integer value of the dimension.
248 int GetValue() const { return m_value
; }
251 Returns the floating-pointing value of the dimension in mm.
254 float GetValueMM() const { return float(m_value
) / 10.0; }
257 Sets the value of the dimension in mm.
259 void SetValueMM(float value
) { m_value
= (int) ((value
* 10.0) + 0.5); m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
262 Sets the integer value of the dimension.
264 void SetValue(int value
) { m_value
= value
; m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
267 Sets the integer value of the dimension, passing dimension flags.
269 void SetValue(int value
, wxTextAttrDimensionFlags flags
) { SetValue(value
); m_flags
= flags
; }
272 Sets the integer value and units.
274 void SetValue(int value
, wxTextAttrUnits units
) { m_value
= value
; m_flags
= units
| wxTEXT_ATTR_VALUE_VALID
; }
279 void SetValue(const wxTextAttrDimension
& dim
) { (*this) = dim
; }
282 Gets the units of the dimension.
284 wxTextAttrUnits
GetUnits() const { return (wxTextAttrUnits
) (m_flags
& wxTEXT_ATTR_UNITS_MASK
); }
287 Sets the units of the dimension.
289 void SetUnits(wxTextAttrUnits units
) { m_flags
&= ~wxTEXT_ATTR_UNITS_MASK
; m_flags
|= units
; }
292 Gets the position flags.
294 wxTextBoxAttrPosition
GetPosition() const { return (wxTextBoxAttrPosition
) (m_flags
& wxTEXT_BOX_ATTR_POSITION_MASK
); }
297 Sets the position flags.
299 void SetPosition(wxTextBoxAttrPosition pos
) { m_flags
&= ~wxTEXT_BOX_ATTR_POSITION_MASK
; m_flags
|= pos
; }
302 Returns @true if the dimension is valid.
304 bool IsValid() const { return (m_flags
& wxTEXT_ATTR_VALUE_VALID
) != 0; }
309 void SetValid(bool b
) { m_flags
&= ~wxTEXT_ATTR_VALUE_VALID_MASK
; m_flags
|= (b
? wxTEXT_ATTR_VALUE_VALID
: 0); }
312 Gets the dimension flags.
314 wxTextAttrDimensionFlags
GetFlags() const { return m_flags
; }
317 Sets the dimension flags.
319 void SetFlags(wxTextAttrDimensionFlags flags
) { m_flags
= flags
; }
322 wxTextAttrDimensionFlags m_flags
;
326 @class wxTextAttrDimensions
327 A class for left, right, top and bottom dimensions.
332 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
335 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensions
341 wxTextAttrDimensions() {}
344 Resets the value and flags for all dimensions.
346 void Reset() { m_left
.Reset(); m_top
.Reset(); m_right
.Reset(); m_bottom
.Reset(); }
351 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
; }
354 Partial equality test.
357 bool EqPartial(const wxTextAttrDimensions
& dims
) const;
360 Apply border to 'this', but not if the same as @a compareWith.
363 bool Apply(const wxTextAttrDimensions
& dims
, const wxTextAttrDimensions
* compareWith
= NULL
);
366 Collects the attributes that are common to a range of content, building up a note of
367 which attributes are absent in some objects and which clash in some objects.
370 void CollectCommonAttributes(const wxTextAttrDimensions
& attr
, wxTextAttrDimensions
& clashingAttr
, wxTextAttrDimensions
& absentAttr
);
373 Remove specified attributes from this object.
375 bool RemoveStyle(const wxTextAttrDimensions
& attr
);
378 Gets the left dimension.
380 const wxTextAttrDimension
& GetLeft() const { return m_left
; }
381 wxTextAttrDimension
& GetLeft() { return m_left
; }
384 Gets the right dimension.
387 const wxTextAttrDimension
& GetRight() const { return m_right
; }
388 wxTextAttrDimension
& GetRight() { return m_right
; }
391 Gets the top dimension.
394 const wxTextAttrDimension
& GetTop() const { return m_top
; }
395 wxTextAttrDimension
& GetTop() { return m_top
; }
398 Gets the bottom dimension.
401 const wxTextAttrDimension
& GetBottom() const { return m_bottom
; }
402 wxTextAttrDimension
& GetBottom() { return m_bottom
; }
405 Are all dimensions valid?
408 bool IsValid() const { return m_left
.IsValid() && m_top
.IsValid() && m_right
.IsValid() && m_bottom
.IsValid(); }
410 wxTextAttrDimension m_left
;
411 wxTextAttrDimension m_top
;
412 wxTextAttrDimension m_right
;
413 wxTextAttrDimension m_bottom
;
417 @class wxTextAttrSize
418 A class for representing width and height.
423 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
426 class WXDLLIMPEXP_RICHTEXT wxTextAttrSize
435 Resets the width and height dimensions.
437 void Reset() { m_width
.Reset(); m_height
.Reset(); }
442 bool operator==(const wxTextAttrSize
& size
) const { return m_width
== size
.m_width
&& m_height
== size
.m_height
; }
445 Partial equality test.
447 bool EqPartial(const wxTextAttrSize
& dims
) const;
450 Apply border to this object, but not if the same as @a compareWith.
452 bool Apply(const wxTextAttrSize
& dims
, const wxTextAttrSize
* compareWith
= NULL
);
455 Collects the attributes that are common to a range of content, building up a note of
456 which attributes are absent in some objects and which clash in some objects.
458 void CollectCommonAttributes(const wxTextAttrSize
& attr
, wxTextAttrSize
& clashingAttr
, wxTextAttrSize
& absentAttr
);
461 Removes the specified attributes from this object.
463 bool RemoveStyle(const wxTextAttrSize
& attr
);
468 wxTextAttrDimension
& GetWidth() { return m_width
; }
469 const wxTextAttrDimension
& GetWidth() const { return m_width
; }
474 void SetWidth(int value
, wxTextAttrDimensionFlags flags
) { m_width
.SetValue(value
, flags
); }
478 void SetWidth(int value
, wxTextAttrUnits units
) { m_width
.SetValue(value
, units
); }
482 void SetWidth(const wxTextAttrDimension
& dim
) { m_width
.SetValue(dim
); }
487 wxTextAttrDimension
& GetHeight() { return m_height
; }
488 const wxTextAttrDimension
& GetHeight() const { return m_height
; }
493 void SetHeight(int value
, wxTextAttrDimensionFlags flags
) { m_height
.SetValue(value
, flags
); }
497 void SetHeight(int value
, wxTextAttrUnits units
) { m_height
.SetValue(value
, units
); }
501 void SetHeight(const wxTextAttrDimension
& dim
) { m_height
.SetValue(dim
); }
503 wxTextAttrDimension m_width
;
504 wxTextAttrDimension m_height
;
508 @class wxTextAttrDimensionConverter
509 A class to make it easier to convert dimensions.
514 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
517 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensionConverter
523 wxTextAttrDimensionConverter(wxDC
& dc
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
527 wxTextAttrDimensionConverter(int ppi
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
530 Gets the pixel size for the given dimension.
532 int GetPixels(const wxTextAttrDimension
& dim
, int direction
= wxHORIZONTAL
) const;
534 Gets the mm size for the given dimension.
536 int GetTenthsMM(const wxTextAttrDimension
& dim
) const;
539 Converts tenths of a mm to pixels.
541 int ConvertTenthsMMToPixels(int units
) const;
543 Converts pixels to tenths of a mm.
545 int ConvertPixelsToTenthsMM(int pixels
) const;
553 Border styles, used with wxTextAttrBorder.
555 enum wxTextAttrBorderStyle
557 wxTEXT_BOX_ATTR_BORDER_NONE
= 0,
558 wxTEXT_BOX_ATTR_BORDER_SOLID
= 1,
559 wxTEXT_BOX_ATTR_BORDER_DOTTED
= 2,
560 wxTEXT_BOX_ATTR_BORDER_DASHED
= 3,
561 wxTEXT_BOX_ATTR_BORDER_DOUBLE
= 4,
562 wxTEXT_BOX_ATTR_BORDER_GROOVE
= 5,
563 wxTEXT_BOX_ATTR_BORDER_RIDGE
= 6,
564 wxTEXT_BOX_ATTR_BORDER_INSET
= 7,
565 wxTEXT_BOX_ATTR_BORDER_OUTSET
= 8
569 Border style presence flags, used with wxTextAttrBorder.
571 enum wxTextAttrBorderFlags
573 wxTEXT_BOX_ATTR_BORDER_STYLE
= 0x0001,
574 wxTEXT_BOX_ATTR_BORDER_COLOUR
= 0x0002
578 Border width symbols for qualitative widths, used with wxTextAttrBorder.
580 enum wxTextAttrBorderWidth
582 wxTEXT_BOX_ATTR_BORDER_THIN
= -1,
583 wxTEXT_BOX_ATTR_BORDER_MEDIUM
= -2,
584 wxTEXT_BOX_ATTR_BORDER_THICK
= -3
590 enum wxTextBoxAttrFloatStyle
592 wxTEXT_BOX_ATTR_FLOAT_NONE
= 0,
593 wxTEXT_BOX_ATTR_FLOAT_LEFT
= 1,
594 wxTEXT_BOX_ATTR_FLOAT_RIGHT
= 2
600 enum wxTextBoxAttrClearStyle
602 wxTEXT_BOX_ATTR_CLEAR_NONE
= 0,
603 wxTEXT_BOX_ATTR_CLEAR_LEFT
= 1,
604 wxTEXT_BOX_ATTR_CLEAR_RIGHT
= 2,
605 wxTEXT_BOX_ATTR_CLEAR_BOTH
= 3
609 Collapse mode styles. TODO: can they be switched on per side?
611 enum wxTextBoxAttrCollapseMode
613 wxTEXT_BOX_ATTR_COLLAPSE_NONE
= 0,
614 wxTEXT_BOX_ATTR_COLLAPSE_FULL
= 1
618 Vertical alignment values.
620 enum wxTextBoxAttrVerticalAlignment
622 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_NONE
= 0,
623 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_TOP
= 1,
624 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_CENTRE
= 2,
625 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_BOTTOM
= 3
629 @class wxTextAttrBorder
630 A class representing a rich text object border.
635 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorders
638 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorder
644 wxTextAttrBorder() { Reset(); }
649 bool operator==(const wxTextAttrBorder
& border
) const
651 return m_flags
== border
.m_flags
&& m_borderStyle
== border
.m_borderStyle
&&
652 m_borderColour
== border
.m_borderColour
&& m_borderWidth
== border
.m_borderWidth
;
656 Resets the border style, colour, width and flags.
658 void Reset() { m_borderStyle
= 0; m_borderColour
= 0; m_flags
= 0; m_borderWidth
.Reset(); }
661 Partial equality test.
663 bool EqPartial(const wxTextAttrBorder
& border
) const;
666 Applies the border to this object, but not if the same as @a compareWith.
669 bool Apply(const wxTextAttrBorder
& border
, const wxTextAttrBorder
* compareWith
= NULL
);
672 Removes the specified attributes from this object.
674 bool RemoveStyle(const wxTextAttrBorder
& attr
);
677 Collects the attributes that are common to a range of content, building up a note of
678 which attributes are absent in some objects and which clash in some objects.
680 void CollectCommonAttributes(const wxTextAttrBorder
& attr
, wxTextAttrBorder
& clashingAttr
, wxTextAttrBorder
& absentAttr
);
683 Sets the border style.
685 void SetStyle(int style
) { m_borderStyle
= style
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_STYLE
; }
688 Gets the border style.
691 int GetStyle() const { return m_borderStyle
; }
694 Sets the border colour.
696 void SetColour(unsigned long colour
) { m_borderColour
= colour
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
699 Sets the border colour.
701 void SetColour(const wxColour
& colour
) { m_borderColour
= colour
.GetRGB(); m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
704 Gets the colour as a long.
706 unsigned long GetColourLong() const { return m_borderColour
; }
711 wxColour
GetColour() const { return wxColour(m_borderColour
); }
714 Gets the border width.
716 wxTextAttrDimension
& GetWidth() { return m_borderWidth
; }
717 const wxTextAttrDimension
& GetWidth() const { return m_borderWidth
; }
720 Sets the border width.
722 void SetWidth(const wxTextAttrDimension
& width
) { m_borderWidth
= width
; }
724 Sets the border width.
726 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
729 True if the border has a valid style.
731 bool HasStyle() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_STYLE
) != 0; }
734 True if the border has a valid colour.
736 bool HasColour() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_COLOUR
) != 0; }
739 True if the border has a valid width.
741 bool HasWidth() const { return m_borderWidth
.IsValid(); }
744 True if the border is valid.
746 bool IsValid() const { return HasWidth(); }
749 Set the valid flag for this border.
751 void MakeValid() { m_borderWidth
.SetValid(true); }
754 Returns the border flags.
756 int GetFlags() const { return m_flags
; }
759 Sets the border flags.
761 void SetFlags(int flags
) { m_flags
= flags
; }
766 void AddFlag(int flag
) { m_flags
|= flag
; }
769 Removes a border flag.
771 void RemoveFlag(int flag
) { m_flags
&= ~flag
; }
774 unsigned long m_borderColour
;
775 wxTextAttrDimension m_borderWidth
;
780 @class wxTextAttrBorders
781 A class representing a rich text object's borders.
786 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorder
789 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorders
795 wxTextAttrBorders() { }
800 bool operator==(const wxTextAttrBorders
& borders
) const
802 return m_left
== borders
.m_left
&& m_right
== borders
.m_right
&&
803 m_top
== borders
.m_top
&& m_bottom
== borders
.m_bottom
;
807 Sets the style of all borders.
809 void SetStyle(int style
);
812 Sets colour of all borders.
814 void SetColour(unsigned long colour
);
817 Sets the colour for all borders.
819 void SetColour(const wxColour
& colour
);
822 Sets the width of all borders.
824 void SetWidth(const wxTextAttrDimension
& width
);
827 Sets the width of all borders.
829 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
834 void Reset() { m_left
.Reset(); m_right
.Reset(); m_top
.Reset(); m_bottom
.Reset(); }
837 Partial equality test.
839 bool EqPartial(const wxTextAttrBorders
& borders
) const;
842 Applies border to this object, but not if the same as @a compareWith.
844 bool Apply(const wxTextAttrBorders
& borders
, const wxTextAttrBorders
* compareWith
= NULL
);
847 Removes the specified attributes from this object.
849 bool RemoveStyle(const wxTextAttrBorders
& attr
);
852 Collects the attributes that are common to a range of content, building up a note of
853 which attributes are absent in some objects and which clash in some objects.
855 void CollectCommonAttributes(const wxTextAttrBorders
& attr
, wxTextAttrBorders
& clashingAttr
, wxTextAttrBorders
& absentAttr
);
858 Returns @true if all borders are valid.
860 bool IsValid() const { return m_left
.IsValid() || m_right
.IsValid() || m_top
.IsValid() || m_bottom
.IsValid(); }
863 Returns the left border.
865 const wxTextAttrBorder
& GetLeft() const { return m_left
; }
866 wxTextAttrBorder
& GetLeft() { return m_left
; }
869 Returns the right border.
871 const wxTextAttrBorder
& GetRight() const { return m_right
; }
872 wxTextAttrBorder
& GetRight() { return m_right
; }
875 Returns the top border.
877 const wxTextAttrBorder
& GetTop() const { return m_top
; }
878 wxTextAttrBorder
& GetTop() { return m_top
; }
881 Returns the bottom border.
883 const wxTextAttrBorder
& GetBottom() const { return m_bottom
; }
884 wxTextAttrBorder
& GetBottom() { return m_bottom
; }
886 wxTextAttrBorder m_left
, m_right
, m_top
, m_bottom
;
892 A class representing the box attributes of a rich text object.
897 @see wxRichTextAttr, wxRichTextCtrl
900 class WXDLLIMPEXP_RICHTEXT wxTextBoxAttr
906 wxTextBoxAttr() { Init(); }
911 wxTextBoxAttr(const wxTextBoxAttr
& attr
) { Init(); (*this) = attr
; }
914 Initialises this object.
916 void Init() { Reset(); }
923 // Copy. Unnecessary since we let it do a binary copy
924 //void Copy(const wxTextBoxAttr& attr);
927 //void operator= (const wxTextBoxAttr& attr);
932 bool operator== (const wxTextBoxAttr
& attr
) const;
935 Partial equality test, ignoring unset attributes.
938 bool EqPartial(const wxTextBoxAttr
& attr
) const;
941 Merges the given attributes. If @a compareWith is non-NULL, then it will be used
942 to mask out those attributes that are the same in style and @a compareWith, for
943 situations where we don't want to explicitly set inherited attributes.
945 bool Apply(const wxTextBoxAttr
& style
, const wxTextBoxAttr
* compareWith
= NULL
);
948 Collects the attributes that are common to a range of content, building up a note of
949 which attributes are absent in some objects and which clash in some objects.
951 void CollectCommonAttributes(const wxTextBoxAttr
& attr
, wxTextBoxAttr
& clashingAttr
, wxTextBoxAttr
& absentAttr
);
954 Removes the specified attributes from this object.
956 bool RemoveStyle(const wxTextBoxAttr
& attr
);
961 void SetFlags(int flags
) { m_flags
= flags
; }
966 int GetFlags() const { return m_flags
; }
969 Is this flag present?
971 bool HasFlag(wxTextBoxAttrFlags flag
) const { return (m_flags
& flag
) != 0; }
976 void RemoveFlag(wxTextBoxAttrFlags flag
) { m_flags
&= ~flag
; }
981 void AddFlag(wxTextBoxAttrFlags flag
) { m_flags
|= flag
; }
984 Returns @true if no attributes are set.
986 bool IsDefault() const;
989 Returns the float mode.
991 wxTextBoxAttrFloatStyle
GetFloatMode() const { return m_floatMode
; }
996 void SetFloatMode(wxTextBoxAttrFloatStyle mode
) { m_floatMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_FLOAT
; }
999 Returns @true if float mode is active.
1001 bool HasFloatMode() const { return HasFlag(wxTEXT_BOX_ATTR_FLOAT
); }
1004 Returns @true if this object is floating.
1006 bool IsFloating() const { return HasFloatMode() && GetFloatMode() != wxTEXT_BOX_ATTR_FLOAT_NONE
; }
1009 Returns the clear mode - whether to wrap text after object. Currently unimplemented.
1011 wxTextBoxAttrClearStyle
GetClearMode() const { return m_clearMode
; }
1014 Set the clear mode. Currently unimplemented.
1016 void SetClearMode(wxTextBoxAttrClearStyle mode
) { m_clearMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_CLEAR
; }
1019 Returns @true if we have a clear flag.
1021 bool HasClearMode() const { return HasFlag(wxTEXT_BOX_ATTR_CLEAR
); }
1024 Returns the collapse mode - whether to collapse borders. Currently unimplemented.
1026 wxTextBoxAttrCollapseMode
GetCollapseBorders() const { return m_collapseMode
; }
1029 Sets the collapse mode - whether to collapse borders. Currently unimplemented.
1031 void SetCollapseBorders(wxTextBoxAttrCollapseMode collapse
) { m_collapseMode
= collapse
; m_flags
|= wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
; }
1034 Returns @true if the collapse borders flag is present.
1036 bool HasCollapseBorders() const { return HasFlag(wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
); }
1039 Returns the vertical alignment.
1041 wxTextBoxAttrVerticalAlignment
GetVerticalAlignment() const { return m_verticalAlignment
; }
1044 Sets the vertical alignment.
1046 void SetVerticalAlignment(wxTextBoxAttrVerticalAlignment verticalAlignment
) { m_verticalAlignment
= verticalAlignment
; m_flags
|= wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
; }
1049 Returns @true if a vertical alignment flag is present.
1051 bool HasVerticalAlignment() const { return HasFlag(wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
); }
1054 Returns the margin values.
1056 wxTextAttrDimensions
& GetMargins() { return m_margins
; }
1057 const wxTextAttrDimensions
& GetMargins() const { return m_margins
; }
1060 Returns the left margin.
1062 wxTextAttrDimension
& GetLeftMargin() { return m_margins
.m_left
; }
1063 const wxTextAttrDimension
& GetLeftMargin() const { return m_margins
.m_left
; }
1066 Returns the right margin.
1068 wxTextAttrDimension
& GetRightMargin() { return m_margins
.m_right
; }
1069 const wxTextAttrDimension
& GetRightMargin() const { return m_margins
.m_right
; }
1072 Returns the top margin.
1074 wxTextAttrDimension
& GetTopMargin() { return m_margins
.m_top
; }
1075 const wxTextAttrDimension
& GetTopMargin() const { return m_margins
.m_top
; }
1078 Returns the bottom margin.
1080 wxTextAttrDimension
& GetBottomMargin() { return m_margins
.m_bottom
; }
1081 const wxTextAttrDimension
& GetBottomMargin() const { return m_margins
.m_bottom
; }
1084 Returns the position.
1086 wxTextAttrDimensions
& GetPosition() { return m_position
; }
1087 const wxTextAttrDimensions
& GetPosition() const { return m_position
; }
1090 Returns the left position.
1092 wxTextAttrDimension
& GetLeft() { return m_position
.m_left
; }
1093 const wxTextAttrDimension
& GetLeft() const { return m_position
.m_left
; }
1096 Returns the right position.
1098 wxTextAttrDimension
& GetRight() { return m_position
.m_right
; }
1099 const wxTextAttrDimension
& GetRight() const { return m_position
.m_right
; }
1102 Returns the top position.
1104 wxTextAttrDimension
& GetTop() { return m_position
.m_top
; }
1105 const wxTextAttrDimension
& GetTop() const { return m_position
.m_top
; }
1108 Returns the bottom position.
1110 wxTextAttrDimension
& GetBottom() { return m_position
.m_bottom
; }
1111 const wxTextAttrDimension
& GetBottom() const { return m_position
.m_bottom
; }
1114 Returns the padding values.
1116 wxTextAttrDimensions
& GetPadding() { return m_padding
; }
1117 const wxTextAttrDimensions
& GetPadding() const { return m_padding
; }
1120 Returns the left padding value.
1122 wxTextAttrDimension
& GetLeftPadding() { return m_padding
.m_left
; }
1123 const wxTextAttrDimension
& GetLeftPadding() const { return m_padding
.m_left
; }
1126 Returns the right padding value.
1128 wxTextAttrDimension
& GetRightPadding() { return m_padding
.m_right
; }
1129 const wxTextAttrDimension
& GetRightPadding() const { return m_padding
.m_right
; }
1132 Returns the top padding value.
1134 wxTextAttrDimension
& GetTopPadding() { return m_padding
.m_top
; }
1135 const wxTextAttrDimension
& GetTopPadding() const { return m_padding
.m_top
; }
1138 Returns the bottom padding value.
1140 wxTextAttrDimension
& GetBottomPadding() { return m_padding
.m_bottom
; }
1141 const wxTextAttrDimension
& GetBottomPadding() const { return m_padding
.m_bottom
; }
1144 Returns the borders.
1146 wxTextAttrBorders
& GetBorder() { return m_border
; }
1147 const wxTextAttrBorders
& GetBorder() const { return m_border
; }
1150 Returns the left border.
1152 wxTextAttrBorder
& GetLeftBorder() { return m_border
.m_left
; }
1153 const wxTextAttrBorder
& GetLeftBorder() const { return m_border
.m_left
; }
1156 Returns the top border.
1158 wxTextAttrBorder
& GetTopBorder() { return m_border
.m_top
; }
1159 const wxTextAttrBorder
& GetTopBorder() const { return m_border
.m_top
; }
1162 Returns the right border.
1164 wxTextAttrBorder
& GetRightBorder() { return m_border
.m_right
; }
1165 const wxTextAttrBorder
& GetRightBorder() const { return m_border
.m_right
; }
1168 Returns the bottom border.
1170 wxTextAttrBorder
& GetBottomBorder() { return m_border
.m_bottom
; }
1171 const wxTextAttrBorder
& GetBottomBorder() const { return m_border
.m_bottom
; }
1174 Returns the outline.
1176 wxTextAttrBorders
& GetOutline() { return m_outline
; }
1177 const wxTextAttrBorders
& GetOutline() const { return m_outline
; }
1180 Returns the left outline.
1182 wxTextAttrBorder
& GetLeftOutline() { return m_outline
.m_left
; }
1183 const wxTextAttrBorder
& GetLeftOutline() const { return m_outline
.m_left
; }
1186 Returns the top outline.
1188 wxTextAttrBorder
& GetTopOutline() { return m_outline
.m_top
; }
1189 const wxTextAttrBorder
& GetTopOutline() const { return m_outline
.m_top
; }
1192 Returns the right outline.
1194 wxTextAttrBorder
& GetRightOutline() { return m_outline
.m_right
; }
1195 const wxTextAttrBorder
& GetRightOutline() const { return m_outline
.m_right
; }
1198 Returns the bottom outline.
1200 wxTextAttrBorder
& GetBottomOutline() { return m_outline
.m_bottom
; }
1201 const wxTextAttrBorder
& GetBottomOutline() const { return m_outline
.m_bottom
; }
1204 Returns the object size.
1206 wxTextAttrSize
& GetSize() { return m_size
; }
1207 const wxTextAttrSize
& GetSize() const { return m_size
; }
1210 Sets the object size.
1212 void SetSize(const wxTextAttrSize
& sz
) { m_size
= sz
; }
1215 Returns the object width.
1217 wxTextAttrDimension
& GetWidth() { return m_size
.m_width
; }
1218 const wxTextAttrDimension
& GetWidth() const { return m_size
.m_width
; }
1221 Returns the object height.
1223 wxTextAttrDimension
& GetHeight() { return m_size
.m_height
; }
1224 const wxTextAttrDimension
& GetHeight() const { return m_size
.m_height
; }
1227 Returns the box style name.
1229 const wxString
& GetBoxStyleName() const { return m_boxStyleName
; }
1232 Sets the box style name.
1234 void SetBoxStyleName(const wxString
& name
) { m_boxStyleName
= name
; AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1237 Returns @true if the box style name is present.
1239 bool HasBoxStyleName() const { return HasFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1245 wxTextAttrDimensions m_margins
;
1246 wxTextAttrDimensions m_padding
;
1247 wxTextAttrDimensions m_position
;
1249 wxTextAttrSize m_size
;
1251 wxTextAttrBorders m_border
;
1252 wxTextAttrBorders m_outline
;
1254 wxTextBoxAttrFloatStyle m_floatMode
;
1255 wxTextBoxAttrClearStyle m_clearMode
;
1256 wxTextBoxAttrCollapseMode m_collapseMode
;
1257 wxTextBoxAttrVerticalAlignment m_verticalAlignment
;
1258 wxString m_boxStyleName
;
1262 @class wxRichTextAttr
1263 A class representing enhanced attributes for rich text objects.
1264 This adds a wxTextBoxAttr member to the basic wxTextAttr class.
1266 @library{wxrichtext}
1269 @see wxRichTextAttr, wxTextBoxAttr, wxRichTextCtrl
1272 class WXDLLIMPEXP_RICHTEXT wxRichTextAttr
: public wxTextAttr
1276 Constructor taking a wxTextAttr.
1278 wxRichTextAttr(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1283 wxRichTextAttr(const wxRichTextAttr
& attr
): wxTextAttr() { Copy(attr
); }
1286 Default constructor.
1293 void Copy(const wxRichTextAttr
& attr
);
1296 Assignment operator.
1298 void operator=(const wxRichTextAttr
& attr
) { Copy(attr
); }
1301 Assignment operator.
1303 void operator=(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1308 bool operator==(const wxRichTextAttr
& attr
) const;
1311 Partial equality test taking comparison object into account.
1313 bool EqPartial(const wxRichTextAttr
& attr
) const;
1316 Merges the given attributes. If @a compareWith
1317 is non-NULL, then it will be used to mask out those attributes that are the same in style
1318 and @a compareWith, for situations where we don't want to explicitly set inherited attributes.
1320 bool Apply(const wxRichTextAttr
& style
, const wxRichTextAttr
* compareWith
= NULL
);
1323 Collects the attributes that are common to a range of content, building up a note of
1324 which attributes are absent in some objects and which clash in some objects.
1326 void CollectCommonAttributes(const wxRichTextAttr
& attr
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
1329 Removes the specified attributes from this object.
1331 bool RemoveStyle(const wxRichTextAttr
& attr
);
1334 Returns the text box attributes.
1336 wxTextBoxAttr
& GetTextBoxAttr() { return m_textBoxAttr
; }
1337 const wxTextBoxAttr
& GetTextBoxAttr() const { return m_textBoxAttr
; }
1340 Set the text box attributes.
1342 void SetTextBoxAttr(const wxTextBoxAttr
& attr
) { m_textBoxAttr
= attr
; }
1344 wxTextBoxAttr m_textBoxAttr
;
1347 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxVariant
, wxRichTextVariantArray
, WXDLLIMPEXP_RICHTEXT
);
1350 @class wxRichTextProperties
1351 A simple property class using wxVariants. This is used to give each rich text object the
1352 ability to store custom properties that can be used by the application.
1354 @library{wxrichtext}
1357 @see wxRichTextBuffer, wxRichTextObject, wxRichTextCtrl
1360 class WXDLLIMPEXP_RICHTEXT wxRichTextProperties
: public wxObject
1362 DECLARE_DYNAMIC_CLASS(wxRichTextProperties
)
1366 Default constructor.
1368 wxRichTextProperties() {}
1373 wxRichTextProperties(const wxRichTextProperties
& props
): wxObject() { Copy(props
); }
1376 Assignment operator.
1378 void operator=(const wxRichTextProperties
& props
) { Copy(props
); }
1383 bool operator==(const wxRichTextProperties
& props
) const;
1386 Copies from @a props.
1388 void Copy(const wxRichTextProperties
& props
) { m_properties
= props
.m_properties
; }
1391 Returns the variant at the given index.
1393 const wxVariant
& operator[](size_t idx
) const { return m_properties
[idx
]; }
1396 Returns the variant at the given index.
1398 wxVariant
& operator[](size_t idx
) { return m_properties
[idx
]; }
1401 Clears the properties.
1403 void Clear() { m_properties
.Clear(); }
1406 Returns the array of variants implementing the properties.
1408 const wxRichTextVariantArray
& GetProperties() const { return m_properties
; }
1411 Returns the array of variants implementing the properties.
1413 wxRichTextVariantArray
& GetProperties() { return m_properties
; }
1416 Sets the array of variants.
1418 void SetProperties(const wxRichTextVariantArray
& props
) { m_properties
= props
; }
1421 Returns all the property names.
1423 wxArrayString
GetPropertyNames() const;
1426 Returns a count of the properties.
1428 size_t GetCount() const { return m_properties
.GetCount(); }
1431 Returns @true if the given property is found.
1433 bool HasProperty(const wxString
& name
) const { return Find(name
) != -1; }
1436 Finds the given property.
1438 int Find(const wxString
& name
) const;
1441 Gets the property variant by name.
1443 const wxVariant
& GetProperty(const wxString
& name
) const;
1446 Finds or creates a property with the given name, returning a pointer to the variant.
1448 wxVariant
* FindOrCreateProperty(const wxString
& name
);
1451 Gets the value of the named property as a string.
1453 wxString
GetPropertyString(const wxString
& name
) const;
1456 Gets the value of the named property as a long integer.
1458 long GetPropertyLong(const wxString
& name
) const;
1461 Gets the value of the named property as a boolean.
1463 bool GetPropertyBool(const wxString
& name
) const;
1466 Gets the value of the named property as a double.
1468 double GetPropertyDouble(const wxString
& name
) const;
1471 Sets the property by passing a variant which contains a name and value.
1473 void SetProperty(const wxVariant
& variant
);
1476 Sets a property by name and variant.
1478 void SetProperty(const wxString
& name
, const wxVariant
& variant
);
1481 Sets a property by name and string value.
1483 void SetProperty(const wxString
& name
, const wxString
& value
);
1486 Sets property by name and long integer value.
1488 void SetProperty(const wxString
& name
, long value
);
1491 Sets property by name and double value.
1493 void SetProperty(const wxString
& name
, double value
);
1496 Sets property by name and boolean value.
1498 void SetProperty(const wxString
& name
, bool value
);
1501 wxRichTextVariantArray m_properties
;
1506 @class wxRichTextFontTable
1507 Manages quick access to a pool of fonts for rendering rich text.
1509 @library{wxrichtext}
1512 @see wxRichTextBuffer, wxRichTextCtrl
1515 class WXDLLIMPEXP_RICHTEXT wxRichTextFontTable
: public wxObject
1519 Default constructor.
1521 wxRichTextFontTable();
1526 wxRichTextFontTable(const wxRichTextFontTable
& table
);
1527 virtual ~wxRichTextFontTable();
1530 Returns @true if the font table is valid.
1532 bool IsOk() const { return m_refData
!= NULL
; }
1535 Finds a font for the given attribute object.
1537 wxFont
FindFont(const wxRichTextAttr
& fontSpec
);
1540 Clears the font table.
1545 Assignment operator.
1547 void operator= (const wxRichTextFontTable
& table
);
1552 bool operator == (const wxRichTextFontTable
& table
) const;
1555 Inequality operator.
1557 bool operator != (const wxRichTextFontTable
& table
) const { return !(*this == table
); }
1561 DECLARE_DYNAMIC_CLASS(wxRichTextFontTable
)
1565 @class wxRichTextRange
1567 This stores beginning and end positions for a range of data.
1569 @library{wxrichtext}
1572 @see wxRichTextBuffer, wxRichTextCtrl
1575 class WXDLLIMPEXP_RICHTEXT wxRichTextRange
1581 Default constructor.
1583 wxRichTextRange() { m_start
= 0; m_end
= 0; }
1586 Constructor taking start and end positions.
1588 wxRichTextRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1593 wxRichTextRange(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1594 ~wxRichTextRange() {}
1597 Assigns @a range to this range.
1599 void operator =(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1602 Equality operator. Returns @true if @a range is the same as this range.
1604 bool operator ==(const wxRichTextRange
& range
) const { return (m_start
== range
.m_start
&& m_end
== range
.m_end
); }
1607 Inequality operator.
1609 bool operator !=(const wxRichTextRange
& range
) const { return (m_start
!= range
.m_start
|| m_end
!= range
.m_end
); }
1612 Subtracts a range from this range.
1614 wxRichTextRange
operator -(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
- range
.m_start
, m_end
- range
.m_end
); }
1617 Adds a range to this range.
1619 wxRichTextRange
operator +(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
+ range
.m_start
, m_end
+ range
.m_end
); }
1622 Sets the range start and end positions.
1624 void SetRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1627 Sets the start position.
1629 void SetStart(long start
) { m_start
= start
; }
1632 Returns the start position.
1634 long GetStart() const { return m_start
; }
1637 Sets the end position.
1639 void SetEnd(long end
) { m_end
= end
; }
1642 Gets the end position.
1644 long GetEnd() const { return m_end
; }
1647 Returns true if this range is completely outside @a range.
1649 bool IsOutside(const wxRichTextRange
& range
) const { return range
.m_start
> m_end
|| range
.m_end
< m_start
; }
1652 Returns true if this range is completely within @a range.
1654 bool IsWithin(const wxRichTextRange
& range
) const { return m_start
>= range
.m_start
&& m_end
<= range
.m_end
; }
1657 Returns true if @a pos was within the range. Does not match if the range is empty.
1659 bool Contains(long pos
) const { return pos
>= m_start
&& pos
<= m_end
; }
1662 Limit this range to be within @a range.
1664 bool LimitTo(const wxRichTextRange
& range
) ;
1667 Gets the length of the range.
1669 long GetLength() const { return m_end
- m_start
+ 1; }
1672 Swaps the start and end.
1674 void Swap() { long tmp
= m_start
; m_start
= m_end
; m_end
= tmp
; }
1677 Converts the API-standard range, whose end is one past the last character in
1678 the range, to the internal form, which uses the first and last character
1679 positions of the range. In other words, one is subtracted from the end position.
1680 (n, n) is the range of a single character.
1682 wxRichTextRange
ToInternal() const { return wxRichTextRange(m_start
, m_end
-1); }
1685 Converts the internal range, which uses the first and last character positions
1686 of the range, to the API-standard range, whose end is one past the last
1687 character in the range. In other words, one is added to the end position.
1688 (n, n+1) is the range of a single character.
1690 wxRichTextRange
FromInternal() const { return wxRichTextRange(m_start
, m_end
+1); }
1697 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextRange
, wxRichTextRangeArray
, WXDLLIMPEXP_RICHTEXT
);
1699 #define wxRICHTEXT_ALL wxRichTextRange(-2, -2)
1700 #define wxRICHTEXT_NONE wxRichTextRange(-1, -1)
1702 #define wxRICHTEXT_NO_SELECTION wxRichTextRange(-2, -2)
1705 @class wxRichTextSelection
1707 Stores selection information. The selection does not have to be contiguous, though currently non-contiguous
1708 selections are only supported for a range of table cells (a geometric block of cells can consist
1709 of a set of non-contiguous positions).
1711 The selection consists of an array of ranges, and the container that is the context for the selection. It
1712 follows that a single selection object can only represent ranges with the same parent container.
1714 @library{wxrichtext}
1717 @see wxRichTextBuffer, wxRichTextCtrl
1720 class WXDLLIMPEXP_RICHTEXT wxRichTextSelection
1726 wxRichTextSelection(const wxRichTextSelection
& sel
) { Copy(sel
); }
1729 Creates a selection from a range and a container.
1731 wxRichTextSelection(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
) { m_ranges
.Add(range
); m_container
= container
; }
1734 Default constructor.
1736 wxRichTextSelection() { Reset(); }
1739 Resets the selection.
1741 void Reset() { m_ranges
.Clear(); m_container
= NULL
; }
1747 void Set(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
)
1748 { m_ranges
.Clear(); m_ranges
.Add(range
); m_container
= container
; }
1751 Adds a range to the selection.
1753 void Add(const wxRichTextRange
& range
)
1754 { m_ranges
.Add(range
); }
1757 Sets the selections from an array of ranges and a container object.
1759 void Set(const wxRichTextRangeArray
& ranges
, wxRichTextParagraphLayoutBox
* container
)
1760 { m_ranges
= ranges
; m_container
= container
; }
1765 void Copy(const wxRichTextSelection
& sel
)
1766 { m_ranges
= sel
.m_ranges
; m_container
= sel
.m_container
; }
1769 Assignment operator.
1771 void operator=(const wxRichTextSelection
& sel
) { Copy(sel
); }
1776 bool operator==(const wxRichTextSelection
& sel
) const;
1781 wxRichTextRange
operator[](size_t i
) const { return GetRange(i
); }
1784 Returns the selection ranges.
1786 wxRichTextRangeArray
& GetRanges() { return m_ranges
; }
1789 Returns the selection ranges.
1791 const wxRichTextRangeArray
& GetRanges() const { return m_ranges
; }
1794 Sets the selection ranges.
1796 void SetRanges(const wxRichTextRangeArray
& ranges
) { m_ranges
= ranges
; }
1799 Returns the number of ranges in the selection.
1801 size_t GetCount() const { return m_ranges
.GetCount(); }
1804 Returns the range at the given index.
1807 wxRichTextRange
GetRange(size_t i
) const { return m_ranges
[i
]; }
1810 Returns the first range if there is one, otherwise wxRICHTEXT_NO_SELECTION.
1812 wxRichTextRange
GetRange() const { return (m_ranges
.GetCount() > 0) ? (m_ranges
[0]) : wxRICHTEXT_NO_SELECTION
; }
1815 Sets a single range.
1817 void SetRange(const wxRichTextRange
& range
) { m_ranges
.Clear(); m_ranges
.Add(range
); }
1820 Returns the container for which the selection is valid.
1822 wxRichTextParagraphLayoutBox
* GetContainer() const { return m_container
; }
1825 Sets the container for which the selection is valid.
1827 void SetContainer(wxRichTextParagraphLayoutBox
* container
) { m_container
= container
; }
1830 Returns @true if the selection is valid.
1832 bool IsValid() const { return m_ranges
.GetCount() > 0 && GetContainer(); }
1835 Returns the selection appropriate to the specified object, if any; returns an empty array if none
1836 at the level of the object's container.
1838 wxRichTextRangeArray
GetSelectionForObject(wxRichTextObject
* obj
) const;
1841 Returns @true if the given position is within the selection.
1843 bool WithinSelection(long pos
, wxRichTextObject
* obj
) const;
1846 Returns @true if the given position is within the selection.
1849 bool WithinSelection(long pos
) const { return WithinSelection(pos
, m_ranges
); }
1852 Returns @true if the given position is within the selection range.
1854 static bool WithinSelection(long pos
, const wxRichTextRangeArray
& ranges
);
1857 Returns @true if the given range is within the selection range.
1859 static bool WithinSelection(const wxRichTextRange
& range
, const wxRichTextRangeArray
& ranges
);
1861 wxRichTextRangeArray m_ranges
;
1862 wxRichTextParagraphLayoutBox
* m_container
;
1866 @class wxRichTextObject
1868 This is the base for drawable rich text objects.
1870 @library{wxrichtext}
1873 @see wxRichTextBuffer, wxRichTextCtrl
1876 class WXDLLIMPEXP_RICHTEXT wxRichTextObject
: public wxObject
1878 DECLARE_CLASS(wxRichTextObject
)
1881 Constructor, taking an optional parent pointer.
1883 wxRichTextObject(wxRichTextObject
* parent
= NULL
);
1885 virtual ~wxRichTextObject();
1890 Draw the item, within the given range. Some objects may ignore the range (for
1891 example paragraphs) while others must obey it (lines, to implement wrapping)
1893 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
1896 Lay the item out at the specified position with the given size constraint.
1897 Layout must set the cached size.
1899 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, int style
) = 0;
1902 Hit-testing: returns a flag indicating hit test details, plus
1903 information about position. @a contextObj is returned to specify what object
1904 position is relevant to, since otherwise there's an ambiguity.
1905 @ obj might not be a child of @a contextObj, since we may be referring to the container itself
1906 if we have no hit on a child - for example if we click outside an object.
1908 The function puts the position in @a textPosition if one is found.
1909 @a pt is in logical units (a zero y position is at the beginning of the buffer).
1911 @return One of the ::wxRichTextHitTestFlags values.
1914 virtual int HitTest(wxDC
& dc
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
1917 Finds the absolute position and row height for the given character position.
1919 virtual bool FindPosition(wxDC
& WXUNUSED(dc
), long WXUNUSED(index
), wxPoint
& WXUNUSED(pt
), int* WXUNUSED(height
), bool WXUNUSED(forceLineStart
)) { return false; }
1922 Returns the best size, i.e. the ideal starting size for this object irrespective
1923 of available space. For a short text string, it will be the size that exactly encloses
1924 the text. For a longer string, it might use the parent width for example.
1926 virtual wxSize
GetBestSize() const { return m_size
; }
1929 Returns the object size for the given range. Returns @false if the range
1930 is invalid for this object.
1933 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const = 0;
1936 Do a split from @a pos, returning an object containing the second part, and setting
1937 the first part in 'this'.
1939 virtual wxRichTextObject
* DoSplit(long WXUNUSED(pos
)) { return NULL
; }
1942 Calculates the range of the object. By default, guess that the object is 1 unit long.
1944 virtual void CalculateRange(long start
, long& end
) { end
= start
; m_range
.SetRange(start
, end
); }
1947 Deletes the given range.
1949 virtual bool DeleteRange(const wxRichTextRange
& WXUNUSED(range
)) { return false; }
1952 Returns @true if the object is empty.
1954 virtual bool IsEmpty() const { return false; }
1957 Returns @true if this class of object is floatable.
1959 virtual bool IsFloatable() const { return false; }
1962 Returns @true if this object is currently floating.
1964 virtual bool IsFloating() const { return GetAttributes().GetTextBoxAttr().IsFloating(); }
1967 Returns the floating direction.
1969 virtual int GetFloatDirection() const { return GetAttributes().GetTextBoxAttr().GetFloatMode(); }
1972 Returns any text in this object for the given range.
1974 virtual wxString
GetTextForRange(const wxRichTextRange
& WXUNUSED(range
)) const { return wxEmptyString
; }
1977 Returns @true if this object can merge itself with the given one.
1979 virtual bool CanMerge(wxRichTextObject
* WXUNUSED(object
)) const { return false; }
1982 Returns @true if this object merged itself with the given one.
1983 The calling code will then delete the given object.
1985 virtual bool Merge(wxRichTextObject
* WXUNUSED(object
)) { return false; }
1988 Dump object data to the given output stream for debugging.
1990 virtual void Dump(wxTextOutputStream
& stream
);
1993 Returns @true if we can edit the object's properties via a GUI.
1995 virtual bool CanEditProperties() const { return false; }
1998 Edits the object's properties via a GUI.
2000 virtual bool EditProperties(wxWindow
* WXUNUSED(parent
), wxRichTextBuffer
* WXUNUSED(buffer
)) { return false; }
2003 Returns the label to be used for the properties context menu item.
2005 virtual wxString
GetPropertiesMenuLabel() const { return wxEmptyString
; }
2008 Returns @true if objects of this class can accept the focus, i.e. a call to SetFocusObject
2009 is possible. For example, containers supporting text, such as a text box object, can accept the focus,
2010 but a table can't (set the focus to individual cells instead).
2012 virtual bool AcceptsFocus() const { return false; }
2016 Imports this object from XML.
2018 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2021 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2023 Exports this object directly to the given stream, bypassing the creation of a wxXmlNode hierarchy.
2024 This method is considerably faster than creating a tree first. However, both versions of ExportXML must be
2025 implemented so that if the tree method is made efficient in the future, we can deprecate the
2026 more verbose direct output method. Compiled only if wxRICHTEXT_HAVE_DIRECT_OUTPUT is defined (on by default).
2028 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2031 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2033 Exports this object to the given parent node, usually creating at least one child node.
2034 This method is less efficient than the direct-to-stream method but is retained to allow for
2035 switching to this method if we make it more efficient. Compiled only if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT is defined
2038 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2042 Returns @true if this object takes note of paragraph attributes (text and image objects don't).
2044 virtual bool UsesParagraphAttributes() const { return true; }
2047 Returns the XML node name of this object. This must be overridden for wxXmlNode-base XML export to work.
2049 virtual wxString
GetXMLNodeName() const { return wxT("unknown"); }
2052 Invalidates the object at the given range. With no argument, invalidates the whole object.
2054 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2057 Returns @true if this object can handle the selections of its children, fOr example a table.
2058 Required for composite selection handling to work.
2060 virtual bool HandlesChildSelections() const { return false; }
2063 Returns a selection object specifying the selections between start and end character positions.
2064 For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
2066 virtual wxRichTextSelection
GetSelection(long WXUNUSED(start
), long WXUNUSED(end
)) const { return wxRichTextSelection(); }
2071 Gets the cached object size as calculated by Layout.
2073 virtual wxSize
GetCachedSize() const { return m_size
; }
2076 Sets the cached object size as calculated by Layout.
2078 virtual void SetCachedSize(const wxSize
& sz
) { m_size
= sz
; }
2081 Gets the maximum object size as calculated by Layout. This allows
2082 us to fit an object to its contents or allocate extra space if required.
2084 virtual wxSize
GetMaxSize() const { return m_maxSize
; }
2087 Sets the maximum object size as calculated by Layout. This allows
2088 us to fit an object to its contents or allocate extra space if required.
2090 virtual void SetMaxSize(const wxSize
& sz
) { m_maxSize
= sz
; }
2093 Gets the minimum object size as calculated by Layout. This allows
2094 us to constrain an object to its absolute minimum size if necessary.
2096 virtual wxSize
GetMinSize() const { return m_minSize
; }
2099 Sets the minimum object size as calculated by Layout. This allows
2100 us to constrain an object to its absolute minimum size if necessary.
2102 virtual void SetMinSize(const wxSize
& sz
) { m_minSize
= sz
; }
2105 Gets the 'natural' size for an object. For an image, it would be the
2108 virtual wxTextAttrSize
GetNaturalSize() const { return wxTextAttrSize(); }
2111 Returns the object position in pixels.
2113 virtual wxPoint
GetPosition() const { return m_pos
; }
2116 Sets the object position in pixels.
2118 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
2121 Returns the absolute object position, by traversing up the child/parent hierarchy.
2122 TODO: may not be needed, if all object positions are in fact relative to the
2123 top of the coordinate space.
2125 virtual wxPoint
GetAbsolutePosition() const;
2128 Returns the rectangle enclosing the object.
2130 virtual wxRect
GetRect() const { return wxRect(GetPosition(), GetCachedSize()); }
2133 Sets the object's range within its container.
2135 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
2138 Returns the object's range.
2140 const wxRichTextRange
& GetRange() const { return m_range
; }
2143 Returns the object's range.
2145 wxRichTextRange
& GetRange() { return m_range
; }
2148 Set the object's own range, for a top-level object with its own position space.
2150 void SetOwnRange(const wxRichTextRange
& range
) { m_ownRange
= range
; }
2153 Returns the object's own range (valid if top-level).
2155 const wxRichTextRange
& GetOwnRange() const { return m_ownRange
; }
2158 Returns the object's own range (valid if top-level).
2160 wxRichTextRange
& GetOwnRange() { return m_ownRange
; }
2163 Returns the object's own range only if a top-level object.
2165 wxRichTextRange
GetOwnRangeIfTopLevel() const { return IsTopLevel() ? m_ownRange
: m_range
; }
2168 Returns @true if this object this composite.
2170 virtual bool IsComposite() const { return false; }
2173 Returns a pointer to the parent object.
2175 virtual wxRichTextObject
* GetParent() const { return m_parent
; }
2178 Sets the pointer to the parent object.
2180 virtual void SetParent(wxRichTextObject
* parent
) { m_parent
= parent
; }
2183 Returns the top-level container of this object.
2184 May return itself if it's a container; use GetParentContainer to return
2185 a different container.
2187 virtual wxRichTextParagraphLayoutBox
* GetContainer() const;
2190 Returns the top-level container of this object.
2191 Returns a different container than itself, unless there's no parent, in which case it will return NULL.
2193 virtual wxRichTextParagraphLayoutBox
* GetParentContainer() const { return GetParent() ? GetParent()->GetContainer() : GetContainer(); }
2196 Set the margin around the object, in pixels.
2198 virtual void SetMargins(int margin
);
2201 Set the margin around the object, in pixels.
2203 virtual void SetMargins(int leftMargin
, int rightMargin
, int topMargin
, int bottomMargin
);
2206 Returns the left margin of the object, in pixels.
2208 virtual int GetLeftMargin() const;
2211 Returns the right margin of the object, in pixels.
2213 virtual int GetRightMargin() const;
2216 Returns the top margin of the object, in pixels.
2218 virtual int GetTopMargin() const;
2221 Returns the bottom margin of the object, in pixels.
2223 virtual int GetBottomMargin() const;
2226 Calculates the available content space in the given rectangle, given the
2227 margins, border and padding specified in the object's attributes.
2229 virtual wxRect
GetAvailableContentArea(wxDC
& dc
, const wxRect
& outerRect
) const;
2232 Lays out the object first with a given amount of space, and then if no width was specified in attr,
2233 lays out the object again using the minimum size
2235 virtual bool LayoutToBestSize(wxDC
& dc
, wxRichTextBuffer
* buffer
,
2236 const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& attr
, const wxRect
& availableParentSpace
, int style
);
2239 Sets the object's attributes.
2241 void SetAttributes(const wxRichTextAttr
& attr
) { m_attributes
= attr
; }
2244 Returns the object's attributes.
2246 const wxRichTextAttr
& GetAttributes() const { return m_attributes
; }
2249 Returns the object's attributes.
2251 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
2254 Sets the object's properties.
2256 wxRichTextProperties
& GetProperties() { return m_properties
; }
2259 Returns the object's properties.
2261 const wxRichTextProperties
& GetProperties() const { return m_properties
; }
2264 Returns the object's properties.
2266 void SetProperties(const wxRichTextProperties
& props
) { m_properties
= props
; }
2269 Sets the stored descent value.
2271 void SetDescent(int descent
) { m_descent
= descent
; }
2274 Returns the stored descent value.
2276 int GetDescent() const { return m_descent
; }
2279 Returns the containing buffer.
2281 wxRichTextBuffer
* GetBuffer() const;
2284 Sets the identifying name for this object as a property using the "name" key.
2286 void SetName(const wxString
& name
) { m_properties
.SetProperty(wxT("name"), name
); }
2289 Returns the identifying name for this object from the properties, using the "name" key.
2291 wxString
GetName() const { return m_properties
.GetPropertyString(wxT("name")); }
2294 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
2296 virtual bool IsTopLevel() const { return false; }
2299 Returns @true if the object will be shown, @false otherwise.
2301 bool IsShown() const { return m_show
; }
2306 Call to show or hide this object. This function does not cause the content to be
2307 laid out or redrawn.
2309 virtual void Show(bool show
) { m_show
= show
; }
2314 virtual wxRichTextObject
* Clone() const { return NULL
; }
2319 void Copy(const wxRichTextObject
& obj
);
2322 Reference-counting allows us to use the same object in multiple
2323 lists (not yet used).
2326 void Reference() { m_refCount
++; }
2329 Reference-counting allows us to use the same object in multiple
2330 lists (not yet used).
2335 Moves the object recursively, by adding the offset from old to new.
2337 virtual void Move(const wxPoint
& pt
);
2340 Converts units in tenths of a millimetre to device units.
2342 int ConvertTenthsMMToPixels(wxDC
& dc
, int units
) const;
2345 Converts units in tenths of a millimetre to device units.
2347 static int ConvertTenthsMMToPixels(int ppi
, int units
, double scale
= 1.0);
2350 Convert units in pixels to tenths of a millimetre.
2352 int ConvertPixelsToTenthsMM(wxDC
& dc
, int pixels
) const;
2355 Convert units in pixels to tenths of a millimetre.
2357 static int ConvertPixelsToTenthsMM(int ppi
, int pixels
, double scale
= 1.0);
2360 Draws the borders and background for the given rectangle and attributes.
2361 @a boxRect is taken to be the outer margin box, not the box around the content.
2363 static bool DrawBoxAttributes(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, const wxRect
& boxRect
, int flags
= 0);
2368 static bool DrawBorder(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxTextAttrBorders
& attr
, const wxRect
& rect
, int flags
= 0);
2371 Returns the various rectangles of the box model in pixels. You can either specify @a contentRect (inner)
2372 or @a marginRect (outer), and the other must be the default rectangle (no width or height).
2373 Note that the outline doesn't affect the position of the rectangle, it's drawn in whatever space
2376 static bool GetBoxRects(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, wxRect
& marginRect
, wxRect
& borderRect
, wxRect
& contentRect
, wxRect
& paddingRect
, wxRect
& outlineRect
);
2379 Returns the total margin for the object in pixels, taking into account margin, padding and border size.
2381 static bool GetTotalMargin(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, int& leftMargin
, int& rightMargin
,
2382 int& topMargin
, int& bottomMargin
);
2385 Returns the rectangle which the child has available to it given restrictions specified in the
2386 child attribute, e.g. 50% width of the parent, 400 pixels, x position 20% of the parent, etc.
2388 static wxRect
AdjustAvailableSpace(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& childAttr
, const wxRect
& availableParentSpace
);
2395 int m_descent
; // Descent for this object (if any)
2398 wxRichTextObject
* m_parent
;
2400 // The range of this object (start position to end position)
2401 wxRichTextRange m_range
;
2403 // The internal range of this object, if it's a top-level object with its own range space
2404 wxRichTextRange m_ownRange
;
2407 wxRichTextAttr m_attributes
;
2410 wxRichTextProperties m_properties
;
2413 WX_DECLARE_LIST_WITH_DECL( wxRichTextObject
, wxRichTextObjectList
, class WXDLLIMPEXP_RICHTEXT
);
2416 @class wxRichTextCompositeObject
2418 Objects of this class can contain other objects.
2420 @library{wxrichtext}
2423 @see wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2426 class WXDLLIMPEXP_RICHTEXT wxRichTextCompositeObject
: public wxRichTextObject
2428 DECLARE_CLASS(wxRichTextCompositeObject
)
2432 wxRichTextCompositeObject(wxRichTextObject
* parent
= NULL
);
2433 virtual ~wxRichTextCompositeObject();
2437 virtual int HitTest(wxDC
& dc
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2439 virtual bool FindPosition(wxDC
& dc
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
2441 virtual void CalculateRange(long start
, long& end
);
2443 virtual bool DeleteRange(const wxRichTextRange
& range
);
2445 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2447 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
2449 virtual void Dump(wxTextOutputStream
& stream
);
2451 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2456 Returns the children.
2458 wxRichTextObjectList
& GetChildren() { return m_children
; }
2460 Returns the children.
2462 const wxRichTextObjectList
& GetChildren() const { return m_children
; }
2465 Returns the number of children.
2467 size_t GetChildCount() const ;
2470 Returns the nth child.
2472 wxRichTextObject
* GetChild(size_t n
) const ;
2475 Returns @true if this object is composite.
2477 virtual bool IsComposite() const { return true; }
2480 Returns true if the buffer is empty.
2482 virtual bool IsEmpty() const { return GetChildCount() == 0; }
2485 Returns the child object at the given character position.
2487 virtual wxRichTextObject
* GetChildAtPosition(long pos
) const;
2491 void Copy(const wxRichTextCompositeObject
& obj
);
2493 void operator= (const wxRichTextCompositeObject
& obj
) { Copy(obj
); }
2496 Appends a child, returning the position.
2498 size_t AppendChild(wxRichTextObject
* child
) ;
2501 Inserts the child in front of the given object, or at the beginning.
2503 bool InsertChild(wxRichTextObject
* child
, wxRichTextObject
* inFrontOf
) ;
2506 Removes and optionally deletes the specified child.
2508 bool RemoveChild(wxRichTextObject
* child
, bool deleteChild
= false) ;
2511 Deletes all the children.
2513 bool DeleteChildren() ;
2516 Recursively merges all pieces that can be merged.
2518 bool Defragment(const wxRichTextRange
& range
= wxRICHTEXT_ALL
);
2521 Moves the object recursively, by adding the offset from old to new.
2523 virtual void Move(const wxPoint
& pt
);
2526 wxRichTextObjectList m_children
;
2530 @class wxRichTextParagraphBox
2532 This class knows how to lay out paragraphs.
2534 @library{wxrichtext}
2537 @see wxRichTextCompositeObject, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2540 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraphLayoutBox
: public wxRichTextCompositeObject
2542 DECLARE_DYNAMIC_CLASS(wxRichTextParagraphLayoutBox
)
2546 wxRichTextParagraphLayoutBox(wxRichTextObject
* parent
= NULL
);
2547 wxRichTextParagraphLayoutBox(const wxRichTextParagraphLayoutBox
& obj
): wxRichTextCompositeObject() { Init(); Copy(obj
); }
2548 ~wxRichTextParagraphLayoutBox();
2552 virtual int HitTest(wxDC
& dc
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2554 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2556 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, int style
);
2558 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
2560 virtual bool DeleteRange(const wxRichTextRange
& range
);
2562 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2565 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2568 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2569 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2572 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2573 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2576 virtual wxString
GetXMLNodeName() const { return wxT("paragraphlayout"); }
2578 virtual bool AcceptsFocus() const { return true; }
2583 Associates a control with the buffer, for operations that for example require refreshing the window.
2585 void SetRichTextCtrl(wxRichTextCtrl
* ctrl
) { m_ctrl
= ctrl
; }
2588 Returns the associated control.
2590 wxRichTextCtrl
* GetRichTextCtrl() const { return m_ctrl
; }
2593 Sets a flag indicating whether the last paragraph is partial or complete.
2595 void SetPartialParagraph(bool partialPara
) { m_partialParagraph
= partialPara
; }
2598 Returns a flag indicating whether the last paragraph is partial or complete.
2600 bool GetPartialParagraph() const { return m_partialParagraph
; }
2603 Returns the style sheet associated with the overall buffer.
2605 virtual wxRichTextStyleSheet
* GetStyleSheet() const;
2607 virtual bool IsTopLevel() const { return true; }
2612 Submits a command to insert paragraphs.
2614 bool InsertParagraphsWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2617 Submits a command to insert the given text.
2619 bool InsertTextWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2622 Submits a command to insert the given text.
2624 bool InsertNewlineWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2627 Submits a command to insert the given image.
2629 bool InsertImageWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextImageBlock
& imageBlock
,
2630 wxRichTextCtrl
* ctrl
, int flags
,
2631 const wxRichTextAttr
& textAttr
);
2634 Returns the style that is appropriate for a new paragraph at this position.
2635 If the previous paragraph has a paragraph style name, looks up the next-paragraph
2638 wxRichTextAttr
GetStyleForNewParagraph(wxRichTextBuffer
* buffer
, long pos
, bool caretPosition
= false, bool lookUpNewParaStyle
=false) const;
2643 wxRichTextObject
* InsertObjectWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2646 Submits a command to delete this range.
2648 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
, wxRichTextBuffer
* buffer
);
2651 Draws the floating objects in this buffer.
2653 void DrawFloats(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2656 Moves an anchored object to another paragraph.
2658 void MoveAnchoredObjectToParagraph(wxRichTextParagraph
* from
, wxRichTextParagraph
* to
, wxRichTextObject
* obj
);
2661 Initializes the object.
2666 Clears all the children.
2668 virtual void Clear();
2671 Clears and initializes with one blank paragraph.
2673 virtual void Reset();
2676 Convenience function to add a paragraph of text.
2678 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2681 Convenience function to add an image.
2683 virtual wxRichTextRange
AddImage(const wxImage
& image
, wxRichTextAttr
* paraStyle
= NULL
);
2686 Adds multiple paragraphs, based on newlines.
2688 virtual wxRichTextRange
AddParagraphs(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2691 Returns the line at the given position. If @a caretPosition is true, the position is
2692 a caret position, which is normally a smaller number.
2694 virtual wxRichTextLine
* GetLineAtPosition(long pos
, bool caretPosition
= false) const;
2697 Returns the line at the given y pixel position, or the last line.
2699 virtual wxRichTextLine
* GetLineAtYPosition(int y
) const;
2702 Returns the paragraph at the given character or caret position.
2704 virtual wxRichTextParagraph
* GetParagraphAtPosition(long pos
, bool caretPosition
= false) const;
2707 Returns the line size at the given position.
2709 virtual wxSize
GetLineSizeAtPosition(long pos
, bool caretPosition
= false) const;
2712 Given a position, returns the number of the visible line (potentially many to a paragraph),
2713 starting from zero at the start of the buffer. We also have to pass a bool (@a startOfLine)
2714 that indicates whether the caret is being shown at the end of the previous line or at the start
2715 of the next, since the caret can be shown at two visible positions for the same underlying
2718 virtual long GetVisibleLineNumber(long pos
, bool caretPosition
= false, bool startOfLine
= false) const;
2721 Given a line number, returns the corresponding wxRichTextLine object.
2723 virtual wxRichTextLine
* GetLineForVisibleLineNumber(long lineNumber
) const;
2726 Returns the leaf object in a paragraph at this position.
2728 virtual wxRichTextObject
* GetLeafObjectAtPosition(long position
) const;
2731 Returns the paragraph by number.
2733 virtual wxRichTextParagraph
* GetParagraphAtLine(long paragraphNumber
) const;
2736 Returns the paragraph for a given line.
2738 virtual wxRichTextParagraph
* GetParagraphForLine(wxRichTextLine
* line
) const;
2741 Returns the length of the paragraph.
2743 virtual int GetParagraphLength(long paragraphNumber
) const;
2746 Returns the number of paragraphs.
2748 virtual int GetParagraphCount() const { return static_cast<int>(GetChildCount()); }
2751 Returns the number of visible lines.
2753 virtual int GetLineCount() const;
2756 Returns the text of the paragraph.
2758 virtual wxString
GetParagraphText(long paragraphNumber
) const;
2761 Converts zero-based line column and paragraph number to a position.
2763 virtual long XYToPosition(long x
, long y
) const;
2766 Converts a zero-based position to line column and paragraph number.
2768 virtual bool PositionToXY(long pos
, long* x
, long* y
) const;
2771 Sets the attributes for the given range. Pass flags to determine how the
2774 The end point of range is specified as the last character position of the span
2775 of text. So, for example, to set the style for a character at position 5,
2776 use the range (5,5).
2777 This differs from the wxRichTextCtrl API, where you would specify (5,6).
2779 @a flags may contain a bit list of the following values:
2780 - wxRICHTEXT_SETSTYLE_NONE: no style flag.
2781 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
2783 - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
2784 if the combined style at this point is already the style in question.
2785 - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
2786 applied to paragraphs, and not the content.
2787 This allows content styling to be preserved independently from that
2788 of e.g. a named paragraph style.
2789 - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
2790 applied to characters, and not the paragraph.
2791 This allows content styling to be preserved independently from that
2792 of e.g. a named paragraph style.
2793 - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
2795 - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style.
2796 Only the style flags are used in this operation.
2798 virtual bool SetStyle(const wxRichTextRange
& range
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
2801 Sets the attributes for the given object only, for example the box attributes for a text box.
2803 virtual void SetStyle(wxRichTextObject
*obj
, const wxRichTextAttr
& textAttr
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
2806 Returns the combined text attributes for this position.
2808 This function gets the @e uncombined style - that is, the attributes associated
2809 with the paragraph or character content, and not necessarily the combined
2810 attributes you see on the screen. To get the combined attributes, use GetStyle().
2811 If you specify (any) paragraph attribute in @e style's flags, this function
2812 will fetch the paragraph attributes.
2813 Otherwise, it will return the character attributes.
2815 virtual bool GetStyle(long position
, wxRichTextAttr
& style
);
2818 Returns the content (uncombined) attributes for this position.
2820 virtual bool GetUncombinedStyle(long position
, wxRichTextAttr
& style
);
2823 Implementation helper for GetStyle. If combineStyles is true, combine base, paragraph and
2826 virtual bool DoGetStyle(long position
, wxRichTextAttr
& style
, bool combineStyles
= true);
2829 This function gets a style representing the common, combined attributes in the
2831 Attributes which have different values within the specified range will not be
2832 included the style flags.
2834 The function is used to get the attributes to display in the formatting dialog:
2835 the user can edit the attributes common to the selection, and optionally specify the
2836 values of further attributes to be applied uniformly.
2838 To apply the edited attributes, you can use SetStyle() specifying
2839 the wxRICHTEXT_SETSTYLE_OPTIMIZE flag, which will only apply attributes that
2840 are different from the @e combined attributes within the range.
2841 So, the user edits the effective, displayed attributes for the range,
2842 but his choice won't be applied unnecessarily to content. As an example,
2843 say the style for a paragraph specifies bold, but the paragraph text doesn't
2845 The combined style is bold, and this is what the user will see on-screen and
2846 in the formatting dialog. The user now specifies red text, in addition to bold.
2847 When applying with SetStyle(), the content font weight attributes won't be
2848 changed to bold because this is already specified by the paragraph.
2849 However the text colour attributes @e will be changed to show red.
2851 virtual bool GetStyleForRange(const wxRichTextRange
& range
, wxRichTextAttr
& style
);
2854 Combines @a style with @a currentStyle for the purpose of summarising the attributes of a range of
2857 bool CollectStyle(wxRichTextAttr
& currentStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
2861 Sets the list attributes for the given range, passing flags to determine how
2862 the attributes are set.
2863 Either the style definition or the name of the style definition (in the current
2864 sheet) can be passed.
2866 @a flags is a bit list of the following:
2867 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
2868 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
2869 @a startFrom, otherwise existing attributes are used.
2870 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
2871 as the level for all paragraphs, otherwise the current indentation will be used.
2873 @see NumberList(), PromoteList(), ClearListStyle().
2875 virtual bool SetListStyle(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
2876 virtual bool SetListStyle(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
2880 Clears the list style from the given range, clearing list-related attributes
2881 and applying any named paragraph style associated with each paragraph.
2883 @a flags is a bit list of the following:
2884 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
2886 @see SetListStyle(), PromoteList(), NumberList()
2888 virtual bool ClearListStyle(const wxRichTextRange
& range
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
2892 Numbers the paragraphs in the given range.
2894 Pass flags to determine how the attributes are set.
2895 Either the style definition or the name of the style definition (in the current
2896 sheet) can be passed.
2898 @a flags is a bit list of the following:
2899 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
2900 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
2901 @a startFrom, otherwise existing attributes are used.
2902 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
2903 as the level for all paragraphs, otherwise the current indentation will be used.
2905 @a def can be NULL to indicate that the existing list style should be used.
2907 @see SetListStyle(), PromoteList(), ClearListStyle()
2909 virtual bool NumberList(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
2910 virtual bool NumberList(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
2915 Promotes the list items within the given range.
2916 A positive @a promoteBy produces a smaller indent, and a negative number
2917 produces a larger indent. Pass flags to determine how the attributes are set.
2918 Either the style definition or the name of the style definition (in the current
2919 sheet) can be passed.
2921 @a flags is a bit list of the following:
2922 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
2923 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
2924 @a startFrom, otherwise existing attributes are used.
2925 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
2926 as the level for all paragraphs, otherwise the current indentation will be used.
2928 @see SetListStyle(), SetListStyle(), ClearListStyle()
2930 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
2931 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
2935 Helper for NumberList and PromoteList, that does renumbering and promotion simultaneously
2936 @a def can be NULL/empty to indicate that the existing list style should be used.
2938 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);
2941 Fills in the attributes for numbering a paragraph after previousParagraph.
2943 virtual bool FindNextParagraphNumber(wxRichTextParagraph
* previousParagraph
, wxRichTextAttr
& attr
) const;
2946 Test if this whole range has character attributes of the specified kind. If any
2947 of the attributes are different within the range, the test fails. You
2948 can use this to implement, for example, bold button updating. style must have
2949 flags indicating which attributes are of interest.
2951 virtual bool HasCharacterAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
2954 Test if this whole range has paragraph attributes of the specified kind. If any
2955 of the attributes are different within the range, the test fails. You
2956 can use this to implement, for example, centering button updating. style must have
2957 flags indicating which attributes are of interest.
2959 virtual bool HasParagraphAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
2961 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraphLayoutBox(*this); }
2964 Insert fragment into this box at the given position. If partialParagraph is true,
2965 it is assumed that the last (or only) paragraph is just a piece of data with no paragraph
2968 virtual bool InsertFragment(long position
, wxRichTextParagraphLayoutBox
& fragment
);
2971 Make a copy of the fragment corresponding to the given range, putting it in @a fragment.
2973 virtual bool CopyFragment(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
& fragment
);
2976 Apply the style sheet to the buffer, for example if the styles have changed.
2978 virtual bool ApplyStyleSheet(wxRichTextStyleSheet
* styleSheet
);
2980 void Copy(const wxRichTextParagraphLayoutBox
& obj
);
2982 void operator= (const wxRichTextParagraphLayoutBox
& obj
) { Copy(obj
); }
2987 virtual void UpdateRanges();
2992 virtual wxString
GetText() const;
2995 Sets the default style, affecting the style currently being applied
2996 (for example, setting the default style to bold will cause subsequently
2997 inserted text to be bold).
2999 This is not cumulative - setting the default style will replace the previous
3002 Setting it to a default attribute object makes new content take on the 'basic' style.
3004 virtual bool SetDefaultStyle(const wxRichTextAttr
& style
);
3007 Returns the current default style, affecting the style currently being applied
3008 (for example, setting the default style to bold will cause subsequently
3009 inserted text to be bold).
3011 virtual const wxRichTextAttr
& GetDefaultStyle() const { return m_defaultAttributes
; }
3014 Sets the basic (overall) style. This is the style of the whole
3015 buffer before further styles are applied, unlike the default style, which
3016 only affects the style currently being applied (for example, setting the default
3017 style to bold will cause subsequently inserted text to be bold).
3019 virtual void SetBasicStyle(const wxRichTextAttr
& style
) { m_attributes
= style
; }
3022 Returns the basic (overall) style.
3024 This is the style of the whole buffer before further styles are applied,
3025 unlike the default style, which only affects the style currently being
3026 applied (for example, setting the default style to bold will cause
3027 subsequently inserted text to be bold).
3029 virtual const wxRichTextAttr
& GetBasicStyle() const { return m_attributes
; }
3032 Invalidates the buffer. With no argument, invalidates whole buffer.
3034 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3037 Do the (in)validation for this object only.
3039 virtual void DoInvalidate(const wxRichTextRange
& invalidRange
);
3042 Do the (in)validation both up and down the hierarchy.
3044 virtual void InvalidateHierarchy(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3047 Gather information about floating objects. If untilObj is non-NULL,
3048 will stop getting information if the current object is this, since we
3049 will collect the rest later.
3051 virtual bool UpdateFloatingObjects(const wxRect
& availableRect
, wxRichTextObject
* untilObj
= NULL
);
3054 Get invalid range, rounding to entire paragraphs if argument is true.
3056 wxRichTextRange
GetInvalidRange(bool wholeParagraphs
= false) const;
3059 Returns @true if this object needs layout.
3061 bool IsDirty() const { return m_invalidRange
!= wxRICHTEXT_NONE
; }
3064 Returns the wxRichTextFloatCollector of this object.
3066 wxRichTextFloatCollector
* GetFloatCollector() { return m_floatCollector
; }
3069 Returns the number of floating objects at this level.
3071 int GetFloatingObjectCount() const;
3074 Returns a list of floating objects.
3076 bool GetFloatingObjects(wxRichTextObjectList
& objects
) const;
3079 wxRichTextCtrl
* m_ctrl
;
3080 wxRichTextAttr m_defaultAttributes
;
3082 // The invalidated range that will need full layout
3083 wxRichTextRange m_invalidRange
;
3085 // Is the last paragraph partial or complete?
3086 bool m_partialParagraph
;
3088 // The floating layout state
3089 wxRichTextFloatCollector
* m_floatCollector
;
3093 @class wxRichTextBox
3095 This class implements a floating or inline text box, containing paragraphs.
3097 @library{wxrichtext}
3100 @see wxRichTextParagraphLayoutBox, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
3103 class WXDLLIMPEXP_RICHTEXT wxRichTextBox
: public wxRichTextParagraphLayoutBox
3105 DECLARE_DYNAMIC_CLASS(wxRichTextBox
)
3110 Default constructor; optionally pass the parent object.
3113 wxRichTextBox(wxRichTextObject
* parent
= NULL
);
3119 wxRichTextBox(const wxRichTextBox
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3123 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3125 virtual wxString
GetXMLNodeName() const { return wxT("textbox"); }
3127 virtual bool CanEditProperties() const { return true; }
3129 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3131 virtual wxString
GetPropertiesMenuLabel() const { return _("&Box"); }
3137 virtual wxRichTextObject
* Clone() const { return new wxRichTextBox(*this); }
3139 void Copy(const wxRichTextBox
& obj
);
3145 @class wxRichTextLine
3147 This object represents a line in a paragraph, and stores
3148 offsets from the start of the paragraph representing the
3149 start and end positions of the line.
3151 @library{wxrichtext}
3154 @see wxRichTextBuffer, wxRichTextCtrl
3157 class WXDLLIMPEXP_RICHTEXT wxRichTextLine
3162 wxRichTextLine(wxRichTextParagraph
* parent
);
3163 wxRichTextLine(const wxRichTextLine
& obj
) { Init( NULL
); Copy(obj
); }
3164 virtual ~wxRichTextLine() {}
3171 Sets the range associated with this line.
3173 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
3175 Sets the range associated with this line.
3177 void SetRange(long from
, long to
) { m_range
= wxRichTextRange(from
, to
); }
3180 Returns the parent paragraph.
3182 wxRichTextParagraph
* GetParent() { return m_parent
; }
3187 const wxRichTextRange
& GetRange() const { return m_range
; }
3191 wxRichTextRange
& GetRange() { return m_range
; }
3194 Returns the absolute range.
3196 wxRichTextRange
GetAbsoluteRange() const;
3199 Returns the line size as calculated by Layout.
3201 virtual wxSize
GetSize() const { return m_size
; }
3204 Sets the line size as calculated by Layout.
3206 virtual void SetSize(const wxSize
& sz
) { m_size
= sz
; }
3209 Returns the object position relative to the parent.
3211 virtual wxPoint
GetPosition() const { return m_pos
; }
3214 Sets the object position relative to the parent.
3216 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
3219 Returns the absolute object position.
3221 virtual wxPoint
GetAbsolutePosition() const;
3224 Returns the rectangle enclosing the line.
3226 virtual wxRect
GetRect() const { return wxRect(GetAbsolutePosition(), GetSize()); }
3229 Sets the stored descent.
3231 void SetDescent(int descent
) { m_descent
= descent
; }
3234 Returns the stored descent.
3236 int GetDescent() const { return m_descent
; }
3238 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3239 wxArrayInt
& GetObjectSizes() { return m_objectSizes
; }
3240 const wxArrayInt
& GetObjectSizes() const { return m_objectSizes
; }
3246 Initialises the object.
3248 void Init(wxRichTextParagraph
* parent
);
3253 void Copy(const wxRichTextLine
& obj
);
3255 virtual wxRichTextLine
* Clone() const { return new wxRichTextLine(*this); }
3259 // The range of the line (start position to end position)
3260 // This is relative to the parent paragraph.
3261 wxRichTextRange m_range
;
3263 // Size and position measured relative to top of paragraph
3267 // Maximum descent for this line (location of text baseline)
3270 // The parent object
3271 wxRichTextParagraph
* m_parent
;
3273 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3274 wxArrayInt m_objectSizes
;
3278 WX_DECLARE_LIST_WITH_DECL( wxRichTextLine
, wxRichTextLineList
, class WXDLLIMPEXP_RICHTEXT
);
3281 @class wxRichTextParagraph
3283 This object represents a single paragraph containing various objects such as text content, images, and further paragraph layout objects.
3285 @library{wxrichtext}
3288 @see wxRichTextBuffer, wxRichTextCtrl
3291 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraph
: public wxRichTextCompositeObject
3293 DECLARE_DYNAMIC_CLASS(wxRichTextParagraph
)
3298 Constructor taking a parent and style.
3300 wxRichTextParagraph(wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
3302 Constructor taking a text string, a parent and paragraph and character attributes.
3304 wxRichTextParagraph(const wxString
& text
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* paraStyle
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
3305 virtual ~wxRichTextParagraph();
3306 wxRichTextParagraph(const wxRichTextParagraph
& obj
): wxRichTextCompositeObject() { Copy(obj
); }
3310 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3312 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, int style
);
3314 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3316 virtual bool FindPosition(wxDC
& dc
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
3318 virtual int HitTest(wxDC
& dc
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
3320 virtual void CalculateRange(long start
, long& end
);
3322 virtual wxString
GetXMLNodeName() const { return wxT("paragraph"); }
3327 Returns the cached lines.
3329 wxRichTextLineList
& GetLines() { return m_cachedLines
; }
3336 void Copy(const wxRichTextParagraph
& obj
);
3338 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraph(*this); }
3341 Clears the cached lines.
3348 Applies paragraph styles such as centering to the wrapped lines.
3350 virtual void ApplyParagraphStyle(wxRichTextLine
* line
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxDC
& dc
);
3353 Inserts text at the given position.
3355 virtual bool InsertText(long pos
, const wxString
& text
);
3358 Splits an object at this position if necessary, and returns
3359 the previous object, or NULL if inserting at the beginning.
3361 virtual wxRichTextObject
* SplitAt(long pos
, wxRichTextObject
** previousObject
= NULL
);
3364 Moves content to a list from this point.
3366 virtual void MoveToList(wxRichTextObject
* obj
, wxList
& list
);
3369 Adds content back from a list.
3371 virtual void MoveFromList(wxList
& list
);
3374 Returns the plain text searching from the start or end of the range.
3375 The resulting string may be shorter than the range given.
3377 bool GetContiguousPlainText(wxString
& text
, const wxRichTextRange
& range
, bool fromStart
= true);
3380 Finds a suitable wrap position. @a wrapPosition is the last position in the line to the left
3383 bool FindWrapPosition(const wxRichTextRange
& range
, wxDC
& dc
, int availableSpace
, long& wrapPosition
, wxArrayInt
* partialExtents
);
3386 Finds the object at the given position.
3388 wxRichTextObject
* FindObjectAtPosition(long position
);
3391 Returns the bullet text for this paragraph.
3393 wxString
GetBulletText();
3396 Allocates or reuses a line object.
3398 wxRichTextLine
* AllocateLine(int pos
);
3401 Clears remaining unused line objects, if any.
3403 bool ClearUnusedLines(int lineCount
);
3406 Returns combined attributes of the base style, paragraph style and character style. We use this to dynamically
3407 retrieve the actual style.
3409 wxRichTextAttr
GetCombinedAttributes(const wxRichTextAttr
& contentStyle
, bool includingBoxAttr
= false) const;
3412 Returns the combined attributes of the base style and paragraph style.
3414 wxRichTextAttr
GetCombinedAttributes(bool includingBoxAttr
= false) const;
3417 Returns the first position from pos that has a line break character.
3419 long GetFirstLineBreakPosition(long pos
);
3422 Creates a default tabstop array.
3424 static void InitDefaultTabs();
3427 Clears the default tabstop array.
3429 static void ClearDefaultTabs();
3432 Returns the default tabstop array.
3434 static const wxArrayInt
& GetDefaultTabs() { return sm_defaultTabs
; }
3437 Lays out the floating objects.
3439 void LayoutFloat(wxDC
& dc
, const wxRect
& rect
, int style
, wxRichTextFloatCollector
* floatCollector
);
3443 // The lines that make up the wrapped paragraph
3444 wxRichTextLineList m_cachedLines
;
3447 static wxArrayInt sm_defaultTabs
;
3449 friend class wxRichTextFloatCollector
;
3453 @class wxRichTextPlainText
3455 This object represents a single piece of text.
3457 @library{wxrichtext}
3460 @see wxRichTextBuffer, wxRichTextCtrl
3463 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainText
: public wxRichTextObject
3465 DECLARE_DYNAMIC_CLASS(wxRichTextPlainText
)
3472 wxRichTextPlainText(const wxString
& text
= wxEmptyString
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
3477 wxRichTextPlainText(const wxRichTextPlainText
& obj
): wxRichTextObject() { Copy(obj
); }
3481 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3483 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, int style
);
3485 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3487 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
3489 virtual wxRichTextObject
* DoSplit(long pos
);
3491 virtual void CalculateRange(long start
, long& end
);
3493 virtual bool DeleteRange(const wxRichTextRange
& range
);
3495 virtual bool IsEmpty() const { return m_text
.empty(); }
3497 virtual bool CanMerge(wxRichTextObject
* object
) const;
3499 virtual bool Merge(wxRichTextObject
* object
);
3501 virtual void Dump(wxTextOutputStream
& stream
);
3504 Get the first position from pos that has a line break character.
3506 long GetFirstLineBreakPosition(long pos
);
3508 /// Does this object take note of paragraph attributes? Text and image objects don't.
3509 virtual bool UsesParagraphAttributes() const { return false; }
3512 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
3515 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
3516 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
3519 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
3520 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
3523 virtual wxString
GetXMLNodeName() const { return wxT("text"); }
3530 const wxString
& GetText() const { return m_text
; }
3535 void SetText(const wxString
& text
) { m_text
= text
; }
3539 // Copies the text object,
3540 void Copy(const wxRichTextPlainText
& obj
);
3542 // Clones the text object.
3543 virtual wxRichTextObject
* Clone() const { return new wxRichTextPlainText(*this); }
3546 bool DrawTabbedString(wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxString
& str
, wxCoord
& x
, wxCoord
& y
, bool selected
);
3553 @class wxRichTextImageBlock
3555 This class stores information about an image, in binary in-memory form.
3557 @library{wxrichtext}
3560 @see wxRichTextBuffer, wxRichTextCtrl
3563 class WXDLLIMPEXP_RICHTEXT wxRichTextImageBlock
: public wxObject
3569 wxRichTextImageBlock();
3574 wxRichTextImageBlock(const wxRichTextImageBlock
& block
);
3575 virtual ~wxRichTextImageBlock();
3578 Initialises the block.
3589 Load the original image into a memory block.
3590 If the image is not a JPEG, we must convert it into a JPEG
3592 If it's not a JPEG we can make use of @a image, already scaled, so we don't have to
3593 load the image a second time.
3595 virtual bool MakeImageBlock(const wxString
& filename
, wxBitmapType imageType
,
3596 wxImage
& image
, bool convertToJPEG
= true);
3599 Make an image block from the wxImage in the given
3602 virtual bool MakeImageBlock(wxImage
& image
, wxBitmapType imageType
, int quality
= 80);
3605 Uses a const wxImage for efficiency, but can't set quality (only relevant for JPEG)
3607 virtual bool MakeImageBlockDefaultQuality(const wxImage
& image
, wxBitmapType imageType
);
3610 Makes the image block.
3612 virtual bool DoMakeImageBlock(const wxImage
& image
, wxBitmapType imageType
);
3615 Writes the block to a file.
3617 bool Write(const wxString
& filename
);
3620 Writes the data in hex to a stream.
3622 bool WriteHex(wxOutputStream
& stream
);
3625 Reads the data in hex from a stream.
3627 bool ReadHex(wxInputStream
& stream
, int length
, wxBitmapType imageType
);
3632 void Copy(const wxRichTextImageBlock
& block
);
3634 // Load a wxImage from the block
3637 bool Load(wxImage
& image
);
3642 Assignment operation.
3644 void operator=(const wxRichTextImageBlock
& block
);
3649 Returns the raw data.
3651 unsigned char* GetData() const { return m_data
; }
3654 Returns the data size in bytes.
3656 size_t GetDataSize() const { return m_dataSize
; }
3659 Returns the image type.
3661 wxBitmapType
GetImageType() const { return m_imageType
; }
3665 void SetData(unsigned char* image
) { m_data
= image
; }
3670 void SetDataSize(size_t size
) { m_dataSize
= size
; }
3673 Sets the image type.
3675 void SetImageType(wxBitmapType imageType
) { m_imageType
= imageType
; }
3678 Returns @true if the data is non-NULL.
3680 bool IsOk() const { return GetData() != NULL
; }
3681 bool Ok() const { return IsOk(); }
3684 Gets the extension for the block's type.
3686 wxString
GetExtension() const;
3691 Allocates and reads from a stream as a block of memory.
3693 static unsigned char* ReadBlock(wxInputStream
& stream
, size_t size
);
3696 Allocates and reads from a file as a block of memory.
3698 static unsigned char* ReadBlock(const wxString
& filename
, size_t size
);
3701 Writes a memory block to stream.
3703 static bool WriteBlock(wxOutputStream
& stream
, unsigned char* block
, size_t size
);
3706 Writes a memory block to a file.
3708 static bool WriteBlock(const wxString
& filename
, unsigned char* block
, size_t size
);
3711 // Size in bytes of the image stored.
3712 // This is in the raw, original form such as a JPEG file.
3713 unsigned char* m_data
;
3715 wxBitmapType m_imageType
;
3719 @class wxRichTextImage
3721 This class implements a graphic object.
3723 @library{wxrichtext}
3726 @see wxRichTextBuffer, wxRichTextCtrl, wxRichTextImageBlock
3729 class WXDLLIMPEXP_RICHTEXT wxRichTextImage
: public wxRichTextObject
3731 DECLARE_DYNAMIC_CLASS(wxRichTextImage
)
3736 Default constructor.
3738 wxRichTextImage(wxRichTextObject
* parent
= NULL
): wxRichTextObject(parent
) { }
3741 Creates a wxRichTextImage from a wxImage.
3743 wxRichTextImage(const wxImage
& image
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
3746 Creates a wxRichTextImage from an image block.
3748 wxRichTextImage(const wxRichTextImageBlock
& imageBlock
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
3753 wxRichTextImage(const wxRichTextImage
& obj
): wxRichTextObject(obj
) { Copy(obj
); }
3757 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3759 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, int style
);
3761 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3764 Returns the 'natural' size for this object - the image size.
3766 virtual wxTextAttrSize
GetNaturalSize() const;
3768 virtual bool IsEmpty() const { return false; /* !m_imageBlock.IsOk(); */ }
3770 virtual bool CanEditProperties() const { return true; }
3772 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3774 virtual wxString
GetPropertiesMenuLabel() const { return _("&Picture"); }
3776 virtual bool UsesParagraphAttributes() const { return false; }
3779 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
3782 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
3783 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
3786 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
3787 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
3790 // Images can be floatable (optionally).
3791 virtual bool IsFloatable() const { return true; }
3793 virtual wxString
GetXMLNodeName() const { return wxT("image"); }
3798 Returns the image cache (a scaled bitmap).
3800 const wxBitmap
& GetImageCache() const { return m_imageCache
; }
3803 Sets the image cache.
3805 void SetImageCache(const wxBitmap
& bitmap
) { m_imageCache
= bitmap
; }
3808 Resets the image cache.
3810 void ResetImageCache() { m_imageCache
= wxNullBitmap
; }
3813 Returns the image block containing the raw data.
3815 wxRichTextImageBlock
& GetImageBlock() { return m_imageBlock
; }
3820 Copies the image object.
3822 void Copy(const wxRichTextImage
& obj
);
3825 Clones the image object.
3827 virtual wxRichTextObject
* Clone() const { return new wxRichTextImage(*this); }
3830 Creates a cached image at the required size.
3832 virtual bool LoadImageCache(wxDC
& dc
, bool resetCache
= false);
3835 wxRichTextImageBlock m_imageBlock
;
3836 wxBitmap m_imageCache
;
3839 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCommand
;
3840 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
3843 @class wxRichTextBuffer
3845 This is a kind of paragraph layout box, used to represent the whole buffer.
3847 @library{wxrichtext}
3850 @see wxRichTextParagraphLayoutBox, wxRichTextCtrl
3853 class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer
: public wxRichTextParagraphLayoutBox
3855 DECLARE_DYNAMIC_CLASS(wxRichTextBuffer
)
3860 Default constructor.
3862 wxRichTextBuffer() { Init(); }
3867 wxRichTextBuffer(const wxRichTextBuffer
& obj
): wxRichTextParagraphLayoutBox() { Init(); Copy(obj
); }
3869 virtual ~wxRichTextBuffer() ;
3874 Returns the command processor.
3875 A text buffer always creates its own command processor when it is initialized.
3877 wxCommandProcessor
* GetCommandProcessor() const { return m_commandProcessor
; }
3880 Sets style sheet, if any. This will allow the application to use named character and paragraph
3881 styles found in the style sheet.
3883 Neither the buffer nor the control owns the style sheet so must be deleted by the application.
3885 void SetStyleSheet(wxRichTextStyleSheet
* styleSheet
) { m_styleSheet
= styleSheet
; }
3888 Returns the style sheet.
3890 virtual wxRichTextStyleSheet
* GetStyleSheet() const { return m_styleSheet
; }
3893 Sets the style sheet and sends a notification of the change.
3895 bool SetStyleSheetAndNotify(wxRichTextStyleSheet
* sheet
);
3898 Pushes the style sheet to the top of the style sheet stack.
3900 bool PushStyleSheet(wxRichTextStyleSheet
* styleSheet
);
3903 Pops the style sheet from the top of the style sheet stack.
3905 wxRichTextStyleSheet
* PopStyleSheet();
3908 Returns the table storing fonts, for quick access and font reuse.
3910 wxRichTextFontTable
& GetFontTable() { return m_fontTable
; }
3913 Returns the table storing fonts, for quick access and font reuse.
3915 const wxRichTextFontTable
& GetFontTable() const { return m_fontTable
; }
3918 Sets table storing fonts, for quick access and font reuse.
3920 void SetFontTable(const wxRichTextFontTable
& table
) { m_fontTable
= table
; }
3930 Clears the buffer, adds an empty paragraph, and clears the command processor.
3932 virtual void ResetAndClearCommands();
3936 Loads content from a stream or file.
3937 Not all handlers will implement file loading.
3939 virtual bool LoadFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
3940 virtual bool LoadFile(wxInputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
3945 Saves content to a stream or file.
3946 Not all handlers will implement file saving.
3948 virtual bool SaveFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
3949 virtual bool SaveFile(wxOutputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
3953 Sets the handler flags, controlling loading and saving.
3955 void SetHandlerFlags(int flags
) { m_handlerFlags
= flags
; }
3958 Gets the handler flags, controlling loading and saving.
3960 int GetHandlerFlags() const { return m_handlerFlags
; }
3963 Convenience function to add a paragraph of text.
3965 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
) { Modify(); return wxRichTextParagraphLayoutBox::AddParagraph(text
, paraStyle
); }
3968 Begin collapsing undo/redo commands. Note that this may not work properly
3969 if combining commands that delete or insert content, changing ranges for
3972 @a cmdName should be the name of the combined command that will appear
3973 next to Undo and Redo in the edit menu.
3975 virtual bool BeginBatchUndo(const wxString
& cmdName
);
3978 End collapsing undo/redo commands.
3980 virtual bool EndBatchUndo();
3983 Returns @true if we are collapsing commands.
3985 virtual bool BatchingUndo() const { return m_batchedCommandDepth
> 0; }
3988 Submit the action immediately, or delay according to whether collapsing is on.
3990 virtual bool SubmitAction(wxRichTextAction
* action
);
3993 Returns the collapsed command.
3995 virtual wxRichTextCommand
* GetBatchedCommand() const { return m_batchedCommand
; }
3998 Begin suppressing undo/redo commands. The way undo is suppressed may be implemented
3999 differently by each command. If not dealt with by a command implementation, then
4000 it will be implemented automatically by not storing the command in the undo history
4001 when the action is submitted to the command processor.
4003 virtual bool BeginSuppressUndo();
4006 End suppressing undo/redo commands.
4008 virtual bool EndSuppressUndo();
4011 Are we suppressing undo??
4013 virtual bool SuppressingUndo() const { return m_suppressUndo
> 0; }
4016 Copy the range to the clipboard.
4018 virtual bool CopyToClipboard(const wxRichTextRange
& range
);
4021 Paste the clipboard content to the buffer.
4023 virtual bool PasteFromClipboard(long position
);
4026 Returns @true if we can paste from the clipboard.
4028 virtual bool CanPasteFromClipboard() const;
4031 Begin using a style.
4033 virtual bool BeginStyle(const wxRichTextAttr
& style
);
4038 virtual bool EndStyle();
4043 virtual bool EndAllStyles();
4046 Clears the style stack.
4048 virtual void ClearStyleStack();
4051 Returns the size of the style stack, for example to check correct nesting.
4053 virtual size_t GetStyleStackSize() const { return m_attributeStack
.GetCount(); }
4063 bool EndBold() { return EndStyle(); }
4066 Begins using italic.
4073 bool EndItalic() { return EndStyle(); }
4076 Begins using underline.
4078 bool BeginUnderline();
4081 Ends using underline.
4083 bool EndUnderline() { return EndStyle(); }
4086 Begins using point size.
4088 bool BeginFontSize(int pointSize
);
4091 Ends using point size.
4093 bool EndFontSize() { return EndStyle(); }
4096 Begins using this font.
4098 bool BeginFont(const wxFont
& font
);
4103 bool EndFont() { return EndStyle(); }
4106 Begins using this colour.
4108 bool BeginTextColour(const wxColour
& colour
);
4111 Ends using a colour.
4113 bool EndTextColour() { return EndStyle(); }
4116 Begins using alignment.
4118 bool BeginAlignment(wxTextAttrAlignment alignment
);
4123 bool EndAlignment() { return EndStyle(); }
4126 Begins using @a leftIndent for the left indent, and optionally @a leftSubIndent for
4127 the sub-indent. Both are expressed in tenths of a millimetre.
4129 The sub-indent is an offset from the left of the paragraph, and is used for all
4130 but the first line in a paragraph. A positive value will cause the first line to appear
4131 to the left of the subsequent lines, and a negative value will cause the first line to be
4132 indented relative to the subsequent lines.
4134 bool BeginLeftIndent(int leftIndent
, int leftSubIndent
= 0);
4139 bool EndLeftIndent() { return EndStyle(); }
4142 Begins a right indent, specified in tenths of a millimetre.
4144 bool BeginRightIndent(int rightIndent
);
4149 bool EndRightIndent() { return EndStyle(); }
4152 Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
4153 in tenths of a millimetre.
4155 bool BeginParagraphSpacing(int before
, int after
);
4158 Ends paragraph spacing.
4160 bool EndParagraphSpacing() { return EndStyle(); }
4163 Begins line spacing using the specified value. @e spacing is a multiple, where
4164 10 means single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
4166 The ::wxTextAttrLineSpacing enumeration values are defined for convenience.
4168 bool BeginLineSpacing(int lineSpacing
);
4173 bool EndLineSpacing() { return EndStyle(); }
4176 Begins numbered bullet.
4178 This call will be needed for each item in the list, and the
4179 application should take care of incrementing the numbering.
4181 @a bulletNumber is a number, usually starting with 1.
4182 @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
4183 @a bulletStyle is a bitlist of the following values:
4185 wxRichTextBuffer uses indentation to render a bulleted item.
4186 The left indent is the distance between the margin and the bullet.
4187 The content of the paragraph, including the first line, starts
4188 at leftMargin + leftSubIndent.
4189 So the distance between the left edge of the bullet and the
4190 left of the actual paragraph is leftSubIndent.
4192 bool BeginNumberedBullet(int bulletNumber
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_ARABIC
|wxTEXT_ATTR_BULLET_STYLE_PERIOD
);
4195 Ends numbered bullet.
4197 bool EndNumberedBullet() { return EndStyle(); }
4200 Begins applying a symbol bullet, using a character from the current font.
4202 See BeginNumberedBullet() for an explanation of how indentation is used
4203 to render the bulleted paragraph.
4205 bool BeginSymbolBullet(const wxString
& symbol
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_SYMBOL
);
4210 bool EndSymbolBullet() { return EndStyle(); }
4213 Begins applying a standard bullet, using one of the standard bullet names
4214 (currently @c standard/circle or @c standard/square.
4216 See BeginNumberedBullet() for an explanation of how indentation is used to
4217 render the bulleted paragraph.
4219 bool BeginStandardBullet(const wxString
& bulletName
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_STANDARD
);
4222 Ends standard bullet.
4224 bool EndStandardBullet() { return EndStyle(); }
4227 Begins named character style.
4229 bool BeginCharacterStyle(const wxString
& characterStyle
);
4232 Ends named character style.
4234 bool EndCharacterStyle() { return EndStyle(); }
4237 Begins named paragraph style.
4239 bool BeginParagraphStyle(const wxString
& paragraphStyle
);
4242 Ends named character style.
4244 bool EndParagraphStyle() { return EndStyle(); }
4247 Begins named list style.
4249 Optionally, you can also pass a level and a number.
4251 bool BeginListStyle(const wxString
& listStyle
, int level
= 1, int number
= 1);
4254 Ends named character style.
4256 bool EndListStyle() { return EndStyle(); }
4259 Begins applying wxTEXT_ATTR_URL to the content.
4261 Pass a URL and optionally, a character style to apply, since it is common
4262 to mark a URL with a familiar style such as blue text with underlining.
4264 bool BeginURL(const wxString
& url
, const wxString
& characterStyle
= wxEmptyString
);
4269 bool EndURL() { return EndStyle(); }
4274 Adds an event handler.
4276 A buffer associated with a control has the control as the only event handler,
4277 but the application is free to add more if further notification is required.
4278 All handlers are notified of an event originating from the buffer, such as
4279 the replacement of a style sheet during loading.
4281 The buffer never deletes any of the event handlers, unless RemoveEventHandler()
4282 is called with @true as the second argument.
4284 bool AddEventHandler(wxEvtHandler
* handler
);
4287 Removes an event handler from the buffer's list of handlers, deleting the
4288 object if @a deleteHandler is @true.
4290 bool RemoveEventHandler(wxEvtHandler
* handler
, bool deleteHandler
= false);
4293 Clear event handlers.
4295 void ClearEventHandlers();
4298 Send event to event handlers. If sendToAll is true, will send to all event handlers,
4299 otherwise will stop at the first successful one.
4301 bool SendEvent(wxEvent
& event
, bool sendToAll
= true);
4305 virtual int HitTest(wxDC
& dc
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
4310 void Copy(const wxRichTextBuffer
& obj
);
4313 Assignment operator.
4315 void operator= (const wxRichTextBuffer
& obj
) { Copy(obj
); }
4320 virtual wxRichTextObject
* Clone() const { return new wxRichTextBuffer(*this); }
4323 Submits a command to insert paragraphs.
4325 bool InsertParagraphsWithUndo(wxRichTextCtrl
* ctrl
, long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, int flags
= 0);
4328 Submits a command to insert the given text.
4330 bool InsertTextWithUndo(long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4333 Submits a command to insert a newline.
4335 bool InsertNewlineWithUndo(long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4338 Submits a command to insert the given image.
4340 bool InsertImageWithUndo(long pos
, const wxRichTextImageBlock
& imageBlock
, wxRichTextCtrl
* ctrl
, int flags
= 0,
4341 const wxRichTextAttr
& textAttr
= wxRichTextAttr());
4344 Submits a command to insert an object.
4346 wxRichTextObject
* InsertObjectWithUndo(long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
);
4349 Submits a command to delete this range.
4351 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
);
4356 void Modify(bool modify
= true) { m_modified
= modify
; }
4359 Returns @true if the buffer was modified.
4361 bool IsModified() const { return m_modified
; }
4365 Dumps contents of buffer for debugging purposes.
4367 virtual void Dump();
4368 virtual void Dump(wxTextOutputStream
& stream
) { wxRichTextParagraphLayoutBox::Dump(stream
); }
4372 Returns the file handlers.
4374 static wxList
& GetHandlers() { return sm_handlers
; }
4377 Adds a file handler to the end.
4379 static void AddHandler(wxRichTextFileHandler
*handler
);
4382 Inserts a file handler at the front.
4384 static void InsertHandler(wxRichTextFileHandler
*handler
);
4387 Removes a file handler.
4389 static bool RemoveHandler(const wxString
& name
);
4392 Finds a file handler by name.
4394 static wxRichTextFileHandler
*FindHandler(const wxString
& name
);
4397 Finds a file handler by extension and type.
4399 static wxRichTextFileHandler
*FindHandler(const wxString
& extension
, wxRichTextFileType imageType
);
4402 Finds a handler by filename or, if supplied, type.
4404 static wxRichTextFileHandler
*FindHandlerFilenameOrType(const wxString
& filename
,
4405 wxRichTextFileType imageType
);
4408 Finds a handler by type.
4410 static wxRichTextFileHandler
*FindHandler(wxRichTextFileType imageType
);
4413 Gets a wildcard incorporating all visible handlers. If @a types is present,
4414 it will be filled with the file type corresponding to each filter. This can be
4415 used to determine the type to pass to LoadFile given a selected filter.
4417 static wxString
GetExtWildcard(bool combine
= false, bool save
= false, wxArrayInt
* types
= NULL
);
4420 Clean up file handlers.
4422 static void CleanUpHandlers();
4425 Initialise the standard file handlers.
4426 Currently, only the plain text loading/saving handler is initialised by default.
4428 static void InitStandardHandlers();
4431 Returns the renderer object.
4433 static wxRichTextRenderer
* GetRenderer() { return sm_renderer
; }
4436 Sets @a renderer as the object to be used to render certain aspects of the
4437 content, such as bullets.
4439 You can override default rendering by deriving a new class from
4440 wxRichTextRenderer or wxRichTextStdRenderer, overriding one or more
4441 virtual functions, and setting an instance of the class using this function.
4443 static void SetRenderer(wxRichTextRenderer
* renderer
);
4446 Returns the minimum margin between bullet and paragraph in 10ths of a mm.
4448 static int GetBulletRightMargin() { return sm_bulletRightMargin
; }
4451 Sets the minimum margin between bullet and paragraph in 10ths of a mm.
4453 static void SetBulletRightMargin(int margin
) { sm_bulletRightMargin
= margin
; }
4456 Returns the factor to multiply by character height to get a reasonable bullet size.
4458 static float GetBulletProportion() { return sm_bulletProportion
; }
4461 Sets the factor to multiply by character height to get a reasonable bullet size.
4463 static void SetBulletProportion(float prop
) { sm_bulletProportion
= prop
; }
4466 Returns the scale factor for calculating dimensions.
4468 double GetScale() const { return m_scale
; }
4471 Sets the scale factor for calculating dimensions.
4473 void SetScale(double scale
) { m_scale
= scale
; }
4477 /// Command processor
4478 wxCommandProcessor
* m_commandProcessor
;
4480 /// Table storing fonts
4481 wxRichTextFontTable m_fontTable
;
4483 /// Has been modified?
4486 /// Collapsed command stack
4487 int m_batchedCommandDepth
;
4489 /// Name for collapsed command
4490 wxString m_batchedCommandsName
;
4492 /// Current collapsed command accumulating actions
4493 wxRichTextCommand
* m_batchedCommand
;
4495 /// Whether to suppress undo
4498 /// Style sheet, if any
4499 wxRichTextStyleSheet
* m_styleSheet
;
4501 /// List of event handlers that will be notified of events
4502 wxList m_eventHandlers
;
4504 /// Stack of attributes for convenience functions
4505 wxList m_attributeStack
;
4507 /// Flags to be passed to handlers
4511 static wxList sm_handlers
;
4514 static wxRichTextRenderer
* sm_renderer
;
4516 /// Minimum margin between bullet and paragraph in 10ths of a mm
4517 static int sm_bulletRightMargin
;
4519 /// Factor to multiply by character height to get a reasonable bullet size
4520 static float sm_bulletProportion
;
4522 /// Scaling factor in use: needed to calculate correct dimensions when printing
4527 @class wxRichTextCell
4529 wxRichTextCell is the cell in a table.
4532 class WXDLLIMPEXP_RICHTEXT wxRichTextCell
: public wxRichTextBox
4534 DECLARE_DYNAMIC_CLASS(wxRichTextCell
)
4539 Default constructor; optionally pass the parent object.
4542 wxRichTextCell(wxRichTextObject
* parent
= NULL
);
4548 wxRichTextCell(const wxRichTextCell
& obj
): wxRichTextBox() { Copy(obj
); }
4552 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4554 virtual wxString
GetXMLNodeName() const { return wxT("cell"); }
4556 virtual bool CanEditProperties() const { return true; }
4558 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
4560 virtual wxString
GetPropertiesMenuLabel() const { return _("&Cell"); }
4566 virtual wxRichTextObject
* Clone() const { return new wxRichTextCell(*this); }
4568 void Copy(const wxRichTextCell
& obj
);
4574 @class wxRichTextTable
4576 wxRichTextTable represents a table with arbitrary columns and rows.
4579 WX_DEFINE_ARRAY_PTR(wxRichTextObject
*, wxRichTextObjectPtrArray
);
4580 WX_DECLARE_OBJARRAY(wxRichTextObjectPtrArray
, wxRichTextObjectPtrArrayArray
);
4582 class WXDLLIMPEXP_RICHTEXT wxRichTextTable
: public wxRichTextBox
4584 DECLARE_DYNAMIC_CLASS(wxRichTextTable
)
4590 Default constructor; optionally pass the parent object.
4593 wxRichTextTable(wxRichTextObject
* parent
= NULL
);
4599 wxRichTextTable(const wxRichTextTable
& obj
): wxRichTextBox() { Copy(obj
); }
4603 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4605 virtual wxString
GetXMLNodeName() const { return wxT("table"); }
4607 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, int style
);
4609 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
4611 virtual bool DeleteRange(const wxRichTextRange
& range
);
4613 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
4616 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4619 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4620 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4623 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4624 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4627 virtual bool FindPosition(wxDC
& dc
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
4629 virtual void CalculateRange(long start
, long& end
);
4631 // Can this object handle the selections of its children? FOr example, a table.
4632 virtual bool HandlesChildSelections() const { return true; }
4634 /// Returns a selection object specifying the selections between start and end character positions.
4635 /// For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
4636 virtual wxRichTextSelection
GetSelection(long start
, long end
) const;
4638 virtual bool CanEditProperties() const { return true; }
4640 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
4642 virtual wxString
GetPropertiesMenuLabel() const { return _("&Table"); }
4644 // Returns true if objects of this class can accept the focus, i.e. a call to SetFocusObject
4645 // is possible. For example, containers supporting text, such as a text box object, can accept the focus,
4646 // but a table can't (set the focus to individual cells instead).
4647 virtual bool AcceptsFocus() const { return false; }
4652 Returns the cells array.
4654 const wxRichTextObjectPtrArrayArray
& GetCells() const { return m_cells
; }
4657 Returns the cells array.
4659 wxRichTextObjectPtrArrayArray
& GetCells() { return m_cells
; }
4662 Returns the row count.
4664 int GetRowCount() const { return m_rowCount
; }
4667 Returns the column count.
4669 int GetColumnCount() const { return m_colCount
; }
4672 Returns the cell at the given row/column position.
4674 virtual wxRichTextCell
* GetCell(int row
, int col
) const;
4677 Returns the cell at the given character position (in the range of the table).
4679 virtual wxRichTextCell
* GetCell(long pos
) const;
4682 Returns the row/column for a given character position.
4684 virtual bool GetCellRowColumnPosition(long pos
, int& row
, int& col
) const;
4692 virtual void ClearTable();
4695 Creates a table of the given dimensions.
4698 virtual bool CreateTable(int rows
, int cols
);
4701 Sets the attributes for the cells specified by the selection.
4704 virtual bool SetCellStyle(const wxRichTextSelection
& selection
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
4707 Deletes rows from the given row position.
4710 virtual bool DeleteRows(int startRow
, int noRows
= 1);
4713 Deletes columns from the given column position.
4716 virtual bool DeleteColumns(int startCol
, int noCols
= 1);
4719 Adds rows from the given row position.
4722 virtual bool AddRows(int startRow
, int noRows
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
4725 Adds columns from the given column position.
4728 virtual bool AddColumns(int startCol
, int noCols
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
4730 // Makes a clone of this object.
4731 virtual wxRichTextObject
* Clone() const { return new wxRichTextTable(*this); }
4733 // Copies this object.
4734 void Copy(const wxRichTextTable
& obj
);
4741 // An array of rows, each of which is a wxRichTextObjectPtrArray containing
4742 // the cell objects. The cell objects are also children of this object.
4743 // Problem: if boxes are immediate children of a box, this will cause problems
4744 // with wxRichTextParagraphLayoutBox functions (and functions elsewhere) that
4745 // expect to find just paragraphs. May have to adjust the way we handle the
4746 // hierarchy to accept non-paragraph objects in a paragraph layout box.
4747 // We'll be overriding much wxRichTextParagraphLayoutBox functionality so this
4748 // may not be such a problem. Perhaps the table should derive from a different
4750 wxRichTextObjectPtrArrayArray m_cells
;
4755 The command identifiers for Do/Undo.
4758 enum wxRichTextCommandId
4762 wxRICHTEXT_CHANGE_ATTRIBUTES
,
4763 wxRICHTEXT_CHANGE_STYLE
,
4764 wxRICHTEXT_CHANGE_OBJECT
4768 @class wxRichTextObjectAddress
4770 A class for specifying an object anywhere in an object hierarchy,
4771 without using a pointer, necessary since wxRTC commands may delete
4772 and recreate sub-objects so physical object addresses change. An array
4773 of positions (one per hierarchy level) is used.
4775 @library{wxrichtext}
4778 @see wxRichTextCommand
4781 class WXDLLIMPEXP_RICHTEXT wxRichTextObjectAddress
4785 Creates the address given a container and an object.
4787 wxRichTextObjectAddress(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
) { Create(topLevelContainer
, obj
); }
4790 wxRichTextObjectAddress() { Init(); }
4793 wxRichTextObjectAddress(const wxRichTextObjectAddress
& address
) { Copy(address
); }
4800 void Copy(const wxRichTextObjectAddress
& address
) { m_address
= address
.m_address
; }
4803 Assignment operator.
4805 void operator=(const wxRichTextObjectAddress
& address
) { Copy(address
); }
4808 Returns the object specified by the address, given a top level container.
4810 wxRichTextObject
* GetObject(wxRichTextParagraphLayoutBox
* topLevelContainer
) const;
4813 Creates the address given a container and an object.
4815 bool Create(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
);
4818 Returns the array of integers representing the object address.
4820 wxArrayInt
& GetAddress() { return m_address
; }
4823 Returns the array of integers representing the object address.
4825 const wxArrayInt
& GetAddress() const { return m_address
; }
4828 Sets the address from an array of integers.
4830 void SetAddress(const wxArrayInt
& address
) { m_address
= address
; }
4834 wxArrayInt m_address
;
4837 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
4840 @class wxRichTextCommand
4842 Implements a command on the undo/redo stack. A wxRichTextCommand object contains one or more wxRichTextAction
4843 objects, allowing aggregation of a number of operations into one command.
4845 @library{wxrichtext}
4848 @see wxRichTextAction
4851 class WXDLLIMPEXP_RICHTEXT wxRichTextCommand
: public wxCommand
4855 Constructor for one action.
4857 wxRichTextCommand(const wxString
& name
, wxRichTextCommandId id
, wxRichTextBuffer
* buffer
,
4858 wxRichTextParagraphLayoutBox
* container
, wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
4861 Constructor for multiple actions.
4863 wxRichTextCommand(const wxString
& name
);
4865 virtual ~wxRichTextCommand();
4868 Performs the command.
4878 Adds an action to the action list.
4880 void AddAction(wxRichTextAction
* action
);
4883 Clears the action list.
4885 void ClearActions();
4888 Returns the action list.
4890 wxList
& GetActions() { return m_actions
; }
4898 @class wxRichTextAction
4900 Implements a part of a command.
4902 @library{wxrichtext}
4905 @see wxRichTextCommand
4908 class WXDLLIMPEXP_RICHTEXT wxRichTextAction
: public wxObject
4912 Constructor. @a buffer is the top-level buffer, while @a container is the object within
4913 which the action is taking place. In the simplest case, they are the same.
4915 wxRichTextAction(wxRichTextCommand
* cmd
, const wxString
& name
, wxRichTextCommandId id
,
4916 wxRichTextBuffer
* buffer
, wxRichTextParagraphLayoutBox
* container
,
4917 wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
4919 virtual ~wxRichTextAction();
4922 Performs the action.
4932 Updates the control appearance, optimizing if possible given information from the call to Layout.
4934 void UpdateAppearance(long caretPosition
, bool sendUpdateEvent
= false,
4935 wxArrayInt
* optimizationLineCharPositions
= NULL
, wxArrayInt
* optimizationLineYPositions
= NULL
, bool isDoCmd
= true);
4938 Replaces the buffer paragraphs with the given fragment.
4940 void ApplyParagraphs(const wxRichTextParagraphLayoutBox
& fragment
);
4943 Returns the new fragments.
4945 wxRichTextParagraphLayoutBox
& GetNewParagraphs() { return m_newParagraphs
; }
4948 Returns the old fragments.
4950 wxRichTextParagraphLayoutBox
& GetOldParagraphs() { return m_oldParagraphs
; }
4953 Returns the attributes, for single-object commands.
4955 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
4958 Returns the object to replace the one at the position defined by the container address
4959 and the action's range start position.
4961 wxRichTextObject
* GetObject() const { return m_object
; }
4964 Sets the object to replace the one at the position defined by the container address
4965 and the action's range start position.
4967 void SetObject(wxRichTextObject
* obj
) { m_object
= obj
; m_objectAddress
.Create(m_buffer
, m_object
); }
4970 Makes an address from the given object.
4972 void MakeObject(wxRichTextObject
* obj
) { m_objectAddress
.Create(m_buffer
, obj
); }
4975 Calculate arrays for refresh optimization.
4977 void CalculateRefreshOptimizations(wxArrayInt
& optimizationLineCharPositions
, wxArrayInt
& optimizationLineYPositions
);
4980 Sets the position used for e.g. insertion.
4982 void SetPosition(long pos
) { m_position
= pos
; }
4985 Returns the position used for e.g. insertion.
4987 long GetPosition() const { return m_position
; }
4990 Sets the range for e.g. deletion.
4992 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
4995 Returns the range for e.g. deletion.
4997 const wxRichTextRange
& GetRange() const { return m_range
; }
5000 Returns the address (nested position) of the container within the buffer being manipulated.
5002 wxRichTextObjectAddress
& GetContainerAddress() { return m_containerAddress
; }
5005 Returns the address (nested position) of the container within the buffer being manipulated.
5007 const wxRichTextObjectAddress
& GetContainerAddress() const { return m_containerAddress
; }
5010 Sets the address (nested position) of the container within the buffer being manipulated.
5012 void SetContainerAddress(const wxRichTextObjectAddress
& address
) { m_containerAddress
= address
; }
5015 Sets the address (nested position) of the container within the buffer being manipulated.
5017 void SetContainerAddress(wxRichTextParagraphLayoutBox
* container
, wxRichTextObject
* obj
) { m_containerAddress
.Create(container
, obj
); }
5020 Returns the container that this action refers to, using the container address and top-level buffer.
5022 wxRichTextParagraphLayoutBox
* GetContainer() const;
5025 Returns the action name.
5027 const wxString
& GetName() const { return m_name
; }
5034 wxRichTextBuffer
* m_buffer
;
5036 // The address (nested position) of the container being manipulated.
5037 // This is necessary because objects are deleted, and we can't
5038 // therefore store actual pointers.
5039 wxRichTextObjectAddress m_containerAddress
;
5042 wxRichTextCtrl
* m_ctrl
;
5044 // Stores the new paragraphs
5045 wxRichTextParagraphLayoutBox m_newParagraphs
;
5047 // Stores the old paragraphs
5048 wxRichTextParagraphLayoutBox m_oldParagraphs
;
5050 // Stores an object to replace the one at the position
5051 // defined by the container address and the action's range start position.
5052 wxRichTextObject
* m_object
;
5054 // Stores the attributes
5055 wxRichTextAttr m_attributes
;
5057 // The address of the object being manipulated (used for changing an individual object or its attributes)
5058 wxRichTextObjectAddress m_objectAddress
;
5060 // Stores the old attributes
5061 // wxRichTextAttr m_oldAttributes;
5063 // The affected range
5064 wxRichTextRange m_range
;
5066 // The insertion point for this command
5069 // Ignore 1st 'Do' operation because we already did it
5072 // The command identifier
5073 wxRichTextCommandId m_cmdId
;
5080 // Include style sheet when loading and saving
5081 #define wxRICHTEXT_HANDLER_INCLUDE_STYLESHEET 0x0001
5083 // Save images to memory file system in HTML handler
5084 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY 0x0010
5086 // Save images to files in HTML handler
5087 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_FILES 0x0020
5089 // Save images as inline base64 data in HTML handler
5090 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_BASE64 0x0040
5092 // Don't write header and footer (or BODY), so we can include the fragment
5093 // in a larger document
5094 #define wxRICHTEXT_HANDLER_NO_HEADER_FOOTER 0x0080
5096 // Convert the more common face names to names that will work on the current platform
5097 // in a larger document
5098 #define wxRICHTEXT_HANDLER_CONVERT_FACENAMES 0x0100
5101 @class wxRichTextFileHandler
5103 The base class for file handlers.
5105 @library{wxrichtext}
5108 @see wxRichTextBuffer, wxRichTextCtrl
5111 class WXDLLIMPEXP_RICHTEXT wxRichTextFileHandler
: public wxObject
5113 DECLARE_CLASS(wxRichTextFileHandler
)
5116 Creates a file handler object.
5118 wxRichTextFileHandler(const wxString
& name
= wxEmptyString
, const wxString
& ext
= wxEmptyString
, int type
= 0)
5119 : m_name(name
), m_extension(ext
), m_type(type
), m_flags(0), m_visible(true)
5124 Loads the buffer from a stream.
5125 Not all handlers will implement file loading.
5127 bool LoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
)
5128 { return DoLoadFile(buffer
, stream
); }
5131 Saves the buffer to a stream.
5132 Not all handlers will implement file saving.
5134 bool SaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
)
5135 { return DoSaveFile(buffer
, stream
); }
5138 #if wxUSE_FFILE && wxUSE_STREAMS
5140 Loads the buffer from a file.
5142 virtual bool LoadFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5145 Saves the buffer to a file.
5147 virtual bool SaveFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5148 #endif // wxUSE_STREAMS && wxUSE_STREAMS
5151 Returns @true if we handle this filename (if using files). By default, checks the extension.
5153 virtual bool CanHandle(const wxString
& filename
) const;
5156 Returns @true if we can save using this handler.
5158 virtual bool CanSave() const { return false; }
5161 Returns @true if we can load using this handler.
5163 virtual bool CanLoad() const { return false; }
5166 Returns @true if this handler should be visible to the user.
5168 virtual bool IsVisible() const { return m_visible
; }
5171 Sets whether the handler should be visible to the user (via the application's
5172 load and save dialogs).
5174 virtual void SetVisible(bool visible
) { m_visible
= visible
; }
5177 Sets the name of the nandler.
5179 void SetName(const wxString
& name
) { m_name
= name
; }
5182 Returns the name of the nandler.
5184 wxString
GetName() const { return m_name
; }
5187 Sets the default extension to recognise.
5189 void SetExtension(const wxString
& ext
) { m_extension
= ext
; }
5192 Returns the default extension to recognise.
5194 wxString
GetExtension() const { return m_extension
; }
5197 Sets the handler type.
5199 void SetType(int type
) { m_type
= type
; }
5202 Returns the handler type.
5204 int GetType() const { return m_type
; }
5207 Sets flags that change the behaviour of loading or saving.
5208 See the documentation for each handler class to see what flags are relevant
5211 You call this function directly if you are using a file handler explicitly
5212 (without going through the text control or buffer LoadFile/SaveFile API).
5213 Or, you can call the control or buffer's SetHandlerFlags function to set
5214 the flags that will be used for subsequent load and save operations.
5216 void SetFlags(int flags
) { m_flags
= flags
; }
5219 Returns flags controlling how loading and saving is done.
5221 int GetFlags() const { return m_flags
; }
5224 Sets the encoding to use when saving a file. If empty, a suitable encoding is chosen.
5226 void SetEncoding(const wxString
& encoding
) { m_encoding
= encoding
; }
5229 Returns the encoding to use when saving a file. If empty, a suitable encoding is chosen.
5231 const wxString
& GetEncoding() const { return m_encoding
; }
5237 Override to load content from @a stream into @a buffer.
5239 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
) = 0;
5242 Override to save content to @a stream from @a buffer.
5244 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
) = 0;
5248 wxString m_encoding
;
5249 wxString m_extension
;
5256 @class wxRichTextPlainTextHandler
5258 Implements saving a buffer to plain text.
5260 @library{wxrichtext}
5263 @see wxRichTextFileHandler, wxRichTextBuffer, wxRichTextCtrl
5266 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainTextHandler
: public wxRichTextFileHandler
5268 DECLARE_CLASS(wxRichTextPlainTextHandler
)
5270 wxRichTextPlainTextHandler(const wxString
& name
= wxT("Text"),
5271 const wxString
& ext
= wxT("txt"),
5272 wxRichTextFileType type
= wxRICHTEXT_TYPE_TEXT
)
5273 : wxRichTextFileHandler(name
, ext
, type
)
5276 // Can we save using this handler?
5277 virtual bool CanSave() const { return true; }
5279 // Can we load using this handler?
5280 virtual bool CanLoad() const { return true; }
5285 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
);
5286 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
);
5294 @class wxRichTextBufferDataObject
5296 Implements a rich text data object for clipboard transfer.
5298 @library{wxrichtext}
5301 @see wxDataObjectSimple, wxRichTextBuffer, wxRichTextCtrl
5304 class WXDLLIMPEXP_RICHTEXT wxRichTextBufferDataObject
: public wxDataObjectSimple
5308 The constructor doesn't copy the pointer, so it shouldn't go away while this object
5311 wxRichTextBufferDataObject(wxRichTextBuffer
* richTextBuffer
= NULL
);
5312 virtual ~wxRichTextBufferDataObject();
5315 After a call to this function, the buffer is owned by the caller and it
5316 is responsible for deleting it.
5318 wxRichTextBuffer
* GetRichTextBuffer();
5321 Returns the id for the new data format.
5323 static const wxChar
* GetRichTextBufferFormatId() { return ms_richTextBufferFormatId
; }
5325 // base class pure virtuals
5327 virtual wxDataFormat
GetPreferredFormat(Direction dir
) const;
5328 virtual size_t GetDataSize() const;
5329 virtual bool GetDataHere(void *pBuf
) const;
5330 virtual bool SetData(size_t len
, const void *buf
);
5334 virtual size_t GetDataSize(const wxDataFormat
&) const { return GetDataSize(); }
5335 virtual bool GetDataHere(const wxDataFormat
&, void *buf
) const { return GetDataHere(buf
); }
5336 virtual bool SetData(const wxDataFormat
&, size_t len
, const void *buf
) { return SetData(len
, buf
); }
5339 wxDataFormat m_formatRichTextBuffer
; // our custom format
5340 wxRichTextBuffer
* m_richTextBuffer
; // our data
5341 static const wxChar
* ms_richTextBufferFormatId
; // our format id
5347 @class wxRichTextRenderer
5349 This class isolates some common drawing functionality.
5351 @library{wxrichtext}
5354 @see wxRichTextBuffer, wxRichTextCtrl
5357 class WXDLLIMPEXP_RICHTEXT wxRichTextRenderer
: public wxObject
5363 wxRichTextRenderer() {}
5364 virtual ~wxRichTextRenderer() {}
5367 Draws a standard bullet, as specified by the value of GetBulletName. This function should be overridden.
5369 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
5372 Draws a bullet that can be described by text, such as numbered or symbol bullets. This function should be overridden.
5374 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
) = 0;
5377 Draws a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName. This function should be overridden.
5379 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
5382 Enumerate the standard bullet names currently supported. This function should be overridden.
5384 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
) = 0;
5388 @class wxRichTextStdRenderer
5390 The standard renderer for drawing bullets.
5392 @library{wxrichtext}
5395 @see wxRichTextRenderer, wxRichTextBuffer, wxRichTextCtrl
5398 class WXDLLIMPEXP_RICHTEXT wxRichTextStdRenderer
: public wxRichTextRenderer
5404 wxRichTextStdRenderer() {}
5406 // Draw a standard bullet, as specified by the value of GetBulletName
5407 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
5409 // Draw a bullet that can be described by text, such as numbered or symbol bullets
5410 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
);
5412 // Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
5413 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
5415 // Enumerate the standard bullet names currently supported
5416 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
);
5424 inline bool wxRichTextHasStyle(int flags
, int style
)
5426 return ((flags
& style
) == style
);
5429 /// Compare two attribute objects
5430 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
5431 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
5433 /// Compare two attribute objects, but take into account the flags
5434 /// specifying attributes of interest.
5435 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEqPartial(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
5437 /// Apply one style to another
5438 WXDLLIMPEXP_RICHTEXT
bool wxRichTextApplyStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
* compareWith
= NULL
);
5440 // Remove attributes
5441 WXDLLIMPEXP_RICHTEXT
bool wxRichTextRemoveStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
);
5443 /// Combine two bitlists
5444 WXDLLIMPEXP_RICHTEXT
bool wxRichTextCombineBitlists(int& valueA
, int valueB
, int& flagsA
, int flagsB
);
5446 /// Compare two bitlists
5447 WXDLLIMPEXP_RICHTEXT
bool wxRichTextBitlistsEqPartial(int valueA
, int valueB
, int flags
);
5449 /// Split into paragraph and character styles
5450 WXDLLIMPEXP_RICHTEXT
bool wxRichTextSplitParaCharStyles(const wxRichTextAttr
& style
, wxRichTextAttr
& parStyle
, wxRichTextAttr
& charStyle
);
5453 WXDLLIMPEXP_RICHTEXT
bool wxRichTextTabsEq(const wxArrayInt
& tabs1
, const wxArrayInt
& tabs2
);
5455 /// Convert a decimal to Roman numerals
5456 WXDLLIMPEXP_RICHTEXT wxString
wxRichTextDecimalToRoman(long n
);
5458 // Collects the attributes that are common to a range of content, building up a note of
5459 // which attributes are absent in some objects and which clash in some objects.
5460 WXDLLIMPEXP_RICHTEXT
void wxTextAttrCollectCommonAttributes(wxTextAttr
& currentStyle
, const wxTextAttr
& attr
, wxTextAttr
& clashingAttr
, wxTextAttr
& absentAttr
);
5462 WXDLLIMPEXP_RICHTEXT
void wxRichTextModuleInit();