From 5f35b46aabdab414602d27bb92034c371bc09d2e Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Sat, 1 Jul 2006 20:30:58 +0000 Subject: [PATCH] First cut at wxRichTextCtrl documentation Put wxTextAttr into separate file to allow correct ordering git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39924 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/latex/wx/category.tex | 2 + docs/latex/wx/classes.tex | 17 + docs/latex/wx/dcclipper.tex | 1 - docs/latex/wx/richtextattr.tex | 640 +++++++++ docs/latex/wx/richtextbuffer.tex | 573 ++++++++ .../wx/richtextcharacterstyledefinition.tex | 27 + docs/latex/wx/richtextctrl.bmp | Bin 0 -> 351054 bytes docs/latex/wx/richtextctrl.gif | Bin 0 -> 60502 bytes docs/latex/wx/richtextctrl.tex | 1205 +++++++++++++++++ docs/latex/wx/richtextevent.tex | 70 + docs/latex/wx/richtextfilehandler.tex | 130 ++ docs/latex/wx/richtexthtmlhandler.tex | 27 + docs/latex/wx/richtextoverview.tex | 34 + .../wx/richtextparagraphstyledefinition.tex | 39 + docs/latex/wx/richtextrange.tex | 122 ++ docs/latex/wx/richtextstyledefinition.tex | 72 + docs/latex/wx/richtextstylelistbox.tex | 96 ++ docs/latex/wx/richtextstylesheet.tex | 104 ++ docs/latex/wx/richtextxmlhandler.tex | 104 ++ docs/latex/wx/text.tex | 254 ---- docs/latex/wx/textattr.tex | 252 ++++ docs/latex/wx/textattrex.tex | 333 +++++ docs/latex/wx/topics.tex | 1 + 23 files changed, 3848 insertions(+), 255 deletions(-) create mode 100644 docs/latex/wx/richtextattr.tex create mode 100644 docs/latex/wx/richtextbuffer.tex create mode 100644 docs/latex/wx/richtextcharacterstyledefinition.tex create mode 100644 docs/latex/wx/richtextctrl.bmp create mode 100644 docs/latex/wx/richtextctrl.gif create mode 100644 docs/latex/wx/richtextctrl.tex create mode 100644 docs/latex/wx/richtextevent.tex create mode 100644 docs/latex/wx/richtextfilehandler.tex create mode 100644 docs/latex/wx/richtexthtmlhandler.tex create mode 100644 docs/latex/wx/richtextoverview.tex create mode 100644 docs/latex/wx/richtextparagraphstyledefinition.tex create mode 100644 docs/latex/wx/richtextrange.tex create mode 100644 docs/latex/wx/richtextstyledefinition.tex create mode 100644 docs/latex/wx/richtextstylelistbox.tex create mode 100644 docs/latex/wx/richtextstylesheet.tex create mode 100644 docs/latex/wx/richtextxmlhandler.tex create mode 100644 docs/latex/wx/textattr.tex create mode 100644 docs/latex/wx/textattrex.tex diff --git a/docs/latex/wx/category.tex b/docs/latex/wx/category.tex index f7a2271ebb..4c095c6535 100644 --- a/docs/latex/wx/category.tex +++ b/docs/latex/wx/category.tex @@ -103,6 +103,7 @@ that are not static can have \helpref{validators}{wxvalidator} associated with t \twocolitem{\helpref{wxListCtrl}{wxlistctrl}}{A control for displaying lists of strings and/or icons, plus a multicolumn report view} \twocolitem{\helpref{wxListView}{wxlistview}}{A simpler interface ({\it fa\c{c}ade} for wxListCtrl in report mode} \twocolitem{\helpref{wxOwnerDrawnComboBox}{wxownerdrawncombobox}}{A combobox with owner-drawn list items} +\twocolitem{\helpref{wxRichTextCtrl}{wxrichtextctrl}}{Generic rich text editing control} \twocolitem{\helpref{wxTextCtrl}{wxtextctrl}}{Single or multiline text editing control} \twocolitem{\helpref{wxTreeCtrl}{wxtreectrl}}{Tree (hierarchy) control} \twocolitem{\helpref{wxScrollBar}{wxscrollbar}}{Scrollbar control} @@ -263,6 +264,7 @@ An event object contains information about a specific event. Event handlers \twocolitem{\helpref{wxPaintEvent}{wxpaintevent}}{A paint event} \twocolitem{\helpref{wxProcessEvent}{wxprocessevent}}{A process ending event} \twocolitem{\helpref{wxQueryLayoutInfoEvent}{wxquerylayoutinfoevent}}{Used to query layout information} +\twocolitem{\helpref{wxRichTextEvent}{wxrichtextevent}}{A rich text editing event} \twocolitem{\helpref{wxScrollEvent}{wxscrollevent}}{A scroll event from sliders, stand-alone scrollbars and spin buttons} \twocolitem{\helpref{wxScrollWinEvent}{wxscrollwinevent}}{A scroll event from scrolled windows} \twocolitem{\helpref{wxSizeEvent}{wxsizeevent}}{A size event} diff --git a/docs/latex/wx/classes.tex b/docs/latex/wx/classes.tex index 94fe59bc49..30138b1fb6 100644 --- a/docs/latex/wx/classes.tex +++ b/docs/latex/wx/classes.tex @@ -285,6 +285,21 @@ \input regkey.tex \input renderer.tex \input rendver.tex + +\input richtextattr.tex +\input richtextbuffer.tex +\input richtextcharacterstyledefinition.tex +\input richtextctrl.tex +\input richtextevent.tex +\input richtextfilehandler.tex +\input richtexthtmlhandler.tex +\input richtextparagraphstyledefinition.tex +\input richtextrange.tex +\input richtextstyledefinition.tex +\input richtextstylelistbox.tex +\input richtextstylesheet.tex +\input richtextxmlhandler.tex + \input sashevt.tex \input sashlayw.tex \input sashwin.tex @@ -346,6 +361,8 @@ \input tcpservr.tex \input tempfile.tex \input tempfilestrm.tex +\input textattr.tex +\input textattrex.tex \input text.tex \input txtdatob.tex \input txtdrptg.tex diff --git a/docs/latex/wx/dcclipper.tex b/docs/latex/wx/dcclipper.tex index e5dfdce39e..9c43cf2a10 100644 --- a/docs/latex/wx/dcclipper.tex +++ b/docs/latex/wx/dcclipper.tex @@ -60,4 +60,3 @@ and size (\arg{w} ad \arg{h}). The clipping region is automatically unset when this object is destroyed. - diff --git a/docs/latex/wx/richtextattr.tex b/docs/latex/wx/richtextattr.tex new file mode 100644 index 0000000000..dad254d20c --- /dev/null +++ b/docs/latex/wx/richtextattr.tex @@ -0,0 +1,640 @@ +\section{\class{wxRichTextAttr}}\label{wxrichtextattr} + +wxRichTextAttr represents the character and paragraph attributes, or style, +for a range of text in a \helpref{wxRichTextCtrl}{wxrichtextctrl}. This class +is specific to wxRichTextCtrl, although you can also use the +standard \helpref{wxTextAttr}{wxtextattr} class with wxRichTextCtrl. + +When setting up a wxRichTextAttr object, pass a bitlist mask to \helpref{SetFlags}{wxrichtextattrsetflags} to +indicate which style elements should be changed. As a convenience, when you call a setter such +s SetFont, the relevant bit will be set. + +wxRichTextAttr stores attributes without a wxFont object, so is a much more +efficient way to query styles than using a \helpref{wxTextAttr}{wxtextattr} or \helpref{wxTextAttrEx}{wxtextattrex} object. + +\wxheading{Derived from} + +No base class + +\wxheading{Include files} + + + +\wxheading{Constants} + +The following values can be passed to SetAlignment to determine +paragraph alignment. + +{\small +\begin{verbatim} +enum wxTextAttrAlignment +{ + wxTEXT_ALIGNMENT_DEFAULT, + wxTEXT_ALIGNMENT_LEFT, + wxTEXT_ALIGNMENT_CENTRE, + wxTEXT_ALIGNMENT_CENTER = wxTEXT_ALIGNMENT_CENTRE, + wxTEXT_ALIGNMENT_RIGHT, + wxTEXT_ALIGNMENT_JUSTIFIED +}; +\end{verbatim} +} + +These values are passed in a bitlist to SetFlags to determine +what attributes will be considered when setting the attributes +for a text control. + +{\small +\begin{verbatim} +// Standard wxTextAttr constants + +#define wxTEXT_ATTR_TEXT_COLOUR 0x0001 +#define wxTEXT_ATTR_BACKGROUND_COLOUR 0x0002 +#define wxTEXT_ATTR_FONT_FACE 0x0004 +#define wxTEXT_ATTR_FONT_SIZE 0x0008 +#define wxTEXT_ATTR_FONT_WEIGHT 0x0010 +#define wxTEXT_ATTR_FONT_ITALIC 0x0020 +#define wxTEXT_ATTR_FONT_UNDERLINE 0x0040 +#define wxTEXT_ATTR_FONT \ + wxTEXT_ATTR_FONT_FACE | wxTEXT_ATTR_FONT_SIZE | wxTEXT_ATTR_FONT_WEIGHT \ +| wxTEXT_ATTR_FONT_ITALIC | wxTEXT_ATTR_FONT_UNDERLINE +#define wxTEXT_ATTR_ALIGNMENT 0x0080 +#define wxTEXT_ATTR_LEFT_INDENT 0x0100 +#define wxTEXT_ATTR_RIGHT_INDENT 0x0200 +#define wxTEXT_ATTR_TABS 0x0400 + +// Extra formatting flags not in wxTextAttr + +#define wxTEXT_ATTR_PARA_SPACING_AFTER 0x00000800 +#define wxTEXT_ATTR_PARA_SPACING_BEFORE 0x00001000 +#define wxTEXT_ATTR_LINE_SPACING 0x00002000 +#define wxTEXT_ATTR_CHARACTER_STYLE_NAME 0x00004000 +#define wxTEXT_ATTR_PARAGRAPH_STYLE_NAME 0x00008000 +#define wxTEXT_ATTR_BULLET_STYLE 0x00010000 +#define wxTEXT_ATTR_BULLET_NUMBER 0x00020000 +#define wxTEXT_ATTR_BULLET_SYMBOL 0x00040000 +\end{verbatim} +} + +The following styles can be passed to wxRichTextAttr::SetBulletStyle: + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_BULLET_STYLE_NONE 0x0000 +#define wxTEXT_ATTR_BULLET_STYLE_ARABIC 0x0001 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER 0x0002 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER 0x0004 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER 0x0008 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER 0x0010 +#define wxTEXT_ATTR_BULLET_STYLE_SYMBOL 0x0020 +#define wxTEXT_ATTR_BULLET_STYLE_BITMAP 0x0040 +#define wxTEXT_ATTR_BULLET_STYLE_PARENTHESES 0x0080 +#define wxTEXT_ATTR_BULLET_STYLE_PERIOD 0x0100 +\end{verbatim} +} + +The following constants can be passed to wxRichTextAttr::SetLineSpacing: + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_LINE_SPACING_NORMAL 10 +#define wxTEXT_ATTR_LINE_SPACING_HALF 15 +#define wxTEXT_ATTR_LINE_SPACING_TWICE 20 +\end{verbatim} +} + +\wxheading{See also} + +\helpref{wxTextAttr}{wxtextattr}, \helpref{wxTextAttrEx}{wxtextattrex}, \helpref{wxRichTextCtrl}{wxrichtextctrl} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextAttr::wxRichTextAttr}\label{wxrichtextattrwxrichtextattr} + +\func{}{wxRichTextAttr}{\void} + +\func{}{wxRichTextAttr}{\param{const wxColour\& }{colText}, \param{const wxColour\& }{colBack = wxNullColour}, \param{wxTextAttrAlignment }{alignment = wxTEXT\_ALIGNMENT\_DEFAULT}} + +\func{}{wxRichTextAttr}{\param{const wxTextAttrEx\& }{attr}} + +Constructors. + +\membersection{wxRichTextAttr::CopyTo}\label{wxrichtextattrcopyto} + +\constfunc{void}{CopyTo}{\param{wxTextAttrEx\& }{attr}} + +Copies the wxRichTextAttr attributes to a \helpref{wxTextAttrEx}{wxtextattrex} object. + +\membersection{wxRichTextAttr::CreateFont}\label{wxrichtextattrcreatefont} + +\constfunc{wxFont}{CreateFont}{\void} + +Creates a font from the font attributes. + +\membersection{wxRichTextAttr::GetAlignment}\label{wxrichtextattrgetalignment} + +\constfunc{wxTextAttrAlignment}{GetAlignment}{\void} + +Returns the alignment flags. +See \helpref{wxRichTextAttr::SetAlignment}{wxrichtextattrsetalignment} for a list of available styles. + +\membersection{wxRichTextAttr::GetBackgroundColour}\label{wxrichtextattrgetbackgroundcolour} + +\constfunc{const wxColour\&}{GetBackgroundColour}{\void} + +Returns the background colour. + +\membersection{wxRichTextAttr::GetBulletNumber}\label{wxrichtextattrgetbulletnumber} + +\constfunc{int}{GetBulletNumber}{\void} + +Returns the bullet number. + +\membersection{wxRichTextAttr::GetBulletStyle}\label{wxrichtextattrgetbulletstyle} + +\constfunc{int}{GetBulletStyle}{\void} + +Returns the bullet style. +See \helpref{wxRichTextAttr::SetBulletStyle}{wxrichtextattrsetbulletstyle} for a list of available styles. + +\membersection{wxRichTextAttr::GetBulletSymbol}\label{wxrichtextattrgetbulletsymbol} + +\constfunc{wxChar}{GetBulletSymbol}{\void} + +Returns the bullet symbol, a character. + +\membersection{wxRichTextAttr::GetCharacterStyleName}\label{wxrichtextattrgetcharacterstylename} + +\constfunc{const wxString\&}{GetCharacterStyleName}{\void} + +Returns the name of the character style. + +\membersection{wxRichTextAttr::GetFlags}\label{wxrichtextattrgetflags} + +\constfunc{long}{GetFlags}{\void} + +Returns flags indicating which attributes are applicable. +See \helpref{wxRichTextAttr::SetFlags}{wxrichtextattrsetflags} for a list of available flags. + +\membersection{wxRichTextAttr::GetFontAttributes}\label{wxrichtextattrgetfontattributes} + +\func{bool}{GetFontAttributes}{\param{const wxFont\& }{font}} + +Sets the font attributes from the given font. + +\membersection{wxRichTextAttr::GetFontFaceName}\label{wxrichtextattrgetfontfacename} + +\constfunc{const wxString\&}{GetFontFaceName}{\void} + +Returns the font face name. + +\membersection{wxRichTextAttr::GetFontSize}\label{wxrichtextattrgetfontsize} + +\constfunc{int}{GetFontSize}{\void} + +Returns the font size in points. + +\membersection{wxRichTextAttr::GetFontStyle}\label{wxrichtextattrgetfontstyle} + +\constfunc{int}{GetFontStyle}{\void} + +Returns the font style. + +\membersection{wxRichTextAttr::GetFontUnderlined}\label{wxrichtextattrgetfontunderlined} + +\constfunc{bool}{GetFontUnderlined}{\void} + +Returns \true if the font is underlined. + +\membersection{wxRichTextAttr::GetFontWeight}\label{wxrichtextattrgetfontweight} + +\constfunc{int}{GetFontWeight}{\void} + +Returns the font weight. + +\membersection{wxRichTextAttr::GetLeftIndent}\label{wxrichtextattrgetleftindent} + +\constfunc{long}{GetLeftIndent}{\void} + +Returns the left indent in tenths of a millimetre. + +\membersection{wxRichTextAttr::GetLeftSubIndent}\label{wxrichtextattrgetleftsubindent} + +\constfunc{long}{GetLeftSubIndent}{\void} + +Returns the left sub-indent in tenths of a millimetre. + +\membersection{wxRichTextAttr::GetLineSpacing}\label{wxrichtextattrgetlinespacing} + +\constfunc{int}{GetLineSpacing}{\void} + +Returns the line spacing value, one of wxTEXT\_ATTR\_LINE\_SPACING\_NORMAL, +wxTEXT\_ATTR\_LINE\_SPACING\_HALF, and wxTEXT\_ATTR\_LINE\_SPACING\_TWICE. + +\membersection{wxRichTextAttr::GetParagraphSpacingAfter}\label{wxrichtextattrgetparagraphspacingafter} + +\constfunc{int}{GetParagraphSpacingAfter}{\void} + +Returns the space in tenths of a millimeter after the paragraph. + +\membersection{wxRichTextAttr::GetParagraphSpacingBefore}\label{wxrichtextattrgetparagraphspacingbefore} + +\constfunc{int}{GetParagraphSpacingBefore}{\void} + +Returns the space in tenths of a millimeter before the paragraph. + +\membersection{wxRichTextAttr::GetParagraphStyleName}\label{wxrichtextattrgetparagraphstylename} + +\constfunc{const wxString\&}{GetParagraphStyleName}{\void} + +Returns the name of the paragraph style. + +\membersection{wxRichTextAttr::GetRightIndent}\label{wxrichtextattrgetrightindent} + +\constfunc{long}{GetRightIndent}{\void} + +Returns the right indent in tenths of a millimeter. + +\membersection{wxRichTextAttr::GetTabs}\label{wxrichtextattrgettabs} + +\constfunc{const wxArrayInt\&}{GetTabs}{\void} + +Returns an array of tab stops, each expressed in tenths of a millimeter. Each stop +is measured from the left margin and therefore each value must be larger than the last. + +\membersection{wxRichTextAttr::GetTextColour}\label{wxrichtextattrgettextcolour} + +\constfunc{const wxColour\&}{GetTextColour}{\void} + +Returns the text foreground colour. + +\membersection{wxRichTextAttr::HasAlignment}\label{wxrichtextattrhasalignment} + +\constfunc{bool}{HasAlignment}{\void} + +Returns \true if the attribute object specifies alignment. + +\membersection{wxRichTextAttr::HasBackgroundColour}\label{wxrichtextattrhasbackgroundcolour} + +\constfunc{bool}{HasBackgroundColour}{\void} + +Returns \true if the attribute object specifies a background colour. + +\membersection{wxRichTextAttr::HasBulletNumber}\label{wxrichtextattrhasbulletnumber} + +\constfunc{bool}{HasBulletNumber}{\void} + +Returns \true if the attribute object specifies a bullet number. + +\membersection{wxRichTextAttr::HasBulletStyle}\label{wxrichtextattrhasbulletstyle} + +\constfunc{bool}{HasBulletStyle}{\void} + +Returns \true if the attribute object specifies a bullet style. + +\membersection{wxRichTextAttr::HasBulletSymbol}\label{wxrichtextattrhasbulletsymbol} + +\constfunc{bool}{HasBulletSymbol}{\void} + +Returns \true if the attribute object specifies a bullet symbol. + +\membersection{wxRichTextAttr::HasCharacterStyleName}\label{wxrichtextattrhascharacterstylename} + +\constfunc{bool}{HasCharacterStyleName}{\void} + +Returns \true if the attribute object specifies a character style name. + +\membersection{wxRichTextAttr::HasFaceName}\label{wxrichtextattrhasfacename} + +\constfunc{bool}{HasFaceName}{\void} + +Returns \true if the attribute object specifies a font face name. + +\membersection{wxRichTextAttr::HasFlag}\label{wxrichtextattrhasflag} + +\constfunc{bool}{HasFlag}{\param{long }{flag}} + +Returns \true if the {\it flag} is present in the attribute object's flag bitlist. + +\membersection{wxRichTextAttr::HasFont}\label{wxrichtextattrhasfont} + +\constfunc{bool}{HasFont}{\void} + +Returns \true if the attribute object specifies any font attributes. + +\membersection{wxRichTextAttr::HasItalic}\label{wxrichtextattrhasitalic} + +\constfunc{bool}{HasItalic}{\void} + +Returns \true if the attribute object specifies italic style. + +\membersection{wxRichTextAttr::HasLeftIndent}\label{wxrichtextattrhasleftindent} + +\constfunc{bool}{HasLeftIndent}{\void} + +Returns \true if the attribute object specifies a left indent. + +\membersection{wxRichTextAttr::HasLineSpacing}\label{wxrichtextattrhaslinespacing} + +\constfunc{bool}{HasLineSpacing}{\void} + +Returns \true if the attribute object specifies line spacing. + +\membersection{wxRichTextAttr::HasParagraphSpacingAfter}\label{wxrichtextattrhasparagraphspacingafter} + +\constfunc{bool}{HasParagraphSpacingAfter}{\void} + +Returns \true if the attribute object specifies spacing after a paragraph. + +\membersection{wxRichTextAttr::HasParagraphSpacingBefore}\label{wxrichtextattrhasparagraphspacingbefore} + +\constfunc{bool}{HasParagraphSpacingBefore}{\void} + +Returns \true if the attribute object specifies spacing before a paragraph. + +\membersection{wxRichTextAttr::HasParagraphStyleName}\label{wxrichtextattrhasparagraphstylename} + +\constfunc{bool}{HasParagraphStyleName}{\void} + +Returns \true if the attribute object specifies a paragraph style name. + +\membersection{wxRichTextAttr::HasRightIndent}\label{wxrichtextattrhasrightindent} + +\constfunc{bool}{HasRightIndent}{\void} + +Returns \true if the attribute object specifies a right indent. + +\membersection{wxRichTextAttr::HasSize}\label{wxrichtextattrhassize} + +\constfunc{bool}{HasSize}{\void} + +Returns \true if the attribute object specifies a font point size. + +\membersection{wxRichTextAttr::HasTabs}\label{wxrichtextattrhastabs} + +\constfunc{bool}{HasTabs}{\void} + +Returns \true if the attribute object specifies tab stops. + +\membersection{wxRichTextAttr::HasTextColour}\label{wxrichtextattrhastextcolour} + +\constfunc{bool}{HasTextColour}{\void} + +Returns \true if the attribute object specifies a text foreground colour. + +\membersection{wxRichTextAttr::HasUnderlined}\label{wxrichtextattrhasunderlined} + +\constfunc{bool}{HasUnderlined}{\void} + +Returns \true if the attribute object specifies either underlining or no underlining. + +\membersection{wxRichTextAttr::HasWeight}\label{wxrichtextattrhasweight} + +\constfunc{bool}{HasWeight}{\void} + +Returns \true if the attribute object specifies font weight (bold, light or normal). + +\membersection{wxRichTextAttr::Init}\label{wxrichtextattrinit} + +\func{void}{Init}{\void} + +Initialise the object. + +\membersection{wxRichTextAttr::IsCharacterStyle}\label{wxrichtextattrischaracterstyle} + +\constfunc{bool}{IsCharacterStyle}{\void} + +Returns \true if the object represents a character style, that is, +the flags specify a font or a text background or foreground colour. + +\membersection{wxRichTextAttr::IsDefault}\label{wxrichtextattrisdefault} + +\constfunc{bool}{IsDefault}{\void} + +Returns \false if we have any attributes set, \true otherwise. + +\membersection{wxRichTextAttr::IsParagraphStyle}\label{wxrichtextattrisparagraphstyle} + +\constfunc{bool}{IsParagraphStyle}{\void} + +Returns \true if the object represents a paragraph style, that is, +the flags specify alignment, indentation, tabs, paragraph spacing, or +bullet style. + +\membersection{wxRichTextAttr::SetAlignment}\label{wxrichtextattrsetalignment} + +\func{void}{SetAlignment}{\param{wxTextAttrAlignment }{alignment}} + +Sets the paragraph alignment. These are the possible values for {\it alignment}: + +{\small +\begin{verbatim} +enum wxTextAttrAlignment +{ + wxTEXT_ALIGNMENT_DEFAULT, + wxTEXT_ALIGNMENT_LEFT, + wxTEXT_ALIGNMENT_CENTRE, + wxTEXT_ALIGNMENT_CENTER = wxTEXT_ALIGNMENT_CENTRE, + wxTEXT_ALIGNMENT_RIGHT, + wxTEXT_ALIGNMENT_JUSTIFIED +}; +\end{verbatim} +} + +\membersection{wxRichTextAttr::SetBackgroundColour}\label{wxrichtextattrsetbackgroundcolour} + +\func{void}{SetBackgroundColour}{\param{const wxColour\& }{colBack}} + +Sets the background colour. + +\membersection{wxRichTextAttr::SetBulletNumber}\label{wxrichtextattrsetbulletnumber} + +\func{void}{SetBulletNumber}{\param{int }{n}} + +Sets the bullet number. + +\membersection{wxRichTextAttr::SetBulletStyle}\label{wxrichtextattrsetbulletstyle} + +\func{void}{SetBulletStyle}{\param{int }{style}} + +Sets the bullet style. The following styles can be passed: + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_BULLET_STYLE_NONE 0x0000 +#define wxTEXT_ATTR_BULLET_STYLE_ARABIC 0x0001 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER 0x0002 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER 0x0004 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER 0x0008 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER 0x0010 +#define wxTEXT_ATTR_BULLET_STYLE_SYMBOL 0x0020 +#define wxTEXT_ATTR_BULLET_STYLE_BITMAP 0x0040 +#define wxTEXT_ATTR_BULLET_STYLE_PARENTHESES 0x0080 +#define wxTEXT_ATTR_BULLET_STYLE_PERIOD 0x0100 +\end{verbatim} +} + +\membersection{wxRichTextAttr::SetBulletSymbol}\label{wxrichtextattrsetbulletsymbol} + +\func{void}{SetBulletSymbol}{\param{wxChar }{symbol}} + +Sets the paragraph symbol. + +\membersection{wxRichTextAttr::SetCharacterStyleName}\label{wxrichtextattrsetcharacterstylename} + +\func{void}{SetCharacterStyleName}{\param{const wxString\& }{name}} + +Sets the character style name. + +\membersection{wxRichTextAttr::SetFlags}\label{wxrichtextattrsetflags} + +\func{void}{SetFlags}{\param{long }{flags}} + +Sets the flags determining which styles are being specified. The following +flags can be passed in a bitlist: + +{\small +\begin{verbatim} +// Standard wxTextAttr constants + +#define wxTEXT_ATTR_TEXT_COLOUR 0x0001 +#define wxTEXT_ATTR_BACKGROUND_COLOUR 0x0002 +#define wxTEXT_ATTR_FONT_FACE 0x0004 +#define wxTEXT_ATTR_FONT_SIZE 0x0008 +#define wxTEXT_ATTR_FONT_WEIGHT 0x0010 +#define wxTEXT_ATTR_FONT_ITALIC 0x0020 +#define wxTEXT_ATTR_FONT_UNDERLINE 0x0040 +#define wxTEXT_ATTR_FONT \ + wxTEXT_ATTR_FONT_FACE | wxTEXT_ATTR_FONT_SIZE | wxTEXT_ATTR_FONT_WEIGHT \ +| wxTEXT_ATTR_FONT_ITALIC | wxTEXT_ATTR_FONT_UNDERLINE +#define wxTEXT_ATTR_ALIGNMENT 0x0080 +#define wxTEXT_ATTR_LEFT_INDENT 0x0100 +#define wxTEXT_ATTR_RIGHT_INDENT 0x0200 +#define wxTEXT_ATTR_TABS 0x0400 + +// Extra formatting flags not in wxTextAttr + +#define wxTEXT_ATTR_PARA_SPACING_AFTER 0x00000800 +#define wxTEXT_ATTR_PARA_SPACING_BEFORE 0x00001000 +#define wxTEXT_ATTR_LINE_SPACING 0x00002000 +#define wxTEXT_ATTR_CHARACTER_STYLE_NAME 0x00004000 +#define wxTEXT_ATTR_PARAGRAPH_STYLE_NAME 0x00008000 +#define wxTEXT_ATTR_BULLET_STYLE 0x00010000 +#define wxTEXT_ATTR_BULLET_NUMBER 0x00020000 +#define wxTEXT_ATTR_BULLET_SYMBOL 0x00040000 +\end{verbatim} +} + +\membersection{wxRichTextAttr::SetFontFaceName}\label{wxrichtextattrsetfontfacename} + +\func{void}{SetFontFaceName}{\param{const wxString\& }{faceName}} + +Sets the paragraph alignment. + +\membersection{wxRichTextAttr::SetFontSize}\label{wxrichtextattrsetfontsize} + +\func{void}{SetFontSize}{\param{int }{pointSize}} + +Sets the font size in points. + +\membersection{wxRichTextAttr::SetFontStyle}\label{wxrichtextattrsetfontstyle} + +\func{void}{SetFontStyle}{\param{int }{fontStyle}} + +Sets the font style (normal, italic or slanted). + +\membersection{wxRichTextAttr::SetFontUnderlined}\label{wxrichtextattrsetfontunderlined} + +\func{void}{SetFontUnderlined}{\param{bool }{underlined}} + +Sets the font underlining. + +\membersection{wxRichTextAttr::SetFontWeight}\label{wxrichtextattrsetfontweight} + +\func{void}{SetFontWeight}{\param{int }{fontWeight}} + +Sets the font weight. + +\membersection{wxRichTextAttr::SetLeftIndent}\label{wxrichtextattrsetleftindent} + +\func{void}{SetLeftIndent}{\param{int }{indent}, \param{int }{subIndent = 0}} + +Sets the left indent and left subindent in tenths of a millimetre. + +The sub-indent is an offset from the left of the paragraph, and is used for all but the +first line in a paragraph. A positive value will cause the first line to appear to the left +of the subsequent lines, and a negative value will cause the first line to be indented +relative to the subsequent lines. + +wxRichTextBuffer uses indentation to render a bulleted item. The left indent is the distance between +the margin and the bullet. The content of the paragraph, including the first line, starts +at leftMargin + leftSubIndent. So the distance between the left edge of the bullet and the +left of the actual paragraph is leftSubIndent. + +\membersection{wxRichTextAttr::SetLineSpacing}\label{wxrichtextattrsetlinespacing} + +\func{void}{SetLineSpacing}{\param{int }{spacing}} + +Sets the line spacing. {\it spacing} is a multiple, where 10 means single-spacing, +15 means 1.5 spacing, and 20 means double spacing. The following constants are +defined for convenience: + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_LINE_SPACING_NORMAL 10 +#define wxTEXT_ATTR_LINE_SPACING_HALF 15 +#define wxTEXT_ATTR_LINE_SPACING_TWICE 20 +\end{verbatim} +} + +\membersection{wxRichTextAttr::SetParagraphSpacingAfter}\label{wxrichtextattrsetparagraphspacingafter} + +\func{void}{SetParagraphSpacingAfter}{\param{int }{spacing}} + +Sets the spacing after a paragraph, in tenths of a millimetre. + +\membersection{wxRichTextAttr::SetParagraphSpacingBefore}\label{wxrichtextattrsetparagraphspacingbefore} + +\func{void}{SetParagraphSpacingBefore}{\param{int }{spacing}} + +Sets the spacing before a paragraph, in tenths of a millimetre. + +\membersection{wxRichTextAttr::SetParagraphStyleName}\label{wxrichtextattrsetparagraphstylename} + +\func{void}{SetParagraphStyleName}{\param{const wxString\& }{name}} + +Sets the name of the paragraph style. + +\membersection{wxRichTextAttr::SetRightIndent}\label{wxrichtextattrsetrightindent} + +\func{void}{SetRightIndent}{\param{int }{indent}} + +Sets the right indent in tenths of a millimetre. + +\membersection{wxRichTextAttr::SetTabs}\label{wxrichtextattrsettabs} + +\func{void}{SetTabs}{\param{const wxArrayInt\& }{tabs}} + +Sets the tab stops, expressed in tenths of a millimetre. +Each stop is measured from the left margin and therefore each value must be larger than the last. + +\membersection{wxRichTextAttr::SetTextColour}\label{wxrichtextattrsettextcolour} + +\func{void}{SetTextColour}{\param{const wxColour\& }{colText}} + +Sets the text foreground colout. + +\membersection{wxRichTextAttr::operator=}\label{wxrichtextattroperatorassign} + +\func{void operator}{operator=}{\param{const wxTextAttrEx\& }{attr}} + +Assignment from a \helpref{wxTextAttrEx}{wxtextattr} object. + +\func{void operator}{operator=}{\param{const wxRichTextAttr\& }{attr}} + +Assignment from a \helpref{wxRichTextAttr}{wxrichtextattr} object. + +\membersection{wxRichTextAttr::wxTextAttrEx}\label{wxrichtextattrwxtextattrex} + +\constfunc{operator}{wxTextAttrEx}{\void} + +Makes a \helpref{wxTextAttrEx}{wxtextattrex} object from this object. diff --git a/docs/latex/wx/richtextbuffer.tex b/docs/latex/wx/richtextbuffer.tex new file mode 100644 index 0000000000..bcefb8c2f7 --- /dev/null +++ b/docs/latex/wx/richtextbuffer.tex @@ -0,0 +1,573 @@ +\section{\class{wxRichTextBuffer}}\label{wxrichtextbuffer} + +This class represents the whole buffer associated with a \helpref{wxRichTextCtrl}{wxrichtextctrl}. + +\wxheading{Derived from} + +wxRichTextParagraphLayoutBox + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\wxheading{See also} + +\helpref{wxTextAttr}{wxtextattr}, \helpref{wxTextAttrEx}{wxtextattrex}, \helpref{wxRichTextAttr}{wxrichtextattr}, \helpref{wxRichTextCtrl}{wxrichtextctrl} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextBuffer::wxRichTextBuffer}\label{wxrichtextbufferwxrichtextbuffer} + +\func{}{wxRichTextBuffer}{\param{const wxRichTextBuffer\& }{obj}} + +Copy constructor. + +\func{}{wxRichTextBuffer}{\void} + +Default constructors. + +\membersection{wxRichTextBuffer::\destruct{wxRichTextBuffer}}\label{wxrichtextbufferdtor} + +\func{}{\destruct{wxRichTextBuffer}}{\void} + +Destructor. + +\membersection{wxRichTextBuffer::AddHandler}\label{wxrichtextbufferaddhandler} + +\func{void}{AddHandler}{\param{wxRichTextFileHandler* }{handler}} + +Adds a file handler. + +\membersection{wxRichTextBuffer::AddParagraph}\label{wxrichtextbufferaddparagraph} + +\func{wxRichTextRange}{AddParagraph}{\param{const wxString\& }{text}} + +Adds a paragraph of text. + +\membersection{wxRichTextBuffer::BatchingUndo}\label{wxrichtextbufferbatchingundo} + +\constfunc{bool}{BatchingUndo}{\void} + +Returns \true if the buffer is currently collapsing commands into a single notional command. + +\membersection{wxRichTextBuffer::BeginAlignment}\label{wxrichtextbufferbeginalignment} + +\func{bool}{BeginAlignment}{\param{wxTextAttrAlignment }{alignment}} + +Begins using alignment. + +\membersection{wxRichTextBuffer::BeginBatchUndo}\label{wxrichtextbufferbeginbatchundo} + +\func{bool}{BeginBatchUndo}{\param{const wxString\& }{cmdName}} + +Begins collapsing undo/redo commands. Note that this may not work properly +if combining commands that delete or insert content, changing ranges for +subsequent actions. + +{\it cmdName} should be the name of the combined command that will appear +next to Undo and Redo in the edit menu. + +\membersection{wxRichTextBuffer::BeginBold}\label{wxrichtextbufferbeginbold} + +\func{bool}{BeginBold}{\void} + +Begin applying bold. + +\membersection{wxRichTextBuffer::BeginCharacterStyle}\label{wxrichtextbufferbegincharacterstyle} + +\func{bool}{BeginCharacterStyle}{\param{const wxString\& }{characterStyle}} + +Begins applying the named character style. + +\membersection{wxRichTextBuffer::BeginFont}\label{wxrichtextbufferbeginfont} + +\func{bool}{BeginFont}{\param{const wxFont\& }{font}} + +Begins using this font. + +\membersection{wxRichTextBuffer::BeginFontSize}\label{wxrichtextbufferbeginfontsize} + +\func{bool}{BeginFontSize}{\param{int }{pointSize}} + +Begins using the given point size. + +\membersection{wxRichTextBuffer::BeginItalic}\label{wxrichtextbufferbeginitalic} + +\func{bool}{BeginItalic}{\void} + +Begins using italic. + +\membersection{wxRichTextBuffer::BeginLeftIndent}\label{wxrichtextbufferbeginleftindent} + +\func{bool}{BeginLeftIndent}{\param{int }{leftIndent}, \param{int }{leftSubIndent = 0}} + +Begin using {\it leftIndent} for the left indent, and optionally {\it leftSubIndent} for +the sub-indent. Both are expressed in tenths of a millimetre. + +The sub-indent is an offset from the left of the paragraph, and is used for all but the +first line in a paragraph. A positive value will cause the first line to appear to the left +of the subsequent lines, and a negative value will cause the first line to be indented +relative to the subsequent lines. + +\membersection{wxRichTextBuffer::BeginLineSpacing}\label{wxrichtextbufferbeginlinespacing} + +\func{bool}{BeginLineSpacing}{\param{int }{lineSpacing}} + +Begins line spacing using the specified value. {\it spacing} is a multiple, where 10 means single-spacing, +15 means 1.5 spacing, and 20 means double spacing. The following constants are +defined for convenience: + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_LINE_SPACING_NORMAL 10 +#define wxTEXT_ATTR_LINE_SPACING_HALF 15 +#define wxTEXT_ATTR_LINE_SPACING_TWICE 20 +\end{verbatim} +} + +\membersection{wxRichTextBuffer::BeginNumberedBullet}\label{wxrichtextbufferbeginnumberedbullet} + +\func{bool}{BeginNumberedBullet}{\param{int }{bulletNumber}, \param{int }{leftIndent}, \param{int }{leftSubIndent}, \param{int }{bulletStyle = wxTEXT\_ATTR\_BULLET\_STYLE\_ARABIC|wxTEXT\_ATTR\_BULLET\_STYLE\_PERIOD}} + +Begins a numbered bullet. This call will be needed for each item in the list, and the +application should take care of incrementing the numbering. + +{\it bulletNumber} is a number, usually starting with 1. + +{\it leftIndent} and {\it leftSubIndent} are values in tenths of a millimetre. + +{\it bulletStyle} is a bitlist of the following values: + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_BULLET_STYLE_NONE 0x0000 +#define wxTEXT_ATTR_BULLET_STYLE_ARABIC 0x0001 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER 0x0002 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER 0x0004 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER 0x0008 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER 0x0010 +#define wxTEXT_ATTR_BULLET_STYLE_SYMBOL 0x0020 +#define wxTEXT_ATTR_BULLET_STYLE_BITMAP 0x0040 +#define wxTEXT_ATTR_BULLET_STYLE_PARENTHESES 0x0080 +#define wxTEXT_ATTR_BULLET_STYLE_PERIOD 0x0100 +\end{verbatim} +} + +wxRichTextBuffer uses indentation to render a bulleted item. The left indent is the distance between +the margin and the bullet. The content of the paragraph, including the first line, starts +at leftMargin + leftSubIndent. So the distance between the left edge of the bullet and the +left of the actual paragraph is leftSubIndent. + +\membersection{wxRichTextBuffer::BeginParagraphSpacing}\label{wxrichtextbufferbeginparagraphspacing} + +\func{bool}{BeginParagraphSpacing}{\param{int }{before}, \param{int }{after}} + +Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing in tenths of +a millimetre. + +\membersection{wxRichTextBuffer::BeginParagraphStyle}\label{wxrichtextbufferbeginparagraphstyle} + +\func{bool}{BeginParagraphStyle}{\param{const wxString\& }{paragraphStyle}} + +Begins applying the named paragraph style. + +\membersection{wxRichTextBuffer::BeginRightIndent}\label{wxrichtextbufferbeginrightindent} + +\func{bool}{BeginRightIndent}{\param{int }{rightIndent}} + +Begins a right indent, specified in tenths of a millimetre. + +\membersection{wxRichTextBuffer::BeginStyle}\label{wxrichtextbufferbeginstyle} + +\func{bool}{BeginStyle}{\param{const wxTextAttrEx\& }{style}} + +Begins using a specified style. + +\membersection{wxRichTextBuffer::BeginSuppressUndo}\label{wxrichtextbufferbeginsuppressundo} + +\func{bool}{BeginSuppressUndo}{\void} + +Begins suppressing undo/redo commands. The way undo is suppressed may be implemented +differently by each command. If not dealt with by a command implementation, then +it will be implemented automatically by not storing the command in the undo history +when the action is submitted to the command processor. + +\membersection{wxRichTextBuffer::BeginSymbolBullet}\label{wxrichtextbufferbeginsymbolbullet} + +\func{bool}{BeginSymbolBullet}{\param{wxChar }{symbol}, \param{int }{leftIndent}, \param{int }{leftSubIndent}, \param{int }{bulletStyle = wxTEXT\_ATTR\_BULLET\_STYLE\_SYMBOL}} + +Begins applying a symbol bullet, using a character from the current font. See \helpref{BeginNumberedBullet}{wxrichtextbufferbeginnumberedbullet} for +an explanation of how indentation is used to render the bulleted paragraph. + +\membersection{wxRichTextBuffer::BeginTextColour}\label{wxrichtextbufferbegintextcolour} + +\func{bool}{BeginTextColour}{\param{const wxColour\& }{colour}} + +Begins using the specified text foreground colour. + +\membersection{wxRichTextBuffer::BeginUnderline}\label{wxrichtextbufferbeginunderline} + +\func{bool}{BeginUnderline}{\void} + +Begins using underline. + +\membersection{wxRichTextBuffer::CanPasteFromClipboard}\label{wxrichtextbuffercanpastefromclipboard} + +\constfunc{bool}{CanPasteFromClipboard}{\void} + +Returns \true if content can be pasted from the clipboard. + +\membersection{wxRichTextBuffer::CleanUpHandlers}\label{wxrichtextbuffercleanuphandlers} + +\func{void}{CleanUpHandlers}{\void} + +Cleans up the file handlers. + +\membersection{wxRichTextBuffer::Clear}\label{wxrichtextbufferclear} + +\func{void}{Clear}{\void} + +Clears the buffer and resets the command processor. + +\membersection{wxRichTextBuffer::ClearStyleStack}\label{wxrichtextbufferclearstylestack} + +\func{void}{ClearStyleStack}{\void} + +Clears the style stack. + +\membersection{wxRichTextBuffer::Clone}\label{wxrichtextbufferclone} + +\constfunc{wxRichTextObject*}{Clone}{\void} + +Clones the object. + +\membersection{wxRichTextBuffer::Copy}\label{wxrichtextbuffercopy} + +\func{void}{Copy}{\param{const wxRichTextBuffer\& }{obj}} + +Copies the given buffer. + +\membersection{wxRichTextBuffer::CopyToClipboard}\label{wxrichtextbuffercopytoclipboard} + +\func{bool}{CopyToClipboard}{\param{const wxRichTextRange\& }{range}} + +Copy the given range to the clipboard. + +\membersection{wxRichTextBuffer::DeleteRangeWithUndo}\label{wxrichtextbufferdeleterangewithundo} + +\func{bool}{DeleteRangeWithUndo}{\param{const wxRichTextRange\& }{range}, \param{long }{initialCaretPosition}, \param{long }{newCaretPositon}, \param{wxRichTextCtrl* }{ctrl}} + +Submits a command to delete the given range. + +\membersection{wxRichTextBuffer::Dump}\label{wxrichtextbufferdump} + +\func{void}{Dump}{\void} + +\func{void}{Dump}{\param{wxTextOutputStream\& }{stream}} + +Dumps the contents of the buffer for debugging purposes. + +\membersection{wxRichTextBuffer::EndAlignment}\label{wxrichtextbufferendalignment} + +\func{bool}{EndAlignment}{\void} + +Ends alignment. + +\membersection{wxRichTextBuffer::EndAllStyles}\label{wxrichtextbufferendallstyles} + +\func{bool}{EndAllStyles}{\void} + +Ends all styles that have been started with a Begin... command. + +\membersection{wxRichTextBuffer::EndBatchUndo}\label{wxrichtextbufferendbatchundo} + +\func{bool}{EndBatchUndo}{\void} + +Ends collapsing undo/redo commands, and submits the combined command. + +\membersection{wxRichTextBuffer::EndBold}\label{wxrichtextbufferendbold} + +\func{bool}{EndBold}{\void} + +Ends using bold. + +\membersection{wxRichTextBuffer::EndCharacterStyle}\label{wxrichtextbufferendcharacterstyle} + +\func{bool}{EndCharacterStyle}{\void} + +Ends using the named character style. + +\membersection{wxRichTextBuffer::EndFont}\label{wxrichtextbufferendfont} + +\func{bool}{EndFont}{\void} + +Ends using a font. + +\membersection{wxRichTextBuffer::EndFontSize}\label{wxrichtextbufferendfontsize} + +\func{bool}{EndFontSize}{\void} + +Ends using a point size. + +\membersection{wxRichTextBuffer::EndItalic}\label{wxrichtextbufferenditalic} + +\func{bool}{EndItalic}{\void} + +Ends using italic. + +\membersection{wxRichTextBuffer::EndLeftIndent}\label{wxrichtextbufferendleftindent} + +\func{bool}{EndLeftIndent}{\void} + +Ends using a left indent. + +\membersection{wxRichTextBuffer::EndLineSpacing}\label{wxrichtextbufferendlinespacing} + +\func{bool}{EndLineSpacing}{\void} + +Ends using a line spacing. + +\membersection{wxRichTextBuffer::EndNumberedBullet}\label{wxrichtextbufferendnumberedbullet} + +\func{bool}{EndNumberedBullet}{\void} + +Ends a numbered bullet. + +\membersection{wxRichTextBuffer::EndParagraphSpacing}\label{wxrichtextbufferendparagraphspacing} + +\func{bool}{EndParagraphSpacing}{\void} + +Ends paragraph spacing. + +\membersection{wxRichTextBuffer::EndParagraphStyle}\label{wxrichtextbufferendparagraphstyle} + +\func{bool}{EndParagraphStyle}{\void} + +Ends applying a named character style. + +\membersection{wxRichTextBuffer::EndRightIndent}\label{wxrichtextbufferendrightindent} + +\func{bool}{EndRightIndent}{\void} + +Ends using a right indent. + +\membersection{wxRichTextBuffer::EndStyle}\label{wxrichtextbufferendstyle} + +\func{bool}{EndStyle}{\void} + +Ends the current style. + +\membersection{wxRichTextBuffer::EndSuppressUndo}\label{wxrichtextbufferendsuppressundo} + +\func{bool}{EndSuppressUndo}{\void} + +Ends suppressing undo/redo commands. + +\membersection{wxRichTextBuffer::EndSymbolBullet}\label{wxrichtextbufferendsymbolbullet} + +\func{bool}{EndSymbolBullet}{\void} + +Ends using a symbol bullet. + +\membersection{wxRichTextBuffer::EndTextColour}\label{wxrichtextbufferendtextcolour} + +\func{bool}{EndTextColour}{\void} + +Ends using a text foreground colour. + +\membersection{wxRichTextBuffer::EndUnderline}\label{wxrichtextbufferendunderline} + +\func{bool}{EndUnderline}{\void} + +Ends using underline. + +\membersection{wxRichTextBuffer::FindHandler}\label{wxrichtextbufferfindhandler} + +\func{wxRichTextFileHandler*}{FindHandler}{\param{int }{imageType}} + +Finds a handler by type. + +\func{wxRichTextFileHandler*}{FindHandler}{\param{const wxString\& }{extension}, \param{int }{imageType}} + +Finds a handler by extension and type. + +\func{wxRichTextFileHandler*}{FindHandler}{\param{const wxString\& }{name}} + +Finds a handler by name. + +\membersection{wxRichTextBuffer::FindHandlerFilenameOrType}\label{wxrichtextbufferfindhandlerfilenameortype} + +\func{wxRichTextFileHandler*}{FindHandlerFilenameOrType}{\param{const wxString\& }{filename}, \param{int }{imageType}} + +Finds a handler by filename or, if supplied, type. + +\membersection{wxRichTextBuffer::GetBatchedCommand}\label{wxrichtextbuffergetbatchedcommand} + +\constfunc{wxRichTextCommand*}{GetBatchedCommand}{\void} + +Gets the collapsed command. + +\membersection{wxRichTextBuffer::GetCommandProcessor}\label{wxrichtextbuffergetcommandprocessor} + +\constfunc{wxCommandProcessor*}{GetCommandProcessor}{\void} + +Gets the command processor. A text buffer always creates its own command processor when it is +initialized. + +\membersection{wxRichTextBuffer::GetExtWildcard}\label{wxrichtextbuffergetextwildcard} + +\func{wxString}{GetExtWildcard}{\param{bool }{combine = false}, \param{bool }{save = false}, \param{wxArrayInt* }{types = NULL}} + +Gets a wildcard incorporating all visible handlers. If {\it types} is present, +it will be filled with the file type corresponding to each filter. This can be +used to determine the type to pass to \helpref{LoadFile}{wxrichtextbuffergetextwildcard} given a selected filter. + +\membersection{wxRichTextBuffer::GetHandlers}\label{wxrichtextbuffergethandlers} + +\func{wxList\&}{GetHandlers}{\void} + +Returns the list of file handlers. + +\membersection{wxRichTextBuffer::GetStyleSheet}\label{wxrichtextbuffergetstylesheet} + +\constfunc{wxRichTextStyleSheet*}{GetStyleSheet}{\void} + +Returns the current style sheet associated with the buffer, if any. + +\membersection{wxRichTextBuffer::GetStyleStackSize}\label{wxrichtextbuffergetstylestacksize} + +\constfunc{size\_t}{GetStyleStackSize}{\void} + +Get the size of the style stack, for example to check correct nesting. + +\membersection{wxRichTextBuffer::HitTest}\label{wxrichtextbufferhittest} + +\func{int}{HitTest}{\param{wxDC\& }{dc}, \param{const wxPoint\& }{pt}, \param{long\& }{textPosition}} + +Finds the text position for the given position, putting the position in {\it textPosition} if +one is found. {\it pt} is in logical units (a zero y position is +at the beginning of the buffer). + +The function returns one of the following values: + +{\small +\begin{verbatim} +// The point was not on this object +#define wxRICHTEXT_HITTEST_NONE 0x01 +// The point was before the position returned from HitTest +#define wxRICHTEXT_HITTEST_BEFORE 0x02 +// The point was after the position returned from HitTest +#define wxRICHTEXT_HITTEST_AFTER 0x04 +// The point was on the position returned from HitTest +#define wxRICHTEXT_HITTEST_ON 0x08 +\end{verbatim} +} + +\membersection{wxRichTextBuffer::Init}\label{wxrichtextbufferinit} + +\func{void}{Init}{\void} + +Initialisation. + +\membersection{wxRichTextBuffer::InitStandardHandlers}\label{wxrichtextbufferinitstandardhandlers} + +\func{void}{InitStandardHandlers}{\void} + +Initialises the standard handlers. Currently, only the plain text loading/saving handler +is initialised by default. + +\membersection{wxRichTextBuffer::InsertHandler}\label{wxrichtextbufferinserthandler} + +\func{void}{InsertHandler}{\param{wxRichTextFileHandler* }{handler}} + +Inserts a handler at the front of the list. + +\membersection{wxRichTextBuffer::InsertImageWithUndo}\label{wxrichtextbufferinsertimagewithundo} + +\func{bool}{InsertImageWithUndo}{\param{long }{pos}, \param{const wxRichTextImageBlock\& }{imageBlock}, \param{wxRichTextCtrl* }{ctrl}} + +Submits a command to insert the given image. + +\membersection{wxRichTextBuffer::InsertNewlineWithUndo}\label{wxrichtextbufferinsertnewlinewithundo} + +\func{bool}{InsertNewlineWithUndo}{\param{long }{pos}, \param{wxRichTextCtrl* }{ctrl}} + +Submits a command to insert a newline. + +\membersection{wxRichTextBuffer::InsertTextWithUndo}\label{wxrichtextbufferinserttextwithundo} + +\func{bool}{InsertTextWithUndo}{\param{long }{pos}, \param{const wxString\& }{text}, \param{wxRichTextCtrl* }{ctrl}} + +Submits a command to insert the given text. + +\membersection{wxRichTextBuffer::IsModified}\label{wxrichtextbufferismodified} + +\constfunc{bool}{IsModified}{\void} + +Returns \true if the buffer has been modified. + +\membersection{wxRichTextBuffer::LoadFile}\label{wxrichtextbufferloadfile} + +\func{bool}{LoadFile}{\param{wxInputStream\& }{stream}, \param{int }{type = wxRICHTEXT\_TYPE\_ANY}} + +Loads content from a stream. + +\func{bool}{LoadFile}{\param{const wxString\& }{filename}, \param{int }{type = wxRICHTEXT\_TYPE\_ANY}} + +Loads content from a file. + +\membersection{wxRichTextBuffer::Modify}\label{wxrichtextbuffermodify} + +\func{void}{Modify}{\param{bool }{modify = true}} + +Marks the buffer as modified or unmodified. + +\membersection{wxRichTextBuffer::PasteFromClipboard}\label{wxrichtextbufferpastefromclipboard} + +\func{bool}{PasteFromClipboard}{\param{long }{position}} + +Pastes the clipboard content to the buffer at the given position. + +\membersection{wxRichTextBuffer::RemoveHandler}\label{wxrichtextbufferremovehandler} + +\func{bool}{RemoveHandler}{\param{const wxString\& }{name}} + +Removes a handler. + +\membersection{wxRichTextBuffer::Reset}\label{wxrichtextbufferreset} + +\func{void}{Reset}{\void} + +The same as \helpref{Clear}{wxrichtextbufferclear}, plus an empty paragraph is added. + +\membersection{wxRichTextBuffer::SaveFile}\label{wxrichtextbuffersavefile} + +\func{bool}{SaveFile}{\param{wxOutputStream\& }{stream}, \param{int }{type = wxRICHTEXT\_TYPE\_ANY}} + +Saves content to a stream. + +\func{bool}{SaveFile}{\param{const wxString\& }{filename}, \param{int }{type = wxRICHTEXT\_TYPE\_ANY}} + +Saves content to a file. + +\membersection{wxRichTextBuffer::SetStyleSheet}\label{wxrichtextbuffersetstylesheet} + +\func{void}{SetStyleSheet}{\param{wxRichTextStyleSheet* }{styleSheet}} + +Sets the current style sheet, if any. This will allow the application to use +named character and paragraph styles found in the style sheet. + +\membersection{wxRichTextBuffer::SubmitAction}\label{wxrichtextbuffersubmitaction} + +\func{bool}{SubmitAction}{\param{wxRichTextAction* }{action}} + +Submit an action immediately, or delay it according to whether collapsing is on. + +\membersection{wxRichTextBuffer::SuppressingUndo}\label{wxrichtextbuffersuppressingundo} + +\constfunc{bool}{SuppressingUndo}{\void} + +Returns \true if undo suppression is currently on. + diff --git a/docs/latex/wx/richtextcharacterstyledefinition.tex b/docs/latex/wx/richtextcharacterstyledefinition.tex new file mode 100644 index 0000000000..04995f286a --- /dev/null +++ b/docs/latex/wx/richtextcharacterstyledefinition.tex @@ -0,0 +1,27 @@ +\section{\class{wxRichTextCharacterStyleDefinition}}\label{wxrichtextcharacterstyledefinition} + +This class represents a character style definition, usually added to a \helpref{wxRichTextStyleSheet}{wxrichtextstylesheet}. + +\wxheading{Derived from} + +\helpref{wxRichTextStyleDefinition}{wxrichtextstyledefinition} + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextCharacterStyleDefinition::wxRichTextCharacterStyleDefinition}\label{wxrichtextcharacterstyledefinitionwxrichtextcharacterstyledefinition} + +\func{}{wxRichTextCharacterStyleDefinition}{\param{const wxString\& }{name = wxEmptyString}} + +Constructor. + +\membersection{wxRichTextCharacterStyleDefinition::\destruct{wxRichTextCharacterStyleDefinition}}\label{wxrichtextcharacterstyledefinitiondtor} + +\func{}{\destruct{wxRichTextCharacterStyleDefinition}}{\void} + +Destructor. diff --git a/docs/latex/wx/richtextctrl.bmp b/docs/latex/wx/richtextctrl.bmp new file mode 100644 index 0000000000000000000000000000000000000000..29bfb472fc22f3a6d0c012951c644fda31d2d53e GIT binary patch literal 351054 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 literal 0 HcmV?d00001 diff --git a/docs/latex/wx/richtextctrl.gif b/docs/latex/wx/richtextctrl.gif new file mode 100644 index 0000000000000000000000000000000000000000..c900aa5963de2e60794df6e166cefefb8502ef4a GIT binary patch literal 60502 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 DWFaOO literal 0 HcmV?d00001 diff --git a/docs/latex/wx/richtextctrl.tex b/docs/latex/wx/richtextctrl.tex new file mode 100644 index 0000000000..04193110fb --- /dev/null +++ b/docs/latex/wx/richtextctrl.tex @@ -0,0 +1,1205 @@ +\section{\class{wxRichTextCtrl}}\label{wxrichtextctrl} + +wxRichTextCtrl provides a generic, ground-up implementation of a text control +capable of showing multiple styles and images. + +\wxheading{Derived from} + +wxTextCtrlBase + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextCtrl::wxRichTextCtrl}\label{wxrichtextctrlwxrichtextctrl} + +\func{}{wxRichTextCtrl}{\void} + +\func{}{wxRichTextCtrl}{\param{wxWindow* }{parent}, \param{wxWindowID }{id = -1}, \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize}, \param{long }{style = wxRE\_MULTILINE}} + +Constructors. + +\membersection{wxRichTextCtrl::\destruct{wxRichTextCtrl}}\label{wxrichtextctrldtor} + +\func{}{\destruct{wxRichTextCtrl}}{\void} + +Destructor. + +\membersection{wxRichTextCtrl::AddImage}\label{wxrichtextctrladdimage} + +\func{wxRichTextRange}{AddImage}{\param{const wxImage\& }{image}} + +Adds an image to the control's buffer. + +\membersection{wxRichTextCtrl::AddParagraph}\label{wxrichtextctrladdparagraph} + +\func{wxRichTextRange}{AddParagraph}{\param{const wxString\& }{text}} + +Adds a new paragraph of text to the end of the buffer. + +\membersection{wxRichTextCtrl::AppendText}\label{wxrichtextctrlappendtext} + +\func{void}{AppendText}{\param{const wxString\& }{text}} + +Sets the insertion point to the end of the buffer and writes the text. + +\membersection{wxRichTextCtrl::ApplyAlignmentToSelection}\label{wxrichtextctrlapplyalignmenttoselection} + +\func{bool}{ApplyAlignmentToSelection}{\param{wxTextAttrAlignment }{alignment}} + +Applies the given alignment to the selection (undoable). + +For alignment values, see \helpref{wxTextAttrEx}{wxtextattrex}. + +\membersection{wxRichTextCtrl::ApplyBoldToSelection}\label{wxrichtextctrlapplyboldtoselection} + +\func{bool}{ApplyBoldToSelection}{\void} + +Apples bold to the selection (undoable). + +\membersection{wxRichTextCtrl::ApplyItalicToSelection}\label{wxrichtextctrlapplyitalictoselection} + +\func{bool}{ApplyItalicToSelection}{\void} + +Applies italic to the selection (undoable). + +\membersection{wxRichTextCtrl::ApplyUnderlineToSelection}\label{wxrichtextctrlapplyunderlinetoselection} + +\func{bool}{ApplyUnderlineToSelection}{\void} + +Applies underline to the selection (undoable). + +\membersection{wxRichTextCtrl::BatchingUndo}\label{wxrichtextctrlbatchingundo} + +\constfunc{bool}{BatchingUndo}{\void} + +Returns \true if undo commands are being batched. + +\membersection{wxRichTextCtrl::BeginAlignment}\label{wxrichtextctrlbeginalignment} + +\func{bool}{BeginAlignment}{\param{wxTextAttrAlignment }{alignment}} + +Begins using alignment + +For alignment values, see \helpref{wxTextAttrEx}{wxtextattrex}. + +\membersection{wxRichTextCtrl::BeginBatchUndo}\label{wxrichtextctrlbeginbatchundo} + +\func{bool}{BeginBatchUndo}{\param{const wxString\& }{cmdName}} + +Starts batching undo history for commands. + +\membersection{wxRichTextCtrl::BeginBold}\label{wxrichtextctrlbeginbold} + +\func{bool}{BeginBold}{\void} + +Begins using bold. + +\membersection{wxRichTextCtrl::BeginCharacterStyle}\label{wxrichtextctrlbegincharacterstyle} + +\func{bool}{BeginCharacterStyle}{\param{const wxString\& }{characterStyle}} + +Begins using the named character style. + +\membersection{wxRichTextCtrl::BeginFont}\label{wxrichtextctrlbeginfont} + +\func{bool}{BeginFont}{\param{const wxFont\& }{font}} + +Begins using this font. + +\membersection{wxRichTextCtrl::BeginFontSize}\label{wxrichtextctrlbeginfontsize} + +\func{bool}{BeginFontSize}{\param{int }{pointSize}} + +Begins using the given point size. + +\membersection{wxRichTextCtrl::BeginItalic}\label{wxrichtextctrlbeginitalic} + +\func{bool}{BeginItalic}{\void} + +Begins using italic. + +\membersection{wxRichTextCtrl::BeginLeftIndent}\label{wxrichtextctrlbeginleftindent} + +\func{bool}{BeginLeftIndent}{\param{int }{leftIndent}, \param{int }{leftSubIndent = 0}} + +Begins applying a left indent and subindent in tenths of a millimetre. + +The sub-indent is an offset from the left of the paragraph, and is used for all but the +first line in a paragraph. A positive value will cause the first line to appear to the left +of the subsequent lines, and a negative value will cause the first line to be indented +relative to the subsequent lines. + +wxRichTextBuffer uses indentation to render a bulleted item. The left indent is the distance between +the margin and the bullet. The content of the paragraph, including the first line, starts +at leftMargin + leftSubIndent. So the distance between the left edge of the bullet and the +left of the actual paragraph is leftSubIndent. + +\membersection{wxRichTextCtrl::BeginLineSpacing}\label{wxrichtextctrlbeginlinespacing} + +\func{bool}{BeginLineSpacing}{\param{int }{lineSpacing}} + +Begins appling line spacing. {\it spacing} is a multiple, where 10 means single-spacing, +15 means 1.5 spacing, and 20 means double spacing. The following constants are +defined for convenience: + + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_LINE_SPACING_NORMAL 10 +#define wxTEXT_ATTR_LINE_SPACING_HALF 15 +#define wxTEXT_ATTR_LINE_SPACING_TWICE 20 +\end{verbatim} +} + +\membersection{wxRichTextCtrl::BeginNumberedBullet}\label{wxrichtextctrlbeginnumberedbullet} + +\func{bool}{BeginNumberedBullet}{\param{int }{bulletNumber}, \param{int }{leftIndent}, \param{int }{leftSubIndent}, \param{int }{bulletStyle = wxTEXT\_ATTR\_BULLET\_STYLE\_ARABIC|wxTEXT\_ATTR\_BULLET\_STYLE\_PERIOD}} + +Begins a numbered bullet. This call will be needed for each item in the list, and the +application should take care of incrementing the numbering. + +{\it bulletNumber} is a number, usually starting with 1. + +{\it leftIndent} and {\it leftSubIndent} are values in tenths of a millimetre. + +{\it bulletStyle} is a bitlist of the following values: + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_BULLET_STYLE_NONE 0x0000 +#define wxTEXT_ATTR_BULLET_STYLE_ARABIC 0x0001 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER 0x0002 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER 0x0004 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER 0x0008 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER 0x0010 +#define wxTEXT_ATTR_BULLET_STYLE_SYMBOL 0x0020 +#define wxTEXT_ATTR_BULLET_STYLE_BITMAP 0x0040 +#define wxTEXT_ATTR_BULLET_STYLE_PARENTHESES 0x0080 +#define wxTEXT_ATTR_BULLET_STYLE_PERIOD 0x0100 +\end{verbatim} +} + +wxRichTextBuffer uses indentation to render a bulleted item. The left indent is the distance between +the margin and the bullet. The content of the paragraph, including the first line, starts +at leftMargin + leftSubIndent. So the distance between the left edge of the bullet and the +left of the actual paragraph is leftSubIndent. + +\membersection{wxRichTextCtrl::BeginParagraphSpacing}\label{wxrichtextctrlbeginparagraphspacing} + +\func{bool}{BeginParagraphSpacing}{\param{int }{before}, \param{int }{after}} + +Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing in tenths of +a millimetre. + +\membersection{wxRichTextCtrl::BeginParagraphStyle}\label{wxrichtextctrlbeginparagraphstyle} + +\func{bool}{BeginParagraphStyle}{\param{const wxString\& }{paragraphStyle}} + +Begins applying the named paragraph style. + +\membersection{wxRichTextCtrl::BeginRightIndent}\label{wxrichtextctrlbeginrightindent} + +\func{bool}{BeginRightIndent}{\param{int }{rightIndent}} + +Begins a right indent, specified in tenths of a millimetre. + +\membersection{wxRichTextCtrl::BeginStyle}\label{wxrichtextctrlbeginstyle} + +\func{bool}{BeginStyle}{\param{const wxTextAttrEx\& }{style}} + +Begins applying a style. + +\membersection{wxRichTextCtrl::BeginSuppressUndo}\label{wxrichtextctrlbeginsuppressundo} + +\func{bool}{BeginSuppressUndo}{\void} + +Starts suppressing undo history for commands. + +\membersection{wxRichTextCtrl::BeginSymbolBullet}\label{wxrichtextctrlbeginsymbolbullet} + +\func{bool}{BeginSymbolBullet}{\param{wxChar }{symbol}, \param{int }{leftIndent}, \param{int }{leftSubIndent}, \param{int }{bulletStyle = wxTEXT\_ATTR\_BULLET\_STYLE\_SYMBOL}} + +Begins applying a symbol bullet, using a character from the current font. See \helpref{BeginNumberedBullet}{wxrichtextctrlbeginnumberedbullet} for +an explanation of how indentation is used to render the bulleted paragraph. + +\membersection{wxRichTextCtrl::BeginTextColour}\label{wxrichtextctrlbegintextcolour} + +\func{bool}{BeginTextColour}{\param{const wxColour\& }{colour}} + +Begins using this colour. + +\membersection{wxRichTextCtrl::BeginUnderline}\label{wxrichtextctrlbeginunderline} + +\func{bool}{BeginUnderline}{\void} + +Begins using underlining. + +\membersection{wxRichTextCtrl::CanCopy}\label{wxrichtextctrlcancopy} + +\constfunc{bool}{CanCopy}{\void} + +Returns \true if selected content can be copied to the clipboard. + +\membersection{wxRichTextCtrl::CanCut}\label{wxrichtextctrlcancut} + +\constfunc{bool}{CanCut}{\void} + +Returns \true if selected content can be copied to the clipboard and deleted. + +\membersection{wxRichTextCtrl::CanDeleteSelection}\label{wxrichtextctrlcandeleteselection} + +\constfunc{bool}{CanDeleteSelection}{\void} + +Returns \true if selected content can be deleted. + +\membersection{wxRichTextCtrl::CanPaste}\label{wxrichtextctrlcanpaste} + +\constfunc{bool}{CanPaste}{\void} + +Returns \true if the clipboard content can be pasted to the buffer. + +\membersection{wxRichTextCtrl::CanRedo}\label{wxrichtextctrlcanredo} + +\constfunc{bool}{CanRedo}{\void} + +Returns \true if there is a command in the command history that can be redone. + +\membersection{wxRichTextCtrl::CanUndo}\label{wxrichtextctrlcanundo} + +\constfunc{bool}{CanUndo}{\void} + +Returns \true if there is a command in the command history that can be undone. + +\membersection{wxRichTextCtrl::Clear}\label{wxrichtextctrlclear} + +\func{void}{Clear}{\void} + +Clears the buffer content, leaving a single empty paragraph. Cannot be undone. + +\membersection{wxRichTextCtrl::Command}\label{wxrichtextctrlcommand} + +\func{void}{Command}{\param{wxCommandEvent\& }{event}} + +Sends the event to the control. + +\membersection{wxRichTextCtrl::Copy}\label{wxrichtextctrlcopy} + +\func{void}{Copy}{\void} + +Copies the selected content (if any) to the clipboard. + +\membersection{wxRichTextCtrl::Create}\label{wxrichtextctrlcreate} + +\func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID }{id = -1}, \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize}, \param{long }{style = wxRE\_MULTILINE}} + +Creates the underlying window. + +\membersection{wxRichTextCtrl::Cut}\label{wxrichtextctrlcut} + +\func{void}{Cut}{\void} + +Copies the selected content (if any) to the clipboard and deletes the selection. +This is undoable. + +\membersection{wxRichTextCtrl::DeleteSelectedContent}\label{wxrichtextctrldeleteselectedcontent} + +\func{bool}{DeleteSelectedContent}{\param{long* }{newPos = NULL}} + +Deletes content if there is a selection, e.g. when pressing a key. +Returns the new caret position in {\it newPos}, or leaves it if there +was no action. This is undoable. + +\membersection{wxRichTextCtrl::DeleteSelection}\label{wxrichtextctrldeleteselection} + +\func{void}{DeleteSelection}{\void} + +Deletes the content in the selection, if any. This is undoable. + +\membersection{wxRichTextCtrl::DiscardEdits}\label{wxrichtextctrldiscardedits} + +\func{void}{DiscardEdits}{\void} + +Sets the buffer's modified status to \false, and clears the buffer's command history. + +\membersection{wxRichTextCtrl::DoGetBestSize}\label{wxrichtextctrldogetbestsize} + +\constfunc{wxSize}{DoGetBestSize}{\void} + +Currently this simply returns {\tt wxSize(10, 10)}. + +\membersection{wxRichTextCtrl::EndAlignment}\label{wxrichtextctrlendalignment} + +\func{bool}{EndAlignment}{\void} + +Ends alignment. + +\membersection{wxRichTextCtrl::EndAllStyles}\label{wxrichtextctrlendallstyles} + +\func{bool}{EndAllStyles}{\void} + +Ends application of all styles in the current style stack. + +\membersection{wxRichTextCtrl::EndBatchUndo}\label{wxrichtextctrlendbatchundo} + +\func{bool}{EndBatchUndo}{\void} + +Ends batching undo command history. + +\membersection{wxRichTextCtrl::EndBold}\label{wxrichtextctrlendbold} + +\func{bool}{EndBold}{\void} + +Ends using bold. + +\membersection{wxRichTextCtrl::EndCharacterStyle}\label{wxrichtextctrlendcharacterstyle} + +\func{bool}{EndCharacterStyle}{\void} + +Ends application of a named character style. + +\membersection{wxRichTextCtrl::EndFont}\label{wxrichtextctrlendfont} + +\func{bool}{EndFont}{\void} + +Ends using a font. + +\membersection{wxRichTextCtrl::EndFontSize}\label{wxrichtextctrlendfontsize} + +\func{bool}{EndFontSize}{\void} + +Ends using a point size. + +\membersection{wxRichTextCtrl::EndItalic}\label{wxrichtextctrlenditalic} + +\func{bool}{EndItalic}{\void} + +Ends using italic. + +\membersection{wxRichTextCtrl::EndLeftIndent}\label{wxrichtextctrlendleftindent} + +\func{bool}{EndLeftIndent}{\void} + +Ends left indent. + +\membersection{wxRichTextCtrl::EndLineSpacing}\label{wxrichtextctrlendlinespacing} + +\func{bool}{EndLineSpacing}{\void} + +Ends line spacing. + +\membersection{wxRichTextCtrl::EndNumberedBullet}\label{wxrichtextctrlendnumberedbullet} + +\func{bool}{EndNumberedBullet}{\void} + +Ends application of a numbered bullet. + +\membersection{wxRichTextCtrl::EndParagraphSpacing}\label{wxrichtextctrlendparagraphspacing} + +\func{bool}{EndParagraphSpacing}{\void} + +Ends paragraph spacing. + +\membersection{wxRichTextCtrl::EndParagraphStyle}\label{wxrichtextctrlendparagraphstyle} + +\func{bool}{EndParagraphStyle}{\void} + +Ends application of a named character style. + +\membersection{wxRichTextCtrl::EndRightIndent}\label{wxrichtextctrlendrightindent} + +\func{bool}{EndRightIndent}{\void} + +Ends right indent. + +\membersection{wxRichTextCtrl::EndStyle}\label{wxrichtextctrlendstyle} + +\func{bool}{EndStyle}{\void} + +Ends the current style. + +\membersection{wxRichTextCtrl::EndSuppressUndo}\label{wxrichtextctrlendsuppressundo} + +\func{bool}{EndSuppressUndo}{\void} + +Ends suppressing undo command history. + +\membersection{wxRichTextCtrl::EndSymbolBullet}\label{wxrichtextctrlendsymbolbullet} + +\func{bool}{EndSymbolBullet}{\void} + +Ends applying a symbol bullet. + +\membersection{wxRichTextCtrl::EndTextColour}\label{wxrichtextctrlendtextcolour} + +\func{bool}{EndTextColour}{\void} + +Ends applying a text colour. + +\membersection{wxRichTextCtrl::EndUnderline}\label{wxrichtextctrlendunderline} + +\func{bool}{EndUnderline}{\void} + +End applying underlining. + +\membersection{wxRichTextCtrl::ExtendSelection}\label{wxrichtextctrlextendselection} + +\func{bool}{ExtendSelection}{\param{long }{oldPosition}, \param{long }{newPosition}, \param{int }{flags}} + +Helper function for extending the selection, returning \true if the selection was +changed. Selections are in caret positions. + +\membersection{wxRichTextCtrl::FindNextWordPosition}\label{wxrichtextctrlfindnextwordposition} + +\constfunc{long}{FindNextWordPosition}{\param{int }{direction = 1}} + +Helper function for finding the caret position for the next word. Direction +is 1 (forward) or -1 (backwards). + +\membersection{wxRichTextCtrl::Freeze}\label{wxrichtextctrlfreeze} + +\func{void}{Freeze}{\void} + +Call this function to prevent refresh and allow fast updates, and then \helpref{Thaw}{wxrichtextctrlthaw} to +refresh the control. + +\membersection{wxRichTextCtrl::GetBasicStyle}\label{wxrichtextctrlgetbasicstyle} + +\constfunc{const wxTextAttrEx\&}{GetBasicStyle}{\void} + +Gets the basic (overall) style. This is the style of the whole +buffer before further styles are applied, unlike the default style, which +only affects the style currently being applied (for example, setting the default +style to bold will cause subsequently inserted text to be bold). + +\membersection{wxRichTextCtrl::GetBuffer}\label{wxrichtextctrlgetbuffer} + +\constfunc{const wxRichTextBuffer\&}{GetBuffer}{\void} + +\func{wxRichTextBuffer\&}{GetBuffer}{\void} + +Returns the buffer associated with the control. + +\membersection{wxRichTextCtrl::GetCaretPosition}\label{wxrichtextctrlgetcaretposition} + +\constfunc{long}{GetCaretPosition}{\void} + +Returns the current caret position. + +\membersection{wxRichTextCtrl::GetCaretPositionForIndex}\label{wxrichtextctrlgetcaretpositionforindex} + +\func{bool}{GetCaretPositionForIndex}{\param{long }{position}, \param{wxRect\& }{rect}} + +Returns the caret height and position for the given character position + +\membersection{wxRichTextCtrl::GetCommandProcessor}\label{wxrichtextctrlgetcommandprocessor} + +\constfunc{wxCommandProcessor*}{GetCommandProcessor}{\void} + +Gets the command processor associated with the control's buffer. + +\membersection{wxRichTextCtrl::GetDefaultStyleEx}\label{wxrichtextctrlgetdefaultstyleex} + +\constfunc{const wxTextAttrEx\&}{GetDefaultStyleEx}{\void} + +Returns the current default style, which can be used to change how subsequently inserted +text is displayed. When wxTextAttrEx is merged with wxTextAttr, this function +will become GetDefaultStyle. + +\membersection{wxRichTextCtrl::GetDelayedLayoutThreshold}\label{wxrichtextctrlgetdelayedlayoutthreshold} + +\constfunc{long}{GetDelayedLayoutThreshold}{\void} + +Gets the size of the buffer beyond which layout is delayed during resizing. +This optimizes sizing for large buffers. The default is 20000. + +\membersection{wxRichTextCtrl::GetFilename}\label{wxrichtextctrlgetfilename} + +\constfunc{wxString}{GetFilename}{\void} + +Gets the current filename associated with the control. + +\membersection{wxRichTextCtrl::GetFirstVisiblePosition}\label{wxrichtextctrlgetfirstvisibleposition} + +\constfunc{long}{GetFirstVisiblePosition}{\void} + +Returns the first visible position in the current view. + +\membersection{wxRichTextCtrl::GetInsertionPoint}\label{wxrichtextctrlgetinsertionpoint} + +\constfunc{long}{GetInsertionPoint}{\void} + +Returns the current insertion point. + +\membersection{wxRichTextCtrl::GetLastPosition}\label{wxrichtextctrlgetlastposition} + +\constfunc{wxTextPos}{GetLastPosition}{\void} + +Returns the last position in the buffer. + +\membersection{wxRichTextCtrl::GetLineLength}\label{wxrichtextctrlgetlinelength} + +\constfunc{int}{GetLineLength}{\param{long }{lineNo}} + +Returns the length of the specified line in characters. + +\membersection{wxRichTextCtrl::GetLineText}\label{wxrichtextctrlgetlinetext} + +\constfunc{wxString}{GetLineText}{\param{long }{lineNo}} + +Returns the text for the given line. + +\membersection{wxRichTextCtrl::GetLogicalPoint}\label{wxrichtextctrlgetlogicalpoint} + +\constfunc{wxPoint}{GetLogicalPoint}{\param{const wxPoint\& }{ptPhysical}} + +Transforms physical window position to logical (unscrolled) position. + +\membersection{wxRichTextCtrl::GetNumberOfLines}\label{wxrichtextctrlgetnumberoflines} + +\constfunc{int}{GetNumberOfLines}{\void} + +Returns the number of lines in the buffer. + +\membersection{wxRichTextCtrl::GetPhysicalPoint}\label{wxrichtextctrlgetphysicalpoint} + +\constfunc{wxPoint}{GetPhysicalPoint}{\param{const wxPoint\& }{ptLogical}} + +Transforms logical (unscrolled) position to physical window position. + +\membersection{wxRichTextCtrl::GetRange}\label{wxrichtextctrlgetrange} + +\constfunc{wxString}{GetRange}{\param{long }{from}, \param{long }{to}} + +Gets the text for the given range. + +\membersection{wxRichTextCtrl::GetSelection}\label{wxrichtextctrlgetselection} + +\constfunc{void}{GetSelection}{\param{long* }{from}, \param{long* }{to}} + +Returns the range of the current selection. If the return values {\it from} and {\it to} are the same, there is no selection. + +\membersection{wxRichTextCtrl::GetSelectionRange}\label{wxrichtextctrlgetselectionrange} + +\constfunc{const wxRichTextRange\&}{GetSelectionRange}{\void} + +Returns the selection range in character positions. -1, -1 means no selection. + +\membersection{wxRichTextCtrl::GetStringSelection}\label{wxrichtextctrlgetstringselection} + +\constfunc{wxString}{GetStringSelection}{\void} + +Returns the text within the current selection range, if any. + +\membersection{wxRichTextCtrl::GetStyle}\label{wxrichtextctrlgetstyle} + +\constfunc{bool}{GetStyle}{\param{long }{position}, \param{wxRichTextAttr\& }{style}} + +\constfunc{bool}{GetStyle}{\param{long }{position}, \param{wxTextAttrEx\& }{style}} + +Gets the attributes at the given position. The wxRichTextAttr version is generally more efficient +because it does not use wxFont objects. + +\membersection{wxRichTextCtrl::GetStyleSheet}\label{wxrichtextctrlgetstylesheet} + +\constfunc{wxRichTextStyleSheet*}{GetStyleSheet}{\void} + +Returns the style sheet associated with the control, if any. A style sheet allows named +character and paragraph styles to be applied. + +\membersection{wxRichTextCtrl::GetValue}\label{wxrichtextctrlgetvalue} + +\constfunc{wxString}{GetValue}{\void} + +Returns the content of the entire control as a string. + +\membersection{wxRichTextCtrl::GetVisibleLineForCaretPosition}\label{wxrichtextctrlgetvisiblelineforcaretposition} + +\constfunc{wxRichTextLine*}{GetVisibleLineForCaretPosition}{\param{long }{caretPosition}} + +Internal helper function returning the line for the visible caret position. If the caret is +shown at the very end of the line, it means the next character is actually +on the following line. So this function gets the line we're expecting to find +if this is the case. + +\membersection{wxRichTextCtrl::HasCharacterAttributes}\label{wxrichtextctrlhascharacterattributes} + +\constfunc{bool}{HasCharacterAttributes}{\param{const wxRichTextRange\& }{range}, \param{const wxTextAttrEx\& }{style}} + +\constfunc{bool}{HasCharacterAttributes}{\param{const wxRichTextRange\& }{range}, \param{const wxRichTextAttr\& }{style}} + +Test if this whole range has character attributes of the specified kind. If any +of the attributes are different within the range, the test fails. You +can use this to implement, for example, bold button updating. {\it style} must have +flags indicating which attributes are of interest. + +\membersection{wxRichTextCtrl::HasParagraphAttributes}\label{wxrichtextctrlhasparagraphattributes} + +\constfunc{bool}{HasParagraphAttributes}{\param{const wxRichTextRange\& }{range}, \param{const wxTextAttrEx\& }{style}} + +\constfunc{bool}{HasParagraphAttributes}{\param{const wxRichTextRange\& }{range}, \param{const wxRichTextAttr\& }{style}} + +Test if this whole range has paragraph attributes of the specified kind. If any +of the attributes are different within the range, the test fails. You +can use this to implement, for example, centering button updating. {\it style} must have +flags indicating which attributes are of interest. + +\membersection{wxRichTextCtrl::HasSelection}\label{wxrichtextctrlhasselection} + +\constfunc{bool}{HasSelection}{\void} + +Returns \true if there is a selection. + +\membersection{wxRichTextCtrl::HitTest}\label{wxrichtextctrlhittest} + +\constfunc{wxTextCtrlHitTestResult}{HitTest}{\param{const wxPoint\& }{pt}, \param{long* }{pos}} + +\constfunc{wxTextCtrlHitTestResult}{HitTest}{\param{const wxPoint\& }{pt}, \param{wxTextCoord* }{col}, \param{wxTextCoord* }{row}} + +Finds the character at the given position in pixels. + +{\it pt} is in device coords (not adjusted for the client area origin nor for scrolling). + +\membersection{wxRichTextCtrl::Init}\label{wxrichtextctrlinit} + +\func{void}{Init}{\void} + +Initialises the members of the control. + +\membersection{wxRichTextCtrl::InitCommandEvent}\label{wxrichtextctrlinitcommandevent} + +\constfunc{void}{InitCommandEvent}{\param{wxCommandEvent\& }{event}} + +Initialises the command event. + +\membersection{wxRichTextCtrl::IsEditable}\label{wxrichtextctrliseditable} + +\constfunc{bool}{IsEditable}{\void} + +Returns \true if the control is editable. + +\membersection{wxRichTextCtrl::IsFrozen}\label{wxrichtextctrlisfrozen} + +\constfunc{bool}{IsFrozen}{\void} + +Returns \true if Freeze has been called without a Thaw. + +\membersection{wxRichTextCtrl::IsModified}\label{wxrichtextctrlismodified} + +\constfunc{bool}{IsModified}{\void} + +Returns \true if the buffer has been modified. + +\membersection{wxRichTextCtrl::IsMultiLine}\label{wxrichtextctrlismultiline} + +\constfunc{bool}{IsMultiLine}{\void} + +Returns \true if the control is multiline. + +\membersection{wxRichTextCtrl::IsPositionVisible}\label{wxrichtextctrlispositionvisible} + +\constfunc{bool}{IsPositionVisible}{\param{long }{pos}} + +Returns \true if the given position is visible on the screen. + +\membersection{wxRichTextCtrl::IsSelectionAligned}\label{wxrichtextctrlisselectionaligned} + +\constfunc{bool}{IsSelectionAligned}{\param{wxTextAttrAlignment }{alignment}} + +Returns \true if all of the selection is aligned according to the specified flag. + +\membersection{wxRichTextCtrl::IsSelectionBold}\label{wxrichtextctrlisselectionbold} + +\constfunc{bool}{IsSelectionBold}{\void} + +Returns \true if all of the selection is bold. + +\membersection{wxRichTextCtrl::IsSelectionItalics}\label{wxrichtextctrlisselectionitalics} + +\constfunc{bool}{IsSelectionItalics}{\void} + +Returns \true if all of the selection is italic. + +\membersection{wxRichTextCtrl::IsSelectionUnderlined}\label{wxrichtextctrlisselectionunderlined} + +\constfunc{bool}{IsSelectionUnderlined}{\void} + +Returns \true if all of the selection is underlined. + +\membersection{wxRichTextCtrl::IsSingleLine}\label{wxrichtextctrlissingleline} + +\constfunc{bool}{IsSingleLine}{\void} + +Returns \true if the control is single-line. Currently wxRichTextCtrl does not +support single-line editing. + +\membersection{wxRichTextCtrl::KeyboardNavigate}\label{wxrichtextctrlkeyboardnavigate} + +\func{bool}{KeyboardNavigate}{\param{int }{keyCode}, \param{int }{flags}} + +Helper function implementing keyboard navigation. + +\membersection{wxRichTextCtrl::LayoutContent}\label{wxrichtextctrllayoutcontent} + +\func{bool}{LayoutContent}{\param{bool }{onlyVisibleRect = false}} + +Lays out the buffer, which must be done before certain operations, such as +setting the caret position. This function should not normally be required by the +application. + +\membersection{wxRichTextCtrl::LoadFile}\label{wxrichtextctrlloadfile} + +\func{bool}{LoadFile}{\param{const wxString\& }{file}, \param{int }{type = wxRICHTEXT\_TYPE\_ANY}} + +Loads content into the control's buffer using the given type. If the specified type +is wxRICHTEXT\_TYPE\_ANY, the type is deduced from the filename extension. + +This function looks for a suitable \helpref{wxRichTextFileHandler}{wxrichtextfilehandler} object. + +\membersection{wxRichTextCtrl::MarkDirty}\label{wxrichtextctrlmarkdirty} + +\func{void}{MarkDirty}{\void} + +Marks the buffer as modified. + +\membersection{wxRichTextCtrl::MoveCaret}\label{wxrichtextctrlmovecaret} + +\func{bool}{MoveCaret}{\param{long }{pos}, \param{bool }{showAtLineStart = false}} + +Move the caret to the given character position. + +\membersection{wxRichTextCtrl::MoveCaretBack}\label{wxrichtextctrlmovecaretback} + +\func{void}{MoveCaretBack}{\param{long }{oldPosition}} + +Move the caret one visual step forward: this may mean setting a flag +and keeping the same position if we're going from the end of one line +to the start of the next, which may be the exact same caret position. + +\membersection{wxRichTextCtrl::MoveCaretForward}\label{wxrichtextctrlmovecaretforward} + +\func{void}{MoveCaretForward}{\param{long }{oldPosition}} + +Move the caret one visual step forward: this may mean setting a flag +and keeping the same position if we're going from the end of one line +to the start of the next, which may be the exact same caret position. + +\membersection{wxRichTextCtrl::MoveDown}\label{wxrichtextctrlmovedown} + +\func{bool}{MoveDown}{\param{int }{noLines = 1}, \param{int }{flags = 0}} + +Moves the caret down. + +\membersection{wxRichTextCtrl::MoveEnd}\label{wxrichtextctrlmoveend} + +\func{bool}{MoveEnd}{\param{int }{flags = 0}} + +Moves to the end of the buffer. + +\membersection{wxRichTextCtrl::MoveHome}\label{wxrichtextctrlmovehome} + +\func{bool}{MoveHome}{\param{int }{flags = 0}} + +Moves to the start of the buffer. + +\membersection{wxRichTextCtrl::MoveLeft}\label{wxrichtextctrlmoveleft} + +\func{bool}{MoveLeft}{\param{int }{noPositions = 1}, \param{int }{flags = 0}} + +Moves left. + +\membersection{wxRichTextCtrl::MoveRight}\label{wxrichtextctrlmoveright} + +\func{bool}{MoveRight}{\param{int }{noPositions = 1}, \param{int }{flags = 0}} + +Moves right. + +\membersection{wxRichTextCtrl::MoveToLineEnd}\label{wxrichtextctrlmovetolineend} + +\func{bool}{MoveToLineEnd}{\param{int }{flags = 0}} + +Moves to the end of the line. + +\membersection{wxRichTextCtrl::MoveToLineStart}\label{wxrichtextctrlmovetolinestart} + +\func{bool}{MoveToLineStart}{\param{int }{flags = 0}} + +Moves to the start of the line. + +\membersection{wxRichTextCtrl::MoveToParagraphEnd}\label{wxrichtextctrlmovetoparagraphend} + +\func{bool}{MoveToParagraphEnd}{\param{int }{flags = 0}} + +Moves to the end of the paragraph. + +\membersection{wxRichTextCtrl::MoveToParagraphStart}\label{wxrichtextctrlmovetoparagraphstart} + +\func{bool}{MoveToParagraphStart}{\param{int }{flags = 0}} + +Moves to the start of the paragraph. + +\membersection{wxRichTextCtrl::MoveUp}\label{wxrichtextctrlmoveup} + +\func{bool}{MoveUp}{\param{int }{noLines = 1}, \param{int }{flags = 0}} + +Moves up. + +\membersection{wxRichTextCtrl::Newline}\label{wxrichtextctrlnewline} + +\func{bool}{Newline}{\void} + +Insert a newline (actually paragraph) at the current insertion point. + +\membersection{wxRichTextCtrl::OnClear}\label{wxrichtextctrlonclear} + +\func{void}{OnClear}{\param{wxCommandEvent\& }{event}} + +Standard handler for the wxID\_CLEAR command. + +\membersection{wxRichTextCtrl::OnContextMenu}\label{wxrichtextctrloncontextmenu} + +\func{void}{OnContextMenu}{\param{wxContextMenuEvent\& }{event}} + +Shows a standard context menu with undo, redo, cut, copy, paste, clear, and select all commands. + +\membersection{wxRichTextCtrl::OnCopy}\label{wxrichtextctrloncopy} + +\func{void}{OnCopy}{\param{wxCommandEvent\& }{event}} + +Standard handler for the wxID\_COPY command. + +\membersection{wxRichTextCtrl::OnCut}\label{wxrichtextctrloncut} + +\func{void}{OnCut}{\param{wxCommandEvent\& }{event}} + +Standard handler for the wxID\_CUT command. + +\membersection{wxRichTextCtrl::OnDropFiles}\label{wxrichtextctrlondropfiles} + +\func{void}{OnDropFiles}{\param{wxDropFilesEvent\& }{event}} + +Loads the first dropped file. + +\membersection{wxRichTextCtrl::OnPaste}\label{wxrichtextctrlonpaste} + +\func{void}{OnPaste}{\param{wxCommandEvent\& }{event}} + +Standard handler for the wxID\_PASTE command. + +\membersection{wxRichTextCtrl::OnRedo}\label{wxrichtextctrlonredo} + +\func{void}{OnRedo}{\param{wxCommandEvent\& }{event}} + +Standard handler for the wxID\_REDO command. + +\membersection{wxRichTextCtrl::OnSelectAll}\label{wxrichtextctrlonselectall} + +\func{void}{OnSelectAll}{\param{wxCommandEvent\& }{event}} + +Standard handler for the wxID\_SELECTALL command. + +\membersection{wxRichTextCtrl::OnUndo}\label{wxrichtextctrlonundo} + +\func{void}{OnUndo}{\param{wxCommandEvent\& }{event}} + +Standard handler for the wxID\_PASTE command. + +\membersection{wxRichTextCtrl::OnUpdateClear}\label{wxrichtextctrlonupdateclear} + +\func{void}{OnUpdateClear}{\param{wxUpdateUIEvent\& }{event}} + +Standard update handler for the wxID\_CLEAR command. + +\membersection{wxRichTextCtrl::OnUpdateCopy}\label{wxrichtextctrlonupdatecopy} + +\func{void}{OnUpdateCopy}{\param{wxUpdateUIEvent\& }{event}} + +Standard update handler for the wxID\_COPY command. + +\membersection{wxRichTextCtrl::OnUpdateCut}\label{wxrichtextctrlonupdatecut} + +\func{void}{OnUpdateCut}{\param{wxUpdateUIEvent\& }{event}} + +Standard update handler for the wxID\_CUT command. + +\membersection{wxRichTextCtrl::OnUpdatePaste}\label{wxrichtextctrlonupdatepaste} + +\func{void}{OnUpdatePaste}{\param{wxUpdateUIEvent\& }{event}} + +Standard update handler for the wxID\_PASTE command. + +\membersection{wxRichTextCtrl::OnUpdateRedo}\label{wxrichtextctrlonupdateredo} + +\func{void}{OnUpdateRedo}{\param{wxUpdateUIEvent\& }{event}} + +Standard update handler for the wxID\_REDO command. + +\membersection{wxRichTextCtrl::OnUpdateSelectAll}\label{wxrichtextctrlonupdateselectall} + +\func{void}{OnUpdateSelectAll}{\param{wxUpdateUIEvent\& }{event}} + +Standard update handler for the wxID\_SELECTALL command. + +\membersection{wxRichTextCtrl::OnUpdateUndo}\label{wxrichtextctrlonupdateundo} + +\func{void}{OnUpdateUndo}{\param{wxUpdateUIEvent\& }{event}} + +Standard update handler for the wxID\_UNDO command. + +\membersection{wxRichTextCtrl::PageDown}\label{wxrichtextctrlpagedown} + +\func{bool}{PageDown}{\param{int }{noPages = 1}, \param{int }{flags = 0}} + +Moves one or more pages down. + +\membersection{wxRichTextCtrl::PageUp}\label{wxrichtextctrlpageup} + +\func{bool}{PageUp}{\param{int }{noPages = 1}, \param{int }{flags = 0}} + +Moves one or more pages up. + +\membersection{wxRichTextCtrl::PaintBackground}\label{wxrichtextctrlpaintbackground} + +\func{void}{PaintBackground}{\param{wxDC\& }{dc}} + +Paints the background. + +\membersection{wxRichTextCtrl::Paste}\label{wxrichtextctrlpaste} + +\func{void}{Paste}{\void} + +Pastes content from the clipboard to the buffer. + +\membersection{wxRichTextCtrl::PositionCaret}\label{wxrichtextctrlpositioncaret} + +\func{void}{PositionCaret}{\void} + +Internal function to position the visible caret according to the current caret position. + +\membersection{wxRichTextCtrl::PositionToXY}\label{wxrichtextctrlpositiontoxy} + +\constfunc{bool}{PositionToXY}{\param{long }{pos}, \param{long* }{x}, \param{long* }{y}} + +Converts a text position to zero-based column and line numbers. + +\membersection{wxRichTextCtrl::Redo}\label{wxrichtextctrlredo} + +\func{void}{Redo}{\void} + +Redoes the current command. + +\membersection{wxRichTextCtrl::Remove}\label{wxrichtextctrlremove} + +\func{void}{Remove}{\param{long }{from}, \param{long }{to}} + +Removes the content in the specified range. + +\membersection{wxRichTextCtrl::Replace}\label{wxrichtextctrlreplace} + +\func{void}{Replace}{\param{long }{from}, \param{long }{to}, \param{const wxString\& }{value}} + +Replaces the content in the specified range with the string specified by {\it value}. + +\membersection{wxRichTextCtrl::SaveFile}\label{wxrichtextctrlsavefile} + +\func{bool}{SaveFile}{\param{const wxString\& }{file = wxEmptyString}, \param{int }{type = wxRICHTEXT\_TYPE\_ANY}} + +Saves the buffer content using the given type. If the specified type +is wxRICHTEXT\_TYPE\_ANY, the type is deduced from the filename extension. + +This function looks for a suitable \helpref{wxRichTextFileHandler}{wxrichtextfilehandler} object. + +\membersection{wxRichTextCtrl::ScrollIntoView}\label{wxrichtextctrlscrollintoview} + +\func{bool}{ScrollIntoView}{\param{long }{position}, \param{int }{keyCode}} + +Scrolls {\it position} into view. This function takes a caret position. + +\membersection{wxRichTextCtrl::SelectAll}\label{wxrichtextctrlselectall} + +\func{void}{SelectAll}{\void} + +Selects all the text in the buffer. + +\membersection{wxRichTextCtrl::SelectNone}\label{wxrichtextctrlselectnone} + +\func{void}{SelectNone}{\void} + +Cancels any selection. + +\membersection{wxRichTextCtrl::SetBasicStyle}\label{wxrichtextctrlsetbasicstyle} + +\func{void}{SetBasicStyle}{\param{const wxRichTextAttr\& }{style}} + +\func{void}{SetBasicStyle}{\param{const wxTextAttrEx\& }{style}} + +Sets the basic (overall) style. This is the style of the whole +buffer before further styles are applied, unlike the default style, which +only affects the style currently being applied (for example, setting the default +style to bold will cause subsequently inserted text to be bold). + +\membersection{wxRichTextCtrl::SetCaretPosition}\label{wxrichtextctrlsetcaretposition} + +\func{void}{SetCaretPosition}{\param{long }{position}, \param{bool }{showAtLineStart = false}} + +The caret position is the character position just before the caret. +A value of -1 means the caret is at the start of the buffer. + +\membersection{wxRichTextCtrl::SetDefaultStyle}\label{wxrichtextctrlsetdefaultstyle} + +\func{bool}{SetDefaultStyle}{\param{const wxTextAttrEx\& }{style}} + +Sets the current default style, which can be used to change how subsequently inserted +text is displayed. + +\membersection{wxRichTextCtrl::SetDefaultStyleToCursorStyle}\label{wxrichtextctrlsetdefaultstyletocursorstyle} + +\func{bool}{SetDefaultStyleToCursorStyle}{\void} + +Sets the default style to the style under the cursor. + +\membersection{wxRichTextCtrl::SetDelayedLayoutThreshold}\label{wxrichtextctrlsetdelayedlayoutthreshold} + +\func{void}{SetDelayedLayoutThreshold}{\param{long }{threshold}} + +Sets the size of the buffer beyond which layout is delayed during resizing. +This optimizes sizing for large buffers. The default is 20000. + +\membersection{wxRichTextCtrl::SetEditable}\label{wxrichtextctrlseteditable} + +\func{void}{SetEditable}{\param{bool }{editable}} + +Makes the control editable, or not. + +\membersection{wxRichTextCtrl::SetFilename}\label{wxrichtextctrlsetfilename} + +\func{void}{SetFilename}{\param{const wxString\& }{filename}} + +Sets the current filename. + +\membersection{wxRichTextCtrl::SetFont}\label{wxrichtextctrlsetfont} + +\func{bool}{SetFont}{\param{const wxFont\& }{font}} + +Sets the font, and also the basic and default attributes (see \helpref{SetDefaultStyle}{wxrichtextctrlsetdefaultstyle}). + +\membersection{wxRichTextCtrl::SetInsertionPoint}\label{wxrichtextctrlsetinsertionpoint} + +\func{void}{SetInsertionPoint}{\param{long }{pos}} + +Sets the insertion point. + +\membersection{wxRichTextCtrl::SetInsertionPointEnd}\label{wxrichtextctrlsetinsertionpointend} + +\func{void}{SetInsertionPointEnd}{\void} + +Sets the insertion point to the end of the text control. + +\membersection{wxRichTextCtrl::SetSelection}\label{wxrichtextctrlsetselection} + +\func{void}{SetSelection}{\param{long }{from}, \param{long }{to}} + +Sets the selection to the given range. + +\membersection{wxRichTextCtrl::SetSelectionRange}\label{wxrichtextctrlsetselectionrange} + +\func{void}{SetSelectionRange}{\param{const wxRichTextRange\& }{range}} + +Sets the selection to the given range. + +\membersection{wxRichTextCtrl::SetStyle}\label{wxrichtextctrlsetstyle} + +\func{bool}{SetStyle}{\param{const wxRichTextRange\& }{range}, \param{const wxRichTextAttr\& }{style}} + +\func{bool}{SetStyle}{\param{long }{start}, \param{long }{end}, \param{const wxTextAttrEx\& }{style}} + +Sets the attributes for the given range. The wxRichTextAttr version is more efficient +because it does not use wxFont objects. + +\membersection{wxRichTextCtrl::SetStyleSheet}\label{wxrichtextctrlsetstylesheet} + +\func{void}{SetStyleSheet}{\param{wxRichTextStyleSheet* }{styleSheet}} + +Sets the style sheet associated with the control. A style sheet allows named +character and paragraph styles to be applied. + +\membersection{wxRichTextCtrl::SetValue}\label{wxrichtextctrlsetvalue} + +\func{void}{SetValue}{\param{const wxString\& }{value}} + +Replaces existing content with the given text. + +\membersection{wxRichTextCtrl::SetupScrollbars}\label{wxrichtextctrlsetupscrollbars} + +\func{void}{SetupScrollbars}{\param{bool }{atTop = false}} + +A helper function setting up scrollbars, for example after a resize. + +\membersection{wxRichTextCtrl::ShowPosition}\label{wxrichtextctrlshowposition} + +\func{void}{ShowPosition}{\param{long }{pos}} + +Scrolls the buffer so that the given position is in view. + +\membersection{wxRichTextCtrl::SuppressingUndo}\label{wxrichtextctrlsuppressingundo} + +\constfunc{bool}{SuppressingUndo}{\void} + +Returns \true if undo history suppression is on. + +\membersection{wxRichTextCtrl::Thaw}\label{wxrichtextctrlthaw} + +\func{void}{Thaw}{\void} + +Call this function to end a Freeze and refresh the display. + +\membersection{wxRichTextCtrl::Undo}\label{wxrichtextctrlundo} + +\func{void}{Undo}{\void} + +Undoes the command at the top of the command history, if there is one. + +\membersection{wxRichTextCtrl::WordLeft}\label{wxrichtextctrlwordleft} + +\func{bool}{WordLeft}{\param{int }{noWords = 1}, \param{int }{flags = 0}} + +Moves a number of words to the left. + +\membersection{wxRichTextCtrl::WordRight}\label{wxrichtextctrlwordright} + +\func{bool}{WordRight}{\param{int }{noWords = 1}, \param{int }{flags = 0}} + +Move a nuber of words to the right. + +\membersection{wxRichTextCtrl::WriteImage}\label{wxrichtextctrlwriteimage} + +\func{bool}{WriteImage}{\param{const wxString\& }{filename}, \param{int }{bitmapType}} + +Loads an image from a file and writes it at the current insertion point. + +\func{bool}{WriteImage}{\param{const wxRichTextImageBlock\& }{imageBlock}} + +Writes an image block at the current insertion point. + +\func{bool}{WriteImage}{\param{const wxBitmap\& }{bitmap}, \param{int }{bitmapType = wxBITMAP\_TYPE\_PNG}} + +\func{bool}{WriteImage}{\param{const wxImage\& }{image}, \param{int }{bitmapType = wxBITMAP\_TYPE\_PNG}} + +Write a bitmap or image at the current insertion point. Supply an optional type to use +for internal and file storage of the raw data. + +\membersection{wxRichTextCtrl::WriteText}\label{wxrichtextctrlwritetext} + +\func{void}{WriteText}{\param{const wxString\& }{text}} + +Writes text at the current position. + +\membersection{wxRichTextCtrl::XYToPosition}\label{wxrichtextctrlxytoposition} + +\constfunc{long}{XYToPosition}{\param{long }{x}, \param{long }{y}} + +Translates from column and line number to position. diff --git a/docs/latex/wx/richtextevent.tex b/docs/latex/wx/richtextevent.tex new file mode 100644 index 0000000000..6214a6dea7 --- /dev/null +++ b/docs/latex/wx/richtextevent.tex @@ -0,0 +1,70 @@ +\section{\class{wxRichTextEvent}}\label{wxrichtextevent} + +This is the event class for wxRichTextCtrl notifications. Note that event generation +is very incomplete; we need to implement events such as selection of text, deletion, +insertion, and so on. + +\wxheading{Event table macros} + +To process a rich text event, use these event handler macros to direct input to a member +function that takes a wxRichTextEvent argument. + +\twocolwidtha{7cm} +\begin{twocollist}\itemsep=0pt +\twocolitem{{\bf EVT\_RICHTEXT\_LEFT\_CLICK(id, func)}}{Process a wxEVT\_COMMAND\_RICHTEXT\_LEFT\_CLICK event. Not currently implemented.} +\twocolitem{{\bf EVT\_RICHTEXT\_RIGHT\_CLICK(id, func)}}{Process a wxEVT\_COMMAND\_RICHTEXT\_RIGHT\_CLICK event. Not currently implemented.} +\twocolitem{{\bf EVT\_RICHTEXT\_MIDDLE\_CLICK(id, func)}}{Process a wxEVT\_COMMAND\_RICHTEXT\_MIDDLE\_CLICK event. Not currently implemented.} +\twocolitem{{\bf EVT\_RICHTEXT\_LEFT\_DCLICK(id, func)}}{Process a wxEVT\_COMMAND\_RICHTEXT\_LEFT\_DCLICK event. Not currently implemented.} +\twocolitem{{\bf EVT\_RICHTEXT\_RETURN(id, func)}}{Process a wxEVT\_COMMAND\_RICHTEXT\_RETURN event, generated when the user presses the return key.} +\end{twocollist}% + +\wxheading{Derived from} + +\helpref{wxNotifyEvent}{wxnotifyevent} + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextEvent::wxRichTextEvent}\label{wxrichtexteventwxrichtextevent} + +\func{}{wxRichTextEvent}{\param{const wxRichTextEvent\& }{event}} + +\func{}{wxRichTextEvent}{\param{wxEventType }{commandType = wxEVT\_NULL}, \param{int }{winid = 0}} + +Constructors. + +\membersection{wxRichTextEvent::Clone}\label{wxrichtexteventclone} + +\constfunc{wxEvent*}{Clone}{\void} + +Clones the event. + +\membersection{wxRichTextEvent::GetFlags}\label{wxrichtexteventgetflags} + +\constfunc{int}{GetFlags}{\void} + +Returns flags indicating modifier keys pressed. + +\membersection{wxRichTextEvent::GetIndex}\label{wxrichtexteventgetindex} + +\constfunc{int}{GetIndex}{\void} + +Not currently used. + +\membersection{wxRichTextEvent::SetFlags}\label{wxrichtexteventsetflags} + +\func{void}{SetFlags}{\param{int }{flags}} + +Sets flags indicating modifier keys pressed. Possible values are wxRICHTEXT\_CTRL\_DOWN, +wxRICHTEXT\_SHIFT\_DOWN, andwxRICHTEXT\_ALT\_DOWN. + +\membersection{wxRichTextEvent::SetIndex}\label{wxrichtexteventsetindex} + +\func{void}{SetIndex}{\param{int }{n}} + +Not currently used. diff --git a/docs/latex/wx/richtextfilehandler.tex b/docs/latex/wx/richtextfilehandler.tex new file mode 100644 index 0000000000..0e6c27c1b9 --- /dev/null +++ b/docs/latex/wx/richtextfilehandler.tex @@ -0,0 +1,130 @@ +\section{\class{wxRichTextFileHandler}}\label{wxrichtextfilehandler} + +This is the base class for file handlers, for loading and/or saving content +associated with a \helpref{wxRichTextBuffer}{wxrichtextbuffer}. + +\wxheading{Derived from} + +\helpref{wxObject}{wxobject} + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextFileHandler::wxRichTextFileHandler}\label{wxrichtextfilehandlerwxrichtextfilehandler} + +\func{}{wxRichTextFileHandler}{\param{const wxString\& }{name = wxEmptyString}, \param{const wxString\& }{ext = wxEmptyString}, \param{int }{type = 0}} + +Constructor. + +\membersection{wxRichTextFileHandler::CanHandle}\label{wxrichtextfilehandlercanhandle} + +\constfunc{bool}{CanHandle}{\param{const wxString\& }{filename}} + +Override this function and return \true if this handler can we handle {\it filename}. By default, +this function checks the extension. + +\membersection{wxRichTextFileHandler::CanLoad}\label{wxrichtextfilehandlercanload} + +\constfunc{bool}{CanLoad}{\void} + +Override and return \true if this handler can load content. + +\membersection{wxRichTextFileHandler::CanSave}\label{wxrichtextfilehandlercansave} + +\constfunc{bool}{CanSave}{\void} + +Override and return \true if this handler can save content. + +\membersection{wxRichTextFileHandler::DoLoadFile}\label{wxrichtextfilehandlerdoloadfile} + +\func{bool}{DoLoadFile}{\param{wxRichTextBuffer* }{buffer}, \param{wxInputStream\& }{stream}} + +Override to load content from {\it stream} into {\it buffer}. + +\membersection{wxRichTextFileHandler::DoSaveFile}\label{wxrichtextfilehandlerdosavefile} + +\func{bool}{DoSaveFile}{\param{wxRichTextBuffer* }{buffer}, \param{wxOutputStream\& }{stream}} + +Override to save content to {\it stream} from {\it buffer}. + +\membersection{wxRichTextFileHandler::GetEncoding}\label{wxrichtextfilehandlergetencoding} + +\constfunc{const wxString\&}{GetEncoding}{\void} + +Returns the encoding associated with the handler (if any). + +\membersection{wxRichTextFileHandler::GetExtension}\label{wxrichtextfilehandlergetextension} + +\constfunc{wxString}{GetExtension}{\void} + +Returns the extension associated with the handler. + +\membersection{wxRichTextFileHandler::GetName}\label{wxrichtextfilehandlergetname} + +\constfunc{wxString}{GetName}{\void} + +Returns the name of the handler. + +\membersection{wxRichTextFileHandler::GetType}\label{wxrichtextfilehandlergettype} + +\constfunc{int}{GetType}{\void} + +Returns the type of the handler. + +\membersection{wxRichTextFileHandler::IsVisible}\label{wxrichtextfilehandlerisvisible} + +\constfunc{bool}{IsVisible}{\void} + +Returns \true if this handler should be visible to the user. + +\membersection{wxRichTextFileHandler::LoadFile}\label{wxrichtextfilehandlerloadfile} + +\func{bool}{LoadFile}{\param{wxRichTextBuffer* }{buffer}, \param{wxInputStream\& }{stream}} + +\func{bool}{LoadFile}{\param{wxRichTextBuffer* }{buffer}, \param{const wxString\& }{filename}} + +Loads content from a stream or file. Not all handlers will implement file loading. + +\membersection{wxRichTextFileHandler::SaveFile}\label{wxrichtextfilehandlersavefile} + +\func{bool}{SaveFile}{\param{wxRichTextBuffer* }{buffer}, \param{wxOutputStream\& }{stream}} + +\func{bool}{SaveFile}{\param{wxRichTextBuffer* }{buffer}, \param{const wxString\& }{filename}} + +Saves content to a stream or file. Not all handlers will implement file saving. + +\membersection{wxRichTextFileHandler::SetEncoding}\label{wxrichtextfilehandlersetencoding} + +\func{void}{SetEncoding}{\param{const wxString\& }{encoding}} + +Sets the encoding to use when saving a file. If empty, a suitable encoding is chosen. + +\membersection{wxRichTextFileHandler::SetExtension}\label{wxrichtextfilehandlersetextension} + +\func{void}{SetExtension}{\param{const wxString\& }{ext}} + +Sets the default extension to recognise. + +\membersection{wxRichTextFileHandler::SetName}\label{wxrichtextfilehandlersetname} + +\func{void}{SetName}{\param{const wxString\& }{name}} + +Sets the name of the handler. + +\membersection{wxRichTextFileHandler::SetType}\label{wxrichtextfilehandlersettype} + +\func{void}{SetType}{\param{int }{type}} + +Sets the handler type. + +\membersection{wxRichTextFileHandler::SetVisible}\label{wxrichtextfilehandlersetvisible} + +\func{void}{SetVisible}{\param{bool }{visible}} + +Sets whether the handler should be visible to the user (via the application's load and save +dialogs). diff --git a/docs/latex/wx/richtexthtmlhandler.tex b/docs/latex/wx/richtexthtmlhandler.tex new file mode 100644 index 0000000000..17a90e9137 --- /dev/null +++ b/docs/latex/wx/richtexthtmlhandler.tex @@ -0,0 +1,27 @@ +\section{\class{wxRichTextHTMLHandler}}\label{wxrichtexthtmlhandler} + +Handles HTML output (only) for \helpref{wxRichTextCtrl}{wxrichtextctrl} content. + +\wxheading{Derived from} + +\helpref{wxRichTextFileHandler}{wxrichtextfilehandler} + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextHTMLHandler::wxRichTextHTMLHandler}\label{wxrichtexthtmlhandlerwxrichtexthtmlhandler} + +\func{}{wxRichTextHTMLHandler}{\param{const wxString\& }{name = wxT("HTML")}, \param{const wxString\& }{ext = wxT("html")}, \param{int }{type = wxRICHTEXT\_TYPE\_HTML}} + +Constructor. + +\membersection{wxRichTextHTMLHandler::DoSaveFile}\label{wxrichtexthtmlhandlerdosavefile} + +\func{bool}{DoSaveFile}{\param{wxRichTextBuffer* }{buffer}, \param{wxOutputStream\& }{stream}} + +Saves the buffer content to the HTML stream. diff --git a/docs/latex/wx/richtextoverview.tex b/docs/latex/wx/richtextoverview.tex new file mode 100644 index 0000000000..e9a5116a6d --- /dev/null +++ b/docs/latex/wx/richtextoverview.tex @@ -0,0 +1,34 @@ +\section{wxRichTextCtrl overview}\label{wxrichtextctrloverview} + +Classes: \helpref{wxRichTextCtrl}{wxrichtextctrl}, \helpref{wxRichTextBuffer}{wxrichtextbuffer}, +\helpref{wxRichTextAttr}{wxrichtextattr}, \helpref{wxTextAttrEx}{wxtextattrex}, +\helpref{wxRichTextCharacterStyleDefinition}{wxrichtextcharacterstyledefinition}, +\helpref{wxRichTextParagraphStyleDefinition}{wxrichtextparagraphstyledefinition}, +\helpref{wxRichTextStyleSheet}{wxrichtextstylesheet}, +\helpref{wxRichTextStyleListBox}{wxrichtextstylelistbox}, +\helpref{wxRichTextEvent}{wxrichtextevent}, \helpref{wxRichTextRange}{wxrichtextrange}, +\helpref{wxRichTextFileHandler}{wxrichtextfilehandler}, \helpref{wxRichTextHTMLHandler}{wxrichtexthtmlhandler}, +\helpref{wxRichTextXMLHandler}{wxrichtextxmlhandler} + +wxRichTextCtrl provides a generic implementation of a rich text editor + +The following screenshot shows the wxRichTextCtrl sample in action: + +$$\image{8cm;0cm}{richtextctrl.gif}$$ + +\wxheading{Example}\label{wxrichtextctrlexample} + +TODO + +{\small +\begin{verbatim} +\end{verbatim} +} + +\wxheading{Programming with wxRichTextCtrl} + +TODO + +\wxheading{How wxRichTextCtrl is implemented} + +TODO diff --git a/docs/latex/wx/richtextparagraphstyledefinition.tex b/docs/latex/wx/richtextparagraphstyledefinition.tex new file mode 100644 index 0000000000..c6491d0409 --- /dev/null +++ b/docs/latex/wx/richtextparagraphstyledefinition.tex @@ -0,0 +1,39 @@ +\section{\class{wxRichTextParagraphStyleDefinition}}\label{wxrichtextparagraphstyledefinition} + +This class represents a paragraph style definition, usually added to a \helpref{wxRichTextStyleSheet}{wxrichtextstylesheet}. + +\wxheading{Derived from} + +\helpref{wxRichTextStyleDefinition}{wxrichtextstyledefinition} + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextParagraphStyleDefinition::wxRichTextParagraphStyleDefinition}\label{wxrichtextparagraphstyledefinitionwxrichtextparagraphstyledefinition} + +\func{}{wxRichTextParagraphStyleDefinition}{\param{const wxString\& }{name = wxEmptyString}} + +Constructor. + +\membersection{wxRichTextParagraphStyleDefinition::\destruct{wxRichTextParagraphStyleDefinition}}\label{wxrichtextparagraphstyledefinitiondtor} + +\func{}{\destruct{wxRichTextParagraphStyleDefinition}}{\void} + +Destructor. + +\membersection{wxRichTextParagraphStyleDefinition::GetNextStyle}\label{wxrichtextparagraphstyledefinitiongetnextstyle} + +\constfunc{const wxString\&}{GetNextStyle}{\void} + +Returns the style that should normally follow this style. + +\membersection{wxRichTextParagraphStyleDefinition::SetNextStyle}\label{wxrichtextparagraphstyledefinitionsetnextstyle} + +\func{void}{SetNextStyle}{\param{const wxString\& }{name}} + +Sets the style that should normally follow this style. diff --git a/docs/latex/wx/richtextrange.tex b/docs/latex/wx/richtextrange.tex new file mode 100644 index 0000000000..fd3d0fa622 --- /dev/null +++ b/docs/latex/wx/richtextrange.tex @@ -0,0 +1,122 @@ +\section{\class{wxRichTextRange}}\label{wxrichtextrange} + +This class stores beginning and end positions for a range of data. + +\wxheading{Derived from} + +No base class + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextRange::wxRichTextRange}\label{wxrichtextrangewxrichtextrange} + +\func{}{wxRichTextRange}{\param{long }{start}, \param{long }{end}} + +\func{}{wxRichTextRange}{\param{const wxRichTextRange\& }{range}} + +\func{}{wxRichTextRange}{\void} + +Constructors. + +\membersection{wxRichTextRange::\destruct{wxRichTextRange}}\label{wxrichtextrangedtor} + +\func{}{\destruct{wxRichTextRange}}{\void} + +Destructor. + +\membersection{wxRichTextRange::Contains}\label{wxrichtextrangecontains} + +\constfunc{bool}{Contains}{\param{long }{pos}} + +Returns \true if the given position is within this range. Does not +match if the range is empty. + +\membersection{wxRichTextRange::GetEnd}\label{wxrichtextrangegetend} + +\constfunc{long}{GetEnd}{\void} + +Returns the end position. + +\membersection{wxRichTextRange::GetLength}\label{wxrichtextrangegetlength} + +\constfunc{long}{GetLength}{\void} + +Returns the length of the range. + +\membersection{wxRichTextRange::GetStart}\label{wxrichtextrangegetstart} + +\constfunc{long}{GetStart}{\void} + +Returns the start of the range. + +\membersection{wxRichTextRange::IsOutside}\label{wxrichtextrangeisoutside} + +\constfunc{bool}{IsOutside}{\param{const wxRichTextRange\& }{range}} + +Returns \true if this range is completely outside {\it range}. + +\membersection{wxRichTextRange::IsWithin}\label{wxrichtextrangeiswithin} + +\constfunc{bool}{IsWithin}{\param{const wxRichTextRange\& }{range}} + +Returns \true if this range is completely within {\it range}. + +\membersection{wxRichTextRange::LimitTo}\label{wxrichtextrangelimitto} + +\func{bool}{LimitTo}{\param{const wxRichTextRange\& }{range}} + +Limits this range to be within {\it range}. + +\membersection{wxRichTextRange::SetEnd}\label{wxrichtextrangesetend} + +\func{void}{SetEnd}{\param{long }{end}} + +Sets the end of the range. + +\membersection{wxRichTextRange::SetRange}\label{wxrichtextrangesetrange} + +\func{void}{SetRange}{\param{long }{start}, \param{long }{end}} + +Sets the range. + +\membersection{wxRichTextRange::SetStart}\label{wxrichtextrangesetstart} + +\func{void}{SetStart}{\param{long }{start}} + +Sets the start of the range. + +\membersection{wxRichTextRange::Swap}\label{wxrichtextrangeswap} + +\func{void}{Swap}{\void} + +Swaps the start and end. + +\membersection{wxRichTextRange::operator+}\label{wxrichtextrangeoperatorplus} + +\constfunc{wxRichTextRange}{operator+}{\param{const wxRichTextRange\& }{range}} + +Adds {\it range} to this range. + +\membersection{wxRichTextRange::operator-}\label{wxrichtextrangeoperatorminus} + +\constfunc{wxRichTextRange}{operator-}{\param{const wxRichTextRange\& }{range}} + +Subtracs {\it range} from this range. + +\membersection{wxRichTextRange::operator=}\label{wxrichtextrangeoperatorassign} + +\func{void}{operator=}{\param{const wxRichTextRange\& }{range}} + +Assigns {\it range} to this range. + +\membersection{wxRichTextRange::operator==}\label{wxrichtextrangeoperatorequal} + +\constfunc{bool}{operator==}{\param{const wxRichTextRange\& }{range}} + +Returns \true if {\it range} is the same as this range. diff --git a/docs/latex/wx/richtextstyledefinition.tex b/docs/latex/wx/richtextstyledefinition.tex new file mode 100644 index 0000000000..19e5fcc514 --- /dev/null +++ b/docs/latex/wx/richtextstyledefinition.tex @@ -0,0 +1,72 @@ +\section{\class{wxRichTextStyleDefinition}}\label{wxrichtextstyledefinition} + +This is a base class for paragraph and character styles. + +\wxheading{Derived from} + +\helpref{wxObject}{wxobject} + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextStyleDefinition::wxRichTextStyleDefinition}\label{wxrichtextstyledefinitionwxrichtextstyledefinition} + +\func{}{wxRichTextStyleDefinition}{\param{const wxString\& }{name = wxEmptyString}} + +Constructor. + +\membersection{wxRichTextStyleDefinition::\destruct{wxRichTextStyleDefinition}}\label{wxrichtextstyledefinitiondtor} + +\func{}{\destruct{wxRichTextStyleDefinition}}{\void} + +Destructor. + +\membersection{wxRichTextStyleDefinition::GetBaseStyle}\label{wxrichtextstyledefinitiongetbasestyle} + +\constfunc{const wxString\&}{GetBaseStyle}{\void} + +Returns the style on which this style is based. + +\membersection{wxRichTextStyleDefinition::GetName}\label{wxrichtextstyledefinitiongetname} + +\constfunc{const wxString\&}{GetName}{\void} + +Returns the style name. + +\membersection{wxRichTextStyleDefinition::GetStyle}\label{wxrichtextstyledefinitiongetstyle} + +\func{wxRichTextAttr\&}{GetStyle}{\void} + +\constfunc{const wxRichTextAttr\&}{GetStyle}{\void} + +Returns the attributes associated with this style. + +\membersection{wxRichTextStyleDefinition::Init}\label{wxrichtextstyledefinitioninit} + +\func{void}{Init}{\void} + +Initialises the definition. + +\membersection{wxRichTextStyleDefinition::SetBaseStyle}\label{wxrichtextstyledefinitionsetbasestyle} + +\func{void}{SetBaseStyle}{\param{const wxString\& }{name}} + +Sets the name of the style that this style is based on. + +\membersection{wxRichTextStyleDefinition::SetName}\label{wxrichtextstyledefinitionsetname} + +\func{void}{SetName}{\param{const wxString\& }{name}} + +Sets the name of the style. + +\membersection{wxRichTextStyleDefinition::SetStyle}\label{wxrichtextstyledefinitionsetstyle} + +\func{void}{SetStyle}{\param{const wxRichTextAttr\& }{style}} + +Sets the attributes for this style. + diff --git a/docs/latex/wx/richtextstylelistbox.tex b/docs/latex/wx/richtextstylelistbox.tex new file mode 100644 index 0000000000..c546751105 --- /dev/null +++ b/docs/latex/wx/richtextstylelistbox.tex @@ -0,0 +1,96 @@ +\section{\class{wxRichTextStyleListBox}}\label{wxrichtextstylelistbox} + +This is a listbox that can display the styles in a \helpref{wxRichTextStyleSheet}{wxrichtextstylesheet}, +and apply the selection to an associated \helpref{wxRichTextCtrl}{wxrichtextctrl}. + +See {\tt samples/richtext} for an example of how to use it. + +\wxheading{Derived from} + +\helpref{wxHtmlListBox}{wxhtmllistbox} + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextStyleListBox::wxRichTextStyleListBox}\label{wxrichtextstylelistboxwxrichtextstylelistbox} + +\func{}{wxRichTextStyleListBox}{\param{wxWindow* }{parent}, \param{wxWindowID }{id = wxID\_ANY}, \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize}, \param{long }{style = 0}} + +Constructor. + +\membersection{wxRichTextStyleListBox::\destruct{wxRichTextStyleListBox}}\label{wxrichtextstylelistboxdtor} + +\func{}{\destruct{wxRichTextStyleListBox}}{\void} + +Destructor. + +\membersection{wxRichTextStyleListBox::ConvertTenthsMMToPixels}\label{wxrichtextstylelistboxconverttenthsmmtopixels} + +\constfunc{int}{ConvertTenthsMMToPixels}{\param{wxDC\& }{dc}, \param{int }{units}} + +Converts units in tenths of a millimetre to device units. + +\membersection{wxRichTextStyleListBox::CreateHTML}\label{wxrichtextstylelistboxcreatehtml} + +\constfunc{wxString}{CreateHTML}{\param{wxRichTextStyleDefinition* }{def}} + +Creates a suitable HTML fragment for a definition. + +\membersection{wxRichTextStyleListBox::GetRichTextCtrl}\label{wxrichtextstylelistboxgetrichtextctrl} + +\constfunc{wxRichTextCtrl*}{GetRichTextCtrl}{\void} + +Returns the \helpref{wxRichTextCtrl}{wxrichtextctrl} associated with this listbox. + +\membersection{wxRichTextStyleListBox::GetStyle}\label{wxrichtextstylelistboxgetstyle} + +\constfunc{wxRichTextStyleDefinition*}{GetStyle}{\param{size\_t }{i}} + +Gets a style for a listbox index. + +\membersection{wxRichTextStyleListBox::GetStyleSheet}\label{wxrichtextstylelistboxgetstylesheet} + +\constfunc{wxRichTextStyleSheet*}{GetStyleSheet}{\void} + +Returns the style sheet associated with this listbox. + +\membersection{wxRichTextStyleListBox::OnGetItem}\label{wxrichtextstylelistboxongetitem} + +\constfunc{wxString}{OnGetItem}{\param{size\_t }{n}} + +Returns the HTML for this item. + +\membersection{wxRichTextStyleListBox::OnLeftDown}\label{wxrichtextstylelistboxonleftdown} + +\func{void}{OnLeftDown}{\param{wxMouseEvent\& }{event}} + +Implements left click behaviour, applying the clicked style to the wxRichTextCtrl. + +\membersection{wxRichTextStyleListBox::OnSelect}\label{wxrichtextstylelistboxonselect} + +\func{void}{OnSelect}{\param{wxCommandEvent\& }{event}} + +Reacts to selection. + +\membersection{wxRichTextStyleListBox::SetRichTextCtrl}\label{wxrichtextstylelistboxsetrichtextctrl} + +\func{void}{SetRichTextCtrl}{\param{wxRichTextCtrl* }{ctrl}} + +Associates the listbox with a \helpref{wxRichTextCtrl}{wxrichtextctrl}. + +\membersection{wxRichTextStyleListBox::SetStyleSheet}\label{wxrichtextstylelistboxsetstylesheet} + +\func{void}{SetStyleSheet}{\param{wxRichTextStyleSheet* }{styleSheet}} + +Associates the control with a style sheet. + +\membersection{wxRichTextStyleListBox::UpdateStyles}\label{wxrichtextstylelistboxupdatestyles} + +\func{void}{UpdateStyles}{\void} + +Updates the list from the associated style sheet. diff --git a/docs/latex/wx/richtextstylesheet.tex b/docs/latex/wx/richtextstylesheet.tex new file mode 100644 index 0000000000..04fbf34231 --- /dev/null +++ b/docs/latex/wx/richtextstylesheet.tex @@ -0,0 +1,104 @@ +\section{\class{wxRichTextStyleSheet}}\label{wxrichtextstylesheet} + +A style sheet contains named paragraph and character styles that make it +easy for a user to apply combinations of attributes to a \helpref{wxRichTextCtrl}{wxrichtextctrl}. + +You can use a \helpref{wxRichTextStyleListBox}{wxrichtextstylelistbox} in your +user interface to show available styles to the user, and allow application +of styles to the control. + +\wxheading{Derived from} + +\helpref{wxObject}{wxobject} + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextStyleSheet::wxRichTextStyleSheet}\label{wxrichtextstylesheetwxrichtextstylesheet} + +\func{}{wxRichTextStyleSheet}{\void} + +Constructor. + +\membersection{wxRichTextStyleSheet::\destruct{wxRichTextStyleSheet}}\label{wxrichtextstylesheetdtor} + +\func{}{\destruct{wxRichTextStyleSheet}}{\void} + +Destructor. + +\membersection{wxRichTextStyleSheet::AddCharacterStyle}\label{wxrichtextstylesheetaddcharacterstyle} + +\func{bool}{AddCharacterStyle}{\param{wxRichTextCharacterStyleDefinition* }{def}} + +Adds a definition to the character style list. + +\membersection{wxRichTextStyleSheet::AddParagraphStyle}\label{wxrichtextstylesheetaddparagraphstyle} + +\func{bool}{AddParagraphStyle}{\param{wxRichTextParagraphStyleDefinition* }{def}} + +Adds a definition to the paragraph style list. + +\membersection{wxRichTextStyleSheet::DeleteStyles}\label{wxrichtextstylesheetdeletestyles} + +\func{void}{DeleteStyles}{\void} + +Deletes all styles. + +\membersection{wxRichTextStyleSheet::FindCharacterStyle}\label{wxrichtextstylesheetfindcharacterstyle} + +\constfunc{wxRichTextCharacterStyleDefinition*}{FindCharacterStyle}{\param{const wxString\& }{name}} + +Finds a character definition by name. + +\membersection{wxRichTextStyleSheet::FindParagraphStyle}\label{wxrichtextstylesheetfindparagraphstyle} + +\constfunc{wxRichTextParagraphStyleDefinition*}{FindParagraphStyle}{\param{const wxString\& }{name}} + +Finds a paragraph definition by name. + +\membersection{wxRichTextStyleSheet::GetCharacterStyle}\label{wxrichtextstylesheetgetcharacterstyle} + +\constfunc{wxRichTextCharacterStyleDefinition*}{GetCharacterStyle}{\param{size\_t }{n}} + +Returns the {\it n}th character style. + +\membersection{wxRichTextStyleSheet::GetCharacterStyleCount}\label{wxrichtextstylesheetgetcharacterstylecount} + +\constfunc{size\_t}{GetCharacterStyleCount}{\void} + +Returns the number of character styles. + +\membersection{wxRichTextStyleSheet::GetParagraphStyle}\label{wxrichtextstylesheetgetparagraphstyle} + +\constfunc{wxRichTextParagraphStyleDefinition*}{GetParagraphStyle}{\param{size\_t }{n}} + +Returns the {\it n}th paragraph style. + +\membersection{wxRichTextStyleSheet::GetParagraphStyleCount}\label{wxrichtextstylesheetgetparagraphstylecount} + +\constfunc{size\_t}{GetParagraphStyleCount}{\void} + +Returns the number of paragraph styles. + +\membersection{wxRichTextStyleSheet::Init}\label{wxrichtextstylesheetinit} + +\func{void}{Init}{\void} + +Initialises the style sheet. + +\membersection{wxRichTextStyleSheet::RemoveCharacterStyle}\label{wxrichtextstylesheetremovecharacterstyle} + +\func{bool}{RemoveCharacterStyle}{\param{wxRichTextStyleDefinition* }{def}, \param{bool }{deleteStyle = false}} + +Removes a character style. + +\membersection{wxRichTextStyleSheet::RemoveParagraphStyle}\label{wxrichtextstylesheetremoveparagraphstyle} + +\func{bool}{RemoveParagraphStyle}{\param{wxRichTextStyleDefinition* }{def}, \param{bool }{deleteStyle = false}} + +Removes a paragraph style. diff --git a/docs/latex/wx/richtextxmlhandler.tex b/docs/latex/wx/richtextxmlhandler.tex new file mode 100644 index 0000000000..224d132eff --- /dev/null +++ b/docs/latex/wx/richtextxmlhandler.tex @@ -0,0 +1,104 @@ +\section{\class{wxRichTextXMLHandler}}\label{wxrichtextxmlhandler} + +A handler for loading and saving content in an XML format specific +to wxRichTextBuffer. You can either add the handler to the buffer +and load and save through the buffer or control API, or you can +create an instance of the handler on the stack and call its +functions directly. + +\wxheading{Derived from} + +\helpref{wxRichTextFileHandler}{wxrichtextfilehandler} + +\wxheading{Include files} + + + +\wxheading{Data structures} + +\latexignore{\rtfignore{\wxheading{Members}}} + +\membersection{wxRichTextXMLHandler::wxRichTextXMLHandler}\label{wxrichtextxmlhandlerwxrichtextxmlhandler} + +\func{}{wxRichTextXMLHandler}{\param{const wxString\& }{name = wxT("XML")}, \param{const wxString\& }{ext = wxT("xml")}, \param{int }{type = wxRICHTEXT\_TYPE\_XML}} + +Constructor. + +\membersection{wxRichTextXMLHandler::CanLoad}\label{wxrichtextxmlhandlercanload} + +\constfunc{bool}{CanLoad}{\void} + +Returns \true. + +\membersection{wxRichTextXMLHandler::CanSave}\label{wxrichtextxmlhandlercansave} + +\constfunc{bool}{CanSave}{\void} + +Returns \true. + +\membersection{wxRichTextXMLHandler::CreateStyle}\label{wxrichtextxmlhandlercreatestyle} + +\func{wxString}{CreateStyle}{\param{const wxTextAttrEx\& }{attr}, \param{bool }{isPara = false}} + +Creates XML code for a given character or paragraph style. + +\membersection{wxRichTextXMLHandler::DoLoadFile}\label{wxrichtextxmlhandlerdoloadfile} + +\func{bool}{DoLoadFile}{\param{wxRichTextBuffer* }{buffer}, \param{wxInputStream\& }{stream}} + +Loads buffer context from the given stream. + +\membersection{wxRichTextXMLHandler::DoSaveFile}\label{wxrichtextxmlhandlerdosavefile} + +\func{bool}{DoSaveFile}{\param{wxRichTextBuffer* }{buffer}, \param{wxOutputStream\& }{stream}} + +Saves buffer context to the given stream. + +\membersection{wxRichTextXMLHandler::ExportXML}\label{wxrichtextxmlhandlerexportxml} + +\func{bool}{ExportXML}{\param{wxOutputStream\& }{stream}, \param{wxMBConv* }{convMem}, \param{wxMBConv* }{convFile}, \param{wxRichTextObject\& }{obj}, \param{int }{level}} + +Recursively exports an object to the stream. + +\membersection{wxRichTextXMLHandler::GetNodeContent}\label{wxrichtextxmlhandlergetnodecontent} + +\func{wxString}{GetNodeContent}{\param{wxXmlNode* }{node}} + +Helper function: gets node context. + +\membersection{wxRichTextXMLHandler::GetParamNode}\label{wxrichtextxmlhandlergetparamnode} + +\func{wxXmlNode*}{GetParamNode}{\param{wxXmlNode* }{node}, \param{const wxString\& }{param}} + +Helper function: gets a named parameter from the XML node. + +\membersection{wxRichTextXMLHandler::GetParamValue}\label{wxrichtextxmlhandlergetparamvalue} + +\func{wxString}{GetParamValue}{\param{wxXmlNode* }{node}, \param{const wxString\& }{param}} + +Helper function: gets a named parameter from the XML node. + +\membersection{wxRichTextXMLHandler::GetStyle}\label{wxrichtextxmlhandlergetstyle} + +\func{bool}{GetStyle}{\param{wxTextAttrEx\& }{attr}, \param{wxXmlNode* }{node}, \param{bool }{isPara = false}} + +Helper function: gets style parameters from the given XML node. + +\membersection{wxRichTextXMLHandler::GetText}\label{wxrichtextxmlhandlergettext} + +\func{wxString}{GetText}{\param{wxXmlNode* }{node}, \param{const wxString\& }{param = wxEmptyString}, \param{bool }{translate = false}} + +Helper function: gets text from the node. + +\membersection{wxRichTextXMLHandler::HasParam}\label{wxrichtextxmlhandlerhasparam} + +\func{bool}{HasParam}{\param{wxXmlNode* }{node}, \param{const wxString\& }{param}} + +Helper function: returns \true if the node has the given parameter. + +\membersection{wxRichTextXMLHandler::ImportXML}\label{wxrichtextxmlhandlerimportxml} + +\func{bool}{ImportXML}{\param{wxRichTextBuffer* }{buffer}, \param{wxXmlNode* }{node}} + +Recursively imports an object. + diff --git a/docs/latex/wx/text.tex b/docs/latex/wx/text.tex index 7808739ee7..5992858843 100644 --- a/docs/latex/wx/text.tex +++ b/docs/latex/wx/text.tex @@ -1,257 +1,3 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%% wxTextAttr %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\section{\class{wxTextAttr}}\label{wxtextattr} - -wxTextAttr represents the character and paragraph attributes, or style, for a range of text in a\rtfsp -\helpref{wxTextCtrl}{wxtextctrl}. - -When setting up a wxTextAttr object, pass a bitlist mask to SetFlags to indicate -which style elements should be changed. As a convenience, when you call a -setter such as SetFont, the relevant bit will be set. - -\wxheading{Derived from} - -No base class - -\wxheading{Include files} - - - -\wxheading{Typedefs} - -\texttt{wxTextPos} is the type containing the index of a position in a text -control. \texttt{wxTextCoord} contains the index of a column or a row in the -control. - -Note that although both of these types should probably have been unsigned, due -to backwards compatibility reasons, are defined as \texttt{long} currently. -Their use (instead of plain \texttt{long}) is still encouraged as it makes the -code more readable. - -\wxheading{Constants} - -The following values can be passed to SetAlignment to determine -paragraph alignment. - -{\small -\begin{verbatim} -enum wxTextAttrAlignment -{ - wxTEXT_ALIGNMENT_DEFAULT, - wxTEXT_ALIGNMENT_LEFT, - wxTEXT_ALIGNMENT_CENTRE, - wxTEXT_ALIGNMENT_CENTER = wxTEXT_ALIGNMENT_CENTRE, - wxTEXT_ALIGNMENT_RIGHT, - wxTEXT_ALIGNMENT_JUSTIFIED -}; -\end{verbatim} -} - -These values are passed in a bitlist to SetFlags to determine -what attributes will be considered when setting the attributes -for a text control. - -{\small -\begin{verbatim} -#define wxTEXT_ATTR_TEXT_COLOUR 0x0001 -#define wxTEXT_ATTR_BACKGROUND_COLOUR 0x0002 -#define wxTEXT_ATTR_FONT_FACE 0x0004 -#define wxTEXT_ATTR_FONT_SIZE 0x0008 -#define wxTEXT_ATTR_FONT_WEIGHT 0x0010 -#define wxTEXT_ATTR_FONT_ITALIC 0x0020 -#define wxTEXT_ATTR_FONT_UNDERLINE 0x0040 -#define wxTEXT_ATTR_FONT \ - wxTEXT_ATTR_FONT_FACE | wxTEXT_ATTR_FONT_SIZE | wxTEXT_ATTR_FONT_WEIGHT \ -| wxTEXT_ATTR_FONT_ITALIC | wxTEXT_ATTR_FONT_UNDERLINE -#define wxTEXT_ATTR_ALIGNMENT 0x0080 -#define wxTEXT_ATTR_LEFT_INDENT 0x0100 -#define wxTEXT_ATTR_RIGHT_INDENT 0x0200 -#define wxTEXT_ATTR_TABS 0x0400 -\end{verbatim} -} - -\latexignore{\rtfignore{\wxheading{Members}}} - - -\membersection{wxTextAttr::wxTextAttr}\label{wxtextattrctor} - -\func{}{wxTextAttr}{\void} - -\func{}{wxTextAttr}{\param{const wxColour\& }{colText}, \param{const wxColour\& }{colBack = wxNullColour}, - \param{const wxFont\& }{font = wxNullFont}, \param{wxTextAttrAlignment }{alignment = wxTEXT\_ALIGNMENT\_DEFAULT}} - -The constructors initialize one or more of the text foreground colour, background -colour, font, and alignment. The values not initialized in the constructor can be set -later, otherwise \helpref{wxTextCtrl::SetStyle}{wxtextctrlsetstyle} will use -the default values for them. - - -\membersection{wxTextAttr::GetAlignment}\label{wxtextattrgetalignment} - -\constfunc{wxTextAttrAlignment}{GetAlignment}{\void} - -Returns the paragraph alignment. - - -\membersection{wxTextAttr::GetBackgroundColour}\label{wxtextattrgetbackgroundcolour} - -\constfunc{const wxColour\&}{GetBackgroundColour}{\void} - -Return the background colour specified by this attribute. - - -\membersection{wxTextAttr::GetFont}\label{wxtextattrgetfont} - -\constfunc{const wxFont\&}{GetFont}{\void} - -Return the text font specified by this attribute. - - -\membersection{wxTextAttr::GetLeftIndent}\label{wxtextattrgetleftindent} - -\constfunc{int}{GetLeftIndent}{\void} - -Returns the left indent in tenths of a millimetre. - - -\membersection{wxTextAttr::GetLeftSubIndent}\label{wxtextattrgetleftsubindent} - -\constfunc{int}{GetLeftSubIndent}{\void} - -Returns the left sub indent for all lines but the first line in a paragraph in -tenths of a millimetre. - - -\membersection{wxTextAttr::GetRightIndent}\label{wxtextattrgetrightindent} - -\constfunc{int}{GetRightIndent}{\void} - -Returns the right indent in tenths of a millimetre. - - -\membersection{wxTextAttr::GetTabs}\label{wxtextattrgettabs} - -\constfunc{const wxArrayInt\&}{GetTabs}{\void} - -Returns the array of integers representing the tab stops. Each -array element specifies the tab stop in tenths of a millimetre. - - -\membersection{wxTextAttr::GetTextColour}\label{wxtextattrgettextcolour} - -\constfunc{const wxColour\&}{GetTextColour}{\void} - -Return the text colour specified by this attribute. - - -\membersection{wxTextAttr::HasBackgroundColour}\label{wxtextattrhasbackgroundcolour} - -\constfunc{bool}{HasBackgroundColour}{\void} - -Returns {\tt true} if this style specifies the background colour to use. - - -\membersection{wxTextAttr::HasFont}\label{wxtextattrhasfont} - -\constfunc{bool}{HasFont}{\void} - -Returns {\tt true} if this style specifies the font to use. - - -\membersection{wxTextAttr::HasTextColour}\label{wxtextattrhastextcolour} - -\constfunc{bool}{HasTextColour}{\void} - -Returns {\tt true} if this style specifies the foreground colour to use. - - -\membersection{wxTextAttr::GetFlags}\label{wxtextattrgetflags} - -\func{long}{GetFlags}{\void} - -Returns a bitlist indicating which attributes will be set. - - -\membersection{wxTextAttr::IsDefault}\label{wxtextattrisdefault} - -\constfunc{bool}{IsDefault}{\void} - -Returns {\tt true} if this style specifies any non-default attributes. - - -\membersection{wxTextAttr::Merge}\label{wxtextattrmerge} - -\func{void}{Merge}{\param{const wxTextAttr\&}{ overlay}} - -Copies all defined/valid properties from \arg{overlay} to current object. - -\func{static wxTextAttr}{Merge}{\param{const wxTextAttr\&}{ base}, \param{const wxTextAttr\&}{ overlay}} - -Creates a new {\tt wxTextAttr} which is a merge of \arg{base} and -\arg{overlay}. Properties defined in \arg{overlay} take precedence over those -in \arg{base}. Properties undefined/invalid in both are undefined in the -result. - - -\membersection{wxTextAttr::SetAlignment}\label{wxtextattrsetalignment} - -\func{void}{SetAlignment}{\param{wxTextAttrAlignment}{ alignment}} - -Sets the paragraph alignment. - - -\membersection{wxTextAttr::SetBackgroundColour}\label{wxtextattrsetbackgroundcolour} - -\func{void}{SetBackgroundColour}{\param{const wxColour\& }{colour}} - -Sets the background colour. - - -\membersection{wxTextAttr::SetFlags}\label{wxtextattrsetflags} - -\func{void}{SetFlags}{\param{long}{ flags}} - -Pass a bitlist indicating which attributes will be set. - - -\membersection{wxTextAttr::SetFont}\label{wxtextattrsetfont} - -\func{void}{SetFont}{\param{const wxFont\&}{ font}} - -Sets the text font. - - -\membersection{wxTextAttr::SetLeftIndent}\label{wxtextattrsetleftindent} - -\func{void}{SetLeftIndent}{\param{int }{indent}, \param{int }{subIndent = 0}} - -Sets the left indent in tenths of a millimetre. -subIndent sets the indent for all lines but the first line in a paragraph -relative to the first line. - - -\membersection{wxTextAttr::SetRightIndent}\label{wxtextattrsetrightindent} - -\func{void}{SetRightIndent}{\param{int }{indent}} - -Sets the right indent in tenths of a millimetre. - - -\membersection{wxTextAttr::SetTabs}\label{wxtextattrsettabs} - -\func{void}{SetTabs}{\param{const wxArrayInt\&}{ tabs}} - -Sets the array of integers representing the tab stops. Each -array element specifies the tab stop in tenths of a millimetre. - - -\membersection{wxTextAttr::SetTextColour}\label{wxtextattrsettextcolour} - -\func{void}{SetTextColour}{\param{const wxColour\& }{colour}} - -Sets the text colour. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%% wxTextCtrl %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{\class{wxTextCtrl}}\label{wxtextctrl} diff --git a/docs/latex/wx/textattr.tex b/docs/latex/wx/textattr.tex new file mode 100644 index 0000000000..348153a69b --- /dev/null +++ b/docs/latex/wx/textattr.tex @@ -0,0 +1,252 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%% wxTextAttr %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{\class{wxTextAttr}}\label{wxtextattr} + +wxTextAttr represents the character and paragraph attributes, or style, for a range of text in a\rtfsp +\helpref{wxTextCtrl}{wxtextctrl}. + +When setting up a wxTextAttr object, pass a bitlist mask to SetFlags to indicate +which style elements should be changed. As a convenience, when you call a +setter such as SetFont, the relevant bit will be set. + +\wxheading{Derived from} + +No base class + +\wxheading{Include files} + + + +\wxheading{Typedefs} + +\texttt{wxTextPos} is the type containing the index of a position in a text +control. \texttt{wxTextCoord} contains the index of a column or a row in the +control. + +Note that although both of these types should probably have been unsigned, due +to backwards compatibility reasons, are defined as \texttt{long} currently. +Their use (instead of plain \texttt{long}) is still encouraged as it makes the +code more readable. + +\wxheading{Constants} + +The following values can be passed to SetAlignment to determine +paragraph alignment. + +{\small +\begin{verbatim} +enum wxTextAttrAlignment +{ + wxTEXT_ALIGNMENT_DEFAULT, + wxTEXT_ALIGNMENT_LEFT, + wxTEXT_ALIGNMENT_CENTRE, + wxTEXT_ALIGNMENT_CENTER = wxTEXT_ALIGNMENT_CENTRE, + wxTEXT_ALIGNMENT_RIGHT, + wxTEXT_ALIGNMENT_JUSTIFIED +}; +\end{verbatim} +} + +These values are passed in a bitlist to SetFlags to determine +what attributes will be considered when setting the attributes +for a text control. + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_TEXT_COLOUR 0x0001 +#define wxTEXT_ATTR_BACKGROUND_COLOUR 0x0002 +#define wxTEXT_ATTR_FONT_FACE 0x0004 +#define wxTEXT_ATTR_FONT_SIZE 0x0008 +#define wxTEXT_ATTR_FONT_WEIGHT 0x0010 +#define wxTEXT_ATTR_FONT_ITALIC 0x0020 +#define wxTEXT_ATTR_FONT_UNDERLINE 0x0040 +#define wxTEXT_ATTR_FONT \ + wxTEXT_ATTR_FONT_FACE | wxTEXT_ATTR_FONT_SIZE | wxTEXT_ATTR_FONT_WEIGHT \ +| wxTEXT_ATTR_FONT_ITALIC | wxTEXT_ATTR_FONT_UNDERLINE +#define wxTEXT_ATTR_ALIGNMENT 0x0080 +#define wxTEXT_ATTR_LEFT_INDENT 0x0100 +#define wxTEXT_ATTR_RIGHT_INDENT 0x0200 +#define wxTEXT_ATTR_TABS 0x0400 +\end{verbatim} +} + +\latexignore{\rtfignore{\wxheading{Members}}} + + +\membersection{wxTextAttr::wxTextAttr}\label{wxtextattrctor} + +\func{}{wxTextAttr}{\void} + +\func{}{wxTextAttr}{\param{const wxColour\& }{colText}, \param{const wxColour\& }{colBack = wxNullColour}, + \param{const wxFont\& }{font = wxNullFont}, \param{wxTextAttrAlignment }{alignment = wxTEXT\_ALIGNMENT\_DEFAULT}} + +The constructors initialize one or more of the text foreground colour, background +colour, font, and alignment. The values not initialized in the constructor can be set +later, otherwise \helpref{wxTextCtrl::SetStyle}{wxtextctrlsetstyle} will use +the default values for them. + + +\membersection{wxTextAttr::GetAlignment}\label{wxtextattrgetalignment} + +\constfunc{wxTextAttrAlignment}{GetAlignment}{\void} + +Returns the paragraph alignment. + + +\membersection{wxTextAttr::GetBackgroundColour}\label{wxtextattrgetbackgroundcolour} + +\constfunc{const wxColour\&}{GetBackgroundColour}{\void} + +Return the background colour specified by this attribute. + + +\membersection{wxTextAttr::GetFont}\label{wxtextattrgetfont} + +\constfunc{const wxFont\&}{GetFont}{\void} + +Return the text font specified by this attribute. + + +\membersection{wxTextAttr::GetLeftIndent}\label{wxtextattrgetleftindent} + +\constfunc{int}{GetLeftIndent}{\void} + +Returns the left indent in tenths of a millimetre. + + +\membersection{wxTextAttr::GetLeftSubIndent}\label{wxtextattrgetleftsubindent} + +\constfunc{int}{GetLeftSubIndent}{\void} + +Returns the left sub indent for all lines but the first line in a paragraph in +tenths of a millimetre. + + +\membersection{wxTextAttr::GetRightIndent}\label{wxtextattrgetrightindent} + +\constfunc{int}{GetRightIndent}{\void} + +Returns the right indent in tenths of a millimetre. + + +\membersection{wxTextAttr::GetTabs}\label{wxtextattrgettabs} + +\constfunc{const wxArrayInt\&}{GetTabs}{\void} + +Returns the array of integers representing the tab stops. Each +array element specifies the tab stop in tenths of a millimetre. + + +\membersection{wxTextAttr::GetTextColour}\label{wxtextattrgettextcolour} + +\constfunc{const wxColour\&}{GetTextColour}{\void} + +Return the text colour specified by this attribute. + + +\membersection{wxTextAttr::HasBackgroundColour}\label{wxtextattrhasbackgroundcolour} + +\constfunc{bool}{HasBackgroundColour}{\void} + +Returns {\tt true} if this style specifies the background colour to use. + + +\membersection{wxTextAttr::HasFont}\label{wxtextattrhasfont} + +\constfunc{bool}{HasFont}{\void} + +Returns {\tt true} if this style specifies the font to use. + + +\membersection{wxTextAttr::HasTextColour}\label{wxtextattrhastextcolour} + +\constfunc{bool}{HasTextColour}{\void} + +Returns {\tt true} if this style specifies the foreground colour to use. + + +\membersection{wxTextAttr::GetFlags}\label{wxtextattrgetflags} + +\func{long}{GetFlags}{\void} + +Returns a bitlist indicating which attributes will be set. + + +\membersection{wxTextAttr::IsDefault}\label{wxtextattrisdefault} + +\constfunc{bool}{IsDefault}{\void} + +Returns {\tt true} if this style specifies any non-default attributes. + + +\membersection{wxTextAttr::Merge}\label{wxtextattrmerge} + +\func{void}{Merge}{\param{const wxTextAttr\&}{ overlay}} + +Copies all defined/valid properties from \arg{overlay} to current object. + +\func{static wxTextAttr}{Merge}{\param{const wxTextAttr\&}{ base}, \param{const wxTextAttr\&}{ overlay}} + +Creates a new {\tt wxTextAttr} which is a merge of \arg{base} and +\arg{overlay}. Properties defined in \arg{overlay} take precedence over those +in \arg{base}. Properties undefined/invalid in both are undefined in the +result. + + +\membersection{wxTextAttr::SetAlignment}\label{wxtextattrsetalignment} + +\func{void}{SetAlignment}{\param{wxTextAttrAlignment}{ alignment}} + +Sets the paragraph alignment. + + +\membersection{wxTextAttr::SetBackgroundColour}\label{wxtextattrsetbackgroundcolour} + +\func{void}{SetBackgroundColour}{\param{const wxColour\& }{colour}} + +Sets the background colour. + + +\membersection{wxTextAttr::SetFlags}\label{wxtextattrsetflags} + +\func{void}{SetFlags}{\param{long}{ flags}} + +Pass a bitlist indicating which attributes will be set. + + +\membersection{wxTextAttr::SetFont}\label{wxtextattrsetfont} + +\func{void}{SetFont}{\param{const wxFont\&}{ font}} + +Sets the text font. + + +\membersection{wxTextAttr::SetLeftIndent}\label{wxtextattrsetleftindent} + +\func{void}{SetLeftIndent}{\param{int }{indent}, \param{int }{subIndent = 0}} + +Sets the left indent in tenths of a millimetre. +subIndent sets the indent for all lines but the first line in a paragraph +relative to the first line. + + +\membersection{wxTextAttr::SetRightIndent}\label{wxtextattrsetrightindent} + +\func{void}{SetRightIndent}{\param{int }{indent}} + +Sets the right indent in tenths of a millimetre. + + +\membersection{wxTextAttr::SetTabs}\label{wxtextattrsettabs} + +\func{void}{SetTabs}{\param{const wxArrayInt\&}{ tabs}} + +Sets the array of integers representing the tab stops. Each +array element specifies the tab stop in tenths of a millimetre. + + +\membersection{wxTextAttr::SetTextColour}\label{wxtextattrsettextcolour} + +\func{void}{SetTextColour}{\param{const wxColour\& }{colour}} + +Sets the text colour. diff --git a/docs/latex/wx/textattrex.tex b/docs/latex/wx/textattrex.tex new file mode 100644 index 0000000000..80c8275045 --- /dev/null +++ b/docs/latex/wx/textattrex.tex @@ -0,0 +1,333 @@ +\section{\class{wxTextAttrEx}}\label{wxtextattrex} + +wxTextAttrEx is an extended version of wxTextAttr with more paragraph attributes. +Currently it is only used with \helpref{wxRichTextCtrl}{wxrichtextctrl}. + +It is intended that eventually, the members of wxTextAttrEx will +be folded into wxTextAttr, and wxTextAttr will be the official +cross-platform API for text controls that support attributes. +However, for now, wxTextAttrEx is provided as a means of enabling +extra functionality in wxRichTextCtrl, while retaining some compatibility +with the wxTextAttr API. + +The most efficient method of accessing wxRichTextCtrl functionality +is a third attribute class, \helpref{wxRichTextAttr}{wxrichtextattr}, which +optimizes its storage to allow it to be used for implementing objects +in a buffer, as well as access to that buffer. + +This section only documents the additional members; see \helpref{wxTextAttr}{wxtextattr} for +the remaining functions. + +\wxheading{Derived from} + +\helpref{wxTextAttr}{wxtextattr} + +\wxheading{Include files} + + + +\wxheading{Constants} + +The following values can be passed to SetAlignment to determine +paragraph alignment. + +{\small +\begin{verbatim} +enum wxTextAttrAlignment +{ + wxTEXT_ALIGNMENT_DEFAULT, + wxTEXT_ALIGNMENT_LEFT, + wxTEXT_ALIGNMENT_CENTRE, + wxTEXT_ALIGNMENT_CENTER = wxTEXT_ALIGNMENT_CENTRE, + wxTEXT_ALIGNMENT_RIGHT, + wxTEXT_ALIGNMENT_JUSTIFIED +}; +\end{verbatim} +} + +These values are passed in a bitlist to SetFlags to determine +what attributes will be considered when setting the attributes +for a text control. + +{\small +\begin{verbatim} +// Standard wxTextAttr constants + +#define wxTEXT_ATTR_TEXT_COLOUR 0x0001 +#define wxTEXT_ATTR_BACKGROUND_COLOUR 0x0002 +#define wxTEXT_ATTR_FONT_FACE 0x0004 +#define wxTEXT_ATTR_FONT_SIZE 0x0008 +#define wxTEXT_ATTR_FONT_WEIGHT 0x0010 +#define wxTEXT_ATTR_FONT_ITALIC 0x0020 +#define wxTEXT_ATTR_FONT_UNDERLINE 0x0040 +#define wxTEXT_ATTR_FONT \ + wxTEXT_ATTR_FONT_FACE | wxTEXT_ATTR_FONT_SIZE | wxTEXT_ATTR_FONT_WEIGHT \ +| wxTEXT_ATTR_FONT_ITALIC | wxTEXT_ATTR_FONT_UNDERLINE +#define wxTEXT_ATTR_ALIGNMENT 0x0080 +#define wxTEXT_ATTR_LEFT_INDENT 0x0100 +#define wxTEXT_ATTR_RIGHT_INDENT 0x0200 +#define wxTEXT_ATTR_TABS 0x0400 + +// Extra formatting flags not in wxTextAttr + +#define wxTEXT_ATTR_PARA_SPACING_AFTER 0x00000800 +#define wxTEXT_ATTR_PARA_SPACING_BEFORE 0x00001000 +#define wxTEXT_ATTR_LINE_SPACING 0x00002000 +#define wxTEXT_ATTR_CHARACTER_STYLE_NAME 0x00004000 +#define wxTEXT_ATTR_PARAGRAPH_STYLE_NAME 0x00008000 +#define wxTEXT_ATTR_BULLET_STYLE 0x00010000 +#define wxTEXT_ATTR_BULLET_NUMBER 0x00020000 +#define wxTEXT_ATTR_BULLET_SYMBOL 0x00040000 +\end{verbatim} +} + +The following styles can be passed to wxRichTextAttr::SetBulletStyle: + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_BULLET_STYLE_NONE 0x0000 +#define wxTEXT_ATTR_BULLET_STYLE_ARABIC 0x0001 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER 0x0002 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER 0x0004 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER 0x0008 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER 0x0010 +#define wxTEXT_ATTR_BULLET_STYLE_SYMBOL 0x0020 +#define wxTEXT_ATTR_BULLET_STYLE_BITMAP 0x0040 +#define wxTEXT_ATTR_BULLET_STYLE_PARENTHESES 0x0080 +#define wxTEXT_ATTR_BULLET_STYLE_PERIOD 0x0100 +\end{verbatim} +} + +The following constants can be passed to wxRichTextAttr::SetLineSpacing: + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_LINE_SPACING_NORMAL 10 +#define wxTEXT_ATTR_LINE_SPACING_HALF 15 +#define wxTEXT_ATTR_LINE_SPACING_TWICE 20 +\end{verbatim} +} + +\wxheading{See also} + +\helpref{wxTextAttr}{wxtextattr}, \helpref{wxRichTextAttr}{wxrichtextattr}, \helpref{wxRichTextCtrl}{wxrichtextctrl} + +\latexignore{\rtfignore{\wxheading{Members}}} + + +\membersection{wxTextAttrEx::wxTextAttrEx}\label{wxtextattrexwxtextattrex} + +\func{}{wxTextAttrEx}{\void} + + +\func{}{wxTextAttrEx}{\param{const wxTextAttrEx\& }{attr}} + +Constructors. + +\membersection{wxTextAttrEx::GetBulletNumber}\label{wxtextattrexgetbulletnumber} + +\constfunc{int}{GetBulletNumber}{\void} + +Returns the bullet number. + +\membersection{wxTextAttrEx::GetBulletStyle}\label{wxtextattrexgetbulletstyle} + +\constfunc{int}{GetBulletStyle}{\void} + +Returns the bullet style. +See \helpref{wxTextAttrEx::SetBulletStyle}{wxtextattrexsetbulletstyle} for a list of available styles. + +\membersection{wxTextAttrEx::GetBulletSymbol}\label{wxtextattrexgetbulletsymbol} + +\constfunc{wxChar}{GetBulletSymbol}{\void} + +Returns the bullet symbol, a character. + +\membersection{wxTextAttrEx::GetCharacterStyleName}\label{wxtextattrexgetcharacterstylename} + +\constfunc{const wxString\&}{GetCharacterStyleName}{\void} + +Returns the name of the character style. + +\membersection{wxTextAttrEx::GetLineSpacing}\label{wxtextattrexgetlinespacing} + +\constfunc{int}{GetLineSpacing}{\void} + +Returns the line spacing value, one of wxTEXT\_ATTR\_LINE\_SPACING\_NORMAL, +wxTEXT\_ATTR\_LINE\_SPACING\_HALF, and wxTEXT\_ATTR\_LINE\_SPACING\_TWICE. + +\membersection{wxTextAttrEx::GetParagraphSpacingAfter}\label{wxtextattrexgetparagraphspacingafter} + +\constfunc{int}{GetParagraphSpacingAfter}{\void} + +Returns the space in tenths of a millimeter after the paragraph. + +\membersection{wxTextAttrEx::GetParagraphSpacingBefore}\label{wxtextattrexgetparagraphspacingbefore} + +\constfunc{int}{GetParagraphSpacingBefore}{\void} + +Returns the space in tenths of a millimeter before the paragraph. + +\membersection{wxTextAttrEx::GetParagraphStyleName}\label{wxtextattrexgetparagraphstylename} + +\constfunc{const wxString\&}{GetParagraphStyleName}{\void} + +Returns the name of the paragraph style. + +\membersection{wxTextAttrEx::HasBulletNumber}\label{wxtextattrexhasbulletnumber} + +\constfunc{bool}{HasBulletNumber}{\void} + +Returns \true if the attribute object specifies a bullet number. + +\membersection{wxTextAttrEx::HasBulletStyle}\label{wxtextattrexhasbulletstyle} + +\constfunc{bool}{HasBulletStyle}{\void} + +Returns \true if the attribute object specifies a bullet style. + +\membersection{wxTextAttrEx::HasBulletSymbol}\label{wxtextattrexhasbulletsymbol} + +\constfunc{bool}{HasBulletSymbol}{\void} + +Returns \true if the attribute object specifies a bullet symbol. + +\membersection{wxTextAttrEx::HasCharacterStyleName}\label{wxtextattrexhascharacterstylename} + +\constfunc{bool}{HasCharacterStyleName}{\void} + +Returns \true if the attribute object specifies a character style name. + +\membersection{wxTextAttrEx::HasLineSpacing}\label{wxtextattrexhaslinespacing} + +\constfunc{bool}{HasLineSpacing}{\void} + +Returns \true if the attribute object specifies line spacing. + +\membersection{wxTextAttrEx::HasParagraphSpacingAfter}\label{wxtextattrexhasparagraphspacingafter} + +\constfunc{bool}{HasParagraphSpacingAfter}{\void} + +Returns \true if the attribute object specifies spacing after a paragraph. + +\membersection{wxTextAttrEx::HasParagraphSpacingBefore}\label{wxtextattrexhasparagraphspacingbefore} + +\constfunc{bool}{HasParagraphSpacingBefore}{\void} + +Returns \true if the attribute object specifies spacing before a paragraph. + +\membersection{wxTextAttrEx::HasParagraphStyleName}\label{wxtextattrexhasparagraphstylename} + +\constfunc{bool}{HasParagraphStyleName}{\void} + +Returns \true if the attribute object specifies a paragraph style name. + +\membersection{wxTextAttrEx::Init}\label{wxtextattrexinit} + +\func{void}{Init}{\void} + +Initialises this object. + +\membersection{wxTextAttrEx::IsCharacterStyle}\label{wxtextattrexischaracterstyle} + +\constfunc{bool}{IsCharacterStyle}{\void} + +Returns \true if the object represents a character style, that is, +the flags specify a font or a text background or foreground colour. + +\membersection{wxTextAttrEx::IsDefault}\label{wxtextattrexisdefault} + +\constfunc{bool}{IsDefault}{\void} + +Returns \false if we have any attributes set, \true otherwise. + +\membersection{wxTextAttrEx::IsParagraphStyle}\label{wxtextattrexisparagraphstyle} + +\constfunc{bool}{IsParagraphStyle}{\void} + +Returns \true if the object represents a paragraph style, that is, +the flags specify alignment, indentation, tabs, paragraph spacing, or +bullet style. + +\membersection{wxTextAttrEx::SetBulletNumber}\label{wxtextattrexsetbulletnumber} + +\func{void}{SetBulletNumber}{\param{int }{n}} + +Sets the bullet number. + +\membersection{wxTextAttrEx::SetBulletStyle}\label{wxtextattrexsetbulletstyle} + +\func{void}{SetBulletStyle}{\param{int }{style}} + +Sets the bullet style. The following styles can be passed: + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_BULLET_STYLE_NONE 0x0000 +#define wxTEXT_ATTR_BULLET_STYLE_ARABIC 0x0001 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER 0x0002 +#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER 0x0004 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER 0x0008 +#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER 0x0010 +#define wxTEXT_ATTR_BULLET_STYLE_SYMBOL 0x0020 +#define wxTEXT_ATTR_BULLET_STYLE_BITMAP 0x0040 +#define wxTEXT_ATTR_BULLET_STYLE_PARENTHESES 0x0080 +#define wxTEXT_ATTR_BULLET_STYLE_PERIOD 0x0100 +\end{verbatim} +} + +\membersection{wxTextAttrEx::SetBulletSymbol}\label{wxtextattrexsetbulletsymbol} + +\func{void}{SetBulletSymbol}{\param{wxChar }{symbol}} + +Sets the paragraph symbol. + +\membersection{wxTextAttrEx::SetCharacterStyleName}\label{wxtextattrexsetcharacterstylename} + +\func{void}{SetCharacterStyleName}{\param{const wxString\& }{name}} + +Sets the character style name. + +\membersection{wxTextAttrEx::SetLineSpacing}\label{wxtextattrexsetlinespacing} + +\func{void}{SetLineSpacing}{\param{int }{spacing}} + +Sets the line spacing. {\it spacing} is a multiple, where 10 means single-spacing, +15 means 1.5 spacing, and 20 means double spacing. The following constants are +defined for convenience: + +{\small +\begin{verbatim} +#define wxTEXT_ATTR_LINE_SPACING_NORMAL 10 +#define wxTEXT_ATTR_LINE_SPACING_HALF 15 +#define wxTEXT_ATTR_LINE_SPACING_TWICE 20 +\end{verbatim} +} + +\membersection{wxTextAttrEx::SetParagraphSpacingAfter}\label{wxtextattrexsetparagraphspacingafter} + +\func{void}{SetParagraphSpacingAfter}{\param{int }{spacing}} + +Sets the spacing after a paragraph, in tenths of a millimetre. + +\membersection{wxTextAttrEx::SetParagraphSpacingBefore}\label{wxtextattrexsetparagraphspacingbefore} + +\func{void}{SetParagraphSpacingBefore}{\param{int }{spacing}} + +Sets the spacing before a paragraph, in tenths of a millimetre. + +\membersection{wxTextAttrEx::SetParagraphStyleName}\label{wxtextattrexsetparagraphstylename} + +\func{void}{SetParagraphStyleName}{\param{const wxString\& }{name}} + +Sets the name of the paragraph style. + +\membersection{wxTextAttrEx::operator=}\label{wxtextattrexoperatorassign} + +\func{void operator}{operator=}{\param{const wxTextAttr\& }{attr}} + +Assignment from a wxTextAttr object. + +\func{void operator}{operator=}{\param{const wxTextAttrEx\& }{attr}} + +Assignment from a wxTextAttrEx object. diff --git a/docs/latex/wx/topics.tex b/docs/latex/wx/topics.tex index fed6b972c2..624e734dba 100644 --- a/docs/latex/wx/topics.tex +++ b/docs/latex/wx/topics.tex @@ -59,6 +59,7 @@ This chapter contains a selection of topic overviews. \input tdb.tex \input tipc.tex \input wxhtml.tex +\input richtextoverview.tex \input tenvvars.tex \input wxPython.tex \input re_syntax.tex -- 2.45.2