1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxTextAttr
4 // Author: wxWidgets team
6 // Licence: wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
10 wxTextCtrl style flags
12 #define wxTE_NO_VSCROLL 0x0002
14 #define wxTE_READONLY 0x0010
15 #define wxTE_MULTILINE 0x0020
16 #define wxTE_PROCESS_TAB 0x0040
19 #define wxTE_LEFT 0x0000 // 0x0000
20 #define wxTE_CENTER wxALIGN_CENTER_HORIZONTAL // 0x0100
21 #define wxTE_RIGHT wxALIGN_RIGHT // 0x0200
22 #define wxTE_CENTRE wxTE_CENTER
24 // this style means to use RICHEDIT control and does something only under wxMSW
25 // and Win32 and is silently ignored under all other platforms
26 #define wxTE_RICH 0x0080
28 #define wxTE_PROCESS_ENTER 0x0400
29 #define wxTE_PASSWORD 0x0800
31 // automatically detect the URLs and generate the events when mouse is
32 // moved/clicked over an URL
34 // this is for Win32 richedit and wxGTK2 multiline controls only so far
35 #define wxTE_AUTO_URL 0x1000
37 // by default, the Windows text control doesn't show the selection when it
38 // doesn't have focus - use this style to force it to always show it
39 #define wxTE_NOHIDESEL 0x2000
41 // use wxHSCROLL to not wrap text at all, wxTE_CHARWRAP to wrap it at any
42 // position and wxTE_WORDWRAP to wrap at words boundary
44 // if no wrapping style is given at all, the control wraps at word boundary
45 #define wxTE_DONTWRAP wxHSCROLL
46 #define wxTE_CHARWRAP 0x4000 // wrap at any position
47 #define wxTE_WORDWRAP 0x0001 // wrap only at words boundaries
48 #define wxTE_BESTWRAP 0x0000 // this is the default
50 // force using RichEdit version 2.0 or 3.0 instead of 1.0 (default) for
51 // wxTE_RICH controls - can be used together with or instead of wxTE_RICH
52 #define wxTE_RICH2 0x8000
55 #define wxTEXT_TYPE_ANY 0
59 wxTextCoord is a line or row number
61 typedef long wxTextCoord
;
65 One of the following values can be passed to wxTextAttr::SetAlignment to determine paragraph alignment.
67 enum wxTextAttrAlignment
69 wxTEXT_ALIGNMENT_DEFAULT
,
70 wxTEXT_ALIGNMENT_LEFT
,
71 wxTEXT_ALIGNMENT_CENTRE
,
72 wxTEXT_ALIGNMENT_CENTER
= wxTEXT_ALIGNMENT_CENTRE
,
73 wxTEXT_ALIGNMENT_RIGHT
,
75 /** wxTEXT_ALIGNMENT_JUSTIFIED is unimplemented.
76 In future justification may be supported when printing or previewing, only. */
77 wxTEXT_ALIGNMENT_JUSTIFIED
81 The following values are passed in a bitlist to wxTextAttr::SetFlags() to
82 determine what attributes will be considered when setting the attributes for a text control.
86 wxTEXT_ATTR_TEXT_COLOUR
= 0x00000001,
87 wxTEXT_ATTR_BACKGROUND_COLOUR
= 0x00000002,
89 wxTEXT_ATTR_FONT_FACE
= 0x00000004,
90 wxTEXT_ATTR_FONT_POINT_SIZE
= 0x00000008,
91 wxTEXT_ATTR_FONT_PIXEL_SIZE
= 0x10000000,
92 wxTEXT_ATTR_FONT_WEIGHT
= 0x00000010,
93 wxTEXT_ATTR_FONT_ITALIC
= 0x00000020,
94 wxTEXT_ATTR_FONT_UNDERLINE
= 0x00000040,
95 wxTEXT_ATTR_FONT_STRIKETHROUGH
= 0x08000000,
96 wxTEXT_ATTR_FONT_ENCODING
= 0x02000000,
97 wxTEXT_ATTR_FONT_FAMILY
= 0x04000000,
99 wxTEXT_ATTR_FONT_SIZE
= \
100 ( wxTEXT_ATTR_FONT_POINT_SIZE
| wxTEXT_ATTR_FONT_PIXEL_SIZE
),
102 Defined as the combination of all @c wxTEXT_ATTR_FONT_* values above.
105 ( wxTEXT_ATTR_FONT_FACE
| wxTEXT_ATTR_FONT_SIZE
| wxTEXT_ATTR_FONT_WEIGHT
| \
106 wxTEXT_ATTR_FONT_ITALIC
| wxTEXT_ATTR_FONT_UNDERLINE
| wxTEXT_ATTR_FONT_STRIKETHROUGH
| wxTEXT_ATTR_FONT_ENCODING
| wxTEXT_ATTR_FONT_FAMILY
),
108 wxTEXT_ATTR_ALIGNMENT
= 0x00000080,
109 wxTEXT_ATTR_LEFT_INDENT
= 0x00000100,
110 wxTEXT_ATTR_RIGHT_INDENT
= 0x00000200,
111 wxTEXT_ATTR_TABS
= 0x00000400,
112 wxTEXT_ATTR_PARA_SPACING_AFTER
= 0x00000800,
113 wxTEXT_ATTR_PARA_SPACING_BEFORE
= 0x00001000,
114 wxTEXT_ATTR_LINE_SPACING
= 0x00002000,
115 wxTEXT_ATTR_CHARACTER_STYLE_NAME
= 0x00004000,
116 wxTEXT_ATTR_PARAGRAPH_STYLE_NAME
= 0x00008000,
117 wxTEXT_ATTR_LIST_STYLE_NAME
= 0x00010000,
119 wxTEXT_ATTR_BULLET_STYLE
= 0x00020000,
120 wxTEXT_ATTR_BULLET_NUMBER
= 0x00040000,
121 wxTEXT_ATTR_BULLET_TEXT
= 0x00080000,
122 wxTEXT_ATTR_BULLET_NAME
= 0x00100000,
125 Defined as the combination of all @c wxTEXT_ATTR_BULLET_* values above.
127 wxTEXT_ATTR_BULLET
= \
128 ( wxTEXT_ATTR_BULLET_STYLE
| wxTEXT_ATTR_BULLET_NUMBER
| wxTEXT_ATTR_BULLET_TEXT
| \
129 wxTEXT_ATTR_BULLET_NAME
),
131 wxTEXT_ATTR_URL
= 0x00200000,
132 wxTEXT_ATTR_PAGE_BREAK
= 0x00400000,
133 wxTEXT_ATTR_EFFECTS
= 0x00800000,
134 wxTEXT_ATTR_OUTLINE_LEVEL
= 0x01000000,
137 Combines the styles @c wxTEXT_ATTR_FONT, @c wxTEXT_ATTR_EFFECTS, @c wxTEXT_ATTR_BACKGROUND_COLOUR,
138 @c wxTEXT_ATTR_TEXT_COLOUR, @c wxTEXT_ATTR_CHARACTER_STYLE_NAME, @c wxTEXT_ATTR_URL.
141 wxTEXT_ATTR_CHARACTER
= \
142 (wxTEXT_ATTR_FONT
|wxTEXT_ATTR_EFFECTS
| \
143 wxTEXT_ATTR_BACKGROUND_COLOUR
|wxTEXT_ATTR_TEXT_COLOUR
|wxTEXT_ATTR_CHARACTER_STYLE_NAME
|wxTEXT_ATTR_URL
),
146 Combines all the styles regarding text paragraphs.
148 wxTEXT_ATTR_PARAGRAPH
= \
149 (wxTEXT_ATTR_ALIGNMENT
|wxTEXT_ATTR_LEFT_INDENT
|wxTEXT_ATTR_RIGHT_INDENT
|wxTEXT_ATTR_TABS
|\
150 wxTEXT_ATTR_PARA_SPACING_BEFORE
|wxTEXT_ATTR_PARA_SPACING_AFTER
|wxTEXT_ATTR_LINE_SPACING
|\
151 wxTEXT_ATTR_BULLET
|wxTEXT_ATTR_PARAGRAPH_STYLE_NAME
|wxTEXT_ATTR_LIST_STYLE_NAME
|wxTEXT_ATTR_OUTLINE_LEVEL
),
154 Combines all previous values.
156 wxTEXT_ATTR_ALL
= (wxTEXT_ATTR_CHARACTER
|wxTEXT_ATTR_PARAGRAPH
)
160 Styles for wxTextAttr::SetBulletStyle. They can be combined together as a bitlist.
162 enum wxTextAttrBulletStyle
164 wxTEXT_ATTR_BULLET_STYLE_NONE
= 0x00000000,
165 wxTEXT_ATTR_BULLET_STYLE_ARABIC
= 0x00000001,
166 wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER
= 0x00000002,
167 wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER
= 0x00000004,
168 wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER
= 0x00000008,
169 wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER
= 0x00000010,
170 wxTEXT_ATTR_BULLET_STYLE_SYMBOL
= 0x00000020,
172 /** wxTEXT_ATTR_BULLET_STYLE_BITMAP is unimplemented. */
173 wxTEXT_ATTR_BULLET_STYLE_BITMAP
= 0x00000040,
174 wxTEXT_ATTR_BULLET_STYLE_PARENTHESES
= 0x00000080,
175 wxTEXT_ATTR_BULLET_STYLE_PERIOD
= 0x00000100,
176 wxTEXT_ATTR_BULLET_STYLE_STANDARD
= 0x00000200,
177 wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS
= 0x00000400,
178 wxTEXT_ATTR_BULLET_STYLE_OUTLINE
= 0x00000800,
180 wxTEXT_ATTR_BULLET_STYLE_ALIGN_LEFT
= 0x00000000,
181 wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT
= 0x00001000,
182 wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE
= 0x00002000,
184 wxTEXT_ATTR_BULLET_STYLE_CONTINUATION
= 0x00004000
188 Styles for wxTextAttr::SetTextEffects(). They can be combined together as a bitlist.
190 Of these, only wxTEXT_ATTR_EFFECT_CAPITALS, wxTEXT_ATTR_EFFECT_STRIKETHROUGH,
191 wxTEXT_ATTR_EFFECT_SUPERSCRIPT and wxTEXT_ATTR_EFFECT_SUBSCRIPT are implemented.
193 enum wxTextAttrEffects
195 wxTEXT_ATTR_EFFECT_NONE
= 0x00000000,
196 wxTEXT_ATTR_EFFECT_CAPITALS
= 0x00000001,
197 wxTEXT_ATTR_EFFECT_SMALL_CAPITALS
= 0x00000002,
198 wxTEXT_ATTR_EFFECT_STRIKETHROUGH
= 0x00000004,
199 wxTEXT_ATTR_EFFECT_DOUBLE_STRIKETHROUGH
= 0x00000008,
200 wxTEXT_ATTR_EFFECT_SHADOW
= 0x00000010,
201 wxTEXT_ATTR_EFFECT_EMBOSS
= 0x00000020,
202 wxTEXT_ATTR_EFFECT_OUTLINE
= 0x00000040,
203 wxTEXT_ATTR_EFFECT_ENGRAVE
= 0x00000080,
204 wxTEXT_ATTR_EFFECT_SUPERSCRIPT
= 0x00000100,
205 wxTEXT_ATTR_EFFECT_SUBSCRIPT
= 0x00000200
209 Convenience line spacing values; see wxTextAttr::SetLineSpacing().
211 enum wxTextAttrLineSpacing
213 wxTEXT_ATTR_LINE_SPACING_NORMAL
= 10,
214 wxTEXT_ATTR_LINE_SPACING_HALF
= 15,
215 wxTEXT_ATTR_LINE_SPACING_TWICE
= 20
220 Describes the possible return values of wxTextCtrl::HitTest().
222 The element names correspond to the relationship between the point asked
223 for and the character returned, e.g. @c wxTE_HT_BEFORE means that the point
224 is before (leftward or upward) it and so on.
226 enum wxTextCtrlHitTestResult
228 /// Indicates that wxTextCtrl::HitTest() is not implemented on this
230 wxTE_HT_UNKNOWN
= -2,
232 /// The point is before the character returned.
235 /// The point is directly on the character returned.
238 /// The point is below the last line of the control.
241 /// The point is beyond the end of line containing the character returned.
249 wxTextAttr represents the character and paragraph attributes, or style,
250 for a range of text in a wxTextCtrl or wxRichTextCtrl.
252 When setting up a wxTextAttr object, pass a bitlist mask to
253 wxTextAttr::SetFlags() to indicate which style elements should be changed.
254 As a convenience, when you call a setter such as SetFont, the relevant bit
260 @see wxTextCtrl, wxRichTextCtrl
270 wxTextAttr(const wxColour
& colText
,
271 const wxColour
& colBack
= wxNullColour
,
272 const wxFont
& font
= wxNullFont
,
273 wxTextAttrAlignment alignment
= wxTEXT_ALIGNMENT_DEFAULT
);
274 wxTextAttr(const wxTextAttr
& attr
);
278 Applies the attributes in @a style to the original object, but not those
279 attributes from @a style that are the same as those in @a compareWith (if passed).
281 bool Apply(const wxTextAttr
& style
,
282 const wxTextAttr
* compareWith
= NULL
);
285 Copies all defined/valid properties from overlay to current object.
287 void Merge(const wxTextAttr
& overlay
);
290 Creates a new @c wxTextAttr which is a merge of @a base and @a overlay.
292 Properties defined in @a overlay take precedence over those in @a base.
293 Properties undefined/invalid in both are undefined in the result.
295 static wxTextAttr
Merge(const wxTextAttr
& base
,
296 const wxTextAttr
& overlay
);
300 Partial equality test. If @a weakTest is @true, attributes of this object do not
301 have to be present if those attributes of @a attr are present. If @a weakTest is
302 @false, the function will fail if an attribute is present in @a attr but not
305 bool EqPartial(const wxTextAttr
& attr
, bool weakTest
= true) const;
308 @name GetXXX functions
314 Returns the alignment flags.
315 See ::wxTextAttrAlignment for a list of available styles.
317 wxTextAttrAlignment
GetAlignment() const;
320 Returns the background colour.
322 const wxColour
& GetBackgroundColour() const;
325 Returns a string containing the name of the font associated with the bullet symbol.
326 Only valid for attributes with wxTEXT_ATTR_BULLET_SYMBOL.
328 const wxString
& GetBulletFont() const;
331 Returns the standard bullet name, applicable if the bullet style is
332 wxTEXT_ATTR_BULLET_STYLE_STANDARD.
334 Currently the following standard bullet names are supported:
337 - @c standard/diamond
338 - @c standard/triangle
341 For wxRichTextCtrl users only: if you wish your rich text controls to support
342 further bullet graphics, you can derive a class from wxRichTextRenderer or
343 wxRichTextStdRenderer, override @c DrawStandardBullet and @c EnumerateStandardBulletNames,
344 and set an instance of the class using wxRichTextBuffer::SetRenderer.
346 const wxString
& GetBulletName() const;
349 Returns the bullet number.
351 int GetBulletNumber() const;
354 Returns the bullet style.
355 See ::wxTextAttrBulletStyle for a list of available styles.
357 int GetBulletStyle() const;
360 Returns the bullet text, which could be a symbol, or (for example) cached
363 const wxString
& GetBulletText() const;
366 Returns the name of the character style.
368 const wxString
& GetCharacterStyleName() const;
371 Returns flags indicating which attributes are applicable.
372 See SetFlags() for a list of available flags.
374 long GetFlags() const;
377 Creates and returns a font specified by the font attributes in the wxTextAttr
378 object. Note that wxTextAttr does not store a wxFont object, so this is only
381 For greater efficiency, access the font attributes directly.
383 wxFont
GetFont() const;
386 Gets the font attributes from the given font, using only the attributes
387 specified by @a flags.
389 bool GetFontAttributes(const wxFont
& font
,
390 int flags
= wxTEXT_ATTR_FONT
);
393 Returns the font encoding.
395 wxFontEncoding
GetFontEncoding() const;
398 Returns the font face name.
400 const wxString
& GetFontFaceName() const;
403 Returns the font family.
405 wxFontFamily
GetFontFamily() const;
408 Returns the font size in points.
410 int GetFontSize() const;
413 Returns the font style.
415 wxFontStyle
GetFontStyle() const;
418 Returns @true if the font is underlined.
420 bool GetFontUnderlined() const;
423 Returns the font weight.
425 wxFontWeight
GetFontWeight() const;
428 Returns the left indent in tenths of a millimetre.
430 long GetLeftIndent() const;
433 Returns the left sub-indent in tenths of a millimetre.
435 long GetLeftSubIndent() const;
438 Returns the line spacing value, one of ::wxTextAttrLineSpacing values.
440 int GetLineSpacing() const;
443 Returns the name of the list style.
445 const wxString
& GetListStyleName() const;
448 Returns the outline level.
450 int GetOutlineLevel() const;
453 Returns the space in tenths of a millimeter after the paragraph.
455 int GetParagraphSpacingAfter() const;
458 Returns the space in tenths of a millimeter before the paragraph.
460 int GetParagraphSpacingBefore() const;
463 Returns the name of the paragraph style.
465 const wxString
& GetParagraphStyleName() const;
468 Returns the right indent in tenths of a millimeter.
470 long GetRightIndent() const;
473 Returns an array of tab stops, each expressed in tenths of a millimeter.
475 Each stop is measured from the left margin and therefore each value must
476 be larger than the last.
478 const wxArrayInt
& GetTabs() const;
481 Returns the text foreground colour.
483 const wxColour
& GetTextColour() const;
486 Returns the text effect bits of interest.
487 See SetFlags() for further information.
489 int GetTextEffectFlags() const;
492 Returns the text effects, a bit list of styles.
493 See SetTextEffects() for details.
495 int GetTextEffects() const;
498 Returns the URL for the content.
500 Content with @a wxTEXT_ATTR_URL style causes wxRichTextCtrl to show a
501 hand cursor over it, and wxRichTextCtrl generates a wxTextUrlEvent
502 when the content is clicked.
504 const wxString
& GetURL() const;
511 @name HasXXX and IsXXX functions
517 Returns @true if the attribute object specifies alignment.
519 bool HasAlignment() const;
522 Returns @true if the attribute object specifies a background colour.
524 bool HasBackgroundColour() const;
527 Returns @true if the attribute object specifies a standard bullet name.
529 bool HasBulletName() const;
532 Returns @true if the attribute object specifies a bullet number.
534 bool HasBulletNumber() const;
537 Returns @true if the attribute object specifies a bullet style.
539 bool HasBulletStyle() const;
542 Returns @true if the attribute object specifies bullet text (usually
543 specifying a symbol).
545 bool HasBulletText() const;
548 Returns @true if the attribute object specifies a character style name.
550 bool HasCharacterStyleName() const;
553 Returns @true if the @a flag is present in the attribute object's flag
556 bool HasFlag(long flag
) const;
559 Returns @true if the attribute object specifies any font attributes.
561 bool HasFont() const;
564 Returns @true if the attribute object specifies an encoding.
566 bool HasFontEncoding() const;
569 Returns @true if the attribute object specifies a font face name.
571 bool HasFontFaceName() const;
574 Returns @true if the attribute object specifies a font family.
576 bool HasFontFamily() const;
579 Returns @true if the attribute object specifies italic style.
581 bool HasFontItalic() const;
584 Returns @true if the attribute object specifies a font point or pixel size.
586 bool HasFontSize() const;
589 Returns @true if the attribute object specifies a font point size.
591 bool HasFontPointSize() const;
594 Returns @true if the attribute object specifies a font pixel size.
596 bool HasFontPixelSize() const;
599 Returns @true if the attribute object specifies either underlining or no
602 bool HasFontUnderlined() const;
605 Returns @true if the attribute object specifies font weight (bold, light or
608 bool HasFontWeight() const;
611 Returns @true if the attribute object specifies a left indent.
613 bool HasLeftIndent() const;
616 Returns @true if the attribute object specifies line spacing.
618 bool HasLineSpacing() const;
621 Returns @true if the attribute object specifies a list style name.
623 bool HasListStyleName() const;
626 Returns @true if the attribute object specifies an outline level.
628 bool HasOutlineLevel() const;
631 Returns @true if the attribute object specifies a page break before this
634 bool HasPageBreak() const;
637 Returns @true if the attribute object specifies spacing after a paragraph.
639 bool HasParagraphSpacingAfter() const;
642 Returns @true if the attribute object specifies spacing before a paragraph.
644 bool HasParagraphSpacingBefore() const;
647 Returns @true if the attribute object specifies a paragraph style name.
649 bool HasParagraphStyleName() const;
652 Returns @true if the attribute object specifies a right indent.
654 bool HasRightIndent() const;
657 Returns @true if the attribute object specifies tab stops.
659 bool HasTabs() const;
662 Returns @true if the attribute object specifies a text foreground colour.
664 bool HasTextColour() const;
667 Returns @true if the attribute object specifies text effects.
669 bool HasTextEffects() const;
672 Returns @true if the attribute object specifies a URL.
677 Returns @true if the object represents a character style, that is,
678 the flags specify a font or a text background or foreground colour.
680 bool IsCharacterStyle() const;
683 Returns @false if we have any attributes set, @true otherwise.
685 bool IsDefault() const;
688 Returns @true if the object represents a paragraph style, that is,
689 the flags specify alignment, indentation, tabs, paragraph spacing, or
692 bool IsParagraphStyle() const;
698 @name SetXXX functions
704 Sets the paragraph alignment. See ::wxTextAttrAlignment enumeration values.
706 Of these, wxTEXT_ALIGNMENT_JUSTIFIED is unimplemented.
707 In future justification may be supported when printing or previewing, only.
709 void SetAlignment(wxTextAttrAlignment alignment
);
712 Sets the background colour.
714 void SetBackgroundColour(const wxColour
& colBack
);
717 Sets the name of the font associated with the bullet symbol.
718 Only valid for attributes with wxTEXT_ATTR_BULLET_SYMBOL.
720 void SetBulletFont(const wxString
& font
);
723 Sets the standard bullet name, applicable if the bullet style is
724 wxTEXT_ATTR_BULLET_STYLE_STANDARD.
726 See GetBulletName() for a list of supported names, and how
727 to expand the range of supported types.
729 void SetBulletName(const wxString
& name
);
732 Sets the bullet number.
734 void SetBulletNumber(int n
);
737 Sets the bullet style.
739 The ::wxTextAttrBulletStyle enumeration values are all supported,
740 except for wxTEXT_ATTR_BULLET_STYLE_BITMAP.
742 void SetBulletStyle(int style
);
745 Sets the bullet text, which could be a symbol, or (for example) cached
748 void SetBulletText(const wxString
& text
);
751 Sets the character style name.
753 void SetCharacterStyleName(const wxString
& name
);
756 Sets the flags determining which styles are being specified.
757 The ::wxTextAttrFlags values can be passed in a bitlist.
759 void SetFlags(long flags
);
762 Sets the attributes for the given font.
763 Note that wxTextAttr does not store an actual wxFont object.
765 void SetFont(const wxFont
& font
, int flags
= wxTEXT_ATTR_FONT
& ~wxTEXT_ATTR_FONT_PIXEL_SIZE
);
768 Sets the font encoding.
770 void SetFontEncoding(wxFontEncoding encoding
);
773 Sets the font face name.
775 void SetFontFaceName(const wxString
& faceName
);
778 Sets the font family.
780 void SetFontFamily(wxFontFamily family
);
783 Sets the font size in points.
785 void SetFontSize(int pointSize
);
788 Sets the font size in points.
790 void SetFontPointSize(int pointSize
);
793 Sets the font size in pixels.
795 void SetFontPixelSize(int pixelSize
);
798 Sets the font style (normal, italic or slanted).
800 void SetFontStyle(wxFontStyle fontStyle
);
803 Sets the font underlining.
805 void SetFontUnderlined(bool underlined
);
808 Sets the font weight.
810 void SetFontWeight(wxFontWeight fontWeight
);
813 Sets the left indent and left subindent in tenths of a millimetre.
814 The sub-indent is an offset from the left of the paragraph, and is used for all
815 but the first line in a paragraph.
817 A positive value will cause the first line to appear to the left
818 of the subsequent lines, and a negative value will cause the first line to be
819 indented relative to the subsequent lines.
821 wxRichTextBuffer uses indentation to render a bulleted item.
822 The left indent is the distance between the margin and the bullet.
823 The content of the paragraph, including the first line, starts
824 at leftMargin + leftSubIndent.
825 So the distance between the left edge of the bullet and the
826 left of the actual paragraph is leftSubIndent.
828 void SetLeftIndent(int indent
, int subIndent
= 0);
831 Sets the line spacing. @a spacing is a multiple, where 10 means single-spacing,
832 15 means 1.5 spacing, and 20 means double spacing.
833 The ::wxTextAttrLineSpacing values are defined for convenience.
835 void SetLineSpacing(int spacing
);
838 Sets the list style name.
840 void SetListStyleName(const wxString
& name
);
843 Specifies the outline level. Zero represents normal text.
844 At present, the outline level is not used, but may be used in future for
845 determining list levels and for applications that need to store document
846 structure information.
848 void SetOutlineLevel(int level
);
851 Specifies a page break before this paragraph.
853 void SetPageBreak(bool pageBreak
= true);
856 Sets the spacing after a paragraph, in tenths of a millimetre.
858 void SetParagraphSpacingAfter(int spacing
);
861 Sets the spacing before a paragraph, in tenths of a millimetre.
863 void SetParagraphSpacingBefore(int spacing
);
866 Sets the name of the paragraph style.
868 void SetParagraphStyleName(const wxString
& name
);
871 Sets the right indent in tenths of a millimetre.
873 void SetRightIndent(int indent
);
876 Sets the tab stops, expressed in tenths of a millimetre.
877 Each stop is measured from the left margin and therefore each value must be
878 larger than the last.
880 void SetTabs(const wxArrayInt
& tabs
);
883 Sets the text foreground colour.
885 void SetTextColour(const wxColour
& colText
);
888 Sets the text effect bits of interest.
890 You should also pass wxTEXT_ATTR_EFFECTS to SetFlags().
891 See SetFlags() for further information.
893 void SetTextEffectFlags(int flags
);
896 Sets the text effects, a bit list of styles.
897 The ::wxTextAttrEffects enumeration values can be used.
899 Of these, only wxTEXT_ATTR_EFFECT_CAPITALS, wxTEXT_ATTR_EFFECT_STRIKETHROUGH,
900 wxTEXT_ATTR_EFFECT_SUPERSCRIPT and wxTEXT_ATTR_EFFECT_SUBSCRIPT are implemented.
902 wxTEXT_ATTR_EFFECT_CAPITALS capitalises text when displayed (leaving the case
903 of the actual buffer text unchanged), and wxTEXT_ATTR_EFFECT_STRIKETHROUGH draws
906 To set effects, you should also pass wxTEXT_ATTR_EFFECTS to SetFlags(), and call
907 SetTextEffectFlags() with the styles (taken from the above set) that you
908 are interested in setting.
910 void SetTextEffects(int effects
);
913 Sets the URL for the content. Sets the wxTEXT_ATTR_URL style; content with this
914 style causes wxRichTextCtrl to show a hand cursor over it, and wxRichTextCtrl
915 generates a wxTextUrlEvent when the content is clicked.
917 void SetURL(const wxString
& url
);
923 Assignment from a wxTextAttr object.
925 void operator=(const wxTextAttr
& attr
);
932 A text control allows text to be displayed and edited.
934 It may be single line or multi-line. Notice that a lot of methods of the
935 text controls are found in the base wxTextEntry class which is a common
936 base class for wxTextCtrl and other controls using a single line text entry
937 field (e.g. wxComboBox).
940 @style{wxTE_PROCESS_ENTER}
941 The control will generate the event @c wxEVT_TEXT_ENTER
942 (otherwise pressing Enter key is either processed internally by the
943 control or used for navigation between dialog controls).
944 @style{wxTE_PROCESS_TAB}
945 The control will receive @c wxEVT_CHAR events for TAB pressed -
946 normally, TAB is used for passing to the next control in a dialog
947 instead. For the control created with this style, you can still use
948 Ctrl-Enter to pass to the next control from the keyboard.
949 @style{wxTE_MULTILINE}
950 The text control allows multiple lines. If this style is not
951 specified, line break characters should not be used in the controls
953 @style{wxTE_PASSWORD}
954 The text will be echoed as asterisks.
955 @style{wxTE_READONLY}
956 The text will not be user-editable.
958 Use rich text control under Win32, this allows to have more than
959 64KB of text in the control even under Win9x. This style is ignored
960 under other platforms.
962 Use rich text control version 2.0 or 3.0 under Win32, this style is
963 ignored under other platforms
964 @style{wxTE_AUTO_URL}
965 Highlight the URLs and generate the wxTextUrlEvents when mouse
966 events occur over them. This style is only supported for wxTE_RICH
967 Win32 and multi-line wxGTK2 text controls.
968 @style{wxTE_NOHIDESEL}
969 By default, the Windows text control doesn't show the selection
970 when it doesn't have focus - use this style to force it to always
971 show it. It doesn't do anything under other platforms.
973 A horizontal scrollbar will be created and used, so that text won't
974 be wrapped. No effect under wxGTK1.
975 @style{wxTE_NO_VSCROLL}
976 For multiline controls only: vertical scrollbar will never be
977 created. This limits the amount of text which can be entered into
978 the control to what can be displayed in it under MSW but not under
979 GTK2. Currently not implemented for the other platforms.
981 The text in the control will be left-justified (default).
983 The text in the control will be centered (currently wxMSW and
986 The text in the control will be right-justified (currently wxMSW
988 @style{wxTE_DONTWRAP}
989 Same as wxHSCROLL style: don't wrap at all, show horizontal
991 @style{wxTE_CHARWRAP}
992 Wrap the lines too long to be shown entirely at any position
993 (wxUniv and wxGTK2 only).
994 @style{wxTE_WORDWRAP}
995 Wrap the lines too long to be shown entirely at word boundaries
996 (wxUniv and wxGTK2 only).
997 @style{wxTE_BESTWRAP}
998 Wrap the lines at word boundaries or at any other character if
999 there are words longer than the window width (this is the default).
1000 @style{wxTE_CAPITALIZE}
1001 On PocketPC and Smartphone, causes the first letter to be
1005 Note that alignment styles (wxTE_LEFT, wxTE_CENTRE and wxTE_RIGHT) can be
1006 changed dynamically after control creation on wxMSW and wxGTK. wxTE_READONLY,
1007 wxTE_PASSWORD and wrapping styles can be dynamically changed under wxGTK but
1008 not wxMSW. The other styles can be only set during control creation.
1011 @section textctrl_text_format wxTextCtrl Text Format
1013 The multiline text controls always store the text as a sequence of lines
1014 separated by @c '\\n' characters, i.e. in the Unix text format even on
1015 non-Unix platforms. This allows the user code to ignore the differences
1016 between the platforms but at a price: the indices in the control such as
1017 those returned by GetInsertionPoint() or GetSelection() can @b not be used
1018 as indices into the string returned by GetValue() as they're going to be
1019 slightly off for platforms using @c "\\r\\n" as separator (as Windows
1022 Instead, if you need to obtain a substring between the 2 indices obtained
1023 from the control with the help of the functions mentioned above, you should
1024 use GetRange(). And the indices themselves can only be passed to other
1025 methods, for example SetInsertionPoint() or SetSelection().
1027 To summarize: never use the indices returned by (multiline) wxTextCtrl as
1028 indices into the string it contains, but only as arguments to be passed
1029 back to the other wxTextCtrl methods. This problem doesn't arise for
1030 single-line platforms however where the indices in the control do
1031 correspond to the positions in the value string.
1034 @section textctrl_styles wxTextCtrl Styles.
1036 Multi-line text controls support styling, i.e. provide a possibility to set
1037 colours and font for individual characters in it (note that under Windows
1038 @c wxTE_RICH style is required for style support). To use the styles you
1039 can either call SetDefaultStyle() before inserting the text or call
1040 SetStyle() later to change the style of the text already in the control
1041 (the first solution is much more efficient).
1043 In either case, if the style doesn't specify some of the attributes (for
1044 example you only want to set the text colour but without changing the font
1045 nor the text background), the values of the default style will be used for
1046 them. If there is no default style, the attributes of the text control
1049 So the following code correctly describes what it does: the second call to
1050 SetDefaultStyle() doesn't change the text foreground colour (which stays
1051 red) while the last one doesn't change the background colour (which stays
1055 text->SetDefaultStyle(wxTextAttr(*wxRED));
1056 text->AppendText("Red text\n");
1057 text->SetDefaultStyle(wxTextAttr(wxNullColour, *wxLIGHT_GREY));
1058 text->AppendText("Red on grey text\n");
1059 text->SetDefaultStyle(wxTextAttr(*wxBLUE);
1060 text->AppendText("Blue on grey text\n");
1064 @section textctrl_cpp_streams wxTextCtrl and C++ Streams
1066 This class multiply-inherits from @c std::streambuf (except for some really
1067 old compilers using non-standard iostream library), allowing code such as
1071 wxTextCtrl *control = new wxTextCtrl(...);
1073 ostream stream(control)
1075 stream << 123.456 << " some text\n";
1079 Note that even if your compiler doesn't support this (the symbol
1080 @c wxHAS_TEXT_WINDOW_STREAM has value of 0 then) you can still use
1081 wxTextCtrl itself in a stream-like manner:
1084 wxTextCtrl *control = new wxTextCtrl(...);
1086 *control << 123.456 << " some text\n";
1089 However the possibility to create an ostream associated with wxTextCtrl may
1090 be useful if you need to redirect the output of a function taking an
1091 ostream as parameter to a text control.
1093 Another commonly requested need is to redirect @c std::cout to the text
1094 control. This may be done in the following way:
1099 wxTextCtrl *control = new wxTextCtrl(...);
1101 std::streambuf *sbOld = std::cout.rdbuf();
1102 std::cout.rdbuf(control);
1104 // use cout as usual, the output appears in the text control
1107 std::cout.rdbuf(sbOld);
1110 But wxWidgets provides a convenient class to make it even simpler so
1111 instead you may just do
1116 wxTextCtrl *control = new wxTextCtrl(...);
1118 wxStreamToTextRedirector redirect(control);
1120 // all output to cout goes into the text control until the exit from
1124 See wxStreamToTextRedirector for more details.
1127 @section textctrl_event_handling Event Handling.
1129 The following commands are processed by default event handlers in
1130 wxTextCtrl: @c wxID_CUT, @c wxID_COPY, @c wxID_PASTE, @c wxID_UNDO, @c
1131 wxID_REDO. The associated UI update events are also processed
1132 automatically, when the control has the focus.
1134 @beginEventEmissionTable{wxCommandEvent}
1135 @event{EVT_TEXT(id, func)}
1136 Respond to a @c wxEVT_TEXT event, generated when the text
1137 changes. Notice that this event will be sent when the text controls
1138 contents changes -- whether this is due to user input or comes from the
1139 program itself (for example, if wxTextCtrl::SetValue() is called); see
1140 wxTextCtrl::ChangeValue() for a function which does not send this event.
1141 This event is however not sent during the control creation.
1142 @event{EVT_TEXT_ENTER(id, func)}
1143 Respond to a @c wxEVT_TEXT_ENTER event, generated when enter is
1144 pressed in a text control which must have wxTE_PROCESS_ENTER style for
1145 this event to be generated.
1146 @event{EVT_TEXT_URL(id, func)}
1147 A mouse event occurred over an URL in the text control (wxMSW and
1148 wxGTK2 only currently).
1149 @event{EVT_TEXT_MAXLEN(id, func)}
1150 This event is generated when the user tries to enter more text into the
1151 control than the limit set by wxTextCtrl::SetMaxLength(), see its description.
1156 @appearance{textctrl}
1158 @see wxTextCtrl::Create, wxValidator
1160 class wxTextCtrl
: public wxControl
,
1170 Constructor, creating and showing a text control.
1173 Parent window. Should not be @NULL.
1175 Control identifier. A value of -1 denotes a default value.
1179 Text control position.
1183 Window style. See wxTextCtrl.
1190 The horizontal scrollbar (wxHSCROLL style flag) will only be
1191 created for multi-line text controls. Without a horizontal
1192 scrollbar, text lines that don't fit in the control's size will be
1193 wrapped (but no newline character is inserted).
1194 Single line controls don't have a horizontal scrollbar, the text is
1195 automatically scrolled so that the insertion point is always visible.
1197 @see Create(), wxValidator
1199 wxTextCtrl(wxWindow
* parent
, wxWindowID id
,
1200 const wxString
& value
= wxEmptyString
,
1201 const wxPoint
& pos
= wxDefaultPosition
,
1202 const wxSize
& size
= wxDefaultSize
,
1204 const wxValidator
& validator
= wxDefaultValidator
,
1205 const wxString
& name
= wxTextCtrlNameStr
);
1208 Destructor, destroying the text control.
1210 virtual ~wxTextCtrl();
1213 Creates the text control for two-step construction.
1215 This method should be called if the default constructor was used for
1216 the control creation. Its parameters have the same meaning as for the
1217 non-default constructor.
1219 bool Create(wxWindow
* parent
, wxWindowID id
,
1220 const wxString
& value
= wxEmptyString
,
1221 const wxPoint
& pos
= wxDefaultPosition
,
1222 const wxSize
& size
= wxDefaultSize
, long style
= 0,
1223 const wxValidator
& validator
= wxDefaultValidator
,
1224 const wxString
& name
= wxTextCtrlNameStr
);
1227 Resets the internal modified flag as if the current changes had been
1230 virtual void DiscardEdits();
1233 This function inserts into the control the character which would have
1234 been inserted if the given key event had occurred in the text control.
1236 The @a event object should be the same as the one passed to @c EVT_KEY_DOWN
1237 handler previously by wxWidgets. Please note that this function doesn't
1238 currently work correctly for all keys under any platform but MSW.
1241 @true if the event resulted in a change to the control, @false otherwise.
1243 virtual bool EmulateKeyPress(const wxKeyEvent
& event
);
1246 Returns the style currently used for the new text.
1248 @see SetDefaultStyle()
1250 virtual const wxTextAttr
& GetDefaultStyle() const;
1253 Gets the length of the specified line, not including any trailing
1254 newline character(s).
1257 Line number (starting from zero).
1260 The length of the line, or -1 if @a lineNo was invalid.
1262 virtual int GetLineLength(long lineNo
) const;
1265 Returns the contents of a given line in the text control, not including
1266 any trailing newline character(s).
1269 The line number, starting from zero.
1272 The contents of the line.
1274 virtual wxString
GetLineText(long lineNo
) const;
1277 Returns the number of lines in the text control buffer.
1279 The returned number is the number of logical lines, i.e. just the count
1280 of the number of newline characters in the control + 1, for wxGTK and
1281 wxOSX/Cocoa ports while it is the number of physical lines, i.e. the
1282 count of lines actually shown in the control, in wxMSW and wxOSX/Carbon.
1283 Because of this discrepancy, it is not recommended to use this function.
1286 Note that even empty text controls have one line (where the
1287 insertion point is), so GetNumberOfLines() never returns 0.
1289 virtual int GetNumberOfLines() const;
1292 Returns the style at this position in the text control.
1294 Not all platforms support this function.
1297 @true on success, @false if an error occurred (this may also mean
1298 that the styles are not supported under this platform).
1300 @see SetStyle(), wxTextAttr
1302 virtual bool GetStyle(long position
, wxTextAttr
& style
);
1306 This function finds the character at the specified position expressed
1309 The two overloads of this method allow to find either the position of
1310 the character, as an index into the text control contents, or its row
1313 If the return code is not @c wxTE_HT_UNKNOWN the row and column of the
1314 character closest to this position are returned, otherwise the output
1315 parameters are not modified.
1317 Please note that this function is currently only implemented in wxUniv,
1318 wxMSW and wxGTK2 ports and always returns @c wxTE_HT_UNKNOWN in the
1322 In wxPerl this function takes only the @a pt argument and
1323 returns a 3-element list (result, col, row).
1327 The position of the point to check, in window device coordinates.
1329 Receives the column of the character at the given position. May be
1332 Receives the row of the character at the given position. May be
1335 Receives the position of the character at the given position. May
1338 @see PositionToXY(), XYToPosition()
1340 wxTextCtrlHitTestResult
HitTest(const wxPoint
& pt
, long *pos
) const;
1341 wxTextCtrlHitTestResult
HitTest(const wxPoint
& pt
,
1343 wxTextCoord
*row
) const;
1347 Returns @true if the text has been modified by user.
1349 Note that calling SetValue() doesn't make the control modified.
1353 virtual bool IsModified() const;
1356 Returns @true if this is a multi line edit control and @false otherwise.
1360 bool IsMultiLine() const;
1363 Returns @true if this is a single line edit control and @false otherwise.
1365 @see IsSingleLine(), IsMultiLine()
1367 bool IsSingleLine() const;
1370 Loads and displays the named file, if it exists.
1373 The filename of the file to load.
1375 The type of file to load. This is currently ignored in wxTextCtrl.
1378 @true if successful, @false otherwise.
1380 bool LoadFile(const wxString
& filename
,
1381 int fileType
= wxTEXT_TYPE_ANY
);
1384 Mark text as modified (dirty).
1388 virtual void MarkDirty();
1391 This event handler function implements default drag and drop behaviour,
1392 which is to load the first dropped file into the control.
1395 The drop files event.
1397 @remarks This is not implemented on non-Windows platforms.
1399 @see wxDropFilesEvent
1401 void OnDropFiles(wxDropFilesEvent
& event
);
1404 Converts given position to a zero-based column, line number pair.
1409 Receives zero based column number.
1411 Receives zero based line number.
1414 @true on success, @false on failure (most likely due to a too large
1415 position parameter).
1418 In wxPerl this function takes only the @a pos argument and
1419 returns a 2-element list (x, y).
1424 virtual bool PositionToXY(long pos
, long* x
, long* y
) const;
1427 Converts given text position to client coordinates in pixels.
1429 This function allows to find where is the character at the given
1430 position displayed in the text control.
1432 @onlyfor{wxmsw,wxgtk}. Additionally, wxGTK only implements this method
1433 for multiline controls and ::wxDefaultPosition is always returned for
1434 the single line ones.
1437 Text position in 0 to GetLastPosition() range (inclusive).
1439 On success returns a wxPoint which contains client coordinates for
1440 the given position in pixels, otherwise returns ::wxDefaultPosition.
1444 @see XYToPosition(), PositionToXY()
1446 wxPoint
PositionToCoords(long pos
) const;
1449 Saves the contents of the control in a text file.
1452 The name of the file in which to save the text.
1454 The type of file to save. This is currently ignored in wxTextCtrl.
1457 @true if the operation was successful, @false otherwise.
1459 bool SaveFile(const wxString
& filename
= wxEmptyString
,
1460 int fileType
= wxTEXT_TYPE_ANY
);
1463 Changes the default style to use for the new text which is going to be
1464 added to the control using WriteText() or AppendText().
1466 If either of the font, foreground, or background colour is not set in
1467 @a style, the values of the previous default style are used for them.
1468 If the previous default style didn't set them neither, the global font
1469 or colours of the text control itself are used as fall back.
1471 However if the @a style parameter is the default wxTextAttr, then the default
1472 style is just reset (instead of being combined with the new style which
1473 wouldn't change it at all).
1476 The style for the new text.
1479 @true on success, @false if an error occurred (this may also mean
1480 that the styles are not supported under this platform).
1482 @see GetDefaultStyle()
1484 virtual bool SetDefaultStyle(const wxTextAttr
& style
);
1487 Marks the control as being modified by the user or not.
1489 @see MarkDirty(), DiscardEdits()
1491 void SetModified(bool modified
);
1494 Changes the style of the given range.
1496 If any attribute within @a style is not set, the corresponding
1497 attribute from GetDefaultStyle() is used.
1500 The start of the range to change.
1502 The end of the range to change.
1504 The new style for the range.
1507 @true on success, @false if an error occurred (this may also mean
1508 that the styles are not supported under this platform).
1510 @see GetStyle(), wxTextAttr
1512 virtual bool SetStyle(long start
, long end
, const wxTextAttr
& style
);
1515 Makes the line containing the given position visible.
1518 The position that should be visible.
1520 virtual void ShowPosition(long pos
);
1523 Converts the given zero based column and line number to a position.
1531 The position value, or -1 if x or y was invalid.
1533 virtual long XYToPosition(long x
, long y
) const;
1537 Operator definitions for appending to a text control.
1539 These operators can be used as with the standard C++ streams, for
1542 wxTextCtrl *wnd = new wxTextCtrl(my_frame);
1544 (*wnd) << "Welcome to text control number " << 1 << ".\n";
1548 wxTextCtrl
& operator<<(const wxString
& s
);
1549 wxTextCtrl
& operator<<(int i
);
1550 wxTextCtrl
& operator<<(long i
);
1551 wxTextCtrl
& operator<<(float f
);
1552 wxTextCtrl
& operator<<(double d
);
1553 wxTextCtrl
& operator<<(char c
);
1554 wxTextCtrl
& operator<<(wchar_t c
);
1560 wxEventType wxEVT_TEXT
;
1561 wxEventType wxEVT_TEXT_ENTER
;
1562 wxEventType wxEVT_TEXT_URL
;
1563 wxEventType wxEVT_TEXT_MAXLEN
;
1566 class wxTextUrlEvent
: public wxCommandEvent
1569 wxTextUrlEvent(int winid
, const wxMouseEvent
& evtMouse
,
1570 long start
, long end
);
1572 wxTextUrlEvent(const wxTextUrlEvent
& event
);
1574 // get the mouse event which happened over the URL
1575 const wxMouseEvent
& GetMouseEvent() const;
1577 // get the start of the URL
1578 long GetURLStart() const;
1580 // get the end of the URL
1581 long GetURLEnd() const;
1583 virtual wxEvent
*Clone() const;
1588 @class wxStreamToTextRedirector
1590 This class can be used to (temporarily) redirect all output sent to a C++
1591 ostream object to a wxTextCtrl instead.
1594 Some compilers and/or build configurations don't support multiply
1595 inheriting wxTextCtrl from @c std::streambuf in which case this class is
1597 You also must have @c wxUSE_STD_IOSTREAM option on (i.e. set to 1) in your
1598 @c setup.h to be able to use it. Under Unix, specify @c --enable-std_iostreams
1599 switch when running configure for this.
1604 using namespace std;
1605 wxTextCtrl* text = new wxTextCtrl(...);
1607 wxStreamToTextRedirector redirect(text);
1609 // this goes to the text control
1610 cout << "Hello, text!" << endl;
1612 // this goes somewhere else, presumably to stdout
1613 cout << "Hello, console!" << endl;
1621 class wxStreamToTextRedirector
1625 The constructor starts redirecting output sent to @a ostr or @a cout for
1626 the default parameter value to the text control @a text.
1629 The text control to append output too, must be non-@NULL
1631 The C++ stream to redirect, cout is used if it is @NULL
1633 wxStreamToTextRedirector(wxTextCtrl
*text
, ostream
* ostr
);
1636 When a wxStreamToTextRedirector object is destroyed, the redirection is ended
1637 and any output sent to the C++ ostream which had been specified at the time of
1638 the object construction will go to its original destination.
1640 ~wxStreamToTextRedirector();