1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxTextAttr
4 // Author: wxWidgets team
5 // Licence: wxWindows licence
6 /////////////////////////////////////////////////////////////////////////////
11 #define wxTE_NO_VSCROLL 0x0002
13 #define wxTE_READONLY 0x0010
14 #define wxTE_MULTILINE 0x0020
15 #define wxTE_PROCESS_TAB 0x0040
18 #define wxTE_LEFT 0x0000 // 0x0000
19 #define wxTE_CENTER wxALIGN_CENTER_HORIZONTAL // 0x0100
20 #define wxTE_RIGHT wxALIGN_RIGHT // 0x0200
21 #define wxTE_CENTRE wxTE_CENTER
23 // this style means to use RICHEDIT control and does something only under wxMSW
24 // and Win32 and is silently ignored under all other platforms
25 #define wxTE_RICH 0x0080
27 #define wxTE_PROCESS_ENTER 0x0400
28 #define wxTE_PASSWORD 0x0800
30 // automatically detect the URLs and generate the events when mouse is
31 // moved/clicked over an URL
33 // this is for Win32 richedit and wxGTK2 multiline controls only so far
34 #define wxTE_AUTO_URL 0x1000
36 // by default, the Windows text control doesn't show the selection when it
37 // doesn't have focus - use this style to force it to always show it
38 #define wxTE_NOHIDESEL 0x2000
40 // use wxHSCROLL to not wrap text at all, wxTE_CHARWRAP to wrap it at any
41 // position and wxTE_WORDWRAP to wrap at words boundary
43 // if no wrapping style is given at all, the control wraps at word boundary
44 #define wxTE_DONTWRAP wxHSCROLL
45 #define wxTE_CHARWRAP 0x4000 // wrap at any position
46 #define wxTE_WORDWRAP 0x0001 // wrap only at words boundaries
47 #define wxTE_BESTWRAP 0x0000 // this is the default
49 // force using RichEdit version 2.0 or 3.0 instead of 1.0 (default) for
50 // wxTE_RICH controls - can be used together with or instead of wxTE_RICH
51 #define wxTE_RICH2 0x8000
54 #define wxTEXT_TYPE_ANY 0
58 wxTextCoord is a line or row number
60 typedef long wxTextCoord
;
64 One of the following values can be passed to wxTextAttr::SetAlignment to determine paragraph alignment.
66 enum wxTextAttrAlignment
68 wxTEXT_ALIGNMENT_DEFAULT
,
69 wxTEXT_ALIGNMENT_LEFT
,
70 wxTEXT_ALIGNMENT_CENTRE
,
71 wxTEXT_ALIGNMENT_CENTER
= wxTEXT_ALIGNMENT_CENTRE
,
72 wxTEXT_ALIGNMENT_RIGHT
,
74 /** wxTEXT_ALIGNMENT_JUSTIFIED is unimplemented.
75 In future justification may be supported when printing or previewing, only. */
76 wxTEXT_ALIGNMENT_JUSTIFIED
80 The following values are passed in a bitlist to wxTextAttr::SetFlags() to
81 determine what attributes will be considered when setting the attributes for a text control.
85 wxTEXT_ATTR_TEXT_COLOUR
= 0x00000001,
86 wxTEXT_ATTR_BACKGROUND_COLOUR
= 0x00000002,
88 wxTEXT_ATTR_FONT_FACE
= 0x00000004,
89 wxTEXT_ATTR_FONT_POINT_SIZE
= 0x00000008,
90 wxTEXT_ATTR_FONT_PIXEL_SIZE
= 0x10000000,
91 wxTEXT_ATTR_FONT_WEIGHT
= 0x00000010,
92 wxTEXT_ATTR_FONT_ITALIC
= 0x00000020,
93 wxTEXT_ATTR_FONT_UNDERLINE
= 0x00000040,
94 wxTEXT_ATTR_FONT_STRIKETHROUGH
= 0x08000000,
95 wxTEXT_ATTR_FONT_ENCODING
= 0x02000000,
96 wxTEXT_ATTR_FONT_FAMILY
= 0x04000000,
98 wxTEXT_ATTR_FONT_SIZE
= \
99 ( wxTEXT_ATTR_FONT_POINT_SIZE
| wxTEXT_ATTR_FONT_PIXEL_SIZE
),
101 Defined as the combination of all @c wxTEXT_ATTR_FONT_* values above.
104 ( wxTEXT_ATTR_FONT_FACE
| wxTEXT_ATTR_FONT_SIZE
| wxTEXT_ATTR_FONT_WEIGHT
| \
105 wxTEXT_ATTR_FONT_ITALIC
| wxTEXT_ATTR_FONT_UNDERLINE
| wxTEXT_ATTR_FONT_STRIKETHROUGH
| wxTEXT_ATTR_FONT_ENCODING
| wxTEXT_ATTR_FONT_FAMILY
),
107 wxTEXT_ATTR_ALIGNMENT
= 0x00000080,
108 wxTEXT_ATTR_LEFT_INDENT
= 0x00000100,
109 wxTEXT_ATTR_RIGHT_INDENT
= 0x00000200,
110 wxTEXT_ATTR_TABS
= 0x00000400,
111 wxTEXT_ATTR_PARA_SPACING_AFTER
= 0x00000800,
112 wxTEXT_ATTR_PARA_SPACING_BEFORE
= 0x00001000,
113 wxTEXT_ATTR_LINE_SPACING
= 0x00002000,
114 wxTEXT_ATTR_CHARACTER_STYLE_NAME
= 0x00004000,
115 wxTEXT_ATTR_PARAGRAPH_STYLE_NAME
= 0x00008000,
116 wxTEXT_ATTR_LIST_STYLE_NAME
= 0x00010000,
118 wxTEXT_ATTR_BULLET_STYLE
= 0x00020000,
119 wxTEXT_ATTR_BULLET_NUMBER
= 0x00040000,
120 wxTEXT_ATTR_BULLET_TEXT
= 0x00080000,
121 wxTEXT_ATTR_BULLET_NAME
= 0x00100000,
124 Defined as the combination of all @c wxTEXT_ATTR_BULLET_* values above.
126 wxTEXT_ATTR_BULLET
= \
127 ( wxTEXT_ATTR_BULLET_STYLE
| wxTEXT_ATTR_BULLET_NUMBER
| wxTEXT_ATTR_BULLET_TEXT
| \
128 wxTEXT_ATTR_BULLET_NAME
),
130 wxTEXT_ATTR_URL
= 0x00200000,
131 wxTEXT_ATTR_PAGE_BREAK
= 0x00400000,
132 wxTEXT_ATTR_EFFECTS
= 0x00800000,
133 wxTEXT_ATTR_OUTLINE_LEVEL
= 0x01000000,
136 Combines the styles @c wxTEXT_ATTR_FONT, @c wxTEXT_ATTR_EFFECTS, @c wxTEXT_ATTR_BACKGROUND_COLOUR,
137 @c wxTEXT_ATTR_TEXT_COLOUR, @c wxTEXT_ATTR_CHARACTER_STYLE_NAME, @c wxTEXT_ATTR_URL.
140 wxTEXT_ATTR_CHARACTER
= \
141 (wxTEXT_ATTR_FONT
|wxTEXT_ATTR_EFFECTS
| \
142 wxTEXT_ATTR_BACKGROUND_COLOUR
|wxTEXT_ATTR_TEXT_COLOUR
|wxTEXT_ATTR_CHARACTER_STYLE_NAME
|wxTEXT_ATTR_URL
),
145 Combines all the styles regarding text paragraphs.
147 wxTEXT_ATTR_PARAGRAPH
= \
148 (wxTEXT_ATTR_ALIGNMENT
|wxTEXT_ATTR_LEFT_INDENT
|wxTEXT_ATTR_RIGHT_INDENT
|wxTEXT_ATTR_TABS
|\
149 wxTEXT_ATTR_PARA_SPACING_BEFORE
|wxTEXT_ATTR_PARA_SPACING_AFTER
|wxTEXT_ATTR_LINE_SPACING
|\
150 wxTEXT_ATTR_BULLET
|wxTEXT_ATTR_PARAGRAPH_STYLE_NAME
|wxTEXT_ATTR_LIST_STYLE_NAME
|wxTEXT_ATTR_OUTLINE_LEVEL
),
153 Combines all previous values.
155 wxTEXT_ATTR_ALL
= (wxTEXT_ATTR_CHARACTER
|wxTEXT_ATTR_PARAGRAPH
)
159 Styles for wxTextAttr::SetBulletStyle. They can be combined together as a bitlist.
161 enum wxTextAttrBulletStyle
163 wxTEXT_ATTR_BULLET_STYLE_NONE
= 0x00000000,
164 wxTEXT_ATTR_BULLET_STYLE_ARABIC
= 0x00000001,
165 wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER
= 0x00000002,
166 wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER
= 0x00000004,
167 wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER
= 0x00000008,
168 wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER
= 0x00000010,
169 wxTEXT_ATTR_BULLET_STYLE_SYMBOL
= 0x00000020,
171 /** wxTEXT_ATTR_BULLET_STYLE_BITMAP is unimplemented. */
172 wxTEXT_ATTR_BULLET_STYLE_BITMAP
= 0x00000040,
173 wxTEXT_ATTR_BULLET_STYLE_PARENTHESES
= 0x00000080,
174 wxTEXT_ATTR_BULLET_STYLE_PERIOD
= 0x00000100,
175 wxTEXT_ATTR_BULLET_STYLE_STANDARD
= 0x00000200,
176 wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS
= 0x00000400,
177 wxTEXT_ATTR_BULLET_STYLE_OUTLINE
= 0x00000800,
179 wxTEXT_ATTR_BULLET_STYLE_ALIGN_LEFT
= 0x00000000,
180 wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT
= 0x00001000,
181 wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE
= 0x00002000,
183 wxTEXT_ATTR_BULLET_STYLE_CONTINUATION
= 0x00004000
187 Styles for wxTextAttr::SetTextEffects(). They can be combined together as a bitlist.
189 Of these, only wxTEXT_ATTR_EFFECT_CAPITALS, wxTEXT_ATTR_EFFECT_STRIKETHROUGH,
190 wxTEXT_ATTR_EFFECT_SUPERSCRIPT and wxTEXT_ATTR_EFFECT_SUBSCRIPT are implemented.
192 enum wxTextAttrEffects
194 wxTEXT_ATTR_EFFECT_NONE
= 0x00000000,
195 wxTEXT_ATTR_EFFECT_CAPITALS
= 0x00000001,
196 wxTEXT_ATTR_EFFECT_SMALL_CAPITALS
= 0x00000002,
197 wxTEXT_ATTR_EFFECT_STRIKETHROUGH
= 0x00000004,
198 wxTEXT_ATTR_EFFECT_DOUBLE_STRIKETHROUGH
= 0x00000008,
199 wxTEXT_ATTR_EFFECT_SHADOW
= 0x00000010,
200 wxTEXT_ATTR_EFFECT_EMBOSS
= 0x00000020,
201 wxTEXT_ATTR_EFFECT_OUTLINE
= 0x00000040,
202 wxTEXT_ATTR_EFFECT_ENGRAVE
= 0x00000080,
203 wxTEXT_ATTR_EFFECT_SUPERSCRIPT
= 0x00000100,
204 wxTEXT_ATTR_EFFECT_SUBSCRIPT
= 0x00000200
208 Convenience line spacing values; see wxTextAttr::SetLineSpacing().
210 enum wxTextAttrLineSpacing
212 wxTEXT_ATTR_LINE_SPACING_NORMAL
= 10,
213 wxTEXT_ATTR_LINE_SPACING_HALF
= 15,
214 wxTEXT_ATTR_LINE_SPACING_TWICE
= 20
219 Describes the possible return values of wxTextCtrl::HitTest().
221 The element names correspond to the relationship between the point asked
222 for and the character returned, e.g. @c wxTE_HT_BEFORE means that the point
223 is before (leftward or upward) it and so on.
225 enum wxTextCtrlHitTestResult
227 /// Indicates that wxTextCtrl::HitTest() is not implemented on this
229 wxTE_HT_UNKNOWN
= -2,
231 /// The point is before the character returned.
234 /// The point is directly on the character returned.
237 /// The point is below the last line of the control.
240 /// The point is beyond the end of line containing the character returned.
248 wxTextAttr represents the character and paragraph attributes, or style,
249 for a range of text in a wxTextCtrl or wxRichTextCtrl.
251 When setting up a wxTextAttr object, pass a bitlist mask to
252 wxTextAttr::SetFlags() to indicate which style elements should be changed.
253 As a convenience, when you call a setter such as SetFont, the relevant bit
259 @see wxTextCtrl, wxRichTextCtrl
269 wxTextAttr(const wxColour
& colText
,
270 const wxColour
& colBack
= wxNullColour
,
271 const wxFont
& font
= wxNullFont
,
272 wxTextAttrAlignment alignment
= wxTEXT_ALIGNMENT_DEFAULT
);
273 wxTextAttr(const wxTextAttr
& attr
);
277 Applies the attributes in @a style to the original object, but not those
278 attributes from @a style that are the same as those in @a compareWith (if passed).
280 bool Apply(const wxTextAttr
& style
,
281 const wxTextAttr
* compareWith
= NULL
);
284 Copies all defined/valid properties from overlay to current object.
286 void Merge(const wxTextAttr
& overlay
);
289 Creates a new @c wxTextAttr which is a merge of @a base and @a overlay.
291 Properties defined in @a overlay take precedence over those in @a base.
292 Properties undefined/invalid in both are undefined in the result.
294 static wxTextAttr
Merge(const wxTextAttr
& base
,
295 const wxTextAttr
& overlay
);
299 Partial equality test. If @a weakTest is @true, attributes of this object do not
300 have to be present if those attributes of @a attr are present. If @a weakTest is
301 @false, the function will fail if an attribute is present in @a attr but not
304 bool EqPartial(const wxTextAttr
& attr
, bool weakTest
= true) const;
307 @name GetXXX functions
313 Returns the alignment flags.
314 See ::wxTextAttrAlignment for a list of available styles.
316 wxTextAttrAlignment
GetAlignment() const;
319 Returns the background colour.
321 const wxColour
& GetBackgroundColour() const;
324 Returns a string containing the name of the font associated with the bullet symbol.
325 Only valid for attributes with wxTEXT_ATTR_BULLET_SYMBOL.
327 const wxString
& GetBulletFont() const;
330 Returns the standard bullet name, applicable if the bullet style is
331 wxTEXT_ATTR_BULLET_STYLE_STANDARD.
333 Currently the following standard bullet names are supported:
336 - @c standard/diamond
337 - @c standard/triangle
340 For wxRichTextCtrl users only: if you wish your rich text controls to support
341 further bullet graphics, you can derive a class from wxRichTextRenderer or
342 wxRichTextStdRenderer, override @c DrawStandardBullet and @c EnumerateStandardBulletNames,
343 and set an instance of the class using wxRichTextBuffer::SetRenderer.
345 const wxString
& GetBulletName() const;
348 Returns the bullet number.
350 int GetBulletNumber() const;
353 Returns the bullet style.
354 See ::wxTextAttrBulletStyle for a list of available styles.
356 int GetBulletStyle() const;
359 Returns the bullet text, which could be a symbol, or (for example) cached
362 const wxString
& GetBulletText() const;
365 Returns the name of the character style.
367 const wxString
& GetCharacterStyleName() const;
370 Returns flags indicating which attributes are applicable.
371 See SetFlags() for a list of available flags.
373 long GetFlags() const;
376 Creates and returns a font specified by the font attributes in the wxTextAttr
377 object. Note that wxTextAttr does not store a wxFont object, so this is only
380 For greater efficiency, access the font attributes directly.
382 wxFont
GetFont() const;
385 Gets the font attributes from the given font, using only the attributes
386 specified by @a flags.
388 bool GetFontAttributes(const wxFont
& font
,
389 int flags
= wxTEXT_ATTR_FONT
);
392 Returns the font encoding.
394 wxFontEncoding
GetFontEncoding() const;
397 Returns the font face name.
399 const wxString
& GetFontFaceName() const;
402 Returns the font family.
404 wxFontFamily
GetFontFamily() const;
407 Returns the font size in points.
409 int GetFontSize() const;
412 Returns the font style.
414 wxFontStyle
GetFontStyle() const;
417 Returns @true if the font is underlined.
419 bool GetFontUnderlined() const;
422 Returns the font weight.
424 wxFontWeight
GetFontWeight() const;
427 Returns the left indent in tenths of a millimetre.
429 long GetLeftIndent() const;
432 Returns the left sub-indent in tenths of a millimetre.
434 long GetLeftSubIndent() const;
437 Returns the line spacing value, one of ::wxTextAttrLineSpacing values.
439 int GetLineSpacing() const;
442 Returns the name of the list style.
444 const wxString
& GetListStyleName() const;
447 Returns the outline level.
449 int GetOutlineLevel() const;
452 Returns the space in tenths of a millimeter after the paragraph.
454 int GetParagraphSpacingAfter() const;
457 Returns the space in tenths of a millimeter before the paragraph.
459 int GetParagraphSpacingBefore() const;
462 Returns the name of the paragraph style.
464 const wxString
& GetParagraphStyleName() const;
467 Returns the right indent in tenths of a millimeter.
469 long GetRightIndent() const;
472 Returns an array of tab stops, each expressed in tenths of a millimeter.
474 Each stop is measured from the left margin and therefore each value must
475 be larger than the last.
477 const wxArrayInt
& GetTabs() const;
480 Returns the text foreground colour.
482 const wxColour
& GetTextColour() const;
485 Returns the text effect bits of interest.
486 See SetFlags() for further information.
488 int GetTextEffectFlags() const;
491 Returns the text effects, a bit list of styles.
492 See SetTextEffects() for details.
494 int GetTextEffects() const;
497 Returns the URL for the content.
499 Content with @a wxTEXT_ATTR_URL style causes wxRichTextCtrl to show a
500 hand cursor over it, and wxRichTextCtrl generates a wxTextUrlEvent
501 when the content is clicked.
503 const wxString
& GetURL() const;
510 @name HasXXX and IsXXX functions
516 Returns @true if the attribute object specifies alignment.
518 bool HasAlignment() const;
521 Returns @true if the attribute object specifies a background colour.
523 bool HasBackgroundColour() const;
526 Returns @true if the attribute object specifies a standard bullet name.
528 bool HasBulletName() const;
531 Returns @true if the attribute object specifies a bullet number.
533 bool HasBulletNumber() const;
536 Returns @true if the attribute object specifies a bullet style.
538 bool HasBulletStyle() const;
541 Returns @true if the attribute object specifies bullet text (usually
542 specifying a symbol).
544 bool HasBulletText() const;
547 Returns @true if the attribute object specifies a character style name.
549 bool HasCharacterStyleName() const;
552 Returns @true if the @a flag is present in the attribute object's flag
555 bool HasFlag(long flag
) const;
558 Returns @true if the attribute object specifies any font attributes.
560 bool HasFont() const;
563 Returns @true if the attribute object specifies an encoding.
565 bool HasFontEncoding() const;
568 Returns @true if the attribute object specifies a font face name.
570 bool HasFontFaceName() const;
573 Returns @true if the attribute object specifies a font family.
575 bool HasFontFamily() const;
578 Returns @true if the attribute object specifies italic style.
580 bool HasFontItalic() const;
583 Returns @true if the attribute object specifies a font point or pixel size.
585 bool HasFontSize() const;
588 Returns @true if the attribute object specifies a font point size.
590 bool HasFontPointSize() const;
593 Returns @true if the attribute object specifies a font pixel size.
595 bool HasFontPixelSize() const;
598 Returns @true if the attribute object specifies either underlining or no
601 bool HasFontUnderlined() const;
604 Returns @true if the attribute object specifies font weight (bold, light or
607 bool HasFontWeight() const;
610 Returns @true if the attribute object specifies a left indent.
612 bool HasLeftIndent() const;
615 Returns @true if the attribute object specifies line spacing.
617 bool HasLineSpacing() const;
620 Returns @true if the attribute object specifies a list style name.
622 bool HasListStyleName() const;
625 Returns @true if the attribute object specifies an outline level.
627 bool HasOutlineLevel() const;
630 Returns @true if the attribute object specifies a page break before this
633 bool HasPageBreak() const;
636 Returns @true if the attribute object specifies spacing after a paragraph.
638 bool HasParagraphSpacingAfter() const;
641 Returns @true if the attribute object specifies spacing before a paragraph.
643 bool HasParagraphSpacingBefore() const;
646 Returns @true if the attribute object specifies a paragraph style name.
648 bool HasParagraphStyleName() const;
651 Returns @true if the attribute object specifies a right indent.
653 bool HasRightIndent() const;
656 Returns @true if the attribute object specifies tab stops.
658 bool HasTabs() const;
661 Returns @true if the attribute object specifies a text foreground colour.
663 bool HasTextColour() const;
666 Returns @true if the attribute object specifies text effects.
668 bool HasTextEffects() const;
671 Returns @true if the attribute object specifies a URL.
676 Returns @true if the object represents a character style, that is,
677 the flags specify a font or a text background or foreground colour.
679 bool IsCharacterStyle() const;
682 Returns @false if we have any attributes set, @true otherwise.
684 bool IsDefault() const;
687 Returns @true if the object represents a paragraph style, that is,
688 the flags specify alignment, indentation, tabs, paragraph spacing, or
691 bool IsParagraphStyle() const;
697 @name SetXXX functions
703 Sets the paragraph alignment. See ::wxTextAttrAlignment enumeration values.
705 Of these, wxTEXT_ALIGNMENT_JUSTIFIED is unimplemented.
706 In future justification may be supported when printing or previewing, only.
708 void SetAlignment(wxTextAttrAlignment alignment
);
711 Sets the background colour.
713 void SetBackgroundColour(const wxColour
& colBack
);
716 Sets the name of the font associated with the bullet symbol.
717 Only valid for attributes with wxTEXT_ATTR_BULLET_SYMBOL.
719 void SetBulletFont(const wxString
& font
);
722 Sets the standard bullet name, applicable if the bullet style is
723 wxTEXT_ATTR_BULLET_STYLE_STANDARD.
725 See GetBulletName() for a list of supported names, and how
726 to expand the range of supported types.
728 void SetBulletName(const wxString
& name
);
731 Sets the bullet number.
733 void SetBulletNumber(int n
);
736 Sets the bullet style.
738 The ::wxTextAttrBulletStyle enumeration values are all supported,
739 except for wxTEXT_ATTR_BULLET_STYLE_BITMAP.
741 void SetBulletStyle(int style
);
744 Sets the bullet text, which could be a symbol, or (for example) cached
747 void SetBulletText(const wxString
& text
);
750 Sets the character style name.
752 void SetCharacterStyleName(const wxString
& name
);
755 Sets the flags determining which styles are being specified.
756 The ::wxTextAttrFlags values can be passed in a bitlist.
758 void SetFlags(long flags
);
761 Sets the attributes for the given font.
762 Note that wxTextAttr does not store an actual wxFont object.
764 void SetFont(const wxFont
& font
, int flags
= wxTEXT_ATTR_FONT
& ~wxTEXT_ATTR_FONT_PIXEL_SIZE
);
767 Sets the font encoding.
769 void SetFontEncoding(wxFontEncoding encoding
);
772 Sets the font face name.
774 void SetFontFaceName(const wxString
& faceName
);
777 Sets the font family.
779 void SetFontFamily(wxFontFamily family
);
782 Sets the font size in points.
784 void SetFontSize(int pointSize
);
787 Sets the font size in points.
789 void SetFontPointSize(int pointSize
);
792 Sets the font size in pixels.
794 void SetFontPixelSize(int pixelSize
);
797 Sets the font style (normal, italic or slanted).
799 void SetFontStyle(wxFontStyle fontStyle
);
802 Sets the font underlining.
804 void SetFontUnderlined(bool underlined
);
807 Sets the font weight.
809 void SetFontWeight(wxFontWeight fontWeight
);
812 Sets the left indent and left subindent in tenths of a millimetre.
813 The sub-indent is an offset from the left of the paragraph, and is used for all
814 but the first line in a paragraph.
816 A positive value will cause the first line to appear to the left
817 of the subsequent lines, and a negative value will cause the first line to be
818 indented relative to the subsequent lines.
820 wxRichTextBuffer uses indentation to render a bulleted item.
821 The left indent is the distance between the margin and the bullet.
822 The content of the paragraph, including the first line, starts
823 at leftMargin + leftSubIndent.
824 So the distance between the left edge of the bullet and the
825 left of the actual paragraph is leftSubIndent.
827 void SetLeftIndent(int indent
, int subIndent
= 0);
830 Sets the line spacing. @a spacing is a multiple, where 10 means single-spacing,
831 15 means 1.5 spacing, and 20 means double spacing.
832 The ::wxTextAttrLineSpacing values are defined for convenience.
834 void SetLineSpacing(int spacing
);
837 Sets the list style name.
839 void SetListStyleName(const wxString
& name
);
842 Specifies the outline level. Zero represents normal text.
843 At present, the outline level is not used, but may be used in future for
844 determining list levels and for applications that need to store document
845 structure information.
847 void SetOutlineLevel(int level
);
850 Specifies a page break before this paragraph.
852 void SetPageBreak(bool pageBreak
= true);
855 Sets the spacing after a paragraph, in tenths of a millimetre.
857 void SetParagraphSpacingAfter(int spacing
);
860 Sets the spacing before a paragraph, in tenths of a millimetre.
862 void SetParagraphSpacingBefore(int spacing
);
865 Sets the name of the paragraph style.
867 void SetParagraphStyleName(const wxString
& name
);
870 Sets the right indent in tenths of a millimetre.
872 void SetRightIndent(int indent
);
875 Sets the tab stops, expressed in tenths of a millimetre.
876 Each stop is measured from the left margin and therefore each value must be
877 larger than the last.
879 void SetTabs(const wxArrayInt
& tabs
);
882 Sets the text foreground colour.
884 void SetTextColour(const wxColour
& colText
);
887 Sets the text effect bits of interest.
889 You should also pass wxTEXT_ATTR_EFFECTS to SetFlags().
890 See SetFlags() for further information.
892 void SetTextEffectFlags(int flags
);
895 Sets the text effects, a bit list of styles.
896 The ::wxTextAttrEffects enumeration values can be used.
898 Of these, only wxTEXT_ATTR_EFFECT_CAPITALS, wxTEXT_ATTR_EFFECT_STRIKETHROUGH,
899 wxTEXT_ATTR_EFFECT_SUPERSCRIPT and wxTEXT_ATTR_EFFECT_SUBSCRIPT are implemented.
901 wxTEXT_ATTR_EFFECT_CAPITALS capitalises text when displayed (leaving the case
902 of the actual buffer text unchanged), and wxTEXT_ATTR_EFFECT_STRIKETHROUGH draws
905 To set effects, you should also pass wxTEXT_ATTR_EFFECTS to SetFlags(), and call
906 SetTextEffectFlags() with the styles (taken from the above set) that you
907 are interested in setting.
909 void SetTextEffects(int effects
);
912 Sets the URL for the content. Sets the wxTEXT_ATTR_URL style; content with this
913 style causes wxRichTextCtrl to show a hand cursor over it, and wxRichTextCtrl
914 generates a wxTextUrlEvent when the content is clicked.
916 void SetURL(const wxString
& url
);
922 Assignment from a wxTextAttr object.
924 void operator=(const wxTextAttr
& attr
);
931 A text control allows text to be displayed and edited.
933 It may be single line or multi-line. Notice that a lot of methods of the
934 text controls are found in the base wxTextEntry class which is a common
935 base class for wxTextCtrl and other controls using a single line text entry
936 field (e.g. wxComboBox).
939 @style{wxTE_PROCESS_ENTER}
940 The control will generate the event @c wxEVT_TEXT_ENTER
941 (otherwise pressing Enter key is either processed internally by the
942 control or used for navigation between dialog controls).
943 @style{wxTE_PROCESS_TAB}
944 The control will receive @c wxEVT_CHAR events for TAB pressed -
945 normally, TAB is used for passing to the next control in a dialog
946 instead. For the control created with this style, you can still use
947 Ctrl-Enter to pass to the next control from the keyboard.
948 @style{wxTE_MULTILINE}
949 The text control allows multiple lines. If this style is not
950 specified, line break characters should not be used in the controls
952 @style{wxTE_PASSWORD}
953 The text will be echoed as asterisks.
954 @style{wxTE_READONLY}
955 The text will not be user-editable.
957 Use rich text control under Win32, this allows to have more than
958 64KB of text in the control even under Win9x. This style is ignored
959 under other platforms.
961 Use rich text control version 2.0 or 3.0 under Win32, this style is
962 ignored under other platforms
963 @style{wxTE_AUTO_URL}
964 Highlight the URLs and generate the wxTextUrlEvents when mouse
965 events occur over them. This style is only supported for wxTE_RICH
966 Win32 and multi-line wxGTK2 text controls.
967 @style{wxTE_NOHIDESEL}
968 By default, the Windows text control doesn't show the selection
969 when it doesn't have focus - use this style to force it to always
970 show it. It doesn't do anything under other platforms.
972 A horizontal scrollbar will be created and used, so that text won't
973 be wrapped. No effect under wxGTK1.
974 @style{wxTE_NO_VSCROLL}
975 For multiline controls only: vertical scrollbar will never be
976 created. This limits the amount of text which can be entered into
977 the control to what can be displayed in it under MSW but not under
978 GTK2. Currently not implemented for the other platforms.
980 The text in the control will be left-justified (default).
982 The text in the control will be centered (currently wxMSW and
985 The text in the control will be right-justified (currently wxMSW
987 @style{wxTE_DONTWRAP}
988 Same as wxHSCROLL style: don't wrap at all, show horizontal
990 @style{wxTE_CHARWRAP}
991 Wrap the lines too long to be shown entirely at any position
992 (wxUniv and wxGTK2 only).
993 @style{wxTE_WORDWRAP}
994 Wrap the lines too long to be shown entirely at word boundaries
995 (wxUniv and wxGTK2 only).
996 @style{wxTE_BESTWRAP}
997 Wrap the lines at word boundaries or at any other character if
998 there are words longer than the window width (this is the default).
999 @style{wxTE_CAPITALIZE}
1000 On PocketPC and Smartphone, causes the first letter to be
1004 Note that alignment styles (wxTE_LEFT, wxTE_CENTRE and wxTE_RIGHT) can be
1005 changed dynamically after control creation on wxMSW and wxGTK. wxTE_READONLY,
1006 wxTE_PASSWORD and wrapping styles can be dynamically changed under wxGTK but
1007 not wxMSW. The other styles can be only set during control creation.
1010 @section textctrl_text_format wxTextCtrl Text Format
1012 The multiline text controls always store the text as a sequence of lines
1013 separated by @c '\\n' characters, i.e. in the Unix text format even on
1014 non-Unix platforms. This allows the user code to ignore the differences
1015 between the platforms but at a price: the indices in the control such as
1016 those returned by GetInsertionPoint() or GetSelection() can @b not be used
1017 as indices into the string returned by GetValue() as they're going to be
1018 slightly off for platforms using @c "\\r\\n" as separator (as Windows
1021 Instead, if you need to obtain a substring between the 2 indices obtained
1022 from the control with the help of the functions mentioned above, you should
1023 use GetRange(). And the indices themselves can only be passed to other
1024 methods, for example SetInsertionPoint() or SetSelection().
1026 To summarize: never use the indices returned by (multiline) wxTextCtrl as
1027 indices into the string it contains, but only as arguments to be passed
1028 back to the other wxTextCtrl methods. This problem doesn't arise for
1029 single-line platforms however where the indices in the control do
1030 correspond to the positions in the value string.
1033 @section textctrl_styles wxTextCtrl Styles.
1035 Multi-line text controls support styling, i.e. provide a possibility to set
1036 colours and font for individual characters in it (note that under Windows
1037 @c wxTE_RICH style is required for style support). To use the styles you
1038 can either call SetDefaultStyle() before inserting the text or call
1039 SetStyle() later to change the style of the text already in the control
1040 (the first solution is much more efficient).
1042 In either case, if the style doesn't specify some of the attributes (for
1043 example you only want to set the text colour but without changing the font
1044 nor the text background), the values of the default style will be used for
1045 them. If there is no default style, the attributes of the text control
1048 So the following code correctly describes what it does: the second call to
1049 SetDefaultStyle() doesn't change the text foreground colour (which stays
1050 red) while the last one doesn't change the background colour (which stays
1054 text->SetDefaultStyle(wxTextAttr(*wxRED));
1055 text->AppendText("Red text\n");
1056 text->SetDefaultStyle(wxTextAttr(wxNullColour, *wxLIGHT_GREY));
1057 text->AppendText("Red on grey text\n");
1058 text->SetDefaultStyle(wxTextAttr(*wxBLUE);
1059 text->AppendText("Blue on grey text\n");
1063 @section textctrl_cpp_streams wxTextCtrl and C++ Streams
1065 This class multiply-inherits from @c std::streambuf (except for some really
1066 old compilers using non-standard iostream library), allowing code such as
1070 wxTextCtrl *control = new wxTextCtrl(...);
1072 ostream stream(control)
1074 stream << 123.456 << " some text\n";
1078 Note that even if your compiler doesn't support this (the symbol
1079 @c wxHAS_TEXT_WINDOW_STREAM has value of 0 then) you can still use
1080 wxTextCtrl itself in a stream-like manner:
1083 wxTextCtrl *control = new wxTextCtrl(...);
1085 *control << 123.456 << " some text\n";
1088 However the possibility to create an ostream associated with wxTextCtrl may
1089 be useful if you need to redirect the output of a function taking an
1090 ostream as parameter to a text control.
1092 Another commonly requested need is to redirect @c std::cout to the text
1093 control. This may be done in the following way:
1098 wxTextCtrl *control = new wxTextCtrl(...);
1100 std::streambuf *sbOld = std::cout.rdbuf();
1101 std::cout.rdbuf(control);
1103 // use cout as usual, the output appears in the text control
1106 std::cout.rdbuf(sbOld);
1109 But wxWidgets provides a convenient class to make it even simpler so
1110 instead you may just do
1115 wxTextCtrl *control = new wxTextCtrl(...);
1117 wxStreamToTextRedirector redirect(control);
1119 // all output to cout goes into the text control until the exit from
1123 See wxStreamToTextRedirector for more details.
1126 @section textctrl_event_handling Event Handling.
1128 The following commands are processed by default event handlers in
1129 wxTextCtrl: @c wxID_CUT, @c wxID_COPY, @c wxID_PASTE, @c wxID_UNDO, @c
1130 wxID_REDO. The associated UI update events are also processed
1131 automatically, when the control has the focus.
1133 @beginEventEmissionTable{wxCommandEvent}
1134 @event{EVT_TEXT(id, func)}
1135 Respond to a @c wxEVT_TEXT event, generated when the text
1136 changes. Notice that this event will be sent when the text controls
1137 contents changes -- whether this is due to user input or comes from the
1138 program itself (for example, if wxTextCtrl::SetValue() is called); see
1139 wxTextCtrl::ChangeValue() for a function which does not send this event.
1140 This event is however not sent during the control creation.
1141 @event{EVT_TEXT_ENTER(id, func)}
1142 Respond to a @c wxEVT_TEXT_ENTER event, generated when enter is
1143 pressed in a text control which must have wxTE_PROCESS_ENTER style for
1144 this event to be generated.
1145 @event{EVT_TEXT_URL(id, func)}
1146 A mouse event occurred over an URL in the text control (wxMSW and
1147 wxGTK2 only currently).
1148 @event{EVT_TEXT_MAXLEN(id, func)}
1149 This event is generated when the user tries to enter more text into the
1150 control than the limit set by wxTextCtrl::SetMaxLength(), see its description.
1155 @appearance{textctrl}
1157 @see wxTextCtrl::Create, wxValidator
1159 class wxTextCtrl
: public wxControl
,
1169 Constructor, creating and showing a text control.
1172 Parent window. Should not be @NULL.
1174 Control identifier. A value of -1 denotes a default value.
1178 Text control position.
1182 Window style. See wxTextCtrl.
1189 The horizontal scrollbar (wxHSCROLL style flag) will only be
1190 created for multi-line text controls. Without a horizontal
1191 scrollbar, text lines that don't fit in the control's size will be
1192 wrapped (but no newline character is inserted).
1193 Single line controls don't have a horizontal scrollbar, the text is
1194 automatically scrolled so that the insertion point is always visible.
1196 @see Create(), wxValidator
1198 wxTextCtrl(wxWindow
* parent
, wxWindowID id
,
1199 const wxString
& value
= wxEmptyString
,
1200 const wxPoint
& pos
= wxDefaultPosition
,
1201 const wxSize
& size
= wxDefaultSize
,
1203 const wxValidator
& validator
= wxDefaultValidator
,
1204 const wxString
& name
= wxTextCtrlNameStr
);
1207 Destructor, destroying the text control.
1209 virtual ~wxTextCtrl();
1212 Creates the text control for two-step construction.
1214 This method should be called if the default constructor was used for
1215 the control creation. Its parameters have the same meaning as for the
1216 non-default constructor.
1218 bool Create(wxWindow
* parent
, wxWindowID id
,
1219 const wxString
& value
= wxEmptyString
,
1220 const wxPoint
& pos
= wxDefaultPosition
,
1221 const wxSize
& size
= wxDefaultSize
, long style
= 0,
1222 const wxValidator
& validator
= wxDefaultValidator
,
1223 const wxString
& name
= wxTextCtrlNameStr
);
1226 Resets the internal modified flag as if the current changes had been
1229 virtual void DiscardEdits();
1232 This function inserts into the control the character which would have
1233 been inserted if the given key event had occurred in the text control.
1235 The @a event object should be the same as the one passed to @c EVT_KEY_DOWN
1236 handler previously by wxWidgets. Please note that this function doesn't
1237 currently work correctly for all keys under any platform but MSW.
1240 @true if the event resulted in a change to the control, @false otherwise.
1242 virtual bool EmulateKeyPress(const wxKeyEvent
& event
);
1245 Returns the style currently used for the new text.
1247 @see SetDefaultStyle()
1249 virtual const wxTextAttr
& GetDefaultStyle() const;
1252 Gets the length of the specified line, not including any trailing
1253 newline character(s).
1256 Line number (starting from zero).
1259 The length of the line, or -1 if @a lineNo was invalid.
1261 virtual int GetLineLength(long lineNo
) const;
1264 Returns the contents of a given line in the text control, not including
1265 any trailing newline character(s).
1268 The line number, starting from zero.
1271 The contents of the line.
1273 virtual wxString
GetLineText(long lineNo
) const;
1276 Returns the number of lines in the text control buffer.
1278 The returned number is the number of logical lines, i.e. just the count
1279 of the number of newline characters in the control + 1, for wxGTK and
1280 wxOSX/Cocoa ports while it is the number of physical lines, i.e. the
1281 count of lines actually shown in the control, in wxMSW and wxOSX/Carbon.
1282 Because of this discrepancy, it is not recommended to use this function.
1285 Note that even empty text controls have one line (where the
1286 insertion point is), so GetNumberOfLines() never returns 0.
1288 virtual int GetNumberOfLines() const;
1291 Returns the style at this position in the text control.
1293 Not all platforms support this function.
1296 @true on success, @false if an error occurred (this may also mean
1297 that the styles are not supported under this platform).
1299 @see SetStyle(), wxTextAttr
1301 virtual bool GetStyle(long position
, wxTextAttr
& style
);
1305 This function finds the character at the specified position expressed
1308 The two overloads of this method allow to find either the position of
1309 the character, as an index into the text control contents, or its row
1312 If the return code is not @c wxTE_HT_UNKNOWN the row and column of the
1313 character closest to this position are returned, otherwise the output
1314 parameters are not modified.
1316 Please note that this function is currently only implemented in wxUniv,
1317 wxMSW and wxGTK2 ports and always returns @c wxTE_HT_UNKNOWN in the
1321 In wxPerl this function takes only the @a pt argument and
1322 returns a 3-element list (result, col, row).
1326 The position of the point to check, in window device coordinates.
1328 Receives the column of the character at the given position. May be
1331 Receives the row of the character at the given position. May be
1334 Receives the position of the character at the given position. May
1337 @see PositionToXY(), XYToPosition()
1339 wxTextCtrlHitTestResult
HitTest(const wxPoint
& pt
, long *pos
) const;
1340 wxTextCtrlHitTestResult
HitTest(const wxPoint
& pt
,
1342 wxTextCoord
*row
) const;
1346 Returns @true if the text has been modified by user.
1348 Note that calling SetValue() doesn't make the control modified.
1352 virtual bool IsModified() const;
1355 Returns @true if this is a multi line edit control and @false otherwise.
1359 bool IsMultiLine() const;
1362 Returns @true if this is a single line edit control and @false otherwise.
1364 @see IsSingleLine(), IsMultiLine()
1366 bool IsSingleLine() const;
1369 Loads and displays the named file, if it exists.
1372 The filename of the file to load.
1374 The type of file to load. This is currently ignored in wxTextCtrl.
1377 @true if successful, @false otherwise.
1379 bool LoadFile(const wxString
& filename
,
1380 int fileType
= wxTEXT_TYPE_ANY
);
1383 Mark text as modified (dirty).
1387 virtual void MarkDirty();
1390 This event handler function implements default drag and drop behaviour,
1391 which is to load the first dropped file into the control.
1394 The drop files event.
1396 @remarks This is not implemented on non-Windows platforms.
1398 @see wxDropFilesEvent
1400 void OnDropFiles(wxDropFilesEvent
& event
);
1403 Converts given position to a zero-based column, line number pair.
1408 Receives zero based column number.
1410 Receives zero based line number.
1413 @true on success, @false on failure (most likely due to a too large
1414 position parameter).
1417 In wxPerl this function takes only the @a pos argument and
1418 returns a 2-element list (x, y).
1423 virtual bool PositionToXY(long pos
, long* x
, long* y
) const;
1426 Converts given text position to client coordinates in pixels.
1428 This function allows to find where is the character at the given
1429 position displayed in the text control.
1431 @onlyfor{wxmsw,wxgtk}. Additionally, wxGTK only implements this method
1432 for multiline controls and ::wxDefaultPosition is always returned for
1433 the single line ones.
1436 Text position in 0 to GetLastPosition() range (inclusive).
1438 On success returns a wxPoint which contains client coordinates for
1439 the given position in pixels, otherwise returns ::wxDefaultPosition.
1443 @see XYToPosition(), PositionToXY()
1445 wxPoint
PositionToCoords(long pos
) const;
1448 Saves the contents of the control in a text file.
1451 The name of the file in which to save the text.
1453 The type of file to save. This is currently ignored in wxTextCtrl.
1456 @true if the operation was successful, @false otherwise.
1458 bool SaveFile(const wxString
& filename
= wxEmptyString
,
1459 int fileType
= wxTEXT_TYPE_ANY
);
1462 Changes the default style to use for the new text which is going to be
1463 added to the control using WriteText() or AppendText().
1465 If either of the font, foreground, or background colour is not set in
1466 @a style, the values of the previous default style are used for them.
1467 If the previous default style didn't set them neither, the global font
1468 or colours of the text control itself are used as fall back.
1470 However if the @a style parameter is the default wxTextAttr, then the default
1471 style is just reset (instead of being combined with the new style which
1472 wouldn't change it at all).
1475 The style for the new text.
1478 @true on success, @false if an error occurred (this may also mean
1479 that the styles are not supported under this platform).
1481 @see GetDefaultStyle()
1483 virtual bool SetDefaultStyle(const wxTextAttr
& style
);
1486 Marks the control as being modified by the user or not.
1488 @see MarkDirty(), DiscardEdits()
1490 void SetModified(bool modified
);
1493 Changes the style of the given range.
1495 If any attribute within @a style is not set, the corresponding
1496 attribute from GetDefaultStyle() is used.
1499 The start of the range to change.
1501 The end of the range to change.
1503 The new style for the range.
1506 @true on success, @false if an error occurred (this may also mean
1507 that the styles are not supported under this platform).
1509 @see GetStyle(), wxTextAttr
1511 virtual bool SetStyle(long start
, long end
, const wxTextAttr
& style
);
1514 Makes the line containing the given position visible.
1517 The position that should be visible.
1519 virtual void ShowPosition(long pos
);
1522 Converts the given zero based column and line number to a position.
1530 The position value, or -1 if x or y was invalid.
1532 virtual long XYToPosition(long x
, long y
) const;
1536 Operator definitions for appending to a text control.
1538 These operators can be used as with the standard C++ streams, for
1541 wxTextCtrl *wnd = new wxTextCtrl(my_frame);
1543 (*wnd) << "Welcome to text control number " << 1 << ".\n";
1547 wxTextCtrl
& operator<<(const wxString
& s
);
1548 wxTextCtrl
& operator<<(int i
);
1549 wxTextCtrl
& operator<<(long i
);
1550 wxTextCtrl
& operator<<(float f
);
1551 wxTextCtrl
& operator<<(double d
);
1552 wxTextCtrl
& operator<<(char c
);
1553 wxTextCtrl
& operator<<(wchar_t c
);
1559 wxEventType wxEVT_TEXT
;
1560 wxEventType wxEVT_TEXT_ENTER
;
1561 wxEventType wxEVT_TEXT_URL
;
1562 wxEventType wxEVT_TEXT_MAXLEN
;
1565 class wxTextUrlEvent
: public wxCommandEvent
1568 wxTextUrlEvent(int winid
, const wxMouseEvent
& evtMouse
,
1569 long start
, long end
);
1571 wxTextUrlEvent(const wxTextUrlEvent
& event
);
1573 // get the mouse event which happened over the URL
1574 const wxMouseEvent
& GetMouseEvent() const;
1576 // get the start of the URL
1577 long GetURLStart() const;
1579 // get the end of the URL
1580 long GetURLEnd() const;
1582 virtual wxEvent
*Clone() const;
1587 @class wxStreamToTextRedirector
1589 This class can be used to (temporarily) redirect all output sent to a C++
1590 ostream object to a wxTextCtrl instead.
1593 Some compilers and/or build configurations don't support multiply
1594 inheriting wxTextCtrl from @c std::streambuf in which case this class is
1596 You also must have @c wxUSE_STD_IOSTREAM option on (i.e. set to 1) in your
1597 @c setup.h to be able to use it. Under Unix, specify @c --enable-std_iostreams
1598 switch when running configure for this.
1603 using namespace std;
1604 wxTextCtrl* text = new wxTextCtrl(...);
1606 wxStreamToTextRedirector redirect(text);
1608 // this goes to the text control
1609 cout << "Hello, text!" << endl;
1611 // this goes somewhere else, presumably to stdout
1612 cout << "Hello, console!" << endl;
1620 class wxStreamToTextRedirector
1624 The constructor starts redirecting output sent to @a ostr or @a cout for
1625 the default parameter value to the text control @a text.
1628 The text control to append output too, must be non-@NULL
1630 The C++ stream to redirect, cout is used if it is @NULL
1632 wxStreamToTextRedirector(wxTextCtrl
*text
, ostream
* ostr
);
1635 When a wxStreamToTextRedirector object is destroyed, the redirection is ended
1636 and any output sent to the C++ ostream which had been specified at the time of
1637 the object construction will go to its original destination.
1639 ~wxStreamToTextRedirector();