Extended wxTextAttr and added wxTextCtrl::GetStyle stub
allow better rich text support. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21272 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -50,8 +50,8 @@ No base class
|
|||||||
|
|
||||||
\wxheading{Constants}
|
\wxheading{Constants}
|
||||||
|
|
||||||
These flags define what kind of filenames is included in the list of files
|
These flags define what kind of filename is included in the list of files
|
||||||
enumerated by GetFirst/GetNext
|
enumerated by GetFirst/GetNext.
|
||||||
|
|
||||||
{\small
|
{\small
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
@@ -2,9 +2,13 @@
|
|||||||
|
|
||||||
\section{\class{wxTextAttr}}\label{wxtextattr}
|
\section{\class{wxTextAttr}}\label{wxtextattr}
|
||||||
|
|
||||||
wxTextAttr represents the attributes, or style, for a range of text in a\rtfsp
|
wxTextAttr represents the character and paragraph attributes, or style, for a range of text in a\rtfsp
|
||||||
\helpref{wxTextCtrl}{wxtextctrl}.
|
\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}
|
\wxheading{Derived from}
|
||||||
|
|
||||||
No base class
|
No base class
|
||||||
@@ -13,61 +17,185 @@ No base class
|
|||||||
|
|
||||||
<wx/textctrl.h>
|
<wx/textctrl.h>
|
||||||
|
|
||||||
|
\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}}}
|
\latexignore{\rtfignore{\wxheading{Members}}}
|
||||||
|
|
||||||
\membersection{wxTextAttr::wxTextAttr}\label{wxtextattrctor}
|
\membersection{wxTextAttr::wxTextAttr}\label{wxtextattrctor}
|
||||||
|
|
||||||
\func{}{wxTextAttr}{\void}
|
\func{}{wxTextAttr}{\void}
|
||||||
|
|
||||||
\func{}{wxTextAttr}{\param{const wxColour\& }{colText}, \param{const wxColour\& }{colBack = wxNullColour}, \param{const wxFont\& }{font = wxNullFont}}
|
\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 and background
|
The constructors initialize one or more of the text foreground colour, background
|
||||||
colours and font. The values not initialized in the constructor can be set
|
colour, font, and alignment. The values not initialized in the constructor can be set
|
||||||
later, otherwise \helpref{wxTextCtrl::SetStyle}{wxtextctrlsetstyle} will use
|
later, otherwise \helpref{wxTextCtrl::SetStyle}{wxtextctrlsetstyle} will use
|
||||||
the default values for them.
|
the default values for them.
|
||||||
|
|
||||||
\membersection{wxTextAttr::GetBackgroundColour}
|
\membersection{wxTextAttr::GetAlignment}\label{wxtextattrgetalignment}
|
||||||
|
|
||||||
|
\constfunc{wxTextAttrAlignment}{GetAlignment}{\void}
|
||||||
|
|
||||||
|
Returns the paragraph alignment.
|
||||||
|
|
||||||
|
\membersection{wxTextAttr::GetBackgroundColour}\label{wxtextattrgetbackgroundcolour}
|
||||||
|
|
||||||
\constfunc{const wxColour\&}{GetBackgroundColour}{\void}
|
\constfunc{const wxColour\&}{GetBackgroundColour}{\void}
|
||||||
|
|
||||||
Return the background colour specified by this attribute.
|
Return the background colour specified by this attribute.
|
||||||
|
|
||||||
\membersection{wxTextAttr::GetFont}
|
\membersection{wxTextAttr::GetFont}\label{wxtextattrgetfont}
|
||||||
|
|
||||||
\constfunc{const wxFont\&}{GetFont}{\void}
|
\constfunc{const wxFont\&}{GetFont}{\void}
|
||||||
|
|
||||||
Return the text font specified by this attribute.
|
Return the text font specified by this attribute.
|
||||||
|
|
||||||
\membersection{wxTextAttr::GetTextColour}
|
\membersection{wxTextAttr::GetLeftIndent}\label{wxtextattrgetleftindent}
|
||||||
|
|
||||||
|
\constfunc{int}{GetLeftIndent}{\void}
|
||||||
|
|
||||||
|
Returns the left indent 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}
|
\constfunc{const wxColour\&}{GetTextColour}{\void}
|
||||||
|
|
||||||
Return the text colour specified by this attribute.
|
Return the text colour specified by this attribute.
|
||||||
|
|
||||||
\membersection{wxTextAttr::HasBackgroundColour}
|
\membersection{wxTextAttr::HasBackgroundColour}\label{wxtextattrhasbackgroundcolour}
|
||||||
|
|
||||||
\constfunc{bool}{HasBackgroundColour}{\void}
|
\constfunc{bool}{HasBackgroundColour}{\void}
|
||||||
|
|
||||||
Returns {\tt true} if this style specifies the background colour to use.
|
Returns {\tt true} if this style specifies the background colour to use.
|
||||||
|
|
||||||
\membersection{wxTextAttr::HasFont}
|
\membersection{wxTextAttr::HasFont}\label{wxtextattrhasfont}
|
||||||
|
|
||||||
\constfunc{bool}{HasFont}{\void}
|
\constfunc{bool}{HasFont}{\void}
|
||||||
|
|
||||||
Returns {\tt true} if this style specifies the font to use.
|
Returns {\tt true} if this style specifies the font to use.
|
||||||
|
|
||||||
\membersection{wxTextAttr::HasTextColour}
|
\membersection{wxTextAttr::HasTextColour}\label{wxtextattrhastextcolour}
|
||||||
|
|
||||||
\constfunc{bool}{HasTextColour}{\void}
|
\constfunc{bool}{HasTextColour}{\void}
|
||||||
|
|
||||||
Returns {\tt true} if this style specifies the foreground colour to use.
|
Returns {\tt true} if this style specifies the foreground colour to use.
|
||||||
|
|
||||||
\membersection{wxTextAttr::IsDefault}
|
\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}
|
\constfunc{bool}{IsDefault}{\void}
|
||||||
|
|
||||||
Returns {\tt true} if this style specifies any non-default attributes.
|
Returns {\tt true} if this style specifies any non-default attributes.
|
||||||
|
|
||||||
|
\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}}
|
||||||
|
|
||||||
|
Sets the left indent in tenths of a millimetre.
|
||||||
|
|
||||||
|
\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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%% wxTextCtrl %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
\section{\class{wxTextCtrl}}\label{wxtextctrl}
|
\section{\class{wxTextCtrl}}\label{wxtextctrl}
|
||||||
@@ -576,6 +704,22 @@ consisting of the from and to values.}
|
|||||||
Gets the text currently selected in the control. If there is no selection, the
|
Gets the text currently selected in the control. If there is no selection, the
|
||||||
returned string is empty.
|
returned string is empty.
|
||||||
|
|
||||||
|
\membersection{wxTextCtrl::GetStyle}\label{wxtextctrlgetstyle}
|
||||||
|
|
||||||
|
\func{bool}{GetStyle}{\param{long }{position}, \param{wxTextAttr\& }{style}}
|
||||||
|
|
||||||
|
Returns the style at this position in the text control. Not all platforms
|
||||||
|
support this function.
|
||||||
|
|
||||||
|
\wxheading{Return value}
|
||||||
|
|
||||||
|
{\tt true} on success, {\tt false} if an error occured - it may also mean that
|
||||||
|
the styles are not supported under this platform.
|
||||||
|
|
||||||
|
\wxheading{See also}
|
||||||
|
|
||||||
|
\helpref{wxTextCtrl::SetStyle}{wxtextctrlsetstyle}, \helpref{wxTextAttr}{wxtextattr}
|
||||||
|
|
||||||
\membersection{wxTextCtrl::GetValue}\label{wxtextctrlgetvalue}
|
\membersection{wxTextCtrl::GetValue}\label{wxtextctrlgetvalue}
|
||||||
|
|
||||||
\constfunc{wxString}{GetValue}{\void}
|
\constfunc{wxString}{GetValue}{\void}
|
||||||
@@ -874,23 +1018,26 @@ in the control is selected.
|
|||||||
|
|
||||||
\func{bool}{SetStyle}{\param{long }{start}, \param{long }{end}, \param{const wxTextAttr\& }{style}}
|
\func{bool}{SetStyle}{\param{long }{start}, \param{long }{end}, \param{const wxTextAttr\& }{style}}
|
||||||
|
|
||||||
Changes the style of the selection. If either of the font, foreground, or
|
Changes the style of the given range. If any attribute within {\it style} is
|
||||||
background colour is not set in {\it style}, the values of\rtfsp
|
not set, the correspondign attribute from \helpref{GetDefaultStyle()}{wxtextctrlgetdefaultstyle} is used.
|
||||||
\helpref{GetDefaultStyle()}{wxtextctrlgetdefaultstyle} are used.
|
|
||||||
|
|
||||||
\wxheading{Parameters}
|
\wxheading{Parameters}
|
||||||
|
|
||||||
\docparam{start}{The start of selection to change.}
|
\docparam{start}{The start of the range to change.}
|
||||||
|
|
||||||
\docparam{end}{The end of selection to change.}
|
\docparam{end}{The end of the range to change.}
|
||||||
|
|
||||||
\docparam{style}{The new style for the selection.}
|
\docparam{style}{The new style for the range.}
|
||||||
|
|
||||||
\wxheading{Return value}
|
\wxheading{Return value}
|
||||||
|
|
||||||
{\tt true} on success, {\tt false} if an error occured - may also mean that
|
{\tt true} on success, {\tt false} if an error occured - it may also mean that
|
||||||
the styles are not supported under this platform.
|
the styles are not supported under this platform.
|
||||||
|
|
||||||
|
\wxheading{See also}
|
||||||
|
|
||||||
|
\helpref{wxTextCtrl::GetStyle}{wxtextctrlgetstyle}, \helpref{wxTextAttr}{wxtextattr}
|
||||||
|
|
||||||
\membersection{wxTextCtrl::SetValue}\label{wxtextctrlsetvalue}
|
\membersection{wxTextCtrl::SetValue}\label{wxtextctrlsetvalue}
|
||||||
|
|
||||||
\func{virtual void}{SetValue}{\param{const wxString\& }{ value}}
|
\func{virtual void}{SetValue}{\param{const wxString\& }{ value}}
|
||||||
|
@@ -349,7 +349,7 @@ public:
|
|||||||
|
|
||||||
// Operations
|
// Operations
|
||||||
|
|
||||||
// Each wxAccessible implementation must define this
|
// Each platform's implementation must define this
|
||||||
// static void NotifyEvent(int eventType, wxWindow* window, wxAccObject objectType,
|
// static void NotifyEvent(int eventType, wxWindow* window, wxAccObject objectType,
|
||||||
// int objectId);
|
// int objectId);
|
||||||
|
|
||||||
|
@@ -92,6 +92,7 @@ public:
|
|||||||
// controls)
|
// controls)
|
||||||
virtual bool SetStyle(long start, long end, const wxTextAttr& style);
|
virtual bool SetStyle(long start, long end, const wxTextAttr& style);
|
||||||
virtual bool SetDefaultStyle(const wxTextAttr& style);
|
virtual bool SetDefaultStyle(const wxTextAttr& style);
|
||||||
|
virtual bool GetStyle(long position, wxTextAttr& style);
|
||||||
#endif // wxUSE_RICHEDIT
|
#endif // wxUSE_RICHEDIT
|
||||||
|
|
||||||
// translate between the position (which is just an index in the text ctrl
|
// translate between the position (which is just an index in the text ctrl
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
#if wxUSE_TEXTCTRL
|
#if wxUSE_TEXTCTRL
|
||||||
|
|
||||||
#include "wx/control.h" // the base class
|
#include "wx/control.h" // the base class
|
||||||
|
#include "wx/dynarray.h"
|
||||||
|
|
||||||
// 16-bit Borland 4.0 doesn't seem to allow multiple inheritance with wxWindow
|
// 16-bit Borland 4.0 doesn't seem to allow multiple inheritance with wxWindow
|
||||||
// and streambuf: it complains about deriving a huge class from the huge class
|
// and streambuf: it complains about deriving a huge class from the huge class
|
||||||
@@ -102,6 +103,38 @@ WXDLLEXPORT_DATA(extern const wxChar*) wxEmptyString;
|
|||||||
// wxTE_RICH controls - can be used together with or instead of wxTE_RICH
|
// wxTE_RICH controls - can be used together with or instead of wxTE_RICH
|
||||||
#define wxTE_RICH2 0x8000
|
#define wxTE_RICH2 0x8000
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Types for wxTextAttr
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Alignment
|
||||||
|
|
||||||
|
enum wxTextAttrAlignment
|
||||||
|
{
|
||||||
|
wxTEXT_ALIGNMENT_DEFAULT,
|
||||||
|
wxTEXT_ALIGNMENT_LEFT,
|
||||||
|
wxTEXT_ALIGNMENT_CENTRE,
|
||||||
|
wxTEXT_ALIGNMENT_CENTER = wxTEXT_ALIGNMENT_CENTRE,
|
||||||
|
wxTEXT_ALIGNMENT_RIGHT,
|
||||||
|
wxTEXT_ALIGNMENT_JUSTIFIED
|
||||||
|
};
|
||||||
|
|
||||||
|
// Flags to indicate which attributes are being applied
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxTextAttr: a structure containing the visual attributes of a text
|
// wxTextAttr: a structure containing the visual attributes of a text
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -110,31 +143,52 @@ class WXDLLEXPORT wxTextAttr
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// ctors
|
// ctors
|
||||||
wxTextAttr() { }
|
wxTextAttr() { Init(); }
|
||||||
wxTextAttr(const wxColour& colText,
|
wxTextAttr(const wxColour& colText,
|
||||||
const wxColour& colBack = wxNullColour,
|
const wxColour& colBack = wxNullColour,
|
||||||
const wxFont& font = wxNullFont)
|
const wxFont& font = wxNullFont,
|
||||||
: m_colText(colText), m_colBack(colBack), m_font(font) { }
|
wxTextAttrAlignment alignment = wxTEXT_ALIGNMENT_DEFAULT);
|
||||||
|
|
||||||
|
// operations
|
||||||
|
void Init();
|
||||||
|
|
||||||
|
// operators
|
||||||
|
void operator= (const wxTextAttr& attr);
|
||||||
|
|
||||||
// setters
|
// setters
|
||||||
void SetTextColour(const wxColour& colText) { m_colText = colText; }
|
void SetTextColour(const wxColour& colText) { m_colText = colText; m_flags |= wxTEXT_ATTR_TEXT_COLOUR; }
|
||||||
void SetBackgroundColour(const wxColour& colBack) { m_colBack = colBack; }
|
void SetBackgroundColour(const wxColour& colBack) { m_colBack = colBack; m_flags |= wxTEXT_ATTR_BACKGROUND_COLOUR; }
|
||||||
void SetFont(const wxFont& font) { m_font = font; }
|
void SetFont(const wxFont& font, long flags = wxTEXT_ATTR_FONT) { m_font = font; m_flags |= flags; }
|
||||||
|
void SetAlignment(wxTextAttrAlignment alignment) { m_textAlignment = alignment; m_flags |= wxTEXT_ATTR_ALIGNMENT; }
|
||||||
|
void SetTabs(const wxArrayInt& tabs) { m_tabs = tabs; m_flags |= wxTEXT_ATTR_TABS; }
|
||||||
|
void SetLeftIndent(int indent) { m_leftIndent = indent; m_flags |= wxTEXT_ATTR_LEFT_INDENT; }
|
||||||
|
void SetRightIndent(int indent) { m_rightIndent = indent; m_flags |= wxTEXT_ATTR_RIGHT_INDENT; }
|
||||||
|
void SetFlags(long flags) { m_flags = flags; }
|
||||||
|
|
||||||
// accessors
|
// accessors
|
||||||
bool HasTextColour() const { return m_colText.Ok(); }
|
bool HasTextColour() const { return m_colText.Ok() && HasFlag(wxTEXT_ATTR_TEXT_COLOUR) ; }
|
||||||
bool HasBackgroundColour() const { return m_colBack.Ok(); }
|
bool HasBackgroundColour() const { return m_colBack.Ok() && HasFlag(wxTEXT_ATTR_BACKGROUND_COLOUR) ; }
|
||||||
bool HasFont() const { return m_font.Ok(); }
|
bool HasFont() const { return m_font.Ok() && HasFlag(wxTEXT_ATTR_FONT) ; }
|
||||||
|
bool HasAlignment() const { return (m_textAlignment != wxTEXT_ALIGNMENT_DEFAULT) || ((m_flags & wxTEXT_ATTR_ALIGNMENT) != 0) ; }
|
||||||
|
bool HasTabs() const { return (m_flags & wxTEXT_ATTR_TABS) != 0 ; }
|
||||||
|
bool HasLeftIndent() const { return (m_flags & wxTEXT_ATTR_LEFT_INDENT) != 0 ; }
|
||||||
|
bool HasRightIndent() const { return (m_flags & wxTEXT_ATTR_RIGHT_INDENT) != 0 ; }
|
||||||
|
bool HasFlag(long flag) const { return (m_flags & flag) != 0; }
|
||||||
|
|
||||||
// setters
|
|
||||||
const wxColour& GetTextColour() const { return m_colText; }
|
const wxColour& GetTextColour() const { return m_colText; }
|
||||||
const wxColour& GetBackgroundColour() const { return m_colBack; }
|
const wxColour& GetBackgroundColour() const { return m_colBack; }
|
||||||
const wxFont& GetFont() const { return m_font; }
|
const wxFont& GetFont() const { return m_font; }
|
||||||
|
wxTextAttrAlignment GetAlignment() const { return m_textAlignment; }
|
||||||
|
const wxArrayInt& GetTabs() const { return m_tabs; }
|
||||||
|
long GetLeftIndent() const { return m_leftIndent; }
|
||||||
|
long GetRightIndent() const { return m_rightIndent; }
|
||||||
|
long GetFlags() const { return m_flags; }
|
||||||
|
|
||||||
// returns false if we have any attributes set, true otherwise
|
// returns false if we have any attributes set, true otherwise
|
||||||
bool IsDefault() const
|
bool IsDefault() const
|
||||||
{
|
{
|
||||||
return !HasTextColour() && !HasBackgroundColour() && !HasFont();
|
return !HasTextColour() && !HasBackgroundColour() && !HasFont() && !HasAlignment() &&
|
||||||
|
!HasTabs() && !HasLeftIndent() && !HasRightIndent() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
// return the attribute having the valid font and colours: it uses the
|
// return the attribute having the valid font and colours: it uses the
|
||||||
@@ -145,9 +199,14 @@ public:
|
|||||||
const wxTextCtrlBase *text);
|
const wxTextCtrlBase *text);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxColour m_colText,
|
long m_flags;
|
||||||
m_colBack;
|
wxColour m_colText,
|
||||||
wxFont m_font;
|
m_colBack;
|
||||||
|
wxFont m_font;
|
||||||
|
wxTextAttrAlignment m_textAlignment;
|
||||||
|
wxArrayInt m_tabs; // array of int: tab stops in 1/10 mm
|
||||||
|
int m_leftIndent; // left indent in 1/10 mm
|
||||||
|
int m_rightIndent; // right indent in 1/10 mm
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -224,6 +283,7 @@ public:
|
|||||||
// methods allow to apply the given text style to the given selection or to
|
// methods allow to apply the given text style to the given selection or to
|
||||||
// set/get the style which will be used for all appended text
|
// set/get the style which will be used for all appended text
|
||||||
virtual bool SetStyle(long start, long end, const wxTextAttr& style);
|
virtual bool SetStyle(long start, long end, const wxTextAttr& style);
|
||||||
|
virtual bool GetStyle(long position, wxTextAttr& style);
|
||||||
virtual bool SetDefaultStyle(const wxTextAttr& style);
|
virtual bool SetDefaultStyle(const wxTextAttr& style);
|
||||||
virtual const wxTextAttr& GetDefaultStyle() const;
|
virtual const wxTextAttr& GetDefaultStyle() const;
|
||||||
|
|
||||||
|
@@ -44,6 +44,9 @@
|
|||||||
#define wxUSE_CLIPBOARD 0
|
#define wxUSE_CLIPBOARD 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "wx/colordlg.h"
|
||||||
|
#include "wx/fontdlg.h"
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// class definitions
|
// class definitions
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
@@ -199,6 +202,7 @@ public:
|
|||||||
void OnLogClear(wxCommandEvent& event);
|
void OnLogClear(wxCommandEvent& event);
|
||||||
void OnFileSave(wxCommandEvent& event);
|
void OnFileSave(wxCommandEvent& event);
|
||||||
void OnFileLoad(wxCommandEvent& event);
|
void OnFileLoad(wxCommandEvent& event);
|
||||||
|
void OnRichTextTest(wxCommandEvent& event);
|
||||||
|
|
||||||
void OnSetEditable(wxCommandEvent& event);
|
void OnSetEditable(wxCommandEvent& event);
|
||||||
void OnSetEnabled(wxCommandEvent& event);
|
void OnSetEnabled(wxCommandEvent& event);
|
||||||
@@ -260,6 +264,34 @@ private:
|
|||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RichTextFrame is used to demonstrate rich text behaviour
|
||||||
|
*/
|
||||||
|
|
||||||
|
class RichTextFrame: public wxFrame
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RichTextFrame(wxWindow* parent, const wxString& title);
|
||||||
|
|
||||||
|
// Event handlers
|
||||||
|
|
||||||
|
void OnClose(wxCommandEvent& event);
|
||||||
|
void OnLeftAlign(wxCommandEvent& event);
|
||||||
|
void OnRightAlign(wxCommandEvent& event);
|
||||||
|
void OnJustify(wxCommandEvent& event);
|
||||||
|
void OnCentre(wxCommandEvent& event);
|
||||||
|
void OnChangeFont(wxCommandEvent& event);
|
||||||
|
void OnChangeTextColour(wxCommandEvent& event);
|
||||||
|
void OnChangeBackgroundColour(wxCommandEvent& event);
|
||||||
|
void OnLeftIndent(wxCommandEvent& event);
|
||||||
|
void OnRightIndent(wxCommandEvent& event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxTextCtrl *m_textCtrl;
|
||||||
|
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// main()
|
// main()
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
@@ -277,6 +309,7 @@ enum
|
|||||||
TEXT_LOAD,
|
TEXT_LOAD,
|
||||||
TEXT_SAVE,
|
TEXT_SAVE,
|
||||||
TEXT_CLEAR,
|
TEXT_CLEAR,
|
||||||
|
TEXT_RICH_TEXT_TEST,
|
||||||
|
|
||||||
// clipboard menu
|
// clipboard menu
|
||||||
TEXT_CLIPBOARD_COPY = 200,
|
TEXT_CLIPBOARD_COPY = 200,
|
||||||
@@ -325,6 +358,8 @@ bool MyApp::OnInit()
|
|||||||
file_menu->Append(TEXT_LOAD, _T("&Load file\tCtrl-O"),
|
file_menu->Append(TEXT_LOAD, _T("&Load file\tCtrl-O"),
|
||||||
_T("Load the sample file into text control"));
|
_T("Load the sample file into text control"));
|
||||||
file_menu->AppendSeparator();
|
file_menu->AppendSeparator();
|
||||||
|
file_menu->Append(TEXT_RICH_TEXT_TEST, _T("Show Rich Text Editor"));
|
||||||
|
file_menu->AppendSeparator();
|
||||||
file_menu->Append(TEXT_ABOUT, _T("&About\tAlt-A"));
|
file_menu->Append(TEXT_ABOUT, _T("&About\tAlt-A"));
|
||||||
file_menu->AppendSeparator();
|
file_menu->AppendSeparator();
|
||||||
file_menu->Append(TEXT_QUIT, _T("E&xit\tAlt-X"), _T("Quit this sample"));
|
file_menu->Append(TEXT_QUIT, _T("E&xit\tAlt-X"), _T("Quit this sample"));
|
||||||
@@ -1065,6 +1100,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_MENU(TEXT_ABOUT, MyFrame::OnAbout)
|
EVT_MENU(TEXT_ABOUT, MyFrame::OnAbout)
|
||||||
EVT_MENU(TEXT_SAVE, MyFrame::OnFileSave)
|
EVT_MENU(TEXT_SAVE, MyFrame::OnFileSave)
|
||||||
EVT_MENU(TEXT_LOAD, MyFrame::OnFileLoad)
|
EVT_MENU(TEXT_LOAD, MyFrame::OnFileLoad)
|
||||||
|
EVT_MENU(TEXT_RICH_TEXT_TEST, MyFrame::OnRichTextTest)
|
||||||
|
|
||||||
EVT_MENU(TEXT_LOG_KEY, MyFrame::OnLogKey)
|
EVT_MENU(TEXT_LOG_KEY, MyFrame::OnLogKey)
|
||||||
EVT_MENU(TEXT_LOG_CHAR, MyFrame::OnLogChar)
|
EVT_MENU(TEXT_LOG_CHAR, MyFrame::OnLogChar)
|
||||||
@@ -1223,6 +1259,12 @@ void MyFrame::OnFileLoad(wxCommandEvent& event)
|
|||||||
wxLogStatus(this, _T("Couldn't load the file"));
|
wxLogStatus(this, _T("Couldn't load the file"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnRichTextTest(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
RichTextFrame* frame = new RichTextFrame(this, _T("Rich Text Editor"));
|
||||||
|
frame->Show(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
void MyFrame::OnIdle( wxIdleEvent& event )
|
void MyFrame::OnIdle( wxIdleEvent& event )
|
||||||
{
|
{
|
||||||
// track the window which has the focus in the status bar
|
// track the window which has the focus in the status bar
|
||||||
@@ -1249,3 +1291,230 @@ void MyFrame::OnIdle( wxIdleEvent& event )
|
|||||||
}
|
}
|
||||||
event.Skip();
|
event.Skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RichTextFrame is used to demonstrate rich text behaviour
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
RICHTEXT_CLOSE = 1000,
|
||||||
|
RICHTEXT_LEFT_ALIGN,
|
||||||
|
RICHTEXT_RIGHT_ALIGN,
|
||||||
|
RICHTEXT_CENTRE,
|
||||||
|
RICHTEXT_JUSTIFY,
|
||||||
|
RICHTEXT_CHANGE_FONT,
|
||||||
|
RICHTEXT_CHANGE_TEXT_COLOUR,
|
||||||
|
RICHTEXT_CHANGE_BACKGROUND_COLOUR,
|
||||||
|
RICHTEXT_LEFT_INDENT,
|
||||||
|
RICHTEXT_RIGHT_INDENT
|
||||||
|
};
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(RichTextFrame, wxFrame)
|
||||||
|
EVT_MENU(RICHTEXT_CLOSE, RichTextFrame::OnClose)
|
||||||
|
EVT_MENU(RICHTEXT_LEFT_ALIGN, RichTextFrame::OnLeftAlign)
|
||||||
|
EVT_MENU(RICHTEXT_RIGHT_ALIGN, RichTextFrame::OnRightAlign)
|
||||||
|
EVT_MENU(RICHTEXT_CENTRE, RichTextFrame::OnCentre)
|
||||||
|
EVT_MENU(RICHTEXT_JUSTIFY, RichTextFrame::OnJustify)
|
||||||
|
EVT_MENU(RICHTEXT_CHANGE_FONT, RichTextFrame::OnChangeFont)
|
||||||
|
EVT_MENU(RICHTEXT_CHANGE_TEXT_COLOUR, RichTextFrame::OnChangeTextColour)
|
||||||
|
EVT_MENU(RICHTEXT_CHANGE_BACKGROUND_COLOUR, RichTextFrame::OnChangeBackgroundColour)
|
||||||
|
EVT_MENU(RICHTEXT_LEFT_INDENT, RichTextFrame::OnLeftIndent)
|
||||||
|
EVT_MENU(RICHTEXT_RIGHT_INDENT, RichTextFrame::OnRightIndent)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
RichTextFrame::RichTextFrame(wxWindow* parent, const wxString& title):
|
||||||
|
wxFrame(parent, -1, title, wxDefaultPosition, wxSize(300, 400))
|
||||||
|
{
|
||||||
|
m_textCtrl = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition,
|
||||||
|
wxDefaultSize, wxTE_MULTILINE|wxTE_RICH2);
|
||||||
|
|
||||||
|
wxString value;
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
int j;
|
||||||
|
for (j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
value << wxT("Hello, welcome to a very simple rich text editor. You can set some character and paragraph styles from the Edit menu. ");
|
||||||
|
}
|
||||||
|
value << wxT("\n\n");
|
||||||
|
}
|
||||||
|
m_textCtrl->SetValue(value);
|
||||||
|
|
||||||
|
wxMenuBar* menuBar = new wxMenuBar;
|
||||||
|
wxMenu* fileMenu = new wxMenu;
|
||||||
|
fileMenu->Append(RICHTEXT_CLOSE, _("Close\tCtrl+W"));
|
||||||
|
menuBar->Append(fileMenu, _("File"));
|
||||||
|
|
||||||
|
wxMenu* editMenu = new wxMenu;
|
||||||
|
editMenu->Append(RICHTEXT_LEFT_ALIGN, _("Left Align"));
|
||||||
|
editMenu->Append(RICHTEXT_RIGHT_ALIGN, _("Right Align"));
|
||||||
|
editMenu->Append(RICHTEXT_CENTRE, _("Centre"));
|
||||||
|
editMenu->Append(RICHTEXT_JUSTIFY, _("Justify"));
|
||||||
|
editMenu->AppendSeparator();
|
||||||
|
editMenu->Append(RICHTEXT_CHANGE_FONT, _("Change Font"));
|
||||||
|
editMenu->Append(RICHTEXT_CHANGE_TEXT_COLOUR, _("Change Text Colour"));
|
||||||
|
editMenu->Append(RICHTEXT_CHANGE_BACKGROUND_COLOUR, _("Change Background Colour"));
|
||||||
|
editMenu->AppendSeparator();
|
||||||
|
editMenu->Append(RICHTEXT_LEFT_INDENT, _("Left Indent"));
|
||||||
|
editMenu->Append(RICHTEXT_RIGHT_INDENT, _("Right indent"));
|
||||||
|
menuBar->Append(editMenu, _("Edit"));
|
||||||
|
|
||||||
|
SetMenuBar(menuBar);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Event handlers
|
||||||
|
|
||||||
|
void RichTextFrame::OnClose(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
Close(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RichTextFrame::OnLeftAlign(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
wxTextAttr attr;
|
||||||
|
attr.SetAlignment(wxTEXT_ALIGNMENT_LEFT);
|
||||||
|
|
||||||
|
long start, end;
|
||||||
|
m_textCtrl->GetSelection(& start, & end);
|
||||||
|
m_textCtrl->SetStyle(start, end, attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RichTextFrame::OnRightAlign(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
wxTextAttr attr;
|
||||||
|
attr.SetAlignment(wxTEXT_ALIGNMENT_RIGHT);
|
||||||
|
|
||||||
|
long start, end;
|
||||||
|
m_textCtrl->GetSelection(& start, & end);
|
||||||
|
m_textCtrl->SetStyle(start, end, attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RichTextFrame::OnJustify(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
wxTextAttr attr;
|
||||||
|
attr.SetAlignment(wxTEXT_ALIGNMENT_JUSTIFIED);
|
||||||
|
|
||||||
|
long start, end;
|
||||||
|
m_textCtrl->GetSelection(& start, & end);
|
||||||
|
m_textCtrl->SetStyle(start, end, attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RichTextFrame::OnCentre(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
wxTextAttr attr;
|
||||||
|
attr.SetAlignment(wxTEXT_ALIGNMENT_CENTRE);
|
||||||
|
|
||||||
|
long start, end;
|
||||||
|
m_textCtrl->GetSelection(& start, & end);
|
||||||
|
m_textCtrl->SetStyle(start, end, attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RichTextFrame::OnChangeFont(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
wxFontData data;
|
||||||
|
|
||||||
|
wxFontDialog dialog(this, data);
|
||||||
|
|
||||||
|
if (dialog.ShowModal() == wxID_OK)
|
||||||
|
{
|
||||||
|
wxFontData retData = dialog.GetFontData();
|
||||||
|
wxFont font = retData.GetChosenFont();
|
||||||
|
|
||||||
|
wxTextAttr attr;
|
||||||
|
attr.SetFont(font);
|
||||||
|
|
||||||
|
long start, end;
|
||||||
|
m_textCtrl->GetSelection(& start, & end);
|
||||||
|
m_textCtrl->SetStyle(start, end, attr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RichTextFrame::OnChangeTextColour(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
wxColourData data;
|
||||||
|
data.SetColour(* wxBLACK);
|
||||||
|
data.SetChooseFull(TRUE);
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
wxColour colour(i*16, i*16, i*16);
|
||||||
|
data.SetCustomColour(i, colour);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxColourDialog dialog(this, &data);
|
||||||
|
dialog.SetTitle(_T("Choose the text colour"));
|
||||||
|
if (dialog.ShowModal() == wxID_OK)
|
||||||
|
{
|
||||||
|
wxColourData retData = dialog.GetColourData();
|
||||||
|
wxColour col = retData.GetColour();
|
||||||
|
|
||||||
|
wxTextAttr attr;
|
||||||
|
attr.SetTextColour(col);
|
||||||
|
|
||||||
|
long start, end;
|
||||||
|
m_textCtrl->GetSelection(& start, & end);
|
||||||
|
m_textCtrl->SetStyle(start, end, attr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RichTextFrame::OnChangeBackgroundColour(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
wxColourData data;
|
||||||
|
data.SetColour(* wxWHITE);
|
||||||
|
data.SetChooseFull(TRUE);
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
wxColour colour(i*16, i*16, i*16);
|
||||||
|
data.SetCustomColour(i, colour);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxColourDialog dialog(this, &data);
|
||||||
|
dialog.SetTitle(_T("Choose the text background colour"));
|
||||||
|
if (dialog.ShowModal() == wxID_OK)
|
||||||
|
{
|
||||||
|
wxColourData retData = dialog.GetColourData();
|
||||||
|
wxColour col = retData.GetColour();
|
||||||
|
|
||||||
|
wxTextAttr attr;
|
||||||
|
attr.SetBackgroundColour(col);
|
||||||
|
|
||||||
|
long start, end;
|
||||||
|
m_textCtrl->GetSelection(& start, & end);
|
||||||
|
m_textCtrl->SetStyle(start, end, attr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RichTextFrame::OnLeftIndent(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
wxString indentStr = wxGetTextFromUser(_("Please enter the left indent in tenths of a millimetre."),
|
||||||
|
_("Left Indent"));
|
||||||
|
if (!indentStr.IsEmpty())
|
||||||
|
{
|
||||||
|
int indent = wxAtoi(indentStr);
|
||||||
|
|
||||||
|
wxTextAttr attr;
|
||||||
|
attr.SetLeftIndent(indent);
|
||||||
|
|
||||||
|
long start, end;
|
||||||
|
m_textCtrl->GetSelection(& start, & end);
|
||||||
|
m_textCtrl->SetStyle(start, end, attr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RichTextFrame::OnRightIndent(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
wxString indentStr = wxGetTextFromUser(_("Please enter the right indent in tenths of a millimetre."),
|
||||||
|
_("Right Indent"));
|
||||||
|
if (!indentStr.IsEmpty())
|
||||||
|
{
|
||||||
|
int indent = wxAtoi(indentStr);
|
||||||
|
|
||||||
|
wxTextAttr attr;
|
||||||
|
attr.SetRightIndent(indent);
|
||||||
|
|
||||||
|
long start, end;
|
||||||
|
m_textCtrl->GetSelection(& start, & end);
|
||||||
|
m_textCtrl->SetStyle(start, end, attr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -69,6 +69,30 @@ wxTextCtrlBase::~wxTextCtrlBase()
|
|||||||
// style functions - not implemented here
|
// style functions - not implemented here
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxTextAttr::wxTextAttr(const wxColour& colText,
|
||||||
|
const wxColour& colBack,
|
||||||
|
const wxFont& font,
|
||||||
|
wxTextAttrAlignment alignment)
|
||||||
|
: m_colText(colText), m_colBack(colBack), m_font(font), m_textAlignment(alignment)
|
||||||
|
{
|
||||||
|
m_flags = 0;
|
||||||
|
m_leftIndent = 0;
|
||||||
|
m_rightIndent = 0;
|
||||||
|
if (m_colText.Ok()) m_flags |= wxTEXT_ATTR_TEXT_COLOUR;
|
||||||
|
if (m_colBack.Ok()) m_flags |= wxTEXT_ATTR_BACKGROUND_COLOUR;
|
||||||
|
if (m_font.Ok()) m_flags |= wxTEXT_ATTR_FONT;
|
||||||
|
if (alignment != wxTEXT_ALIGNMENT_DEFAULT)
|
||||||
|
m_flags |= wxTEXT_ATTR_ALIGNMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextAttr::Init()
|
||||||
|
{
|
||||||
|
m_textAlignment = wxTEXT_ALIGNMENT_DEFAULT;
|
||||||
|
m_flags = 0;
|
||||||
|
m_leftIndent = 0;
|
||||||
|
m_rightIndent = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
wxTextAttr wxTextAttr::Combine(const wxTextAttr& attr,
|
wxTextAttr wxTextAttr::Combine(const wxTextAttr& attr,
|
||||||
const wxTextAttr& attrDef,
|
const wxTextAttr& attrDef,
|
||||||
@@ -101,9 +125,44 @@ wxTextAttr wxTextAttr::Combine(const wxTextAttr& attr,
|
|||||||
colBg = text->GetBackgroundColour();
|
colBg = text->GetBackgroundColour();
|
||||||
}
|
}
|
||||||
|
|
||||||
return wxTextAttr(colFg, colBg, font);
|
wxTextAttr newAttr(colFg, colBg, font);
|
||||||
|
|
||||||
|
if (attr.HasAlignment())
|
||||||
|
newAttr.SetAlignment(attr.GetAlignment());
|
||||||
|
else if (attrDef.HasAlignment())
|
||||||
|
newAttr.SetAlignment(attrDef.GetAlignment());
|
||||||
|
|
||||||
|
if (attr.HasTabs())
|
||||||
|
newAttr.SetTabs(attr.GetTabs());
|
||||||
|
else if (attrDef.HasTabs())
|
||||||
|
newAttr.SetTabs(attrDef.GetTabs());
|
||||||
|
|
||||||
|
if (attr.HasLeftIndent())
|
||||||
|
newAttr.SetLeftIndent(attr.GetLeftIndent());
|
||||||
|
else if (attrDef.HasLeftIndent())
|
||||||
|
newAttr.SetLeftIndent(attrDef.GetLeftIndent());
|
||||||
|
|
||||||
|
if (attr.HasRightIndent())
|
||||||
|
newAttr.SetRightIndent(attr.GetRightIndent());
|
||||||
|
else if (attrDef.HasRightIndent())
|
||||||
|
newAttr.SetRightIndent(attrDef.GetRightIndent());
|
||||||
|
|
||||||
|
return newAttr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxTextAttr::operator= (const wxTextAttr& attr)
|
||||||
|
{
|
||||||
|
m_font = attr.m_font;
|
||||||
|
m_colText = attr.m_colText;
|
||||||
|
m_colBack = attr.m_colBack;
|
||||||
|
m_textAlignment = attr.m_textAlignment;
|
||||||
|
m_leftIndent = attr.m_leftIndent;
|
||||||
|
m_rightIndent = attr.m_rightIndent;
|
||||||
|
m_tabs = attr.m_tabs;
|
||||||
|
m_flags = attr.m_flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// apply styling to text range
|
// apply styling to text range
|
||||||
bool wxTextCtrlBase::SetStyle(long WXUNUSED(start), long WXUNUSED(end),
|
bool wxTextCtrlBase::SetStyle(long WXUNUSED(start), long WXUNUSED(end),
|
||||||
const wxTextAttr& WXUNUSED(style))
|
const wxTextAttr& WXUNUSED(style))
|
||||||
@@ -112,6 +171,13 @@ bool wxTextCtrlBase::SetStyle(long WXUNUSED(start), long WXUNUSED(end),
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get the styling at the given position
|
||||||
|
bool wxTextCtrlBase::GetStyle(long WXUNUSED(position), wxTextAttr& WXUNUSED(style))
|
||||||
|
{
|
||||||
|
// to be implemented in derived TextCtrl classes
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
// change default text attributes
|
// change default text attributes
|
||||||
bool wxTextCtrlBase::SetDefaultStyle(const wxTextAttr& style)
|
bool wxTextCtrlBase::SetDefaultStyle(const wxTextAttr& style)
|
||||||
{
|
{
|
||||||
|
@@ -1918,7 +1918,9 @@ bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style)
|
|||||||
|
|
||||||
// the richedit 1.0 doesn't handle setting background colour, so don't
|
// the richedit 1.0 doesn't handle setting background colour, so don't
|
||||||
// even try to do anything if it's the only thing we want to change
|
// even try to do anything if it's the only thing we want to change
|
||||||
if ( m_verRichEdit == 1 && !style.HasFont() && !style.HasTextColour() )
|
if ( m_verRichEdit == 1 && !style.HasFont() && !style.HasTextColour() &&
|
||||||
|
!style.HasLeftIndent() && !style.HasRightIndent() && !style.HasAlignment() &&
|
||||||
|
!style.HasTabs() )
|
||||||
{
|
{
|
||||||
// nothing to do: return TRUE if there was really nothing to do and
|
// nothing to do: return TRUE if there was really nothing to do and
|
||||||
// FALSE if we failed to set bg colour
|
// FALSE if we failed to set bg colour
|
||||||
@@ -2032,6 +2034,81 @@ bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style)
|
|||||||
wxLogDebug(_T("SendMessage(EM_SETCHARFORMAT, SCF_SELECTION) failed"));
|
wxLogDebug(_T("SendMessage(EM_SETCHARFORMAT, SCF_SELECTION) failed"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// now do the paragraph formatting
|
||||||
|
PARAFORMAT2 pf;
|
||||||
|
wxZeroMemory(pf);
|
||||||
|
// we can't use PARAFORMAT2 with RichEdit 1.0, so pretend it is a simple
|
||||||
|
// PARAFORMAT in that case
|
||||||
|
#if wxUSE_RICHEDIT2
|
||||||
|
if ( m_verRichEdit == 1 )
|
||||||
|
{
|
||||||
|
// this is the only thing the control is going to grok
|
||||||
|
pf.cbSize = sizeof(PARAFORMAT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
// PARAFORMAT or PARAFORMAT2
|
||||||
|
pf.cbSize = sizeof(pf);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (style.HasAlignment())
|
||||||
|
{
|
||||||
|
pf.dwMask |= PFM_ALIGNMENT;
|
||||||
|
if (style.GetAlignment() == wxTEXT_ALIGNMENT_RIGHT)
|
||||||
|
pf.wAlignment = PFA_RIGHT;
|
||||||
|
else if (style.GetAlignment() == wxTEXT_ALIGNMENT_CENTRE)
|
||||||
|
pf.wAlignment = PFA_CENTER;
|
||||||
|
else if (style.GetAlignment() == wxTEXT_ALIGNMENT_JUSTIFIED)
|
||||||
|
pf.wAlignment = PFA_JUSTIFY;
|
||||||
|
else
|
||||||
|
pf.wAlignment = PFA_LEFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (style.HasLeftIndent())
|
||||||
|
{
|
||||||
|
pf.dwMask |= PFM_STARTINDENT;
|
||||||
|
|
||||||
|
// Convert from 1/10 mm to TWIPS
|
||||||
|
pf.dxStartIndent = (int) (((double) style.GetLeftIndent()) * mm2twips / 10.0) ;
|
||||||
|
|
||||||
|
// TODO: do we need to specify dxOffset?
|
||||||
|
}
|
||||||
|
|
||||||
|
if (style.HasRightIndent())
|
||||||
|
{
|
||||||
|
pf.dwMask |= PFM_RIGHTINDENT;
|
||||||
|
|
||||||
|
// Convert from 1/10 mm to TWIPS
|
||||||
|
pf.dxRightIndent = (int) (((double) style.GetRightIndent()) * mm2twips / 10.0) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (style.HasTabs())
|
||||||
|
{
|
||||||
|
pf.dwMask |= PFM_TABSTOPS;
|
||||||
|
|
||||||
|
const wxArrayInt& tabs = style.GetTabs();
|
||||||
|
|
||||||
|
pf.cTabCount = wxMin(tabs.GetCount(), MAX_TAB_STOPS);
|
||||||
|
size_t i;
|
||||||
|
for (i = 0; i < (size_t) pf.cTabCount; i++)
|
||||||
|
{
|
||||||
|
// Convert from 1/10 mm to TWIPS
|
||||||
|
pf.rgxTabs[i] = (int) (((double) tabs[i]) * mm2twips / 10.0) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pf.dwMask != 0)
|
||||||
|
{
|
||||||
|
// do format the selection
|
||||||
|
bool ok = ::SendMessage(GetHwnd(), EM_SETPARAFORMAT,
|
||||||
|
0, (LPARAM) &pf) != 0;
|
||||||
|
if ( !ok )
|
||||||
|
{
|
||||||
|
wxLogDebug(_T("SendMessage(EM_SETPARAFORMAT, 0) failed"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( changeSel )
|
if ( changeSel )
|
||||||
{
|
{
|
||||||
// restore the original selection
|
// restore the original selection
|
||||||
@@ -2054,6 +2131,12 @@ bool wxTextCtrl::SetDefaultStyle(const wxTextAttr& style)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxTextCtrl::GetStyle(long WXUNUSED(position), wxTextAttr& WXUNUSED(style))
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user