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 /////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_RICHTEXTBUFFER_H_
13 #define _WX_RICHTEXTBUFFER_H_
20 Data is represented by a hierarchy of objects, all derived from
23 The top of the hierarchy is the buffer, a kind of wxRichTextParagraphLayoutBox.
24 These boxes will allow flexible placement of text boxes on a page, but
25 for now there is a single box representing the document, and this box is
26 a wxRichTextParagraphLayoutBox which contains further wxRichTextParagraph
27 objects, each of which can include text and images.
29 Each object maintains a range (start and end position) measured
30 from the start of the main parent box.
31 A paragraph object knows its range, and a text fragment knows its range
32 too. So, a character or image in a page has a position relative to the
33 start of the document, and a character in an embedded text box has
34 a position relative to that text box. For now, we will not be dealing with
35 embedded objects but it's something to bear in mind for later.
37 Note that internally, a range (5,5) represents a range of one character.
38 In the public wx[Rich]TextCtrl API, this would be passed to e.g. SetSelection
39 as (5,6). A paragraph with one character might have an internal range of (0, 1)
40 since the end of the paragraph takes up one position.
45 When Layout is called on an object, it is given a size which the object
46 must limit itself to, or one or more flexible directions (vertical
47 or horizontal). So for example a centered paragraph is given the page
48 width to play with (minus any margins), but can extend indefinitely
49 in the vertical direction. The implementation of Layout can then
50 cache the calculated size and position within the parent.
63 #include "wx/textctrl.h"
64 #include "wx/bitmap.h"
66 #include "wx/cmdproc.h"
67 #include "wx/txtstrm.h"
68 #include "wx/variant.h"
71 #include "wx/dataobj.h"
75 //#define wxRichTextAttr wxTextAttr
76 #define wxTextAttrEx wxTextAttr
78 // Setting wxRICHTEXT_USE_OWN_CARET to 1 implements a
79 // caret reliably without using wxClientDC in case there
80 // are platform-specific problems with the generic caret.
81 #if defined(__WXGTK__) || defined(__WXMAC__)
82 #define wxRICHTEXT_USE_OWN_CARET 1
84 #define wxRICHTEXT_USE_OWN_CARET 0
87 // Switch off for binary compatibility, on for faster drawing
88 // Note: this seems to be buggy (overzealous use of extents) so
90 #define wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING 0
92 // The following two symbols determine whether an output implementation
93 // is present. To switch the relevant one on, set wxRICHTEXT_USE_XMLDOCUMENT_OUTPUT in
94 // richtextxml.cpp. By default, the faster direct output implementation is used.
96 // Include the wxXmlDocument implementation for output
97 #define wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT 1
99 // Include the faster, direct implementation for output
100 #define wxRICHTEXT_HAVE_DIRECT_OUTPUT 1
103 The line break character that can be embedded in content.
106 extern WXDLLIMPEXP_RICHTEXT
const wxChar wxRichTextLineBreakChar
;
109 File types in wxRichText context.
111 enum wxRichTextFileType
113 wxRICHTEXT_TYPE_ANY
= 0,
114 wxRICHTEXT_TYPE_TEXT
,
116 wxRICHTEXT_TYPE_HTML
,
122 * Forward declarations
125 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCtrl
;
126 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextObject
;
127 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextImage
;
128 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCacheObject
;
129 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextObjectList
;
130 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextLine
;
131 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextParagraph
;
132 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextFileHandler
;
133 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextStyleSheet
;
134 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextListStyleDefinition
;
135 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextEvent
;
136 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextRenderer
;
137 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextBuffer
;
138 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextXMLHandler
;
139 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextParagraphLayoutBox
;
140 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextImageBlock
;
141 class WXDLLIMPEXP_FWD_XML wxXmlNode
;
142 class wxRichTextFloatCollector
;
143 class WXDLLIMPEXP_FWD_BASE wxDataInputStream
;
144 class WXDLLIMPEXP_FWD_BASE wxDataOutputStream
;
147 Flags determining the available space, passed to Layout.
150 #define wxRICHTEXT_FIXED_WIDTH 0x01
151 #define wxRICHTEXT_FIXED_HEIGHT 0x02
152 #define wxRICHTEXT_VARIABLE_WIDTH 0x04
153 #define wxRICHTEXT_VARIABLE_HEIGHT 0x08
155 // Only lay out the part of the buffer that lies within
156 // the rect passed to Layout.
157 #define wxRICHTEXT_LAYOUT_SPECIFIED_RECT 0x10
160 Flags to pass to Draw
163 // Ignore paragraph cache optimization, e.g. for printing purposes
164 // where one line may be drawn higher (on the next page) compared
165 // with the previous line
166 #define wxRICHTEXT_DRAW_IGNORE_CACHE 0x01
167 #define wxRICHTEXT_DRAW_SELECTED 0x02
168 #define wxRICHTEXT_DRAW_PRINT 0x04
169 #define wxRICHTEXT_DRAW_GUIDELINES 0x08
172 Flags returned from hit-testing, or passed to hit-test function.
174 enum wxRichTextHitTestFlags
176 // The point was not on this object
177 wxRICHTEXT_HITTEST_NONE
= 0x01,
179 // The point was before the position returned from HitTest
180 wxRICHTEXT_HITTEST_BEFORE
= 0x02,
182 // The point was after the position returned from HitTest
183 wxRICHTEXT_HITTEST_AFTER
= 0x04,
185 // The point was on the position returned from HitTest
186 wxRICHTEXT_HITTEST_ON
= 0x08,
188 // The point was on space outside content
189 wxRICHTEXT_HITTEST_OUTSIDE
= 0x10,
191 // Only do hit-testing at the current level (don't traverse into top-level objects)
192 wxRICHTEXT_HITTEST_NO_NESTED_OBJECTS
= 0x20,
194 // Ignore floating objects
195 wxRICHTEXT_HITTEST_NO_FLOATING_OBJECTS
= 0x40
199 Flags for GetRangeSize.
202 #define wxRICHTEXT_FORMATTED 0x01
203 #define wxRICHTEXT_UNFORMATTED 0x02
204 #define wxRICHTEXT_CACHE_SIZE 0x04
205 #define wxRICHTEXT_HEIGHT_ONLY 0x08
208 Flags for SetStyle/SetListStyle.
211 #define wxRICHTEXT_SETSTYLE_NONE 0x00
213 // Specifies that this operation should be undoable
214 #define wxRICHTEXT_SETSTYLE_WITH_UNDO 0x01
216 // Specifies that the style should not be applied if the
217 // combined style at this point is already the style in question.
218 #define wxRICHTEXT_SETSTYLE_OPTIMIZE 0x02
220 // Specifies that the style should only be applied to paragraphs,
221 // and not the content. This allows content styling to be
222 // preserved independently from that of e.g. a named paragraph style.
223 #define wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY 0x04
225 // Specifies that the style should only be applied to characters,
226 // and not the paragraph. This allows content styling to be
227 // preserved independently from that of e.g. a named paragraph style.
228 #define wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY 0x08
230 // For SetListStyle only: specifies starting from the given number, otherwise
231 // deduces number from existing attributes
232 #define wxRICHTEXT_SETSTYLE_RENUMBER 0x10
234 // For SetListStyle only: specifies the list level for all paragraphs, otherwise
235 // the current indentation will be used
236 #define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20
238 // Resets the existing style before applying the new style
239 #define wxRICHTEXT_SETSTYLE_RESET 0x40
241 // Removes the given style instead of applying it
242 #define wxRICHTEXT_SETSTYLE_REMOVE 0x80
245 Flags for SetProperties.
248 #define wxRICHTEXT_SETPROPERTIES_NONE 0x00
250 // Specifies that this operation should be undoable
251 #define wxRICHTEXT_SETPROPERTIES_WITH_UNDO 0x01
253 // Specifies that the properties should only be applied to paragraphs,
254 // and not the content.
255 #define wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY 0x02
257 // Specifies that the properties should only be applied to characters,
258 // and not the paragraph.
259 #define wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY 0x04
261 // Resets the existing properties before applying the new properties.
262 #define wxRICHTEXT_SETPROPERTIES_RESET 0x08
264 // Removes the given properties instead of applying them.
265 #define wxRICHTEXT_SETPROPERTIES_REMOVE 0x10
268 Flags for object insertion.
271 #define wxRICHTEXT_INSERT_NONE 0x00
272 #define wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE 0x01
273 #define wxRICHTEXT_INSERT_INTERACTIVE 0x02
275 // A special flag telling the buffer to keep the first paragraph style
276 // as-is, when deleting a paragraph marker. In future we might pass a
277 // flag to InsertFragment and DeleteRange to indicate the appropriate mode.
278 #define wxTEXT_ATTR_KEEP_FIRST_PARA_STYLE 0x10000000
281 Default superscript/subscript font multiplication factor.
284 #define wxSCRIPT_MUL_FACTOR 1.5
287 The type for wxTextAttrDimension flags.
289 typedef unsigned short wxTextAttrDimensionFlags
;
292 Miscellaneous text box flags
294 enum wxTextBoxAttrFlags
296 wxTEXT_BOX_ATTR_FLOAT
= 0x00000001,
297 wxTEXT_BOX_ATTR_CLEAR
= 0x00000002,
298 wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
= 0x00000004,
299 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
= 0x00000008,
300 wxTEXT_BOX_ATTR_BOX_STYLE_NAME
= 0x00000010
304 Whether a value is present, used in dimension flags.
306 enum wxTextAttrValueFlags
308 wxTEXT_ATTR_VALUE_VALID
= 0x1000,
309 wxTEXT_ATTR_VALUE_VALID_MASK
= 0x1000
313 Units, included in the dimension value.
317 wxTEXT_ATTR_UNITS_TENTHS_MM
= 0x0001,
318 wxTEXT_ATTR_UNITS_PIXELS
= 0x0002,
319 wxTEXT_ATTR_UNITS_PERCENTAGE
= 0x0004,
320 wxTEXT_ATTR_UNITS_POINTS
= 0x0008,
322 wxTEXT_ATTR_UNITS_MASK
= 0x000F
326 Position alternatives, included in the dimension flags.
328 enum wxTextBoxAttrPosition
330 wxTEXT_BOX_ATTR_POSITION_STATIC
= 0x0000, // Default is static, i.e. as per normal layout
331 wxTEXT_BOX_ATTR_POSITION_RELATIVE
= 0x0010, // Relative to the relevant edge
332 wxTEXT_BOX_ATTR_POSITION_ABSOLUTE
= 0x0020,
334 wxTEXT_BOX_ATTR_POSITION_MASK
= 0x00F0
338 @class wxTextAttrDimension
340 A class representing a rich text dimension, including units and position.
345 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimensions
348 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimension
354 wxTextAttrDimension() { Reset(); }
356 Constructor taking value and units flag.
358 wxTextAttrDimension(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { m_value
= value
; m_flags
= units
|wxTEXT_ATTR_VALUE_VALID
; }
361 Resets the dimension value and flags.
363 void Reset() { m_value
= 0; m_flags
= 0; }
366 Partial equality test.
368 bool EqPartial(const wxTextAttrDimension
& dim
) const;
370 /** Apply the dimension, but not those identical to @a compareWith if present.
372 bool Apply(const wxTextAttrDimension
& dim
, const wxTextAttrDimension
* compareWith
= NULL
);
374 /** Collects the attributes that are common to a range of content, building up a note of
375 which attributes are absent in some objects and which clash in some objects.
377 void CollectCommonAttributes(const wxTextAttrDimension
& attr
, wxTextAttrDimension
& clashingAttr
, wxTextAttrDimension
& absentAttr
);
382 bool operator==(const wxTextAttrDimension
& dim
) const { return m_value
== dim
.m_value
&& m_flags
== dim
.m_flags
; }
385 Returns the integer value of the dimension.
387 int GetValue() const { return m_value
; }
390 Returns the floating-pointing value of the dimension in mm.
393 float GetValueMM() const { return float(m_value
) / 10.0; }
396 Sets the value of the dimension in mm.
398 void SetValueMM(float value
) { m_value
= (int) ((value
* 10.0) + 0.5); m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
401 Sets the integer value of the dimension.
403 void SetValue(int value
) { m_value
= value
; m_flags
|= wxTEXT_ATTR_VALUE_VALID
; }
406 Sets the integer value of the dimension, passing dimension flags.
408 void SetValue(int value
, wxTextAttrDimensionFlags flags
) { SetValue(value
); m_flags
= flags
; }
411 Sets the integer value and units.
413 void SetValue(int value
, wxTextAttrUnits units
) { m_value
= value
; m_flags
= units
| wxTEXT_ATTR_VALUE_VALID
; }
418 void SetValue(const wxTextAttrDimension
& dim
) { (*this) = dim
; }
421 Gets the units of the dimension.
423 wxTextAttrUnits
GetUnits() const { return (wxTextAttrUnits
) (m_flags
& wxTEXT_ATTR_UNITS_MASK
); }
426 Sets the units of the dimension.
428 void SetUnits(wxTextAttrUnits units
) { m_flags
&= ~wxTEXT_ATTR_UNITS_MASK
; m_flags
|= units
; }
431 Gets the position flags.
433 wxTextBoxAttrPosition
GetPosition() const { return (wxTextBoxAttrPosition
) (m_flags
& wxTEXT_BOX_ATTR_POSITION_MASK
); }
436 Sets the position flags.
438 void SetPosition(wxTextBoxAttrPosition pos
) { m_flags
&= ~wxTEXT_BOX_ATTR_POSITION_MASK
; m_flags
|= pos
; }
441 Returns @true if the dimension is valid.
443 bool IsValid() const { return (m_flags
& wxTEXT_ATTR_VALUE_VALID
) != 0; }
448 void SetValid(bool b
) { m_flags
&= ~wxTEXT_ATTR_VALUE_VALID_MASK
; m_flags
|= (b
? wxTEXT_ATTR_VALUE_VALID
: 0); }
451 Gets the dimension flags.
453 wxTextAttrDimensionFlags
GetFlags() const { return m_flags
; }
456 Sets the dimension flags.
458 void SetFlags(wxTextAttrDimensionFlags flags
) { m_flags
= flags
; }
461 wxTextAttrDimensionFlags m_flags
;
465 @class wxTextAttrDimensions
466 A class for left, right, top and bottom dimensions.
471 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
474 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensions
480 wxTextAttrDimensions() {}
483 Resets the value and flags for all dimensions.
485 void Reset() { m_left
.Reset(); m_top
.Reset(); m_right
.Reset(); m_bottom
.Reset(); }
490 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
; }
493 Partial equality test.
496 bool EqPartial(const wxTextAttrDimensions
& dims
) const;
499 Apply border to 'this', but not if the same as @a compareWith.
502 bool Apply(const wxTextAttrDimensions
& dims
, const wxTextAttrDimensions
* compareWith
= NULL
);
505 Collects the attributes that are common to a range of content, building up a note of
506 which attributes are absent in some objects and which clash in some objects.
509 void CollectCommonAttributes(const wxTextAttrDimensions
& attr
, wxTextAttrDimensions
& clashingAttr
, wxTextAttrDimensions
& absentAttr
);
512 Remove specified attributes from this object.
514 bool RemoveStyle(const wxTextAttrDimensions
& attr
);
517 Gets the left dimension.
519 const wxTextAttrDimension
& GetLeft() const { return m_left
; }
520 wxTextAttrDimension
& GetLeft() { return m_left
; }
523 Gets the right dimension.
526 const wxTextAttrDimension
& GetRight() const { return m_right
; }
527 wxTextAttrDimension
& GetRight() { return m_right
; }
530 Gets the top dimension.
533 const wxTextAttrDimension
& GetTop() const { return m_top
; }
534 wxTextAttrDimension
& GetTop() { return m_top
; }
537 Gets the bottom dimension.
540 const wxTextAttrDimension
& GetBottom() const { return m_bottom
; }
541 wxTextAttrDimension
& GetBottom() { return m_bottom
; }
544 Are all dimensions valid?
547 bool IsValid() const { return m_left
.IsValid() && m_top
.IsValid() && m_right
.IsValid() && m_bottom
.IsValid(); }
549 wxTextAttrDimension m_left
;
550 wxTextAttrDimension m_top
;
551 wxTextAttrDimension m_right
;
552 wxTextAttrDimension m_bottom
;
556 @class wxTextAttrSize
557 A class for representing width and height.
562 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
565 class WXDLLIMPEXP_RICHTEXT wxTextAttrSize
574 Resets the width and height dimensions.
576 void Reset() { m_width
.Reset(); m_height
.Reset(); }
581 bool operator==(const wxTextAttrSize
& size
) const { return m_width
== size
.m_width
&& m_height
== size
.m_height
; }
584 Partial equality test.
586 bool EqPartial(const wxTextAttrSize
& dims
) const;
589 Apply border to this object, but not if the same as @a compareWith.
591 bool Apply(const wxTextAttrSize
& dims
, const wxTextAttrSize
* compareWith
= NULL
);
594 Collects the attributes that are common to a range of content, building up a note of
595 which attributes are absent in some objects and which clash in some objects.
597 void CollectCommonAttributes(const wxTextAttrSize
& attr
, wxTextAttrSize
& clashingAttr
, wxTextAttrSize
& absentAttr
);
600 Removes the specified attributes from this object.
602 bool RemoveStyle(const wxTextAttrSize
& attr
);
607 wxTextAttrDimension
& GetWidth() { return m_width
; }
608 const wxTextAttrDimension
& GetWidth() const { return m_width
; }
613 void SetWidth(int value
, wxTextAttrDimensionFlags flags
) { m_width
.SetValue(value
, flags
); }
618 void SetWidth(int value
, wxTextAttrUnits units
) { m_width
.SetValue(value
, units
); }
623 void SetWidth(const wxTextAttrDimension
& dim
) { m_width
.SetValue(dim
); }
628 wxTextAttrDimension
& GetHeight() { return m_height
; }
629 const wxTextAttrDimension
& GetHeight() const { return m_height
; }
634 void SetHeight(int value
, wxTextAttrDimensionFlags flags
) { m_height
.SetValue(value
, flags
); }
639 void SetHeight(int value
, wxTextAttrUnits units
) { m_height
.SetValue(value
, units
); }
644 void SetHeight(const wxTextAttrDimension
& dim
) { m_height
.SetValue(dim
); }
649 bool IsValid() const { return m_width
.IsValid() && m_height
.IsValid(); }
651 wxTextAttrDimension m_width
;
652 wxTextAttrDimension m_height
;
656 @class wxTextAttrDimensionConverter
657 A class to make it easier to convert dimensions.
662 @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
665 class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensionConverter
671 wxTextAttrDimensionConverter(wxDC
& dc
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
675 wxTextAttrDimensionConverter(int ppi
, double scale
= 1.0, const wxSize
& parentSize
= wxDefaultSize
);
678 Gets the pixel size for the given dimension.
680 int GetPixels(const wxTextAttrDimension
& dim
, int direction
= wxHORIZONTAL
) const;
682 Gets the mm size for the given dimension.
684 int GetTenthsMM(const wxTextAttrDimension
& dim
) const;
687 Converts tenths of a mm to pixels.
689 int ConvertTenthsMMToPixels(int units
) const;
691 Converts pixels to tenths of a mm.
693 int ConvertPixelsToTenthsMM(int pixels
) const;
701 Border styles, used with wxTextAttrBorder.
703 enum wxTextAttrBorderStyle
705 wxTEXT_BOX_ATTR_BORDER_NONE
= 0,
706 wxTEXT_BOX_ATTR_BORDER_SOLID
= 1,
707 wxTEXT_BOX_ATTR_BORDER_DOTTED
= 2,
708 wxTEXT_BOX_ATTR_BORDER_DASHED
= 3,
709 wxTEXT_BOX_ATTR_BORDER_DOUBLE
= 4,
710 wxTEXT_BOX_ATTR_BORDER_GROOVE
= 5,
711 wxTEXT_BOX_ATTR_BORDER_RIDGE
= 6,
712 wxTEXT_BOX_ATTR_BORDER_INSET
= 7,
713 wxTEXT_BOX_ATTR_BORDER_OUTSET
= 8
717 Border style presence flags, used with wxTextAttrBorder.
719 enum wxTextAttrBorderFlags
721 wxTEXT_BOX_ATTR_BORDER_STYLE
= 0x0001,
722 wxTEXT_BOX_ATTR_BORDER_COLOUR
= 0x0002
726 Border width symbols for qualitative widths, used with wxTextAttrBorder.
728 enum wxTextAttrBorderWidth
730 wxTEXT_BOX_ATTR_BORDER_THIN
= -1,
731 wxTEXT_BOX_ATTR_BORDER_MEDIUM
= -2,
732 wxTEXT_BOX_ATTR_BORDER_THICK
= -3
738 enum wxTextBoxAttrFloatStyle
740 wxTEXT_BOX_ATTR_FLOAT_NONE
= 0,
741 wxTEXT_BOX_ATTR_FLOAT_LEFT
= 1,
742 wxTEXT_BOX_ATTR_FLOAT_RIGHT
= 2
748 enum wxTextBoxAttrClearStyle
750 wxTEXT_BOX_ATTR_CLEAR_NONE
= 0,
751 wxTEXT_BOX_ATTR_CLEAR_LEFT
= 1,
752 wxTEXT_BOX_ATTR_CLEAR_RIGHT
= 2,
753 wxTEXT_BOX_ATTR_CLEAR_BOTH
= 3
757 Collapse mode styles. TODO: can they be switched on per side?
759 enum wxTextBoxAttrCollapseMode
761 wxTEXT_BOX_ATTR_COLLAPSE_NONE
= 0,
762 wxTEXT_BOX_ATTR_COLLAPSE_FULL
= 1
766 Vertical alignment values.
768 enum wxTextBoxAttrVerticalAlignment
770 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_NONE
= 0,
771 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_TOP
= 1,
772 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_CENTRE
= 2,
773 wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_BOTTOM
= 3
777 @class wxTextAttrBorder
778 A class representing a rich text object border.
783 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorders
786 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorder
792 wxTextAttrBorder() { Reset(); }
797 bool operator==(const wxTextAttrBorder
& border
) const
799 return m_flags
== border
.m_flags
&& m_borderStyle
== border
.m_borderStyle
&&
800 m_borderColour
== border
.m_borderColour
&& m_borderWidth
== border
.m_borderWidth
;
804 Resets the border style, colour, width and flags.
806 void Reset() { m_borderStyle
= 0; m_borderColour
= 0; m_flags
= 0; m_borderWidth
.Reset(); }
809 Partial equality test.
811 bool EqPartial(const wxTextAttrBorder
& border
) const;
814 Applies the border to this object, but not if the same as @a compareWith.
817 bool Apply(const wxTextAttrBorder
& border
, const wxTextAttrBorder
* compareWith
= NULL
);
820 Removes the specified attributes from this object.
822 bool RemoveStyle(const wxTextAttrBorder
& attr
);
825 Collects the attributes that are common to a range of content, building up a note of
826 which attributes are absent in some objects and which clash in some objects.
828 void CollectCommonAttributes(const wxTextAttrBorder
& attr
, wxTextAttrBorder
& clashingAttr
, wxTextAttrBorder
& absentAttr
);
831 Sets the border style.
833 void SetStyle(int style
) { m_borderStyle
= style
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_STYLE
; }
836 Gets the border style.
839 int GetStyle() const { return m_borderStyle
; }
842 Sets the border colour.
844 void SetColour(unsigned long colour
) { m_borderColour
= colour
; m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
847 Sets the border colour.
849 void SetColour(const wxColour
& colour
) { m_borderColour
= colour
.GetRGB(); m_flags
|= wxTEXT_BOX_ATTR_BORDER_COLOUR
; }
852 Gets the colour as a long.
854 unsigned long GetColourLong() const { return m_borderColour
; }
859 wxColour
GetColour() const { return wxColour(m_borderColour
); }
862 Gets the border width.
864 wxTextAttrDimension
& GetWidth() { return m_borderWidth
; }
865 const wxTextAttrDimension
& GetWidth() const { return m_borderWidth
; }
868 Sets the border width.
870 void SetWidth(const wxTextAttrDimension
& width
) { m_borderWidth
= width
; }
872 Sets the border width.
874 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
877 True if the border has a valid style.
879 bool HasStyle() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_STYLE
) != 0; }
882 True if the border has a valid colour.
884 bool HasColour() const { return (m_flags
& wxTEXT_BOX_ATTR_BORDER_COLOUR
) != 0; }
887 True if the border has a valid width.
889 bool HasWidth() const { return m_borderWidth
.IsValid(); }
892 True if the border is valid.
894 bool IsValid() const { return HasWidth(); }
897 Set the valid flag for this border.
899 void MakeValid() { m_borderWidth
.SetValid(true); }
902 Returns the border flags.
904 int GetFlags() const { return m_flags
; }
907 Sets the border flags.
909 void SetFlags(int flags
) { m_flags
= flags
; }
914 void AddFlag(int flag
) { m_flags
|= flag
; }
917 Removes a border flag.
919 void RemoveFlag(int flag
) { m_flags
&= ~flag
; }
922 unsigned long m_borderColour
;
923 wxTextAttrDimension m_borderWidth
;
928 @class wxTextAttrBorders
929 A class representing a rich text object's borders.
934 @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorder
937 class WXDLLIMPEXP_RICHTEXT wxTextAttrBorders
943 wxTextAttrBorders() { }
948 bool operator==(const wxTextAttrBorders
& borders
) const
950 return m_left
== borders
.m_left
&& m_right
== borders
.m_right
&&
951 m_top
== borders
.m_top
&& m_bottom
== borders
.m_bottom
;
955 Sets the style of all borders.
957 void SetStyle(int style
);
960 Sets colour of all borders.
962 void SetColour(unsigned long colour
);
965 Sets the colour for all borders.
967 void SetColour(const wxColour
& colour
);
970 Sets the width of all borders.
972 void SetWidth(const wxTextAttrDimension
& width
);
975 Sets the width of all borders.
977 void SetWidth(int value
, wxTextAttrUnits units
= wxTEXT_ATTR_UNITS_TENTHS_MM
) { SetWidth(wxTextAttrDimension(value
, units
)); }
982 void Reset() { m_left
.Reset(); m_right
.Reset(); m_top
.Reset(); m_bottom
.Reset(); }
985 Partial equality test.
987 bool EqPartial(const wxTextAttrBorders
& borders
) const;
990 Applies border to this object, but not if the same as @a compareWith.
992 bool Apply(const wxTextAttrBorders
& borders
, const wxTextAttrBorders
* compareWith
= NULL
);
995 Removes the specified attributes from this object.
997 bool RemoveStyle(const wxTextAttrBorders
& attr
);
1000 Collects the attributes that are common to a range of content, building up a note of
1001 which attributes are absent in some objects and which clash in some objects.
1003 void CollectCommonAttributes(const wxTextAttrBorders
& attr
, wxTextAttrBorders
& clashingAttr
, wxTextAttrBorders
& absentAttr
);
1006 Returns @true if all borders are valid.
1008 bool IsValid() const { return m_left
.IsValid() || m_right
.IsValid() || m_top
.IsValid() || m_bottom
.IsValid(); }
1011 Returns the left border.
1013 const wxTextAttrBorder
& GetLeft() const { return m_left
; }
1014 wxTextAttrBorder
& GetLeft() { return m_left
; }
1017 Returns the right border.
1019 const wxTextAttrBorder
& GetRight() const { return m_right
; }
1020 wxTextAttrBorder
& GetRight() { return m_right
; }
1023 Returns the top border.
1025 const wxTextAttrBorder
& GetTop() const { return m_top
; }
1026 wxTextAttrBorder
& GetTop() { return m_top
; }
1029 Returns the bottom border.
1031 const wxTextAttrBorder
& GetBottom() const { return m_bottom
; }
1032 wxTextAttrBorder
& GetBottom() { return m_bottom
; }
1034 wxTextAttrBorder m_left
, m_right
, m_top
, m_bottom
;
1039 @class wxTextBoxAttr
1040 A class representing the box attributes of a rich text object.
1042 @library{wxrichtext}
1045 @see wxRichTextAttr, wxRichTextCtrl
1048 class WXDLLIMPEXP_RICHTEXT wxTextBoxAttr
1052 Default constructor.
1054 wxTextBoxAttr() { Init(); }
1059 wxTextBoxAttr(const wxTextBoxAttr
& attr
) { Init(); (*this) = attr
; }
1062 Initialises this object.
1064 void Init() { Reset(); }
1071 // Copy. Unnecessary since we let it do a binary copy
1072 //void Copy(const wxTextBoxAttr& attr);
1075 //void operator= (const wxTextBoxAttr& attr);
1080 bool operator== (const wxTextBoxAttr
& attr
) const;
1083 Partial equality test, ignoring unset attributes.
1086 bool EqPartial(const wxTextBoxAttr
& attr
) const;
1089 Merges the given attributes. If @a compareWith is non-NULL, then it will be used
1090 to mask out those attributes that are the same in style and @a compareWith, for
1091 situations where we don't want to explicitly set inherited attributes.
1093 bool Apply(const wxTextBoxAttr
& style
, const wxTextBoxAttr
* compareWith
= NULL
);
1096 Collects the attributes that are common to a range of content, building up a note of
1097 which attributes are absent in some objects and which clash in some objects.
1099 void CollectCommonAttributes(const wxTextBoxAttr
& attr
, wxTextBoxAttr
& clashingAttr
, wxTextBoxAttr
& absentAttr
);
1102 Removes the specified attributes from this object.
1104 bool RemoveStyle(const wxTextBoxAttr
& attr
);
1109 void SetFlags(int flags
) { m_flags
= flags
; }
1114 int GetFlags() const { return m_flags
; }
1117 Is this flag present?
1119 bool HasFlag(wxTextBoxAttrFlags flag
) const { return (m_flags
& flag
) != 0; }
1124 void RemoveFlag(wxTextBoxAttrFlags flag
) { m_flags
&= ~flag
; }
1129 void AddFlag(wxTextBoxAttrFlags flag
) { m_flags
|= flag
; }
1132 Returns @true if no attributes are set.
1134 bool IsDefault() const;
1137 Returns the float mode.
1139 wxTextBoxAttrFloatStyle
GetFloatMode() const { return m_floatMode
; }
1142 Sets the float mode.
1144 void SetFloatMode(wxTextBoxAttrFloatStyle mode
) { m_floatMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_FLOAT
; }
1147 Returns @true if float mode is active.
1149 bool HasFloatMode() const { return HasFlag(wxTEXT_BOX_ATTR_FLOAT
); }
1152 Returns @true if this object is floating.
1154 bool IsFloating() const { return HasFloatMode() && GetFloatMode() != wxTEXT_BOX_ATTR_FLOAT_NONE
; }
1157 Returns the clear mode - whether to wrap text after object. Currently unimplemented.
1159 wxTextBoxAttrClearStyle
GetClearMode() const { return m_clearMode
; }
1162 Set the clear mode. Currently unimplemented.
1164 void SetClearMode(wxTextBoxAttrClearStyle mode
) { m_clearMode
= mode
; m_flags
|= wxTEXT_BOX_ATTR_CLEAR
; }
1167 Returns @true if we have a clear flag.
1169 bool HasClearMode() const { return HasFlag(wxTEXT_BOX_ATTR_CLEAR
); }
1172 Returns the collapse mode - whether to collapse borders. Currently unimplemented.
1174 wxTextBoxAttrCollapseMode
GetCollapseBorders() const { return m_collapseMode
; }
1177 Sets the collapse mode - whether to collapse borders. Currently unimplemented.
1179 void SetCollapseBorders(wxTextBoxAttrCollapseMode collapse
) { m_collapseMode
= collapse
; m_flags
|= wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
; }
1182 Returns @true if the collapse borders flag is present.
1184 bool HasCollapseBorders() const { return HasFlag(wxTEXT_BOX_ATTR_COLLAPSE_BORDERS
); }
1187 Returns the vertical alignment.
1189 wxTextBoxAttrVerticalAlignment
GetVerticalAlignment() const { return m_verticalAlignment
; }
1192 Sets the vertical alignment.
1194 void SetVerticalAlignment(wxTextBoxAttrVerticalAlignment verticalAlignment
) { m_verticalAlignment
= verticalAlignment
; m_flags
|= wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
; }
1197 Returns @true if a vertical alignment flag is present.
1199 bool HasVerticalAlignment() const { return HasFlag(wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT
); }
1202 Returns the margin values.
1204 wxTextAttrDimensions
& GetMargins() { return m_margins
; }
1205 const wxTextAttrDimensions
& GetMargins() const { return m_margins
; }
1208 Returns the left margin.
1210 wxTextAttrDimension
& GetLeftMargin() { return m_margins
.m_left
; }
1211 const wxTextAttrDimension
& GetLeftMargin() const { return m_margins
.m_left
; }
1214 Returns the right margin.
1216 wxTextAttrDimension
& GetRightMargin() { return m_margins
.m_right
; }
1217 const wxTextAttrDimension
& GetRightMargin() const { return m_margins
.m_right
; }
1220 Returns the top margin.
1222 wxTextAttrDimension
& GetTopMargin() { return m_margins
.m_top
; }
1223 const wxTextAttrDimension
& GetTopMargin() const { return m_margins
.m_top
; }
1226 Returns the bottom margin.
1228 wxTextAttrDimension
& GetBottomMargin() { return m_margins
.m_bottom
; }
1229 const wxTextAttrDimension
& GetBottomMargin() const { return m_margins
.m_bottom
; }
1232 Returns the position.
1234 wxTextAttrDimensions
& GetPosition() { return m_position
; }
1235 const wxTextAttrDimensions
& GetPosition() const { return m_position
; }
1238 Returns the left position.
1240 wxTextAttrDimension
& GetLeft() { return m_position
.m_left
; }
1241 const wxTextAttrDimension
& GetLeft() const { return m_position
.m_left
; }
1244 Returns the right position.
1246 wxTextAttrDimension
& GetRight() { return m_position
.m_right
; }
1247 const wxTextAttrDimension
& GetRight() const { return m_position
.m_right
; }
1250 Returns the top position.
1252 wxTextAttrDimension
& GetTop() { return m_position
.m_top
; }
1253 const wxTextAttrDimension
& GetTop() const { return m_position
.m_top
; }
1256 Returns the bottom position.
1258 wxTextAttrDimension
& GetBottom() { return m_position
.m_bottom
; }
1259 const wxTextAttrDimension
& GetBottom() const { return m_position
.m_bottom
; }
1262 Returns the padding values.
1264 wxTextAttrDimensions
& GetPadding() { return m_padding
; }
1265 const wxTextAttrDimensions
& GetPadding() const { return m_padding
; }
1268 Returns the left padding value.
1270 wxTextAttrDimension
& GetLeftPadding() { return m_padding
.m_left
; }
1271 const wxTextAttrDimension
& GetLeftPadding() const { return m_padding
.m_left
; }
1274 Returns the right padding value.
1276 wxTextAttrDimension
& GetRightPadding() { return m_padding
.m_right
; }
1277 const wxTextAttrDimension
& GetRightPadding() const { return m_padding
.m_right
; }
1280 Returns the top padding value.
1282 wxTextAttrDimension
& GetTopPadding() { return m_padding
.m_top
; }
1283 const wxTextAttrDimension
& GetTopPadding() const { return m_padding
.m_top
; }
1286 Returns the bottom padding value.
1288 wxTextAttrDimension
& GetBottomPadding() { return m_padding
.m_bottom
; }
1289 const wxTextAttrDimension
& GetBottomPadding() const { return m_padding
.m_bottom
; }
1292 Returns the borders.
1294 wxTextAttrBorders
& GetBorder() { return m_border
; }
1295 const wxTextAttrBorders
& GetBorder() const { return m_border
; }
1298 Returns the left border.
1300 wxTextAttrBorder
& GetLeftBorder() { return m_border
.m_left
; }
1301 const wxTextAttrBorder
& GetLeftBorder() const { return m_border
.m_left
; }
1304 Returns the top border.
1306 wxTextAttrBorder
& GetTopBorder() { return m_border
.m_top
; }
1307 const wxTextAttrBorder
& GetTopBorder() const { return m_border
.m_top
; }
1310 Returns the right border.
1312 wxTextAttrBorder
& GetRightBorder() { return m_border
.m_right
; }
1313 const wxTextAttrBorder
& GetRightBorder() const { return m_border
.m_right
; }
1316 Returns the bottom border.
1318 wxTextAttrBorder
& GetBottomBorder() { return m_border
.m_bottom
; }
1319 const wxTextAttrBorder
& GetBottomBorder() const { return m_border
.m_bottom
; }
1322 Returns the outline.
1324 wxTextAttrBorders
& GetOutline() { return m_outline
; }
1325 const wxTextAttrBorders
& GetOutline() const { return m_outline
; }
1328 Returns the left outline.
1330 wxTextAttrBorder
& GetLeftOutline() { return m_outline
.m_left
; }
1331 const wxTextAttrBorder
& GetLeftOutline() const { return m_outline
.m_left
; }
1334 Returns the top outline.
1336 wxTextAttrBorder
& GetTopOutline() { return m_outline
.m_top
; }
1337 const wxTextAttrBorder
& GetTopOutline() const { return m_outline
.m_top
; }
1340 Returns the right outline.
1342 wxTextAttrBorder
& GetRightOutline() { return m_outline
.m_right
; }
1343 const wxTextAttrBorder
& GetRightOutline() const { return m_outline
.m_right
; }
1346 Returns the bottom outline.
1348 wxTextAttrBorder
& GetBottomOutline() { return m_outline
.m_bottom
; }
1349 const wxTextAttrBorder
& GetBottomOutline() const { return m_outline
.m_bottom
; }
1352 Returns the object size.
1354 wxTextAttrSize
& GetSize() { return m_size
; }
1355 const wxTextAttrSize
& GetSize() const { return m_size
; }
1358 Returns the object minimum size.
1361 wxTextAttrSize
& GetMinSize() { return m_minSize
; }
1362 const wxTextAttrSize
& GetMinSize() const { return m_minSize
; }
1365 Returns the object maximum size.
1368 wxTextAttrSize
& GetMaxSize() { return m_maxSize
; }
1369 const wxTextAttrSize
& GetMaxSize() const { return m_maxSize
; }
1372 Sets the object size.
1374 void SetSize(const wxTextAttrSize
& sz
) { m_size
= sz
; }
1377 Sets the object minimum size.
1379 void SetMinSize(const wxTextAttrSize
& sz
) { m_minSize
= sz
; }
1382 Sets the object maximum size.
1384 void SetMaxSize(const wxTextAttrSize
& sz
) { m_maxSize
= sz
; }
1387 Returns the object width.
1389 wxTextAttrDimension
& GetWidth() { return m_size
.m_width
; }
1390 const wxTextAttrDimension
& GetWidth() const { return m_size
.m_width
; }
1393 Returns the object height.
1395 wxTextAttrDimension
& GetHeight() { return m_size
.m_height
; }
1396 const wxTextAttrDimension
& GetHeight() const { return m_size
.m_height
; }
1399 Returns the box style name.
1401 const wxString
& GetBoxStyleName() const { return m_boxStyleName
; }
1404 Sets the box style name.
1406 void SetBoxStyleName(const wxString
& name
) { m_boxStyleName
= name
; AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1409 Returns @true if the box style name is present.
1411 bool HasBoxStyleName() const { return HasFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME
); }
1417 wxTextAttrDimensions m_margins
;
1418 wxTextAttrDimensions m_padding
;
1419 wxTextAttrDimensions m_position
;
1421 wxTextAttrSize m_size
;
1422 wxTextAttrSize m_minSize
;
1423 wxTextAttrSize m_maxSize
;
1425 wxTextAttrBorders m_border
;
1426 wxTextAttrBorders m_outline
;
1428 wxTextBoxAttrFloatStyle m_floatMode
;
1429 wxTextBoxAttrClearStyle m_clearMode
;
1430 wxTextBoxAttrCollapseMode m_collapseMode
;
1431 wxTextBoxAttrVerticalAlignment m_verticalAlignment
;
1432 wxString m_boxStyleName
;
1436 @class wxRichTextAttr
1437 A class representing enhanced attributes for rich text objects.
1438 This adds a wxTextBoxAttr member to the basic wxTextAttr class.
1440 @library{wxrichtext}
1443 @see wxRichTextAttr, wxTextBoxAttr, wxRichTextCtrl
1446 class WXDLLIMPEXP_RICHTEXT wxRichTextAttr
: public wxTextAttr
1450 Constructor taking a wxTextAttr.
1452 wxRichTextAttr(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1457 wxRichTextAttr(const wxRichTextAttr
& attr
): wxTextAttr() { Copy(attr
); }
1460 Default constructor.
1467 void Copy(const wxRichTextAttr
& attr
);
1470 Assignment operator.
1472 void operator=(const wxRichTextAttr
& attr
) { Copy(attr
); }
1475 Assignment operator.
1477 void operator=(const wxTextAttr
& attr
) { wxTextAttr::Copy(attr
); }
1482 bool operator==(const wxRichTextAttr
& attr
) const;
1485 Partial equality test taking comparison object into account.
1487 bool EqPartial(const wxRichTextAttr
& attr
) const;
1490 Merges the given attributes. If @a compareWith
1491 is non-NULL, then it will be used to mask out those attributes that are the same in style
1492 and @a compareWith, for situations where we don't want to explicitly set inherited attributes.
1494 bool Apply(const wxRichTextAttr
& style
, const wxRichTextAttr
* compareWith
= NULL
);
1497 Collects the attributes that are common to a range of content, building up a note of
1498 which attributes are absent in some objects and which clash in some objects.
1500 void CollectCommonAttributes(const wxRichTextAttr
& attr
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
1503 Removes the specified attributes from this object.
1505 bool RemoveStyle(const wxRichTextAttr
& attr
);
1508 Returns the text box attributes.
1510 wxTextBoxAttr
& GetTextBoxAttr() { return m_textBoxAttr
; }
1511 const wxTextBoxAttr
& GetTextBoxAttr() const { return m_textBoxAttr
; }
1514 Set the text box attributes.
1516 void SetTextBoxAttr(const wxTextBoxAttr
& attr
) { m_textBoxAttr
= attr
; }
1518 wxTextBoxAttr m_textBoxAttr
;
1521 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxVariant
, wxRichTextVariantArray
, WXDLLIMPEXP_RICHTEXT
);
1524 @class wxRichTextProperties
1525 A simple property class using wxVariants. This is used to give each rich text object the
1526 ability to store custom properties that can be used by the application.
1528 @library{wxrichtext}
1531 @see wxRichTextBuffer, wxRichTextObject, wxRichTextCtrl
1534 class WXDLLIMPEXP_RICHTEXT wxRichTextProperties
: public wxObject
1536 DECLARE_DYNAMIC_CLASS(wxRichTextProperties
)
1540 Default constructor.
1542 wxRichTextProperties() {}
1547 wxRichTextProperties(const wxRichTextProperties
& props
): wxObject() { Copy(props
); }
1550 Assignment operator.
1552 void operator=(const wxRichTextProperties
& props
) { Copy(props
); }
1557 bool operator==(const wxRichTextProperties
& props
) const;
1560 Copies from @a props.
1562 void Copy(const wxRichTextProperties
& props
) { m_properties
= props
.m_properties
; }
1565 Returns the variant at the given index.
1567 const wxVariant
& operator[](size_t idx
) const { return m_properties
[idx
]; }
1570 Returns the variant at the given index.
1572 wxVariant
& operator[](size_t idx
) { return m_properties
[idx
]; }
1575 Clears the properties.
1577 void Clear() { m_properties
.Clear(); }
1580 Returns the array of variants implementing the properties.
1582 const wxRichTextVariantArray
& GetProperties() const { return m_properties
; }
1585 Returns the array of variants implementing the properties.
1587 wxRichTextVariantArray
& GetProperties() { return m_properties
; }
1590 Sets the array of variants.
1592 void SetProperties(const wxRichTextVariantArray
& props
) { m_properties
= props
; }
1595 Returns all the property names.
1597 wxArrayString
GetPropertyNames() const;
1600 Returns a count of the properties.
1602 size_t GetCount() const { return m_properties
.GetCount(); }
1605 Returns @true if the given property is found.
1607 bool HasProperty(const wxString
& name
) const { return Find(name
) != -1; }
1610 Finds the given property.
1612 int Find(const wxString
& name
) const;
1615 Removes the given property.
1617 bool Remove(const wxString
& name
);
1620 Gets the property variant by name.
1622 const wxVariant
& GetProperty(const wxString
& name
) const;
1625 Finds or creates a property with the given name, returning a pointer to the variant.
1627 wxVariant
* FindOrCreateProperty(const wxString
& name
);
1630 Gets the value of the named property as a string.
1632 wxString
GetPropertyString(const wxString
& name
) const;
1635 Gets the value of the named property as a long integer.
1637 long GetPropertyLong(const wxString
& name
) const;
1640 Gets the value of the named property as a boolean.
1642 bool GetPropertyBool(const wxString
& name
) const;
1645 Gets the value of the named property as a double.
1647 double GetPropertyDouble(const wxString
& name
) const;
1650 Sets the property by passing a variant which contains a name and value.
1652 void SetProperty(const wxVariant
& variant
);
1655 Sets a property by name and variant.
1657 void SetProperty(const wxString
& name
, const wxVariant
& variant
);
1660 Sets a property by name and string value.
1662 void SetProperty(const wxString
& name
, const wxString
& value
);
1665 Sets property by name and long integer value.
1667 void SetProperty(const wxString
& name
, long value
);
1670 Sets property by name and double value.
1672 void SetProperty(const wxString
& name
, double value
);
1675 Sets property by name and boolean value.
1677 void SetProperty(const wxString
& name
, bool value
);
1680 Removes the given properties from these properties.
1682 void RemoveProperties(const wxRichTextProperties
& properties
);
1685 Merges the given properties with these properties.
1687 void MergeProperties(const wxRichTextProperties
& properties
);
1690 wxRichTextVariantArray m_properties
;
1695 @class wxRichTextFontTable
1696 Manages quick access to a pool of fonts for rendering rich text.
1698 @library{wxrichtext}
1701 @see wxRichTextBuffer, wxRichTextCtrl
1704 class WXDLLIMPEXP_RICHTEXT wxRichTextFontTable
: public wxObject
1708 Default constructor.
1710 wxRichTextFontTable();
1715 wxRichTextFontTable(const wxRichTextFontTable
& table
);
1716 virtual ~wxRichTextFontTable();
1719 Returns @true if the font table is valid.
1721 bool IsOk() const { return m_refData
!= NULL
; }
1724 Finds a font for the given attribute object.
1726 wxFont
FindFont(const wxRichTextAttr
& fontSpec
);
1729 Clears the font table.
1734 Assignment operator.
1736 void operator= (const wxRichTextFontTable
& table
);
1741 bool operator == (const wxRichTextFontTable
& table
) const;
1744 Inequality operator.
1746 bool operator != (const wxRichTextFontTable
& table
) const { return !(*this == table
); }
1750 DECLARE_DYNAMIC_CLASS(wxRichTextFontTable
)
1754 @class wxRichTextRange
1756 This stores beginning and end positions for a range of data.
1758 @library{wxrichtext}
1761 @see wxRichTextBuffer, wxRichTextCtrl
1764 class WXDLLIMPEXP_RICHTEXT wxRichTextRange
1770 Default constructor.
1772 wxRichTextRange() { m_start
= 0; m_end
= 0; }
1775 Constructor taking start and end positions.
1777 wxRichTextRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1782 wxRichTextRange(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1783 ~wxRichTextRange() {}
1786 Assigns @a range to this range.
1788 void operator =(const wxRichTextRange
& range
) { m_start
= range
.m_start
; m_end
= range
.m_end
; }
1791 Equality operator. Returns @true if @a range is the same as this range.
1793 bool operator ==(const wxRichTextRange
& range
) const { return (m_start
== range
.m_start
&& m_end
== range
.m_end
); }
1796 Inequality operator.
1798 bool operator !=(const wxRichTextRange
& range
) const { return (m_start
!= range
.m_start
|| m_end
!= range
.m_end
); }
1801 Subtracts a range from this range.
1803 wxRichTextRange
operator -(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
- range
.m_start
, m_end
- range
.m_end
); }
1806 Adds a range to this range.
1808 wxRichTextRange
operator +(const wxRichTextRange
& range
) const { return wxRichTextRange(m_start
+ range
.m_start
, m_end
+ range
.m_end
); }
1811 Sets the range start and end positions.
1813 void SetRange(long start
, long end
) { m_start
= start
; m_end
= end
; }
1816 Sets the start position.
1818 void SetStart(long start
) { m_start
= start
; }
1821 Returns the start position.
1823 long GetStart() const { return m_start
; }
1826 Sets the end position.
1828 void SetEnd(long end
) { m_end
= end
; }
1831 Gets the end position.
1833 long GetEnd() const { return m_end
; }
1836 Returns true if this range is completely outside @a range.
1838 bool IsOutside(const wxRichTextRange
& range
) const { return range
.m_start
> m_end
|| range
.m_end
< m_start
; }
1841 Returns true if this range is completely within @a range.
1843 bool IsWithin(const wxRichTextRange
& range
) const { return m_start
>= range
.m_start
&& m_end
<= range
.m_end
; }
1846 Returns true if @a pos was within the range. Does not match if the range is empty.
1848 bool Contains(long pos
) const { return pos
>= m_start
&& pos
<= m_end
; }
1851 Limit this range to be within @a range.
1853 bool LimitTo(const wxRichTextRange
& range
) ;
1856 Gets the length of the range.
1858 long GetLength() const { return m_end
- m_start
+ 1; }
1861 Swaps the start and end.
1863 void Swap() { long tmp
= m_start
; m_start
= m_end
; m_end
= tmp
; }
1866 Converts the API-standard range, whose end is one past the last character in
1867 the range, to the internal form, which uses the first and last character
1868 positions of the range. In other words, one is subtracted from the end position.
1869 (n, n) is the range of a single character.
1871 wxRichTextRange
ToInternal() const { return wxRichTextRange(m_start
, m_end
-1); }
1874 Converts the internal range, which uses the first and last character positions
1875 of the range, to the API-standard range, whose end is one past the last
1876 character in the range. In other words, one is added to the end position.
1877 (n, n+1) is the range of a single character.
1879 wxRichTextRange
FromInternal() const { return wxRichTextRange(m_start
, m_end
+1); }
1886 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextRange
, wxRichTextRangeArray
, WXDLLIMPEXP_RICHTEXT
);
1888 #define wxRICHTEXT_ALL wxRichTextRange(-2, -2)
1889 #define wxRICHTEXT_NONE wxRichTextRange(-1, -1)
1891 #define wxRICHTEXT_NO_SELECTION wxRichTextRange(-2, -2)
1894 @class wxRichTextSelection
1896 Stores selection information. The selection does not have to be contiguous, though currently non-contiguous
1897 selections are only supported for a range of table cells (a geometric block of cells can consist
1898 of a set of non-contiguous positions).
1900 The selection consists of an array of ranges, and the container that is the context for the selection. It
1901 follows that a single selection object can only represent ranges with the same parent container.
1903 @library{wxrichtext}
1906 @see wxRichTextBuffer, wxRichTextCtrl
1909 class WXDLLIMPEXP_RICHTEXT wxRichTextSelection
1915 wxRichTextSelection(const wxRichTextSelection
& sel
) { Copy(sel
); }
1918 Creates a selection from a range and a container.
1920 wxRichTextSelection(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
) { m_ranges
.Add(range
); m_container
= container
; }
1923 Default constructor.
1925 wxRichTextSelection() { Reset(); }
1928 Resets the selection.
1930 void Reset() { m_ranges
.Clear(); m_container
= NULL
; }
1936 void Set(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
* container
)
1937 { m_ranges
.Clear(); m_ranges
.Add(range
); m_container
= container
; }
1940 Adds a range to the selection.
1942 void Add(const wxRichTextRange
& range
)
1943 { m_ranges
.Add(range
); }
1946 Sets the selections from an array of ranges and a container object.
1948 void Set(const wxRichTextRangeArray
& ranges
, wxRichTextParagraphLayoutBox
* container
)
1949 { m_ranges
= ranges
; m_container
= container
; }
1954 void Copy(const wxRichTextSelection
& sel
)
1955 { m_ranges
= sel
.m_ranges
; m_container
= sel
.m_container
; }
1958 Assignment operator.
1960 void operator=(const wxRichTextSelection
& sel
) { Copy(sel
); }
1965 bool operator==(const wxRichTextSelection
& sel
) const;
1970 wxRichTextRange
operator[](size_t i
) const { return GetRange(i
); }
1973 Returns the selection ranges.
1975 wxRichTextRangeArray
& GetRanges() { return m_ranges
; }
1978 Returns the selection ranges.
1980 const wxRichTextRangeArray
& GetRanges() const { return m_ranges
; }
1983 Sets the selection ranges.
1985 void SetRanges(const wxRichTextRangeArray
& ranges
) { m_ranges
= ranges
; }
1988 Returns the number of ranges in the selection.
1990 size_t GetCount() const { return m_ranges
.GetCount(); }
1993 Returns the range at the given index.
1996 wxRichTextRange
GetRange(size_t i
) const { return m_ranges
[i
]; }
1999 Returns the first range if there is one, otherwise wxRICHTEXT_NO_SELECTION.
2001 wxRichTextRange
GetRange() const { return (m_ranges
.GetCount() > 0) ? (m_ranges
[0]) : wxRICHTEXT_NO_SELECTION
; }
2004 Sets a single range.
2006 void SetRange(const wxRichTextRange
& range
) { m_ranges
.Clear(); m_ranges
.Add(range
); }
2009 Returns the container for which the selection is valid.
2011 wxRichTextParagraphLayoutBox
* GetContainer() const { return m_container
; }
2014 Sets the container for which the selection is valid.
2016 void SetContainer(wxRichTextParagraphLayoutBox
* container
) { m_container
= container
; }
2019 Returns @true if the selection is valid.
2021 bool IsValid() const { return m_ranges
.GetCount() > 0 && GetContainer(); }
2024 Returns the selection appropriate to the specified object, if any; returns an empty array if none
2025 at the level of the object's container.
2027 wxRichTextRangeArray
GetSelectionForObject(wxRichTextObject
* obj
) const;
2030 Returns @true if the given position is within the selection.
2032 bool WithinSelection(long pos
, wxRichTextObject
* obj
) const;
2035 Returns @true if the given position is within the selection.
2038 bool WithinSelection(long pos
) const { return WithinSelection(pos
, m_ranges
); }
2041 Returns @true if the given position is within the selection range.
2043 static bool WithinSelection(long pos
, const wxRichTextRangeArray
& ranges
);
2046 Returns @true if the given range is within the selection range.
2048 static bool WithinSelection(const wxRichTextRange
& range
, const wxRichTextRangeArray
& ranges
);
2050 wxRichTextRangeArray m_ranges
;
2051 wxRichTextParagraphLayoutBox
* m_container
;
2055 @class wxRichTextObject
2057 This is the base for drawable rich text objects.
2059 @library{wxrichtext}
2062 @see wxRichTextBuffer, wxRichTextCtrl
2065 class WXDLLIMPEXP_RICHTEXT wxRichTextObject
: public wxObject
2067 DECLARE_CLASS(wxRichTextObject
)
2070 Constructor, taking an optional parent pointer.
2072 wxRichTextObject(wxRichTextObject
* parent
= NULL
);
2074 virtual ~wxRichTextObject();
2079 Draw the item, within the given range. Some objects may ignore the range (for
2080 example paragraphs) while others must obey it (lines, to implement wrapping)
2082 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
) = 0;
2085 Lay the item out at the specified position with the given size constraint.
2086 Layout must set the cached size. @rect is the available space for the object,
2087 and @a parentRect is the container that is used to determine a relative size
2088 or position (for example if a text box must be 50% of the parent text box).
2090 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, const wxRect
& parentRect
, int style
) = 0;
2093 Hit-testing: returns a flag indicating hit test details, plus
2094 information about position. @a contextObj is returned to specify what object
2095 position is relevant to, since otherwise there's an ambiguity.
2096 @ obj might not be a child of @a contextObj, since we may be referring to the container itself
2097 if we have no hit on a child - for example if we click outside an object.
2099 The function puts the position in @a textPosition if one is found.
2100 @a pt is in logical units (a zero y position is at the beginning of the buffer).
2102 Pass wxRICHTEXT_HITTEST_NO_NESTED_OBJECTS if you only want to consider objects
2103 directly under the object you are calling HitTest on. Otherwise, it will recurse
2104 and potentially find a nested object.
2106 @return One of the ::wxRichTextHitTestFlags values.
2109 virtual int HitTest(wxDC
& dc
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2112 Finds the absolute position and row height for the given character position.
2114 virtual bool FindPosition(wxDC
& WXUNUSED(dc
), long WXUNUSED(index
), wxPoint
& WXUNUSED(pt
), int* WXUNUSED(height
), bool WXUNUSED(forceLineStart
)) { return false; }
2117 Returns the best size, i.e. the ideal starting size for this object irrespective
2118 of available space. For a short text string, it will be the size that exactly encloses
2119 the text. For a longer string, it might use the parent width for example.
2121 virtual wxSize
GetBestSize() const { return m_size
; }
2124 Returns the object size for the given range. Returns @false if the range
2125 is invalid for this object.
2128 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const = 0;
2131 Do a split from @a pos, returning an object containing the second part, and setting
2132 the first part in 'this'.
2134 virtual wxRichTextObject
* DoSplit(long WXUNUSED(pos
)) { return NULL
; }
2137 Calculates the range of the object. By default, guess that the object is 1 unit long.
2139 virtual void CalculateRange(long start
, long& end
) { end
= start
; m_range
.SetRange(start
, end
); }
2142 Deletes the given range.
2144 virtual bool DeleteRange(const wxRichTextRange
& WXUNUSED(range
)) { return false; }
2147 Returns @true if the object is empty.
2149 virtual bool IsEmpty() const { return false; }
2152 Returns @true if this class of object is floatable.
2154 virtual bool IsFloatable() const { return false; }
2157 Returns @true if this object is currently floating.
2159 virtual bool IsFloating() const { return GetAttributes().GetTextBoxAttr().IsFloating(); }
2162 Returns the floating direction.
2164 virtual int GetFloatDirection() const { return GetAttributes().GetTextBoxAttr().GetFloatMode(); }
2167 Returns any text in this object for the given range.
2169 virtual wxString
GetTextForRange(const wxRichTextRange
& WXUNUSED(range
)) const { return wxEmptyString
; }
2172 Returns @true if this object can merge itself with the given one.
2174 virtual bool CanMerge(wxRichTextObject
* WXUNUSED(object
)) const { return false; }
2177 Returns @true if this object merged itself with the given one.
2178 The calling code will then delete the given object.
2180 virtual bool Merge(wxRichTextObject
* WXUNUSED(object
)) { return false; }
2183 Dump object data to the given output stream for debugging.
2185 virtual void Dump(wxTextOutputStream
& stream
);
2188 Returns @true if we can edit the object's properties via a GUI.
2190 virtual bool CanEditProperties() const { return false; }
2193 Edits the object's properties via a GUI.
2195 virtual bool EditProperties(wxWindow
* WXUNUSED(parent
), wxRichTextBuffer
* WXUNUSED(buffer
)) { return false; }
2198 Returns the label to be used for the properties context menu item.
2200 virtual wxString
GetPropertiesMenuLabel() const { return wxEmptyString
; }
2203 Returns @true if objects of this class can accept the focus, i.e. a call to SetFocusObject
2204 is possible. For example, containers supporting text, such as a text box object, can accept the focus,
2205 but a table can't (set the focus to individual cells instead).
2207 virtual bool AcceptsFocus() const { return false; }
2211 Imports this object from XML.
2213 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2216 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2218 Exports this object directly to the given stream, bypassing the creation of a wxXmlNode hierarchy.
2219 This method is considerably faster than creating a tree first. However, both versions of ExportXML must be
2220 implemented so that if the tree method is made efficient in the future, we can deprecate the
2221 more verbose direct output method. Compiled only if wxRICHTEXT_HAVE_DIRECT_OUTPUT is defined (on by default).
2223 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2226 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2228 Exports this object to the given parent node, usually creating at least one child node.
2229 This method is less efficient than the direct-to-stream method but is retained to allow for
2230 switching to this method if we make it more efficient. Compiled only if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT is defined
2233 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2237 Returns @true if this object takes note of paragraph attributes (text and image objects don't).
2239 virtual bool UsesParagraphAttributes() const { return true; }
2242 Returns the XML node name of this object. This must be overridden for wxXmlNode-base XML export to work.
2244 virtual wxString
GetXMLNodeName() const { return wxT("unknown"); }
2247 Invalidates the object at the given range. With no argument, invalidates the whole object.
2249 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2252 Returns @true if this object can handle the selections of its children, fOr example a table.
2253 Required for composite selection handling to work.
2255 virtual bool HandlesChildSelections() const { return false; }
2258 Returns a selection object specifying the selections between start and end character positions.
2259 For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
2261 virtual wxRichTextSelection
GetSelection(long WXUNUSED(start
), long WXUNUSED(end
)) const { return wxRichTextSelection(); }
2266 Gets the cached object size as calculated by Layout.
2268 virtual wxSize
GetCachedSize() const { return m_size
; }
2271 Sets the cached object size as calculated by Layout.
2273 virtual void SetCachedSize(const wxSize
& sz
) { m_size
= sz
; }
2276 Gets the maximum object size as calculated by Layout. This allows
2277 us to fit an object to its contents or allocate extra space if required.
2279 virtual wxSize
GetMaxSize() const { return m_maxSize
; }
2282 Sets the maximum object size as calculated by Layout. This allows
2283 us to fit an object to its contents or allocate extra space if required.
2285 virtual void SetMaxSize(const wxSize
& sz
) { m_maxSize
= sz
; }
2288 Gets the minimum object size as calculated by Layout. This allows
2289 us to constrain an object to its absolute minimum size if necessary.
2291 virtual wxSize
GetMinSize() const { return m_minSize
; }
2294 Sets the minimum object size as calculated by Layout. This allows
2295 us to constrain an object to its absolute minimum size if necessary.
2297 virtual void SetMinSize(const wxSize
& sz
) { m_minSize
= sz
; }
2300 Gets the 'natural' size for an object. For an image, it would be the
2303 virtual wxTextAttrSize
GetNaturalSize() const { return wxTextAttrSize(); }
2306 Returns the object position in pixels.
2308 virtual wxPoint
GetPosition() const { return m_pos
; }
2311 Sets the object position in pixels.
2313 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
2316 Returns the absolute object position, by traversing up the child/parent hierarchy.
2317 TODO: may not be needed, if all object positions are in fact relative to the
2318 top of the coordinate space.
2320 virtual wxPoint
GetAbsolutePosition() const;
2323 Returns the rectangle enclosing the object.
2325 virtual wxRect
GetRect() const { return wxRect(GetPosition(), GetCachedSize()); }
2328 Sets the object's range within its container.
2330 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
2333 Returns the object's range.
2335 const wxRichTextRange
& GetRange() const { return m_range
; }
2338 Returns the object's range.
2340 wxRichTextRange
& GetRange() { return m_range
; }
2343 Set the object's own range, for a top-level object with its own position space.
2345 void SetOwnRange(const wxRichTextRange
& range
) { m_ownRange
= range
; }
2348 Returns the object's own range (valid if top-level).
2350 const wxRichTextRange
& GetOwnRange() const { return m_ownRange
; }
2353 Returns the object's own range (valid if top-level).
2355 wxRichTextRange
& GetOwnRange() { return m_ownRange
; }
2358 Returns the object's own range only if a top-level object.
2360 wxRichTextRange
GetOwnRangeIfTopLevel() const { return IsTopLevel() ? m_ownRange
: m_range
; }
2363 Returns @true if this object this composite.
2365 virtual bool IsComposite() const { return false; }
2368 Returns a pointer to the parent object.
2370 virtual wxRichTextObject
* GetParent() const { return m_parent
; }
2373 Sets the pointer to the parent object.
2375 virtual void SetParent(wxRichTextObject
* parent
) { m_parent
= parent
; }
2378 Returns the top-level container of this object.
2379 May return itself if it's a container; use GetParentContainer to return
2380 a different container.
2382 virtual wxRichTextParagraphLayoutBox
* GetContainer() const;
2385 Returns the top-level container of this object.
2386 Returns a different container than itself, unless there's no parent, in which case it will return NULL.
2388 virtual wxRichTextParagraphLayoutBox
* GetParentContainer() const { return GetParent() ? GetParent()->GetContainer() : GetContainer(); }
2391 Set the margin around the object, in pixels.
2393 virtual void SetMargins(int margin
);
2396 Set the margin around the object, in pixels.
2398 virtual void SetMargins(int leftMargin
, int rightMargin
, int topMargin
, int bottomMargin
);
2401 Returns the left margin of the object, in pixels.
2403 virtual int GetLeftMargin() const;
2406 Returns the right margin of the object, in pixels.
2408 virtual int GetRightMargin() const;
2411 Returns the top margin of the object, in pixels.
2413 virtual int GetTopMargin() const;
2416 Returns the bottom margin of the object, in pixels.
2418 virtual int GetBottomMargin() const;
2421 Calculates the available content space in the given rectangle, given the
2422 margins, border and padding specified in the object's attributes.
2424 virtual wxRect
GetAvailableContentArea(wxDC
& dc
, const wxRect
& outerRect
) const;
2427 Lays out the object first with a given amount of space, and then if no width was specified in attr,
2428 lays out the object again using the minimum size. @a availableParentSpace is the maximum space
2429 for the object, whereas @a availableContainerSpace is the container with which relative positions and
2430 sizes should be computed. For example, a text box whose space has already been constrained
2431 in a previous layout pass to @a availableParentSpace, but should have a width of 50% of @a availableContainerSpace.
2432 (If these two rects were the same, a 2nd pass could see the object getting too small.)
2434 virtual bool LayoutToBestSize(wxDC
& dc
, wxRichTextBuffer
* buffer
,
2435 const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& attr
,
2436 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
, int style
);
2439 Sets the object's attributes.
2441 void SetAttributes(const wxRichTextAttr
& attr
) { m_attributes
= attr
; }
2444 Returns the object's attributes.
2446 const wxRichTextAttr
& GetAttributes() const { return m_attributes
; }
2449 Returns the object's attributes.
2451 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
2454 Sets the object's properties.
2456 wxRichTextProperties
& GetProperties() { return m_properties
; }
2459 Returns the object's properties.
2461 const wxRichTextProperties
& GetProperties() const { return m_properties
; }
2464 Returns the object's properties.
2466 void SetProperties(const wxRichTextProperties
& props
) { m_properties
= props
; }
2469 Sets the stored descent value.
2471 void SetDescent(int descent
) { m_descent
= descent
; }
2474 Returns the stored descent value.
2476 int GetDescent() const { return m_descent
; }
2479 Returns the containing buffer.
2481 wxRichTextBuffer
* GetBuffer() const;
2484 Sets the identifying name for this object as a property using the "name" key.
2486 void SetName(const wxString
& name
) { m_properties
.SetProperty(wxT("name"), name
); }
2489 Returns the identifying name for this object from the properties, using the "name" key.
2491 wxString
GetName() const { return m_properties
.GetPropertyString(wxT("name")); }
2494 Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box.
2496 virtual bool IsTopLevel() const { return false; }
2499 Returns @true if the object will be shown, @false otherwise.
2501 bool IsShown() const { return m_show
; }
2506 Call to show or hide this object. This function does not cause the content to be
2507 laid out or redrawn.
2509 virtual void Show(bool show
) { m_show
= show
; }
2514 virtual wxRichTextObject
* Clone() const { return NULL
; }
2519 void Copy(const wxRichTextObject
& obj
);
2522 Reference-counting allows us to use the same object in multiple
2523 lists (not yet used).
2526 void Reference() { m_refCount
++; }
2529 Reference-counting allows us to use the same object in multiple
2530 lists (not yet used).
2535 Moves the object recursively, by adding the offset from old to new.
2537 virtual void Move(const wxPoint
& pt
);
2540 Converts units in tenths of a millimetre to device units.
2542 int ConvertTenthsMMToPixels(wxDC
& dc
, int units
) const;
2545 Converts units in tenths of a millimetre to device units.
2547 static int ConvertTenthsMMToPixels(int ppi
, int units
, double scale
= 1.0);
2550 Convert units in pixels to tenths of a millimetre.
2552 int ConvertPixelsToTenthsMM(wxDC
& dc
, int pixels
) const;
2555 Convert units in pixels to tenths of a millimetre.
2557 static int ConvertPixelsToTenthsMM(int ppi
, int pixels
, double scale
= 1.0);
2560 Draws the borders and background for the given rectangle and attributes.
2561 @a boxRect is taken to be the outer margin box, not the box around the content.
2563 static bool DrawBoxAttributes(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, const wxRect
& boxRect
, int flags
= 0);
2568 static bool DrawBorder(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxTextAttrBorders
& attr
, const wxRect
& rect
, int flags
= 0);
2571 Returns the various rectangles of the box model in pixels. You can either specify @a contentRect (inner)
2572 or @a marginRect (outer), and the other must be the default rectangle (no width or height).
2573 Note that the outline doesn't affect the position of the rectangle, it's drawn in whatever space
2576 static bool GetBoxRects(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, wxRect
& marginRect
, wxRect
& borderRect
, wxRect
& contentRect
, wxRect
& paddingRect
, wxRect
& outlineRect
);
2579 Returns the total margin for the object in pixels, taking into account margin, padding and border size.
2581 static bool GetTotalMargin(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& attr
, int& leftMargin
, int& rightMargin
,
2582 int& topMargin
, int& bottomMargin
);
2585 Returns the rectangle which the child has available to it given restrictions specified in the
2586 child attribute, e.g. 50% width of the parent, 400 pixels, x position 20% of the parent, etc.
2587 availableContainerSpace might be a parent that the cell has to compute its width relative to.
2588 E.g. a cell that's 50% of its parent.
2590 static wxRect
AdjustAvailableSpace(wxDC
& dc
, wxRichTextBuffer
* buffer
, const wxRichTextAttr
& parentAttr
, const wxRichTextAttr
& childAttr
,
2591 const wxRect
& availableParentSpace
, const wxRect
& availableContainerSpace
);
2598 int m_descent
; // Descent for this object (if any)
2601 wxRichTextObject
* m_parent
;
2603 // The range of this object (start position to end position)
2604 wxRichTextRange m_range
;
2606 // The internal range of this object, if it's a top-level object with its own range space
2607 wxRichTextRange m_ownRange
;
2610 wxRichTextAttr m_attributes
;
2613 wxRichTextProperties m_properties
;
2616 WX_DECLARE_LIST_WITH_DECL( wxRichTextObject
, wxRichTextObjectList
, class WXDLLIMPEXP_RICHTEXT
);
2619 @class wxRichTextCompositeObject
2621 Objects of this class can contain other objects.
2623 @library{wxrichtext}
2626 @see wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2629 class WXDLLIMPEXP_RICHTEXT wxRichTextCompositeObject
: public wxRichTextObject
2631 DECLARE_CLASS(wxRichTextCompositeObject
)
2635 wxRichTextCompositeObject(wxRichTextObject
* parent
= NULL
);
2636 virtual ~wxRichTextCompositeObject();
2640 virtual int HitTest(wxDC
& dc
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2642 virtual bool FindPosition(wxDC
& dc
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
2644 virtual void CalculateRange(long start
, long& end
);
2646 virtual bool DeleteRange(const wxRichTextRange
& range
);
2648 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2650 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
2652 virtual void Dump(wxTextOutputStream
& stream
);
2654 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
2659 Returns the children.
2661 wxRichTextObjectList
& GetChildren() { return m_children
; }
2663 Returns the children.
2665 const wxRichTextObjectList
& GetChildren() const { return m_children
; }
2668 Returns the number of children.
2670 size_t GetChildCount() const ;
2673 Returns the nth child.
2675 wxRichTextObject
* GetChild(size_t n
) const ;
2678 Returns @true if this object is composite.
2680 virtual bool IsComposite() const { return true; }
2683 Returns true if the buffer is empty.
2685 virtual bool IsEmpty() const { return GetChildCount() == 0; }
2688 Returns the child object at the given character position.
2690 virtual wxRichTextObject
* GetChildAtPosition(long pos
) const;
2694 void Copy(const wxRichTextCompositeObject
& obj
);
2696 void operator= (const wxRichTextCompositeObject
& obj
) { Copy(obj
); }
2699 Appends a child, returning the position.
2701 size_t AppendChild(wxRichTextObject
* child
) ;
2704 Inserts the child in front of the given object, or at the beginning.
2706 bool InsertChild(wxRichTextObject
* child
, wxRichTextObject
* inFrontOf
) ;
2709 Removes and optionally deletes the specified child.
2711 bool RemoveChild(wxRichTextObject
* child
, bool deleteChild
= false) ;
2714 Deletes all the children.
2716 bool DeleteChildren() ;
2719 Recursively merges all pieces that can be merged.
2721 bool Defragment(const wxRichTextRange
& range
= wxRICHTEXT_ALL
);
2724 Moves the object recursively, by adding the offset from old to new.
2726 virtual void Move(const wxPoint
& pt
);
2729 wxRichTextObjectList m_children
;
2733 @class wxRichTextParagraphBox
2735 This class knows how to lay out paragraphs.
2737 @library{wxrichtext}
2740 @see wxRichTextCompositeObject, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
2743 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraphLayoutBox
: public wxRichTextCompositeObject
2745 DECLARE_DYNAMIC_CLASS(wxRichTextParagraphLayoutBox
)
2749 wxRichTextParagraphLayoutBox(wxRichTextObject
* parent
= NULL
);
2750 wxRichTextParagraphLayoutBox(const wxRichTextParagraphLayoutBox
& obj
): wxRichTextCompositeObject() { Init(); Copy(obj
); }
2751 ~wxRichTextParagraphLayoutBox();
2755 virtual int HitTest(wxDC
& dc
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
2757 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2759 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
2761 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
2763 virtual bool DeleteRange(const wxRichTextRange
& range
);
2765 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
2768 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
2771 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
2772 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
2775 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
2776 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
2779 virtual wxString
GetXMLNodeName() const { return wxT("paragraphlayout"); }
2781 virtual bool AcceptsFocus() const { return true; }
2786 Associates a control with the buffer, for operations that for example require refreshing the window.
2788 void SetRichTextCtrl(wxRichTextCtrl
* ctrl
) { m_ctrl
= ctrl
; }
2791 Returns the associated control.
2793 wxRichTextCtrl
* GetRichTextCtrl() const { return m_ctrl
; }
2796 Sets a flag indicating whether the last paragraph is partial or complete.
2798 void SetPartialParagraph(bool partialPara
) { m_partialParagraph
= partialPara
; }
2801 Returns a flag indicating whether the last paragraph is partial or complete.
2803 bool GetPartialParagraph() const { return m_partialParagraph
; }
2806 Returns the style sheet associated with the overall buffer.
2808 virtual wxRichTextStyleSheet
* GetStyleSheet() const;
2810 virtual bool IsTopLevel() const { return true; }
2815 Submits a command to insert paragraphs.
2817 bool InsertParagraphsWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2820 Submits a command to insert the given text.
2822 bool InsertTextWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2825 Submits a command to insert the given text.
2827 bool InsertNewlineWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2830 Submits a command to insert the given image.
2832 bool InsertImageWithUndo(wxRichTextBuffer
* buffer
, long pos
, const wxRichTextImageBlock
& imageBlock
,
2833 wxRichTextCtrl
* ctrl
, int flags
, const wxRichTextAttr
& textAttr
);
2836 Returns the style that is appropriate for a new paragraph at this position.
2837 If the previous paragraph has a paragraph style name, looks up the next-paragraph
2840 wxRichTextAttr
GetStyleForNewParagraph(wxRichTextBuffer
* buffer
, long pos
, bool caretPosition
= false, bool lookUpNewParaStyle
=false) const;
2845 wxRichTextObject
* InsertObjectWithUndo(wxRichTextBuffer
* buffer
, long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
= 0);
2848 Submits a command to delete this range.
2850 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
, wxRichTextBuffer
* buffer
);
2853 Draws the floating objects in this buffer.
2855 void DrawFloats(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
2858 Moves an anchored object to another paragraph.
2860 void MoveAnchoredObjectToParagraph(wxRichTextParagraph
* from
, wxRichTextParagraph
* to
, wxRichTextObject
* obj
);
2863 Initializes the object.
2868 Clears all the children.
2870 virtual void Clear();
2873 Clears and initializes with one blank paragraph.
2875 virtual void Reset();
2878 Convenience function to add a paragraph of text.
2880 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2883 Convenience function to add an image.
2885 virtual wxRichTextRange
AddImage(const wxImage
& image
, wxRichTextAttr
* paraStyle
= NULL
);
2888 Adds multiple paragraphs, based on newlines.
2890 virtual wxRichTextRange
AddParagraphs(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
);
2893 Returns the line at the given position. If @a caretPosition is true, the position is
2894 a caret position, which is normally a smaller number.
2896 virtual wxRichTextLine
* GetLineAtPosition(long pos
, bool caretPosition
= false) const;
2899 Returns the line at the given y pixel position, or the last line.
2901 virtual wxRichTextLine
* GetLineAtYPosition(int y
) const;
2904 Returns the paragraph at the given character or caret position.
2906 virtual wxRichTextParagraph
* GetParagraphAtPosition(long pos
, bool caretPosition
= false) const;
2909 Returns the line size at the given position.
2911 virtual wxSize
GetLineSizeAtPosition(long pos
, bool caretPosition
= false) const;
2914 Given a position, returns the number of the visible line (potentially many to a paragraph),
2915 starting from zero at the start of the buffer. We also have to pass a bool (@a startOfLine)
2916 that indicates whether the caret is being shown at the end of the previous line or at the start
2917 of the next, since the caret can be shown at two visible positions for the same underlying
2920 virtual long GetVisibleLineNumber(long pos
, bool caretPosition
= false, bool startOfLine
= false) const;
2923 Given a line number, returns the corresponding wxRichTextLine object.
2925 virtual wxRichTextLine
* GetLineForVisibleLineNumber(long lineNumber
) const;
2928 Returns the leaf object in a paragraph at this position.
2930 virtual wxRichTextObject
* GetLeafObjectAtPosition(long position
) const;
2933 Returns the paragraph by number.
2935 virtual wxRichTextParagraph
* GetParagraphAtLine(long paragraphNumber
) const;
2938 Returns the paragraph for a given line.
2940 virtual wxRichTextParagraph
* GetParagraphForLine(wxRichTextLine
* line
) const;
2943 Returns the length of the paragraph.
2945 virtual int GetParagraphLength(long paragraphNumber
) const;
2948 Returns the number of paragraphs.
2950 virtual int GetParagraphCount() const { return static_cast<int>(GetChildCount()); }
2953 Returns the number of visible lines.
2955 virtual int GetLineCount() const;
2958 Returns the text of the paragraph.
2960 virtual wxString
GetParagraphText(long paragraphNumber
) const;
2963 Converts zero-based line column and paragraph number to a position.
2965 virtual long XYToPosition(long x
, long y
) const;
2968 Converts a zero-based position to line column and paragraph number.
2970 virtual bool PositionToXY(long pos
, long* x
, long* y
) const;
2973 Sets the attributes for the given range. Pass flags to determine how the
2976 The end point of range is specified as the last character position of the span
2977 of text. So, for example, to set the style for a character at position 5,
2978 use the range (5,5).
2979 This differs from the wxRichTextCtrl API, where you would specify (5,6).
2981 @a flags may contain a bit list of the following values:
2982 - wxRICHTEXT_SETSTYLE_NONE: no style flag.
2983 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
2985 - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
2986 if the combined style at this point is already the style in question.
2987 - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
2988 applied to paragraphs, and not the content.
2989 This allows content styling to be preserved independently from that
2990 of e.g. a named paragraph style.
2991 - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
2992 applied to characters, and not the paragraph.
2993 This allows content styling to be preserved independently from that
2994 of e.g. a named paragraph style.
2995 - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
2997 - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style.
2998 Only the style flags are used in this operation.
3000 virtual bool SetStyle(const wxRichTextRange
& range
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3003 Sets the attributes for the given object only, for example the box attributes for a text box.
3005 virtual void SetStyle(wxRichTextObject
*obj
, const wxRichTextAttr
& textAttr
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3008 Returns the combined text attributes for this position.
3010 This function gets the @e uncombined style - that is, the attributes associated
3011 with the paragraph or character content, and not necessarily the combined
3012 attributes you see on the screen. To get the combined attributes, use GetStyle().
3013 If you specify (any) paragraph attribute in @e style's flags, this function
3014 will fetch the paragraph attributes.
3015 Otherwise, it will return the character attributes.
3017 virtual bool GetStyle(long position
, wxRichTextAttr
& style
);
3020 Returns the content (uncombined) attributes for this position.
3022 virtual bool GetUncombinedStyle(long position
, wxRichTextAttr
& style
);
3025 Implementation helper for GetStyle. If combineStyles is true, combine base, paragraph and
3028 virtual bool DoGetStyle(long position
, wxRichTextAttr
& style
, bool combineStyles
= true);
3031 This function gets a style representing the common, combined attributes in the
3033 Attributes which have different values within the specified range will not be
3034 included the style flags.
3036 The function is used to get the attributes to display in the formatting dialog:
3037 the user can edit the attributes common to the selection, and optionally specify the
3038 values of further attributes to be applied uniformly.
3040 To apply the edited attributes, you can use SetStyle() specifying
3041 the wxRICHTEXT_SETSTYLE_OPTIMIZE flag, which will only apply attributes that
3042 are different from the @e combined attributes within the range.
3043 So, the user edits the effective, displayed attributes for the range,
3044 but his choice won't be applied unnecessarily to content. As an example,
3045 say the style for a paragraph specifies bold, but the paragraph text doesn't
3047 The combined style is bold, and this is what the user will see on-screen and
3048 in the formatting dialog. The user now specifies red text, in addition to bold.
3049 When applying with SetStyle(), the content font weight attributes won't be
3050 changed to bold because this is already specified by the paragraph.
3051 However the text colour attributes @e will be changed to show red.
3053 virtual bool GetStyleForRange(const wxRichTextRange
& range
, wxRichTextAttr
& style
);
3056 Combines @a style with @a currentStyle for the purpose of summarising the attributes of a range of
3059 bool CollectStyle(wxRichTextAttr
& currentStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
& clashingAttr
, wxRichTextAttr
& absentAttr
);
3063 Sets the list attributes for the given range, passing flags to determine how
3064 the attributes are set.
3065 Either the style definition or the name of the style definition (in the current
3066 sheet) can be passed.
3068 @a flags is a bit list of the following:
3069 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3070 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3071 @a startFrom, otherwise existing attributes are used.
3072 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3073 as the level for all paragraphs, otherwise the current indentation will be used.
3075 @see NumberList(), PromoteList(), ClearListStyle().
3077 virtual bool SetListStyle(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3078 virtual bool SetListStyle(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3082 Clears the list style from the given range, clearing list-related attributes
3083 and applying any named paragraph style associated with each paragraph.
3085 @a flags is a bit list of the following:
3086 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3088 @see SetListStyle(), PromoteList(), NumberList()
3090 virtual bool ClearListStyle(const wxRichTextRange
& range
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
3094 Numbers the paragraphs in the given range.
3096 Pass flags to determine how the attributes are set.
3097 Either the style definition or the name of the style definition (in the current
3098 sheet) can be passed.
3100 @a flags is a bit list of the following:
3101 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3102 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3103 @a startFrom, otherwise existing attributes are used.
3104 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3105 as the level for all paragraphs, otherwise the current indentation will be used.
3107 @a def can be NULL to indicate that the existing list style should be used.
3109 @see SetListStyle(), PromoteList(), ClearListStyle()
3111 virtual bool NumberList(const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3112 virtual bool NumberList(const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int startFrom
= 1, int specifiedLevel
= -1);
3117 Promotes the list items within the given range.
3118 A positive @a promoteBy produces a smaller indent, and a negative number
3119 produces a larger indent. Pass flags to determine how the attributes are set.
3120 Either the style definition or the name of the style definition (in the current
3121 sheet) can be passed.
3123 @a flags is a bit list of the following:
3124 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
3125 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
3126 @a startFrom, otherwise existing attributes are used.
3127 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
3128 as the level for all paragraphs, otherwise the current indentation will be used.
3130 @see SetListStyle(), SetListStyle(), ClearListStyle()
3132 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, wxRichTextListStyleDefinition
* def
= NULL
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3133 virtual bool PromoteList(int promoteBy
, const wxRichTextRange
& range
, const wxString
& defName
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
, int specifiedLevel
= -1);
3137 Helper for NumberList and PromoteList, that does renumbering and promotion simultaneously
3138 @a def can be NULL/empty to indicate that the existing list style should be used.
3140 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);
3143 Fills in the attributes for numbering a paragraph after previousParagraph.
3145 virtual bool FindNextParagraphNumber(wxRichTextParagraph
* previousParagraph
, wxRichTextAttr
& attr
) const;
3148 Sets the properties for the given range, passing flags to determine how the
3149 attributes are set. You can merge properties or replace them.
3151 The end point of range is specified as the last character position of the span
3152 of text, plus one. So, for example, to set the properties for a character at
3153 position 5, use the range (5,6).
3155 @a flags may contain a bit list of the following values:
3156 - wxRICHTEXT_SETPROPERTIES_NONE: no flag.
3157 - wxRICHTEXT_SETPROPERTIES_WITH_UNDO: specifies that this operation should be
3159 - wxRICHTEXT_SETPROPERTIES_PARAGRAPHS_ONLY: specifies that the properties should only be
3160 applied to paragraphs, and not the content.
3161 - wxRICHTEXT_SETPROPERTIES_CHARACTERS_ONLY: specifies that the properties should only be
3162 applied to characters, and not the paragraph.
3163 - wxRICHTEXT_SETPROPERTIES_RESET: resets (clears) the existing properties before applying
3165 - wxRICHTEXT_SETPROPERTIES_REMOVE: removes the specified properties.
3167 virtual bool SetProperties(const wxRichTextRange
& range
, const wxRichTextProperties
& properties
, int flags
= wxRICHTEXT_SETPROPERTIES_WITH_UNDO
);
3170 Test if this whole range has character attributes of the specified kind. If any
3171 of the attributes are different within the range, the test fails. You
3172 can use this to implement, for example, bold button updating. style must have
3173 flags indicating which attributes are of interest.
3175 virtual bool HasCharacterAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3178 Test if this whole range has paragraph attributes of the specified kind. If any
3179 of the attributes are different within the range, the test fails. You
3180 can use this to implement, for example, centering button updating. style must have
3181 flags indicating which attributes are of interest.
3183 virtual bool HasParagraphAttributes(const wxRichTextRange
& range
, const wxRichTextAttr
& style
) const;
3185 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraphLayoutBox(*this); }
3188 Insert fragment into this box at the given position. If partialParagraph is true,
3189 it is assumed that the last (or only) paragraph is just a piece of data with no paragraph
3192 virtual bool InsertFragment(long position
, wxRichTextParagraphLayoutBox
& fragment
);
3195 Make a copy of the fragment corresponding to the given range, putting it in @a fragment.
3197 virtual bool CopyFragment(const wxRichTextRange
& range
, wxRichTextParagraphLayoutBox
& fragment
);
3200 Apply the style sheet to the buffer, for example if the styles have changed.
3202 virtual bool ApplyStyleSheet(wxRichTextStyleSheet
* styleSheet
);
3204 void Copy(const wxRichTextParagraphLayoutBox
& obj
);
3206 void operator= (const wxRichTextParagraphLayoutBox
& obj
) { Copy(obj
); }
3211 virtual void UpdateRanges();
3216 virtual wxString
GetText() const;
3219 Sets the default style, affecting the style currently being applied
3220 (for example, setting the default style to bold will cause subsequently
3221 inserted text to be bold).
3223 This is not cumulative - setting the default style will replace the previous
3226 Setting it to a default attribute object makes new content take on the 'basic' style.
3228 virtual bool SetDefaultStyle(const wxRichTextAttr
& style
);
3231 Returns the current default style, affecting the style currently being applied
3232 (for example, setting the default style to bold will cause subsequently
3233 inserted text to be bold).
3235 virtual const wxRichTextAttr
& GetDefaultStyle() const { return m_defaultAttributes
; }
3238 Sets the basic (overall) style. This is the style of the whole
3239 buffer before further styles are applied, unlike the default style, which
3240 only affects the style currently being applied (for example, setting the default
3241 style to bold will cause subsequently inserted text to be bold).
3243 virtual void SetBasicStyle(const wxRichTextAttr
& style
) { m_attributes
= style
; }
3246 Returns the basic (overall) style.
3248 This is the style of the whole buffer before further styles are applied,
3249 unlike the default style, which only affects the style currently being
3250 applied (for example, setting the default style to bold will cause
3251 subsequently inserted text to be bold).
3253 virtual const wxRichTextAttr
& GetBasicStyle() const { return m_attributes
; }
3256 Invalidates the buffer. With no argument, invalidates whole buffer.
3258 virtual void Invalidate(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3261 Do the (in)validation for this object only.
3263 virtual void DoInvalidate(const wxRichTextRange
& invalidRange
);
3266 Do the (in)validation both up and down the hierarchy.
3268 virtual void InvalidateHierarchy(const wxRichTextRange
& invalidRange
= wxRICHTEXT_ALL
);
3271 Gather information about floating objects. If untilObj is non-NULL,
3272 will stop getting information if the current object is this, since we
3273 will collect the rest later.
3275 virtual bool UpdateFloatingObjects(const wxRect
& availableRect
, wxRichTextObject
* untilObj
= NULL
);
3278 Get invalid range, rounding to entire paragraphs if argument is true.
3280 wxRichTextRange
GetInvalidRange(bool wholeParagraphs
= false) const;
3283 Returns @true if this object needs layout.
3285 bool IsDirty() const { return m_invalidRange
!= wxRICHTEXT_NONE
; }
3288 Returns the wxRichTextFloatCollector of this object.
3290 wxRichTextFloatCollector
* GetFloatCollector() { return m_floatCollector
; }
3293 Returns the number of floating objects at this level.
3295 int GetFloatingObjectCount() const;
3298 Returns a list of floating objects.
3300 bool GetFloatingObjects(wxRichTextObjectList
& objects
) const;
3303 wxRichTextCtrl
* m_ctrl
;
3304 wxRichTextAttr m_defaultAttributes
;
3306 // The invalidated range that will need full layout
3307 wxRichTextRange m_invalidRange
;
3309 // Is the last paragraph partial or complete?
3310 bool m_partialParagraph
;
3312 // The floating layout state
3313 wxRichTextFloatCollector
* m_floatCollector
;
3317 @class wxRichTextBox
3319 This class implements a floating or inline text box, containing paragraphs.
3321 @library{wxrichtext}
3324 @see wxRichTextParagraphLayoutBox, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
3327 class WXDLLIMPEXP_RICHTEXT wxRichTextBox
: public wxRichTextParagraphLayoutBox
3329 DECLARE_DYNAMIC_CLASS(wxRichTextBox
)
3334 Default constructor; optionally pass the parent object.
3337 wxRichTextBox(wxRichTextObject
* parent
= NULL
);
3343 wxRichTextBox(const wxRichTextBox
& obj
): wxRichTextParagraphLayoutBox() { Copy(obj
); }
3347 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3349 virtual wxString
GetXMLNodeName() const { return wxT("textbox"); }
3351 virtual bool CanEditProperties() const { return true; }
3353 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3355 virtual wxString
GetPropertiesMenuLabel() const { return _("&Box"); }
3361 virtual wxRichTextObject
* Clone() const { return new wxRichTextBox(*this); }
3363 void Copy(const wxRichTextBox
& obj
);
3369 @class wxRichTextLine
3371 This object represents a line in a paragraph, and stores
3372 offsets from the start of the paragraph representing the
3373 start and end positions of the line.
3375 @library{wxrichtext}
3378 @see wxRichTextBuffer, wxRichTextCtrl
3381 class WXDLLIMPEXP_RICHTEXT wxRichTextLine
3386 wxRichTextLine(wxRichTextParagraph
* parent
);
3387 wxRichTextLine(const wxRichTextLine
& obj
) { Init( NULL
); Copy(obj
); }
3388 virtual ~wxRichTextLine() {}
3395 Sets the range associated with this line.
3397 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
3399 Sets the range associated with this line.
3401 void SetRange(long from
, long to
) { m_range
= wxRichTextRange(from
, to
); }
3404 Returns the parent paragraph.
3406 wxRichTextParagraph
* GetParent() { return m_parent
; }
3411 const wxRichTextRange
& GetRange() const { return m_range
; }
3415 wxRichTextRange
& GetRange() { return m_range
; }
3418 Returns the absolute range.
3420 wxRichTextRange
GetAbsoluteRange() const;
3423 Returns the line size as calculated by Layout.
3425 virtual wxSize
GetSize() const { return m_size
; }
3428 Sets the line size as calculated by Layout.
3430 virtual void SetSize(const wxSize
& sz
) { m_size
= sz
; }
3433 Returns the object position relative to the parent.
3435 virtual wxPoint
GetPosition() const { return m_pos
; }
3438 Sets the object position relative to the parent.
3440 virtual void SetPosition(const wxPoint
& pos
) { m_pos
= pos
; }
3443 Returns the absolute object position.
3445 virtual wxPoint
GetAbsolutePosition() const;
3448 Returns the rectangle enclosing the line.
3450 virtual wxRect
GetRect() const { return wxRect(GetAbsolutePosition(), GetSize()); }
3453 Sets the stored descent.
3455 void SetDescent(int descent
) { m_descent
= descent
; }
3458 Returns the stored descent.
3460 int GetDescent() const { return m_descent
; }
3462 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3463 wxArrayInt
& GetObjectSizes() { return m_objectSizes
; }
3464 const wxArrayInt
& GetObjectSizes() const { return m_objectSizes
; }
3470 Initialises the object.
3472 void Init(wxRichTextParagraph
* parent
);
3477 void Copy(const wxRichTextLine
& obj
);
3479 virtual wxRichTextLine
* Clone() const { return new wxRichTextLine(*this); }
3483 // The range of the line (start position to end position)
3484 // This is relative to the parent paragraph.
3485 wxRichTextRange m_range
;
3487 // Size and position measured relative to top of paragraph
3491 // Maximum descent for this line (location of text baseline)
3494 // The parent object
3495 wxRichTextParagraph
* m_parent
;
3497 #if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
3498 wxArrayInt m_objectSizes
;
3502 WX_DECLARE_LIST_WITH_DECL( wxRichTextLine
, wxRichTextLineList
, class WXDLLIMPEXP_RICHTEXT
);
3505 @class wxRichTextParagraph
3507 This object represents a single paragraph containing various objects such as text content, images, and further paragraph layout objects.
3509 @library{wxrichtext}
3512 @see wxRichTextBuffer, wxRichTextCtrl
3515 class WXDLLIMPEXP_RICHTEXT wxRichTextParagraph
: public wxRichTextCompositeObject
3517 DECLARE_DYNAMIC_CLASS(wxRichTextParagraph
)
3522 Constructor taking a parent and style.
3524 wxRichTextParagraph(wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
3526 Constructor taking a text string, a parent and paragraph and character attributes.
3528 wxRichTextParagraph(const wxString
& text
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* paraStyle
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
3529 virtual ~wxRichTextParagraph();
3530 wxRichTextParagraph(const wxRichTextParagraph
& obj
): wxRichTextCompositeObject() { Copy(obj
); }
3534 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3536 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3538 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3540 virtual bool FindPosition(wxDC
& dc
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
3542 virtual int HitTest(wxDC
& dc
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
3544 virtual void CalculateRange(long start
, long& end
);
3546 virtual wxString
GetXMLNodeName() const { return wxT("paragraph"); }
3551 Returns the cached lines.
3553 wxRichTextLineList
& GetLines() { return m_cachedLines
; }
3560 void Copy(const wxRichTextParagraph
& obj
);
3562 virtual wxRichTextObject
* Clone() const { return new wxRichTextParagraph(*this); }
3565 Clears the cached lines.
3572 Applies paragraph styles such as centering to the wrapped lines.
3574 virtual void ApplyParagraphStyle(wxRichTextLine
* line
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxDC
& dc
);
3577 Inserts text at the given position.
3579 virtual bool InsertText(long pos
, const wxString
& text
);
3582 Splits an object at this position if necessary, and returns
3583 the previous object, or NULL if inserting at the beginning.
3585 virtual wxRichTextObject
* SplitAt(long pos
, wxRichTextObject
** previousObject
= NULL
);
3588 Moves content to a list from this point.
3590 virtual void MoveToList(wxRichTextObject
* obj
, wxList
& list
);
3593 Adds content back from a list.
3595 virtual void MoveFromList(wxList
& list
);
3598 Returns the plain text searching from the start or end of the range.
3599 The resulting string may be shorter than the range given.
3601 bool GetContiguousPlainText(wxString
& text
, const wxRichTextRange
& range
, bool fromStart
= true);
3604 Finds a suitable wrap position. @a wrapPosition is the last position in the line to the left
3607 bool FindWrapPosition(const wxRichTextRange
& range
, wxDC
& dc
, int availableSpace
, long& wrapPosition
, wxArrayInt
* partialExtents
);
3610 Finds the object at the given position.
3612 wxRichTextObject
* FindObjectAtPosition(long position
);
3615 Returns the bullet text for this paragraph.
3617 wxString
GetBulletText();
3620 Allocates or reuses a line object.
3622 wxRichTextLine
* AllocateLine(int pos
);
3625 Clears remaining unused line objects, if any.
3627 bool ClearUnusedLines(int lineCount
);
3630 Returns combined attributes of the base style, paragraph style and character style. We use this to dynamically
3631 retrieve the actual style.
3633 wxRichTextAttr
GetCombinedAttributes(const wxRichTextAttr
& contentStyle
, bool includingBoxAttr
= false) const;
3636 Returns the combined attributes of the base style and paragraph style.
3638 wxRichTextAttr
GetCombinedAttributes(bool includingBoxAttr
= false) const;
3641 Returns the first position from pos that has a line break character.
3643 long GetFirstLineBreakPosition(long pos
);
3646 Creates a default tabstop array.
3648 static void InitDefaultTabs();
3651 Clears the default tabstop array.
3653 static void ClearDefaultTabs();
3656 Returns the default tabstop array.
3658 static const wxArrayInt
& GetDefaultTabs() { return sm_defaultTabs
; }
3661 Lays out the floating objects.
3663 void LayoutFloat(wxDC
& dc
, const wxRect
& rect
, int style
, wxRichTextFloatCollector
* floatCollector
);
3667 // The lines that make up the wrapped paragraph
3668 wxRichTextLineList m_cachedLines
;
3671 static wxArrayInt sm_defaultTabs
;
3673 friend class wxRichTextFloatCollector
;
3677 @class wxRichTextPlainText
3679 This object represents a single piece of text.
3681 @library{wxrichtext}
3684 @see wxRichTextBuffer, wxRichTextCtrl
3687 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainText
: public wxRichTextObject
3689 DECLARE_DYNAMIC_CLASS(wxRichTextPlainText
)
3696 wxRichTextPlainText(const wxString
& text
= wxEmptyString
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* style
= NULL
);
3701 wxRichTextPlainText(const wxRichTextPlainText
& obj
): wxRichTextObject() { Copy(obj
); }
3705 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3707 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3709 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3711 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
3713 virtual wxRichTextObject
* DoSplit(long pos
);
3715 virtual void CalculateRange(long start
, long& end
);
3717 virtual bool DeleteRange(const wxRichTextRange
& range
);
3719 virtual bool IsEmpty() const { return m_text
.empty(); }
3721 virtual bool CanMerge(wxRichTextObject
* object
) const;
3723 virtual bool Merge(wxRichTextObject
* object
);
3725 virtual void Dump(wxTextOutputStream
& stream
);
3728 Get the first position from pos that has a line break character.
3730 long GetFirstLineBreakPosition(long pos
);
3732 /// Does this object take note of paragraph attributes? Text and image objects don't.
3733 virtual bool UsesParagraphAttributes() const { return false; }
3736 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
3739 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
3740 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
3743 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
3744 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
3747 virtual wxString
GetXMLNodeName() const { return wxT("text"); }
3754 const wxString
& GetText() const { return m_text
; }
3759 void SetText(const wxString
& text
) { m_text
= text
; }
3763 // Copies the text object,
3764 void Copy(const wxRichTextPlainText
& obj
);
3766 // Clones the text object.
3767 virtual wxRichTextObject
* Clone() const { return new wxRichTextPlainText(*this); }
3770 bool DrawTabbedString(wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, wxString
& str
, wxCoord
& x
, wxCoord
& y
, bool selected
);
3777 @class wxRichTextImageBlock
3779 This class stores information about an image, in binary in-memory form.
3781 @library{wxrichtext}
3784 @see wxRichTextBuffer, wxRichTextCtrl
3787 class WXDLLIMPEXP_RICHTEXT wxRichTextImageBlock
: public wxObject
3793 wxRichTextImageBlock();
3798 wxRichTextImageBlock(const wxRichTextImageBlock
& block
);
3799 virtual ~wxRichTextImageBlock();
3802 Initialises the block.
3813 Load the original image into a memory block.
3814 If the image is not a JPEG, we must convert it into a JPEG
3816 If it's not a JPEG we can make use of @a image, already scaled, so we don't have to
3817 load the image a second time.
3819 virtual bool MakeImageBlock(const wxString
& filename
, wxBitmapType imageType
,
3820 wxImage
& image
, bool convertToJPEG
= true);
3823 Make an image block from the wxImage in the given
3826 virtual bool MakeImageBlock(wxImage
& image
, wxBitmapType imageType
, int quality
= 80);
3829 Uses a const wxImage for efficiency, but can't set quality (only relevant for JPEG)
3831 virtual bool MakeImageBlockDefaultQuality(const wxImage
& image
, wxBitmapType imageType
);
3834 Makes the image block.
3836 virtual bool DoMakeImageBlock(const wxImage
& image
, wxBitmapType imageType
);
3839 Writes the block to a file.
3841 bool Write(const wxString
& filename
);
3844 Writes the data in hex to a stream.
3846 bool WriteHex(wxOutputStream
& stream
);
3849 Reads the data in hex from a stream.
3851 bool ReadHex(wxInputStream
& stream
, int length
, wxBitmapType imageType
);
3856 void Copy(const wxRichTextImageBlock
& block
);
3858 // Load a wxImage from the block
3861 bool Load(wxImage
& image
);
3866 Assignment operation.
3868 void operator=(const wxRichTextImageBlock
& block
);
3873 Returns the raw data.
3875 unsigned char* GetData() const { return m_data
; }
3878 Returns the data size in bytes.
3880 size_t GetDataSize() const { return m_dataSize
; }
3883 Returns the image type.
3885 wxBitmapType
GetImageType() const { return m_imageType
; }
3889 void SetData(unsigned char* image
) { m_data
= image
; }
3894 void SetDataSize(size_t size
) { m_dataSize
= size
; }
3897 Sets the image type.
3899 void SetImageType(wxBitmapType imageType
) { m_imageType
= imageType
; }
3902 Returns @true if the data is non-NULL.
3904 bool IsOk() const { return GetData() != NULL
; }
3905 bool Ok() const { return IsOk(); }
3908 Gets the extension for the block's type.
3910 wxString
GetExtension() const;
3915 Allocates and reads from a stream as a block of memory.
3917 static unsigned char* ReadBlock(wxInputStream
& stream
, size_t size
);
3920 Allocates and reads from a file as a block of memory.
3922 static unsigned char* ReadBlock(const wxString
& filename
, size_t size
);
3925 Writes a memory block to stream.
3927 static bool WriteBlock(wxOutputStream
& stream
, unsigned char* block
, size_t size
);
3930 Writes a memory block to a file.
3932 static bool WriteBlock(const wxString
& filename
, unsigned char* block
, size_t size
);
3935 // Size in bytes of the image stored.
3936 // This is in the raw, original form such as a JPEG file.
3937 unsigned char* m_data
;
3939 wxBitmapType m_imageType
;
3943 @class wxRichTextImage
3945 This class implements a graphic object.
3947 @library{wxrichtext}
3950 @see wxRichTextBuffer, wxRichTextCtrl, wxRichTextImageBlock
3953 class WXDLLIMPEXP_RICHTEXT wxRichTextImage
: public wxRichTextObject
3955 DECLARE_DYNAMIC_CLASS(wxRichTextImage
)
3960 Default constructor.
3962 wxRichTextImage(wxRichTextObject
* parent
= NULL
): wxRichTextObject(parent
) { }
3965 Creates a wxRichTextImage from a wxImage.
3967 wxRichTextImage(const wxImage
& image
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
3970 Creates a wxRichTextImage from an image block.
3972 wxRichTextImage(const wxRichTextImageBlock
& imageBlock
, wxRichTextObject
* parent
= NULL
, wxRichTextAttr
* charStyle
= NULL
);
3977 wxRichTextImage(const wxRichTextImage
& obj
): wxRichTextObject(obj
) { Copy(obj
); }
3981 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
3983 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
3985 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
3988 Returns the 'natural' size for this object - the image size.
3990 virtual wxTextAttrSize
GetNaturalSize() const;
3992 virtual bool IsEmpty() const { return false; /* !m_imageBlock.IsOk(); */ }
3994 virtual bool CanEditProperties() const { return true; }
3996 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
3998 virtual wxString
GetPropertiesMenuLabel() const { return _("&Picture"); }
4000 virtual bool UsesParagraphAttributes() const { return false; }
4003 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4006 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4007 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4010 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4011 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4014 // Images can be floatable (optionally).
4015 virtual bool IsFloatable() const { return true; }
4017 virtual wxString
GetXMLNodeName() const { return wxT("image"); }
4022 Returns the image cache (a scaled bitmap).
4024 const wxBitmap
& GetImageCache() const { return m_imageCache
; }
4027 Sets the image cache.
4029 void SetImageCache(const wxBitmap
& bitmap
) { m_imageCache
= bitmap
; }
4032 Resets the image cache.
4034 void ResetImageCache() { m_imageCache
= wxNullBitmap
; }
4037 Returns the image block containing the raw data.
4039 wxRichTextImageBlock
& GetImageBlock() { return m_imageBlock
; }
4044 Copies the image object.
4046 void Copy(const wxRichTextImage
& obj
);
4049 Clones the image object.
4051 virtual wxRichTextObject
* Clone() const { return new wxRichTextImage(*this); }
4054 Creates a cached image at the required size.
4056 virtual bool LoadImageCache(wxDC
& dc
, bool resetCache
= false);
4059 wxRichTextImageBlock m_imageBlock
;
4060 wxBitmap m_imageCache
;
4063 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCommand
;
4064 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
4067 @class wxRichTextBuffer
4069 This is a kind of paragraph layout box, used to represent the whole buffer.
4071 @library{wxrichtext}
4074 @see wxRichTextParagraphLayoutBox, wxRichTextCtrl
4077 class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer
: public wxRichTextParagraphLayoutBox
4079 DECLARE_DYNAMIC_CLASS(wxRichTextBuffer
)
4084 Default constructor.
4086 wxRichTextBuffer() { Init(); }
4091 wxRichTextBuffer(const wxRichTextBuffer
& obj
): wxRichTextParagraphLayoutBox() { Init(); Copy(obj
); }
4093 virtual ~wxRichTextBuffer() ;
4098 Returns the command processor.
4099 A text buffer always creates its own command processor when it is initialized.
4101 wxCommandProcessor
* GetCommandProcessor() const { return m_commandProcessor
; }
4104 Sets style sheet, if any. This will allow the application to use named character and paragraph
4105 styles found in the style sheet.
4107 Neither the buffer nor the control owns the style sheet so must be deleted by the application.
4109 void SetStyleSheet(wxRichTextStyleSheet
* styleSheet
) { m_styleSheet
= styleSheet
; }
4112 Returns the style sheet.
4114 virtual wxRichTextStyleSheet
* GetStyleSheet() const { return m_styleSheet
; }
4117 Sets the style sheet and sends a notification of the change.
4119 bool SetStyleSheetAndNotify(wxRichTextStyleSheet
* sheet
);
4122 Pushes the style sheet to the top of the style sheet stack.
4124 bool PushStyleSheet(wxRichTextStyleSheet
* styleSheet
);
4127 Pops the style sheet from the top of the style sheet stack.
4129 wxRichTextStyleSheet
* PopStyleSheet();
4132 Returns the table storing fonts, for quick access and font reuse.
4134 wxRichTextFontTable
& GetFontTable() { return m_fontTable
; }
4137 Returns the table storing fonts, for quick access and font reuse.
4139 const wxRichTextFontTable
& GetFontTable() const { return m_fontTable
; }
4142 Sets table storing fonts, for quick access and font reuse.
4144 void SetFontTable(const wxRichTextFontTable
& table
) { m_fontTable
= table
; }
4154 Clears the buffer, adds an empty paragraph, and clears the command processor.
4156 virtual void ResetAndClearCommands();
4160 Loads content from a stream or file.
4161 Not all handlers will implement file loading.
4163 virtual bool LoadFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4164 virtual bool LoadFile(wxInputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4169 Saves content to a stream or file.
4170 Not all handlers will implement file saving.
4172 virtual bool SaveFile(const wxString
& filename
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4173 virtual bool SaveFile(wxOutputStream
& stream
, wxRichTextFileType type
= wxRICHTEXT_TYPE_ANY
);
4177 Sets the handler flags, controlling loading and saving.
4179 void SetHandlerFlags(int flags
) { m_handlerFlags
= flags
; }
4182 Gets the handler flags, controlling loading and saving.
4184 int GetHandlerFlags() const { return m_handlerFlags
; }
4187 Convenience function to add a paragraph of text.
4189 virtual wxRichTextRange
AddParagraph(const wxString
& text
, wxRichTextAttr
* paraStyle
= NULL
) { Modify(); return wxRichTextParagraphLayoutBox::AddParagraph(text
, paraStyle
); }
4192 Begin collapsing undo/redo commands. Note that this may not work properly
4193 if combining commands that delete or insert content, changing ranges for
4196 @a cmdName should be the name of the combined command that will appear
4197 next to Undo and Redo in the edit menu.
4199 virtual bool BeginBatchUndo(const wxString
& cmdName
);
4202 End collapsing undo/redo commands.
4204 virtual bool EndBatchUndo();
4207 Returns @true if we are collapsing commands.
4209 virtual bool BatchingUndo() const { return m_batchedCommandDepth
> 0; }
4212 Submit the action immediately, or delay according to whether collapsing is on.
4214 virtual bool SubmitAction(wxRichTextAction
* action
);
4217 Returns the collapsed command.
4219 virtual wxRichTextCommand
* GetBatchedCommand() const { return m_batchedCommand
; }
4222 Begin suppressing undo/redo commands. The way undo is suppressed may be implemented
4223 differently by each command. If not dealt with by a command implementation, then
4224 it will be implemented automatically by not storing the command in the undo history
4225 when the action is submitted to the command processor.
4227 virtual bool BeginSuppressUndo();
4230 End suppressing undo/redo commands.
4232 virtual bool EndSuppressUndo();
4235 Are we suppressing undo??
4237 virtual bool SuppressingUndo() const { return m_suppressUndo
> 0; }
4240 Copy the range to the clipboard.
4242 virtual bool CopyToClipboard(const wxRichTextRange
& range
);
4245 Paste the clipboard content to the buffer.
4247 virtual bool PasteFromClipboard(long position
);
4250 Returns @true if we can paste from the clipboard.
4252 virtual bool CanPasteFromClipboard() const;
4255 Begin using a style.
4257 virtual bool BeginStyle(const wxRichTextAttr
& style
);
4262 virtual bool EndStyle();
4267 virtual bool EndAllStyles();
4270 Clears the style stack.
4272 virtual void ClearStyleStack();
4275 Returns the size of the style stack, for example to check correct nesting.
4277 virtual size_t GetStyleStackSize() const { return m_attributeStack
.GetCount(); }
4287 bool EndBold() { return EndStyle(); }
4290 Begins using italic.
4297 bool EndItalic() { return EndStyle(); }
4300 Begins using underline.
4302 bool BeginUnderline();
4305 Ends using underline.
4307 bool EndUnderline() { return EndStyle(); }
4310 Begins using point size.
4312 bool BeginFontSize(int pointSize
);
4315 Ends using point size.
4317 bool EndFontSize() { return EndStyle(); }
4320 Begins using this font.
4322 bool BeginFont(const wxFont
& font
);
4327 bool EndFont() { return EndStyle(); }
4330 Begins using this colour.
4332 bool BeginTextColour(const wxColour
& colour
);
4335 Ends using a colour.
4337 bool EndTextColour() { return EndStyle(); }
4340 Begins using alignment.
4342 bool BeginAlignment(wxTextAttrAlignment alignment
);
4347 bool EndAlignment() { return EndStyle(); }
4350 Begins using @a leftIndent for the left indent, and optionally @a leftSubIndent for
4351 the sub-indent. Both are expressed in tenths of a millimetre.
4353 The sub-indent is an offset from the left of the paragraph, and is used for all
4354 but the first line in a paragraph. A positive value will cause the first line to appear
4355 to the left of the subsequent lines, and a negative value will cause the first line to be
4356 indented relative to the subsequent lines.
4358 bool BeginLeftIndent(int leftIndent
, int leftSubIndent
= 0);
4363 bool EndLeftIndent() { return EndStyle(); }
4366 Begins a right indent, specified in tenths of a millimetre.
4368 bool BeginRightIndent(int rightIndent
);
4373 bool EndRightIndent() { return EndStyle(); }
4376 Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
4377 in tenths of a millimetre.
4379 bool BeginParagraphSpacing(int before
, int after
);
4382 Ends paragraph spacing.
4384 bool EndParagraphSpacing() { return EndStyle(); }
4387 Begins line spacing using the specified value. @e spacing is a multiple, where
4388 10 means single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
4390 The ::wxTextAttrLineSpacing enumeration values are defined for convenience.
4392 bool BeginLineSpacing(int lineSpacing
);
4397 bool EndLineSpacing() { return EndStyle(); }
4400 Begins numbered bullet.
4402 This call will be needed for each item in the list, and the
4403 application should take care of incrementing the numbering.
4405 @a bulletNumber is a number, usually starting with 1.
4406 @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
4407 @a bulletStyle is a bitlist of the following values:
4409 wxRichTextBuffer uses indentation to render a bulleted item.
4410 The left indent is the distance between the margin and the bullet.
4411 The content of the paragraph, including the first line, starts
4412 at leftMargin + leftSubIndent.
4413 So the distance between the left edge of the bullet and the
4414 left of the actual paragraph is leftSubIndent.
4416 bool BeginNumberedBullet(int bulletNumber
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_ARABIC
|wxTEXT_ATTR_BULLET_STYLE_PERIOD
);
4419 Ends numbered bullet.
4421 bool EndNumberedBullet() { return EndStyle(); }
4424 Begins applying a symbol bullet, using a character from the current font.
4426 See BeginNumberedBullet() for an explanation of how indentation is used
4427 to render the bulleted paragraph.
4429 bool BeginSymbolBullet(const wxString
& symbol
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_SYMBOL
);
4434 bool EndSymbolBullet() { return EndStyle(); }
4437 Begins applying a standard bullet, using one of the standard bullet names
4438 (currently @c standard/circle or @c standard/square.
4440 See BeginNumberedBullet() for an explanation of how indentation is used to
4441 render the bulleted paragraph.
4443 bool BeginStandardBullet(const wxString
& bulletName
, int leftIndent
, int leftSubIndent
, int bulletStyle
= wxTEXT_ATTR_BULLET_STYLE_STANDARD
);
4446 Ends standard bullet.
4448 bool EndStandardBullet() { return EndStyle(); }
4451 Begins named character style.
4453 bool BeginCharacterStyle(const wxString
& characterStyle
);
4456 Ends named character style.
4458 bool EndCharacterStyle() { return EndStyle(); }
4461 Begins named paragraph style.
4463 bool BeginParagraphStyle(const wxString
& paragraphStyle
);
4466 Ends named character style.
4468 bool EndParagraphStyle() { return EndStyle(); }
4471 Begins named list style.
4473 Optionally, you can also pass a level and a number.
4475 bool BeginListStyle(const wxString
& listStyle
, int level
= 1, int number
= 1);
4478 Ends named character style.
4480 bool EndListStyle() { return EndStyle(); }
4483 Begins applying wxTEXT_ATTR_URL to the content.
4485 Pass a URL and optionally, a character style to apply, since it is common
4486 to mark a URL with a familiar style such as blue text with underlining.
4488 bool BeginURL(const wxString
& url
, const wxString
& characterStyle
= wxEmptyString
);
4493 bool EndURL() { return EndStyle(); }
4498 Adds an event handler.
4500 A buffer associated with a control has the control as the only event handler,
4501 but the application is free to add more if further notification is required.
4502 All handlers are notified of an event originating from the buffer, such as
4503 the replacement of a style sheet during loading.
4505 The buffer never deletes any of the event handlers, unless RemoveEventHandler()
4506 is called with @true as the second argument.
4508 bool AddEventHandler(wxEvtHandler
* handler
);
4511 Removes an event handler from the buffer's list of handlers, deleting the
4512 object if @a deleteHandler is @true.
4514 bool RemoveEventHandler(wxEvtHandler
* handler
, bool deleteHandler
= false);
4517 Clear event handlers.
4519 void ClearEventHandlers();
4522 Send event to event handlers. If sendToAll is true, will send to all event handlers,
4523 otherwise will stop at the first successful one.
4525 bool SendEvent(wxEvent
& event
, bool sendToAll
= true);
4529 virtual int HitTest(wxDC
& dc
, const wxPoint
& pt
, long& textPosition
, wxRichTextObject
** obj
, wxRichTextObject
** contextObj
, int flags
= 0);
4534 void Copy(const wxRichTextBuffer
& obj
);
4537 Assignment operator.
4539 void operator= (const wxRichTextBuffer
& obj
) { Copy(obj
); }
4544 virtual wxRichTextObject
* Clone() const { return new wxRichTextBuffer(*this); }
4547 Submits a command to insert paragraphs.
4549 bool InsertParagraphsWithUndo(long pos
, const wxRichTextParagraphLayoutBox
& paragraphs
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4552 Submits a command to insert the given text.
4554 bool InsertTextWithUndo(long pos
, const wxString
& text
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4557 Submits a command to insert a newline.
4559 bool InsertNewlineWithUndo(long pos
, wxRichTextCtrl
* ctrl
, int flags
= 0);
4562 Submits a command to insert the given image.
4564 bool InsertImageWithUndo(long pos
, const wxRichTextImageBlock
& imageBlock
, wxRichTextCtrl
* ctrl
, int flags
= 0,
4565 const wxRichTextAttr
& textAttr
= wxRichTextAttr());
4568 Submits a command to insert an object.
4570 wxRichTextObject
* InsertObjectWithUndo(long pos
, wxRichTextObject
*object
, wxRichTextCtrl
* ctrl
, int flags
);
4573 Submits a command to delete this range.
4575 bool DeleteRangeWithUndo(const wxRichTextRange
& range
, wxRichTextCtrl
* ctrl
);
4580 void Modify(bool modify
= true) { m_modified
= modify
; }
4583 Returns @true if the buffer was modified.
4585 bool IsModified() const { return m_modified
; }
4589 Dumps contents of buffer for debugging purposes.
4591 virtual void Dump();
4592 virtual void Dump(wxTextOutputStream
& stream
) { wxRichTextParagraphLayoutBox::Dump(stream
); }
4596 Returns the file handlers.
4598 static wxList
& GetHandlers() { return sm_handlers
; }
4601 Adds a file handler to the end.
4603 static void AddHandler(wxRichTextFileHandler
*handler
);
4606 Inserts a file handler at the front.
4608 static void InsertHandler(wxRichTextFileHandler
*handler
);
4611 Removes a file handler.
4613 static bool RemoveHandler(const wxString
& name
);
4616 Finds a file handler by name.
4618 static wxRichTextFileHandler
*FindHandler(const wxString
& name
);
4621 Finds a file handler by extension and type.
4623 static wxRichTextFileHandler
*FindHandler(const wxString
& extension
, wxRichTextFileType imageType
);
4626 Finds a handler by filename or, if supplied, type.
4628 static wxRichTextFileHandler
*FindHandlerFilenameOrType(const wxString
& filename
,
4629 wxRichTextFileType imageType
);
4632 Finds a handler by type.
4634 static wxRichTextFileHandler
*FindHandler(wxRichTextFileType imageType
);
4637 Gets a wildcard incorporating all visible handlers. If @a types is present,
4638 it will be filled with the file type corresponding to each filter. This can be
4639 used to determine the type to pass to LoadFile given a selected filter.
4641 static wxString
GetExtWildcard(bool combine
= false, bool save
= false, wxArrayInt
* types
= NULL
);
4644 Clean up file handlers.
4646 static void CleanUpHandlers();
4649 Initialise the standard file handlers.
4650 Currently, only the plain text loading/saving handler is initialised by default.
4652 static void InitStandardHandlers();
4655 Returns the renderer object.
4657 static wxRichTextRenderer
* GetRenderer() { return sm_renderer
; }
4660 Sets @a renderer as the object to be used to render certain aspects of the
4661 content, such as bullets.
4663 You can override default rendering by deriving a new class from
4664 wxRichTextRenderer or wxRichTextStdRenderer, overriding one or more
4665 virtual functions, and setting an instance of the class using this function.
4667 static void SetRenderer(wxRichTextRenderer
* renderer
);
4670 Returns the minimum margin between bullet and paragraph in 10ths of a mm.
4672 static int GetBulletRightMargin() { return sm_bulletRightMargin
; }
4675 Sets the minimum margin between bullet and paragraph in 10ths of a mm.
4677 static void SetBulletRightMargin(int margin
) { sm_bulletRightMargin
= margin
; }
4680 Returns the factor to multiply by character height to get a reasonable bullet size.
4682 static float GetBulletProportion() { return sm_bulletProportion
; }
4685 Sets the factor to multiply by character height to get a reasonable bullet size.
4687 static void SetBulletProportion(float prop
) { sm_bulletProportion
= prop
; }
4690 Returns the scale factor for calculating dimensions.
4692 double GetScale() const { return m_scale
; }
4695 Sets the scale factor for calculating dimensions.
4697 void SetScale(double scale
) { m_scale
= scale
; }
4701 /// Command processor
4702 wxCommandProcessor
* m_commandProcessor
;
4704 /// Table storing fonts
4705 wxRichTextFontTable m_fontTable
;
4707 /// Has been modified?
4710 /// Collapsed command stack
4711 int m_batchedCommandDepth
;
4713 /// Name for collapsed command
4714 wxString m_batchedCommandsName
;
4716 /// Current collapsed command accumulating actions
4717 wxRichTextCommand
* m_batchedCommand
;
4719 /// Whether to suppress undo
4722 /// Style sheet, if any
4723 wxRichTextStyleSheet
* m_styleSheet
;
4725 /// List of event handlers that will be notified of events
4726 wxList m_eventHandlers
;
4728 /// Stack of attributes for convenience functions
4729 wxList m_attributeStack
;
4731 /// Flags to be passed to handlers
4735 static wxList sm_handlers
;
4738 static wxRichTextRenderer
* sm_renderer
;
4740 /// Minimum margin between bullet and paragraph in 10ths of a mm
4741 static int sm_bulletRightMargin
;
4743 /// Factor to multiply by character height to get a reasonable bullet size
4744 static float sm_bulletProportion
;
4746 /// Scaling factor in use: needed to calculate correct dimensions when printing
4751 @class wxRichTextCell
4753 wxRichTextCell is the cell in a table.
4756 class WXDLLIMPEXP_RICHTEXT wxRichTextCell
: public wxRichTextBox
4758 DECLARE_DYNAMIC_CLASS(wxRichTextCell
)
4763 Default constructor; optionally pass the parent object.
4766 wxRichTextCell(wxRichTextObject
* parent
= NULL
);
4772 wxRichTextCell(const wxRichTextCell
& obj
): wxRichTextBox() { Copy(obj
); }
4776 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4778 virtual wxString
GetXMLNodeName() const { return wxT("cell"); }
4780 virtual bool CanEditProperties() const { return true; }
4782 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
4784 virtual wxString
GetPropertiesMenuLabel() const { return _("&Cell"); }
4790 virtual wxRichTextObject
* Clone() const { return new wxRichTextCell(*this); }
4792 void Copy(const wxRichTextCell
& obj
);
4798 @class wxRichTextTable
4800 wxRichTextTable represents a table with arbitrary columns and rows.
4803 WX_DEFINE_ARRAY_PTR(wxRichTextObject
*, wxRichTextObjectPtrArray
);
4804 WX_DECLARE_OBJARRAY(wxRichTextObjectPtrArray
, wxRichTextObjectPtrArrayArray
);
4806 class WXDLLIMPEXP_RICHTEXT wxRichTextTable
: public wxRichTextBox
4808 DECLARE_DYNAMIC_CLASS(wxRichTextTable
)
4814 Default constructor; optionally pass the parent object.
4817 wxRichTextTable(wxRichTextObject
* parent
= NULL
);
4823 wxRichTextTable(const wxRichTextTable
& obj
): wxRichTextBox() { Copy(obj
); }
4827 virtual bool Draw(wxDC
& dc
, const wxRichTextRange
& range
, const wxRichTextSelection
& selection
, const wxRect
& rect
, int descent
, int style
);
4829 virtual wxString
GetXMLNodeName() const { return wxT("table"); }
4831 virtual bool Layout(wxDC
& dc
, const wxRect
& rect
, const wxRect
& parentRect
, int style
);
4833 virtual bool GetRangeSize(const wxRichTextRange
& range
, wxSize
& size
, int& descent
, wxDC
& dc
, int flags
, wxPoint position
= wxPoint(0,0), wxArrayInt
* partialExtents
= NULL
) const;
4835 virtual bool DeleteRange(const wxRichTextRange
& range
);
4837 virtual wxString
GetTextForRange(const wxRichTextRange
& range
) const;
4840 virtual bool ImportFromXML(wxRichTextBuffer
* buffer
, wxXmlNode
* node
, wxRichTextXMLHandler
* handler
, bool* recurse
);
4843 #if wxRICHTEXT_HAVE_DIRECT_OUTPUT
4844 virtual bool ExportXML(wxOutputStream
& stream
, int indent
, wxRichTextXMLHandler
* handler
);
4847 #if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
4848 virtual bool ExportXML(wxXmlNode
* parent
, wxRichTextXMLHandler
* handler
);
4851 virtual bool FindPosition(wxDC
& dc
, long index
, wxPoint
& pt
, int* height
, bool forceLineStart
);
4853 virtual void CalculateRange(long start
, long& end
);
4855 // Can this object handle the selections of its children? FOr example, a table.
4856 virtual bool HandlesChildSelections() const { return true; }
4858 /// Returns a selection object specifying the selections between start and end character positions.
4859 /// For example, a table would deduce what cells (of range length 1) are selected when dragging across the table.
4860 virtual wxRichTextSelection
GetSelection(long start
, long end
) const;
4862 virtual bool CanEditProperties() const { return true; }
4864 virtual bool EditProperties(wxWindow
* parent
, wxRichTextBuffer
* buffer
);
4866 virtual wxString
GetPropertiesMenuLabel() const { return _("&Table"); }
4868 // Returns true if objects of this class can accept the focus, i.e. a call to SetFocusObject
4869 // is possible. For example, containers supporting text, such as a text box object, can accept the focus,
4870 // but a table can't (set the focus to individual cells instead).
4871 virtual bool AcceptsFocus() const { return false; }
4876 Returns the cells array.
4878 const wxRichTextObjectPtrArrayArray
& GetCells() const { return m_cells
; }
4881 Returns the cells array.
4883 wxRichTextObjectPtrArrayArray
& GetCells() { return m_cells
; }
4886 Returns the row count.
4888 int GetRowCount() const { return m_rowCount
; }
4891 Returns the column count.
4893 int GetColumnCount() const { return m_colCount
; }
4896 Returns the cell at the given row/column position.
4898 virtual wxRichTextCell
* GetCell(int row
, int col
) const;
4901 Returns the cell at the given character position (in the range of the table).
4903 virtual wxRichTextCell
* GetCell(long pos
) const;
4906 Returns the row/column for a given character position.
4908 virtual bool GetCellRowColumnPosition(long pos
, int& row
, int& col
) const;
4916 virtual void ClearTable();
4919 Creates a table of the given dimensions.
4922 virtual bool CreateTable(int rows
, int cols
);
4925 Sets the attributes for the cells specified by the selection.
4928 virtual bool SetCellStyle(const wxRichTextSelection
& selection
, const wxRichTextAttr
& style
, int flags
= wxRICHTEXT_SETSTYLE_WITH_UNDO
);
4931 Deletes rows from the given row position.
4934 virtual bool DeleteRows(int startRow
, int noRows
= 1);
4937 Deletes columns from the given column position.
4940 virtual bool DeleteColumns(int startCol
, int noCols
= 1);
4943 Adds rows from the given row position.
4946 virtual bool AddRows(int startRow
, int noRows
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
4949 Adds columns from the given column position.
4952 virtual bool AddColumns(int startCol
, int noCols
= 1, const wxRichTextAttr
& attr
= wxRichTextAttr());
4954 // Makes a clone of this object.
4955 virtual wxRichTextObject
* Clone() const { return new wxRichTextTable(*this); }
4957 // Copies this object.
4958 void Copy(const wxRichTextTable
& obj
);
4965 // An array of rows, each of which is a wxRichTextObjectPtrArray containing
4966 // the cell objects. The cell objects are also children of this object.
4967 // Problem: if boxes are immediate children of a box, this will cause problems
4968 // with wxRichTextParagraphLayoutBox functions (and functions elsewhere) that
4969 // expect to find just paragraphs. May have to adjust the way we handle the
4970 // hierarchy to accept non-paragraph objects in a paragraph layout box.
4971 // We'll be overriding much wxRichTextParagraphLayoutBox functionality so this
4972 // may not be such a problem. Perhaps the table should derive from a different
4974 wxRichTextObjectPtrArrayArray m_cells
;
4979 The command identifiers for Do/Undo.
4982 enum wxRichTextCommandId
4986 wxRICHTEXT_CHANGE_ATTRIBUTES
,
4987 wxRICHTEXT_CHANGE_STYLE
,
4988 wxRICHTEXT_CHANGE_PROPERTIES
,
4989 wxRICHTEXT_CHANGE_OBJECT
4993 @class wxRichTextObjectAddress
4995 A class for specifying an object anywhere in an object hierarchy,
4996 without using a pointer, necessary since wxRTC commands may delete
4997 and recreate sub-objects so physical object addresses change. An array
4998 of positions (one per hierarchy level) is used.
5000 @library{wxrichtext}
5003 @see wxRichTextCommand
5006 class WXDLLIMPEXP_RICHTEXT wxRichTextObjectAddress
5010 Creates the address given a container and an object.
5012 wxRichTextObjectAddress(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
) { Create(topLevelContainer
, obj
); }
5015 wxRichTextObjectAddress() { Init(); }
5018 wxRichTextObjectAddress(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5025 void Copy(const wxRichTextObjectAddress
& address
) { m_address
= address
.m_address
; }
5028 Assignment operator.
5030 void operator=(const wxRichTextObjectAddress
& address
) { Copy(address
); }
5033 Returns the object specified by the address, given a top level container.
5035 wxRichTextObject
* GetObject(wxRichTextParagraphLayoutBox
* topLevelContainer
) const;
5038 Creates the address given a container and an object.
5040 bool Create(wxRichTextParagraphLayoutBox
* topLevelContainer
, wxRichTextObject
* obj
);
5043 Returns the array of integers representing the object address.
5045 wxArrayInt
& GetAddress() { return m_address
; }
5048 Returns the array of integers representing the object address.
5050 const wxArrayInt
& GetAddress() const { return m_address
; }
5053 Sets the address from an array of integers.
5055 void SetAddress(const wxArrayInt
& address
) { m_address
= address
; }
5059 wxArrayInt m_address
;
5062 class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction
;
5065 @class wxRichTextCommand
5067 Implements a command on the undo/redo stack. A wxRichTextCommand object contains one or more wxRichTextAction
5068 objects, allowing aggregation of a number of operations into one command.
5070 @library{wxrichtext}
5073 @see wxRichTextAction
5076 class WXDLLIMPEXP_RICHTEXT wxRichTextCommand
: public wxCommand
5080 Constructor for one action.
5082 wxRichTextCommand(const wxString
& name
, wxRichTextCommandId id
, wxRichTextBuffer
* buffer
,
5083 wxRichTextParagraphLayoutBox
* container
, wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5086 Constructor for multiple actions.
5088 wxRichTextCommand(const wxString
& name
);
5090 virtual ~wxRichTextCommand();
5093 Performs the command.
5103 Adds an action to the action list.
5105 void AddAction(wxRichTextAction
* action
);
5108 Clears the action list.
5110 void ClearActions();
5113 Returns the action list.
5115 wxList
& GetActions() { return m_actions
; }
5123 @class wxRichTextAction
5125 Implements a part of a command.
5127 @library{wxrichtext}
5130 @see wxRichTextCommand
5133 class WXDLLIMPEXP_RICHTEXT wxRichTextAction
: public wxObject
5137 Constructor. @a buffer is the top-level buffer, while @a container is the object within
5138 which the action is taking place. In the simplest case, they are the same.
5140 wxRichTextAction(wxRichTextCommand
* cmd
, const wxString
& name
, wxRichTextCommandId id
,
5141 wxRichTextBuffer
* buffer
, wxRichTextParagraphLayoutBox
* container
,
5142 wxRichTextCtrl
* ctrl
, bool ignoreFirstTime
= false);
5144 virtual ~wxRichTextAction();
5147 Performs the action.
5157 Updates the control appearance, optimizing if possible given information from the call to Layout.
5159 void UpdateAppearance(long caretPosition
, bool sendUpdateEvent
= false,
5160 wxArrayInt
* optimizationLineCharPositions
= NULL
, wxArrayInt
* optimizationLineYPositions
= NULL
, bool isDoCmd
= true);
5163 Replaces the buffer paragraphs with the given fragment.
5165 void ApplyParagraphs(const wxRichTextParagraphLayoutBox
& fragment
);
5168 Returns the new fragments.
5170 wxRichTextParagraphLayoutBox
& GetNewParagraphs() { return m_newParagraphs
; }
5173 Returns the old fragments.
5175 wxRichTextParagraphLayoutBox
& GetOldParagraphs() { return m_oldParagraphs
; }
5178 Returns the attributes, for single-object commands.
5180 wxRichTextAttr
& GetAttributes() { return m_attributes
; }
5183 Returns the object to replace the one at the position defined by the container address
5184 and the action's range start position.
5186 wxRichTextObject
* GetObject() const { return m_object
; }
5189 Sets the object to replace the one at the position defined by the container address
5190 and the action's range start position.
5192 void SetObject(wxRichTextObject
* obj
) { m_object
= obj
; m_objectAddress
.Create(m_buffer
, m_object
); }
5195 Makes an address from the given object.
5197 void MakeObject(wxRichTextObject
* obj
) { m_objectAddress
.Create(m_buffer
, obj
); }
5200 Calculate arrays for refresh optimization.
5202 void CalculateRefreshOptimizations(wxArrayInt
& optimizationLineCharPositions
, wxArrayInt
& optimizationLineYPositions
);
5205 Sets the position used for e.g. insertion.
5207 void SetPosition(long pos
) { m_position
= pos
; }
5210 Returns the position used for e.g. insertion.
5212 long GetPosition() const { return m_position
; }
5215 Sets the range for e.g. deletion.
5217 void SetRange(const wxRichTextRange
& range
) { m_range
= range
; }
5220 Returns the range for e.g. deletion.
5222 const wxRichTextRange
& GetRange() const { return m_range
; }
5225 Returns the address (nested position) of the container within the buffer being manipulated.
5227 wxRichTextObjectAddress
& GetContainerAddress() { return m_containerAddress
; }
5230 Returns the address (nested position) of the container within the buffer being manipulated.
5232 const wxRichTextObjectAddress
& GetContainerAddress() const { return m_containerAddress
; }
5235 Sets the address (nested position) of the container within the buffer being manipulated.
5237 void SetContainerAddress(const wxRichTextObjectAddress
& address
) { m_containerAddress
= address
; }
5240 Sets the address (nested position) of the container within the buffer being manipulated.
5242 void SetContainerAddress(wxRichTextParagraphLayoutBox
* container
, wxRichTextObject
* obj
) { m_containerAddress
.Create(container
, obj
); }
5245 Returns the container that this action refers to, using the container address and top-level buffer.
5247 wxRichTextParagraphLayoutBox
* GetContainer() const;
5250 Returns the action name.
5252 const wxString
& GetName() const { return m_name
; }
5259 wxRichTextBuffer
* m_buffer
;
5261 // The address (nested position) of the container being manipulated.
5262 // This is necessary because objects are deleted, and we can't
5263 // therefore store actual pointers.
5264 wxRichTextObjectAddress m_containerAddress
;
5267 wxRichTextCtrl
* m_ctrl
;
5269 // Stores the new paragraphs
5270 wxRichTextParagraphLayoutBox m_newParagraphs
;
5272 // Stores the old paragraphs
5273 wxRichTextParagraphLayoutBox m_oldParagraphs
;
5275 // Stores an object to replace the one at the position
5276 // defined by the container address and the action's range start position.
5277 wxRichTextObject
* m_object
;
5279 // Stores the attributes
5280 wxRichTextAttr m_attributes
;
5282 // The address of the object being manipulated (used for changing an individual object or its attributes)
5283 wxRichTextObjectAddress m_objectAddress
;
5285 // Stores the old attributes
5286 // wxRichTextAttr m_oldAttributes;
5288 // The affected range
5289 wxRichTextRange m_range
;
5291 // The insertion point for this command
5294 // Ignore 1st 'Do' operation because we already did it
5297 // The command identifier
5298 wxRichTextCommandId m_cmdId
;
5305 // Include style sheet when loading and saving
5306 #define wxRICHTEXT_HANDLER_INCLUDE_STYLESHEET 0x0001
5308 // Save images to memory file system in HTML handler
5309 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY 0x0010
5311 // Save images to files in HTML handler
5312 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_FILES 0x0020
5314 // Save images as inline base64 data in HTML handler
5315 #define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_BASE64 0x0040
5317 // Don't write header and footer (or BODY), so we can include the fragment
5318 // in a larger document
5319 #define wxRICHTEXT_HANDLER_NO_HEADER_FOOTER 0x0080
5321 // Convert the more common face names to names that will work on the current platform
5322 // in a larger document
5323 #define wxRICHTEXT_HANDLER_CONVERT_FACENAMES 0x0100
5326 @class wxRichTextFileHandler
5328 The base class for file handlers.
5330 @library{wxrichtext}
5333 @see wxRichTextBuffer, wxRichTextCtrl
5336 class WXDLLIMPEXP_RICHTEXT wxRichTextFileHandler
: public wxObject
5338 DECLARE_CLASS(wxRichTextFileHandler
)
5341 Creates a file handler object.
5343 wxRichTextFileHandler(const wxString
& name
= wxEmptyString
, const wxString
& ext
= wxEmptyString
, int type
= 0)
5344 : m_name(name
), m_extension(ext
), m_type(type
), m_flags(0), m_visible(true)
5349 Loads the buffer from a stream.
5350 Not all handlers will implement file loading.
5352 bool LoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
)
5353 { return DoLoadFile(buffer
, stream
); }
5356 Saves the buffer to a stream.
5357 Not all handlers will implement file saving.
5359 bool SaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
)
5360 { return DoSaveFile(buffer
, stream
); }
5363 #if wxUSE_FFILE && wxUSE_STREAMS
5365 Loads the buffer from a file.
5367 virtual bool LoadFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5370 Saves the buffer to a file.
5372 virtual bool SaveFile(wxRichTextBuffer
*buffer
, const wxString
& filename
);
5373 #endif // wxUSE_STREAMS && wxUSE_STREAMS
5376 Returns @true if we handle this filename (if using files). By default, checks the extension.
5378 virtual bool CanHandle(const wxString
& filename
) const;
5381 Returns @true if we can save using this handler.
5383 virtual bool CanSave() const { return false; }
5386 Returns @true if we can load using this handler.
5388 virtual bool CanLoad() const { return false; }
5391 Returns @true if this handler should be visible to the user.
5393 virtual bool IsVisible() const { return m_visible
; }
5396 Sets whether the handler should be visible to the user (via the application's
5397 load and save dialogs).
5399 virtual void SetVisible(bool visible
) { m_visible
= visible
; }
5402 Sets the name of the nandler.
5404 void SetName(const wxString
& name
) { m_name
= name
; }
5407 Returns the name of the nandler.
5409 wxString
GetName() const { return m_name
; }
5412 Sets the default extension to recognise.
5414 void SetExtension(const wxString
& ext
) { m_extension
= ext
; }
5417 Returns the default extension to recognise.
5419 wxString
GetExtension() const { return m_extension
; }
5422 Sets the handler type.
5424 void SetType(int type
) { m_type
= type
; }
5427 Returns the handler type.
5429 int GetType() const { return m_type
; }
5432 Sets flags that change the behaviour of loading or saving.
5433 See the documentation for each handler class to see what flags are relevant
5436 You call this function directly if you are using a file handler explicitly
5437 (without going through the text control or buffer LoadFile/SaveFile API).
5438 Or, you can call the control or buffer's SetHandlerFlags function to set
5439 the flags that will be used for subsequent load and save operations.
5441 void SetFlags(int flags
) { m_flags
= flags
; }
5444 Returns flags controlling how loading and saving is done.
5446 int GetFlags() const { return m_flags
; }
5449 Sets the encoding to use when saving a file. If empty, a suitable encoding is chosen.
5451 void SetEncoding(const wxString
& encoding
) { m_encoding
= encoding
; }
5454 Returns the encoding to use when saving a file. If empty, a suitable encoding is chosen.
5456 const wxString
& GetEncoding() const { return m_encoding
; }
5462 Override to load content from @a stream into @a buffer.
5464 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
) = 0;
5467 Override to save content to @a stream from @a buffer.
5469 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
) = 0;
5473 wxString m_encoding
;
5474 wxString m_extension
;
5481 @class wxRichTextPlainTextHandler
5483 Implements saving a buffer to plain text.
5485 @library{wxrichtext}
5488 @see wxRichTextFileHandler, wxRichTextBuffer, wxRichTextCtrl
5491 class WXDLLIMPEXP_RICHTEXT wxRichTextPlainTextHandler
: public wxRichTextFileHandler
5493 DECLARE_CLASS(wxRichTextPlainTextHandler
)
5495 wxRichTextPlainTextHandler(const wxString
& name
= wxT("Text"),
5496 const wxString
& ext
= wxT("txt"),
5497 wxRichTextFileType type
= wxRICHTEXT_TYPE_TEXT
)
5498 : wxRichTextFileHandler(name
, ext
, type
)
5501 // Can we save using this handler?
5502 virtual bool CanSave() const { return true; }
5504 // Can we load using this handler?
5505 virtual bool CanLoad() const { return true; }
5510 virtual bool DoLoadFile(wxRichTextBuffer
*buffer
, wxInputStream
& stream
);
5511 virtual bool DoSaveFile(wxRichTextBuffer
*buffer
, wxOutputStream
& stream
);
5519 @class wxRichTextBufferDataObject
5521 Implements a rich text data object for clipboard transfer.
5523 @library{wxrichtext}
5526 @see wxDataObjectSimple, wxRichTextBuffer, wxRichTextCtrl
5529 class WXDLLIMPEXP_RICHTEXT wxRichTextBufferDataObject
: public wxDataObjectSimple
5533 The constructor doesn't copy the pointer, so it shouldn't go away while this object
5536 wxRichTextBufferDataObject(wxRichTextBuffer
* richTextBuffer
= NULL
);
5537 virtual ~wxRichTextBufferDataObject();
5540 After a call to this function, the buffer is owned by the caller and it
5541 is responsible for deleting it.
5543 wxRichTextBuffer
* GetRichTextBuffer();
5546 Returns the id for the new data format.
5548 static const wxChar
* GetRichTextBufferFormatId() { return ms_richTextBufferFormatId
; }
5550 // base class pure virtuals
5552 virtual wxDataFormat
GetPreferredFormat(Direction dir
) const;
5553 virtual size_t GetDataSize() const;
5554 virtual bool GetDataHere(void *pBuf
) const;
5555 virtual bool SetData(size_t len
, const void *buf
);
5559 virtual size_t GetDataSize(const wxDataFormat
&) const { return GetDataSize(); }
5560 virtual bool GetDataHere(const wxDataFormat
&, void *buf
) const { return GetDataHere(buf
); }
5561 virtual bool SetData(const wxDataFormat
&, size_t len
, const void *buf
) { return SetData(len
, buf
); }
5564 wxDataFormat m_formatRichTextBuffer
; // our custom format
5565 wxRichTextBuffer
* m_richTextBuffer
; // our data
5566 static const wxChar
* ms_richTextBufferFormatId
; // our format id
5572 @class wxRichTextRenderer
5574 This class isolates some common drawing functionality.
5576 @library{wxrichtext}
5579 @see wxRichTextBuffer, wxRichTextCtrl
5582 class WXDLLIMPEXP_RICHTEXT wxRichTextRenderer
: public wxObject
5588 wxRichTextRenderer() {}
5589 virtual ~wxRichTextRenderer() {}
5592 Draws a standard bullet, as specified by the value of GetBulletName. This function should be overridden.
5594 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
5597 Draws a bullet that can be described by text, such as numbered or symbol bullets. This function should be overridden.
5599 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
) = 0;
5602 Draws a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName. This function should be overridden.
5604 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
) = 0;
5607 Enumerate the standard bullet names currently supported. This function should be overridden.
5609 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
) = 0;
5613 @class wxRichTextStdRenderer
5615 The standard renderer for drawing bullets.
5617 @library{wxrichtext}
5620 @see wxRichTextRenderer, wxRichTextBuffer, wxRichTextCtrl
5623 class WXDLLIMPEXP_RICHTEXT wxRichTextStdRenderer
: public wxRichTextRenderer
5629 wxRichTextStdRenderer() {}
5631 // Draw a standard bullet, as specified by the value of GetBulletName
5632 virtual bool DrawStandardBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
5634 // Draw a bullet that can be described by text, such as numbered or symbol bullets
5635 virtual bool DrawTextBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
, const wxString
& text
);
5637 // Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
5638 virtual bool DrawBitmapBullet(wxRichTextParagraph
* paragraph
, wxDC
& dc
, const wxRichTextAttr
& attr
, const wxRect
& rect
);
5640 // Enumerate the standard bullet names currently supported
5641 virtual bool EnumerateStandardBulletNames(wxArrayString
& bulletNames
);
5649 inline bool wxRichTextHasStyle(int flags
, int style
)
5651 return ((flags
& style
) == style
);
5654 /// Compare two attribute objects
5655 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
5656 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEq(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
5658 /// Compare two attribute objects, but take into account the flags
5659 /// specifying attributes of interest.
5660 WXDLLIMPEXP_RICHTEXT
bool wxTextAttrEqPartial(const wxRichTextAttr
& attr1
, const wxRichTextAttr
& attr2
);
5662 /// Apply one style to another
5663 WXDLLIMPEXP_RICHTEXT
bool wxRichTextApplyStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
, wxRichTextAttr
* compareWith
= NULL
);
5665 // Remove attributes
5666 WXDLLIMPEXP_RICHTEXT
bool wxRichTextRemoveStyle(wxRichTextAttr
& destStyle
, const wxRichTextAttr
& style
);
5668 /// Combine two bitlists
5669 WXDLLIMPEXP_RICHTEXT
bool wxRichTextCombineBitlists(int& valueA
, int valueB
, int& flagsA
, int flagsB
);
5671 /// Compare two bitlists
5672 WXDLLIMPEXP_RICHTEXT
bool wxRichTextBitlistsEqPartial(int valueA
, int valueB
, int flags
);
5674 /// Split into paragraph and character styles
5675 WXDLLIMPEXP_RICHTEXT
bool wxRichTextSplitParaCharStyles(const wxRichTextAttr
& style
, wxRichTextAttr
& parStyle
, wxRichTextAttr
& charStyle
);
5678 WXDLLIMPEXP_RICHTEXT
bool wxRichTextTabsEq(const wxArrayInt
& tabs1
, const wxArrayInt
& tabs2
);
5680 /// Convert a decimal to Roman numerals
5681 WXDLLIMPEXP_RICHTEXT wxString
wxRichTextDecimalToRoman(long n
);
5683 // Collects the attributes that are common to a range of content, building up a note of
5684 // which attributes are absent in some objects and which clash in some objects.
5685 WXDLLIMPEXP_RICHTEXT
void wxTextAttrCollectCommonAttributes(wxTextAttr
& currentStyle
, const wxTextAttr
& attr
, wxTextAttr
& clashingAttr
, wxTextAttr
& absentAttr
);
5687 WXDLLIMPEXP_RICHTEXT
void wxRichTextModuleInit();
5693 // _WX_RICHTEXTBUFFER_H_