]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/richtext/richtextctrl.h
clarify wxListCtrl::GetItem (fixes #9640)
[wxWidgets.git] / interface / wx / richtext / richtextctrl.h
index 978fdc70f218666166406aa8a797e4584949d27b..cda726e4df54ccde9748af80411302b4a2661527 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        richtext/richtextctrl.h
-// Purpose:     interface of wxRichTextEvent
+// Purpose:     interface of wxRichTextCtrl and wxRichTextEvent
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
 // Licence:     wxWindows license
 
     This is the event class for wxRichTextCtrl notifications.
 
+    @beginEventTable{wxRichTextEvent}
+    @event{EVT_RICHTEXT_CHARACTER(id, func)}
+        Process a wxEVT_COMMAND_RICHTEXT_CHARACTER event, generated when the user
+        presses a character key. Valid event functions: GetFlags, GetPosition, GetCharacter.
+    @event{EVT_RICHTEXT_DELETE(id, func)}
+        Process a wxEVT_COMMAND_RICHTEXT_DELETE event, generated when the user
+        presses the backspace or delete key. Valid event functions: GetFlags, GetPosition.
+    @event{EVT_RICHTEXT_RETURN(id, func)}
+        Process a wxEVT_COMMAND_RICHTEXT_RETURN event, generated when the user
+        presses the return key. Valid event functions: GetFlags, GetPosition.
+    @event{EVT_RICHTEXT_STYLE_CHANGED(id, func)}
+        Process a wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED event, generated when
+        styling has been applied to the control. Valid event functions: GetPosition, GetRange.
+    @event{EVT_RICHTEXT_STYLESHEET_CHANGED(id, func)}
+        Process a wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING event, generated
+        when the control's stylesheet has changed, for example the user added,
+        edited or deleted a style. Valid event functions: GetRange, GetPosition.
+    @event{EVT_RICHTEXT_STYLESHEET_REPLACING(id, func)}
+        Process a wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING event, generated
+        when the control's stylesheet is about to be replaced, for example when
+        a file is loaded into the control.
+        Valid event functions: Veto, GetOldStyleSheet, GetNewStyleSheet.
+    @event{EVT_RICHTEXT_STYLESHEET_REPLACED(id, func)}
+        Process a wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED event, generated
+        when the control's stylesheet has been replaced, for example when a file
+        is loaded into the control.
+        Valid event functions: GetOldStyleSheet, GetNewStyleSheet.
+    @event{EVT_RICHTEXT_CONTENT_INSERTED(id, func)}
+        Process a wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED event, generated when
+        content has been inserted into the control.
+        Valid event functions: GetPosition, GetRange.
+    @event{EVT_RICHTEXT_CONTENT_DELETED(id, func)}
+        Process a wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED event, generated when
+        content has been deleted from the control.
+        Valid event functions: GetPosition, GetRange.
+    @event{EVT_RICHTEXT_BUFFER_RESET(id, func)}
+        Process a wxEVT_COMMAND_RICHTEXT_BUFFER_RESET event, generated when the
+        buffer has been reset by deleting all content.
+        You can use this to set a default style for the first new paragraph.
+    @endEventTable
+
     @library{wxrichtext}
-    @category{richtext}
+    @category{events,richtext}
 */
 class wxRichTextEvent : public wxNotifyEvent
 {
@@ -25,6 +66,8 @@ public:
     /**
         Constructor.
 
+        @param commandType
+            The type of the event.
         @param id
             Window identifier. The value @c wxID_ANY indicates a default value.
     */
@@ -41,22 +84,24 @@ public:
     wxChar GetCharacter() const;
 
     /**
-        Returns flags indicating modifier keys pressed. Possible values are
-        wxRICHTEXT_CTRL_DOWN,
-        wxRICHTEXT_SHIFT_DOWN, and wxRICHTEXT_ALT_DOWN.
+        Returns flags indicating modifier keys pressed.
+
+        Possible values are wxRICHTEXT_CTRL_DOWN, wxRICHTEXT_SHIFT_DOWN, and wxRICHTEXT_ALT_DOWN.
     */
     int GetFlags() const;
 
     /**
-        Returns the new style sheet. Can be used in a
-        wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
+        Returns the new style sheet.
+
+        Can be used in a wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
         wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED event handler.
     */
     wxRichTextStyleSheet* GetNewStyleSheet() const;
 
     /**
-        Returns the old style sheet. Can be used in a
-        wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
+        Returns the old style sheet.
+
+        Can be used in a wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
         wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED event handler.
     */
     wxRichTextStyleSheet* GetOldStyleSheet() const;
@@ -69,7 +114,7 @@ public:
     /**
         Gets the range for the current operation.
     */
-    wxRichTextRange GetRange() const;
+    const wxRichTextRange& GetRange() const;
 
     /**
         Sets the character variable.
@@ -77,9 +122,9 @@ public:
     void SetCharacter(wxChar ch);
 
     /**
-        Sets flags indicating modifier keys pressed. Possible values are
-        wxRICHTEXT_CTRL_DOWN,
-        wxRICHTEXT_SHIFT_DOWN, and wxRICHTEXT_ALT_DOWN.
+        Sets flags indicating modifier keys pressed.
+
+        Possible values are wxRICHTEXT_CTRL_DOWN, wxRICHTEXT_SHIFT_DOWN, and wxRICHTEXT_ALT_DOWN.
     */
     void SetFlags(int flags);
 
@@ -113,9 +158,9 @@ public:
     capable of showing multiple styles and images.
 
     wxRichTextCtrl sends notification events: see wxRichTextEvent.
+
     It also sends the standard wxTextCtrl events wxEVT_COMMAND_TEXT_ENTER and
-    wxEVT_COMMAND_TEXT_UPDATED,
-    and wxTextUrlEvent when URL content is clicked.
+    wxEVT_COMMAND_TEXT_UPDATED, and wxTextUrlEvent when URL content is clicked.
 
     For more information, see the @ref overview_richtextctrl.
 
@@ -163,50 +208,50 @@ public:
     /**
         Destructor.
     */
-    ~wxRichTextCtrl();
+    virtual ~wxRichTextCtrl();
 
     /**
         Adds an image to the control's buffer.
     */
-    wxRichTextRange AddImage(const wxImage& image);
+    virtual wxRichTextRange AddImage(const wxImage& image);
 
     /**
         Adds a new paragraph of text to the end of the buffer.
     */
-    wxRichTextRange AddParagraph(const wxString& text);
+    virtual wxRichTextRange AddParagraph(const wxString& text);
 
     /**
         Sets the insertion point to the end of the buffer and writes the text.
     */
-    void AppendText(const wxString& text);
+    virtual void AppendText(const wxString& text);
 
     /**
         Applies the given alignment to the selection (undoable).
         For alignment values, see wxTextAttr.
     */
-    bool ApplyAlignmentToSelection(wxTextAttrAlignment alignment);
+    virtual bool ApplyAlignmentToSelection(wxTextAttrAlignment alignment);
 
     /**
         Apples bold to the selection (undoable).
     */
-    bool ApplyBoldToSelection();
+    virtual bool ApplyBoldToSelection();
 
     /**
         Applies italic to the selection (undoable).
     */
-    bool ApplyItalicToSelection();
+    virtual bool ApplyItalicToSelection();
 
     /**
         Applies the given style to the selection.
     */
-    bool ApplyStyle(wxRichTextStyleDefinition* def);
+    virtual bool ApplyStyle(wxRichTextStyleDefinition* def);
 
     /**
         Applies the style sheet to the buffer, matching paragraph styles in the sheet
-        against named styles
-        in the buffer. This might be useful if the styles have changed. If @a sheet is
-        @NULL, the
-        sheet set with SetStyleSheet is used.
+        against named styles in the buffer.
+
+        This might be useful if the styles have changed.
+        If @a sheet is @NULL, the sheet set with SetStyleSheet() is used.
         Currently this applies paragraph styles only.
     */
     bool ApplyStyleSheet(wxRichTextStyleSheet* sheet = NULL);
@@ -214,15 +259,15 @@ public:
     /**
         Applies underline to the selection (undoable).
     */
-    bool ApplyUnderlineToSelection();
+    virtual bool ApplyUnderlineToSelection();
 
     /**
         Returns @true if undo commands are being batched.
     */
-    bool BatchingUndo() const;
+    virtual bool BatchingUndo() const;
 
     /**
-        Begins using alignment
+        Begins using alignment.
         For alignment values, see wxTextAttr.
     */
     bool BeginAlignment(wxTextAttrAlignment alignment);
@@ -230,7 +275,7 @@ public:
     /**
         Starts batching undo history for commands.
     */
-    bool BeginBatchUndo(const wxString& cmdName);
+    virtual bool BeginBatchUndo(const wxString& cmdName);
 
     /**
         Begins using bold.
@@ -259,8 +304,8 @@ public:
 
     /**
         Begins applying a left indent and subindent in tenths of a millimetre.
-        The subindent is an offset from the left edge of the paragraph, and is 
-        used for all but the first line in a paragraph. A positive value will 
+        The subindent is an offset from the left edge 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 to the right
         of the subsequent lines.
@@ -279,33 +324,34 @@ public:
 
     /**
         Begins appling line spacing. @e 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:
+        single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
+
+        The ::wxTextAttrLineSpacing constants are defined for convenience.
     */
     bool BeginLineSpacing(int lineSpacing);
 
     /**
-        Begins using a specified list style. Optionally, you can also pass a level and
-        a number.
+        Begins using a specified list style.
+        Optionally, you can also pass a level and a number.
     */
     bool BeginListStyle(const wxString& listStyle, int level = 1,
                         int number = 1);
 
     /**
-        Begins a numbered bullet. This call will be needed for each item in the list,
-        and the
+        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.
+
         @a bulletNumber is a number, usually starting with 1.
         @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
-        @a bulletStyle is a bitlist of the following values:
-        
-        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
+        @a bulletStyle is a bitlist of the  ::wxTextAttrBulletStyle values.
+
+        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.
     */
     bool BeginNumberedBullet(int bulletNumber, int leftIndent,
@@ -314,8 +360,7 @@ public:
 
     /**
         Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
-        in tenths of
-        a millimetre.
+        in tenths of a millimetre.
     */
     bool BeginParagraphSpacing(int before, int after);
 
@@ -332,19 +377,19 @@ public:
     /**
         Begins applying a style.
     */
-    bool BeginStyle(const wxTextAttr& style);
+    virtual bool BeginStyle(const wxTextAttr& style);
 
     /**
         Starts suppressing undo history for commands.
     */
-    bool BeginSuppressUndo();
+    virtual bool BeginSuppressUndo();
 
     /**
-        Begins applying a symbol bullet, using a character from the current font. See
-        BeginNumberedBullet() for
-        an explanation of how indentation is used to render the bulleted paragraph.
+        Begins applying a symbol bullet, using a character from the current font.
+        See BeginNumberedBullet() for an explanation of how indentation is used
+        to render the bulleted paragraph.
     */
-    bool BeginSymbolBullet(wxChar symbol, int leftIndent,
+    bool BeginSymbolBullet(const wxString& symbol, int leftIndent,
                            int leftSubIndent,
                            int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL);
 
@@ -354,10 +399,10 @@ public:
     bool BeginTextColour(const wxColour& colour);
 
     /**
-        Begins applying wxTEXT_ATTR_URL to the content. Pass a URL and optionally, a
-        character style to apply,
-        since it is common to mark a URL with a familiar style such as blue text with
-        underlining.
+        Begins applying wxTEXT_ATTR_URL to the content.
+
+        Pass a URL and optionally, a character style to apply, since it is common
+        to mark a URL with a familiar style such as blue text with underlining.
     */
     bool BeginURL(const wxString& url,
                   const wxString& characterStyle = wxEmptyString);
@@ -370,45 +415,47 @@ public:
     /**
         Returns @true if selected content can be copied to the clipboard.
     */
-    bool CanCopy() const;
+    virtual bool CanCopy() const;
 
     /**
         Returns @true if selected content can be copied to the clipboard and deleted.
     */
-    bool CanCut() const;
+    virtual bool CanCut() const;
 
     /**
         Returns @true if selected content can be deleted.
     */
-    bool CanDeleteSelection() const;
+    virtual bool CanDeleteSelection() const;
 
     /**
         Returns @true if the clipboard content can be pasted to the buffer.
     */
-    bool CanPaste() const;
+    virtual bool CanPaste() const;
 
     /**
         Returns @true if there is a command in the command history that can be redone.
     */
-    bool CanRedo() const;
+    virtual bool CanRedo() const;
 
     /**
         Returns @true if there is a command in the command history that can be undone.
     */
-    bool CanUndo() const;
+    virtual bool CanUndo() const;
 
     /**
         Clears the buffer content, leaving a single empty paragraph. Cannot be undone.
     */
-    void Clear();
+    virtual void Clear();
 
     //@{
     /**
         Clears the list style from the given range, clearing list-related attributes
         and applying any named paragraph style associated with each paragraph.
+
         @a flags is a bit list of the following:
-         wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
-        See also SetListStyle(), PromoteList(), NumberList().
+        - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+
+        @see SetListStyle(), PromoteList(), NumberList().
     */
     bool ClearListStyle(const wxRichTextRange& range,
                         int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
@@ -419,12 +466,12 @@ public:
     /**
         Sends the event to the control.
     */
-    void Command(wxCommandEvent& event);
+    virtual void Command(wxCommandEvent& event);
 
     /**
         Copies the selected content (if any) to the clipboard.
     */
-    void Copy();
+    virtual void Copy();
 
     /**
         Creates the underlying window.
@@ -441,12 +488,12 @@ public:
         Copies the selected content (if any) to the clipboard and deletes the selection.
         This is undoable.
     */
-    void Cut();
+    virtual void Cut();
 
     /**
         Deletes the content within the given range.
     */
-    bool Delete(const wxRichTextRange& range);
+    virtual bool Delete(const wxRichTextRange& range);
 
     /**
         Deletes content if there is a selection, e.g. when pressing a key.
@@ -458,18 +505,13 @@ public:
     /**
         Deletes the content in the selection, if any. This is undoable.
     */
-    void DeleteSelection();
+    virtual void DeleteSelection();
 
     /**
         Sets the buffer's modified status to @false, and clears the buffer's command
         history.
     */
-    void DiscardEdits();
-
-    /**
-        Currently this simply returns @c wxSize(10, 10).
-    */
-    wxSize DoGetBestSize() const;
+    virtual void DiscardEdits();
 
     /**
         Ends alignment.
@@ -479,12 +521,12 @@ public:
     /**
         Ends application of all styles in the current style stack.
     */
-    bool EndAllStyles();
+    virtual bool EndAllStyles();
 
     /**
         Ends batching undo command history.
     */
-    bool EndBatchUndo();
+    virtual bool EndBatchUndo();
 
     /**
         Ends using bold.
@@ -549,12 +591,12 @@ public:
     /**
         Ends the current style.
     */
-    bool EndStyle();
+    virtual bool EndStyle();
 
     /**
         Ends suppressing undo command history.
     */
-    bool EndSuppressUndo();
+    virtual bool EndSuppressUndo();
 
     /**
         Ends applying a symbol bullet.
@@ -578,17 +620,15 @@ public:
 
     /**
         Helper function for extending the selection, returning @true if the selection
-        was
-        changed. Selections are in caret positions.
+        was changed. Selections are in caret positions.
     */
-    bool ExtendSelection(long oldPosition, long newPosition,
-                         int flags);
+    virtual bool ExtendSelection(long oldPosition, long newPosition, int flags);
 
     /**
-        Helper function for finding the caret position for the next word. Direction
-        is 1 (forward) or -1 (backwards).
+        Helper function for finding the caret position for the next word.
+        Direction is 1 (forward) or -1 (backwards).
     */
-    long FindNextWordPosition(int direction = 1) const;
+    virtual long FindNextWordPosition(int direction = 1) const;
 
     /**
         Call this function to prevent refresh and allow fast updates, and then Thaw() to
@@ -597,12 +637,14 @@ public:
     void Freeze();
 
     /**
-        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).
+        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).
     */
-    const wxTextAttr GetBasicStyle() const;
+    virtual const wxTextAttr& GetBasicStyle() const;
 
     //@{
     /**
@@ -618,7 +660,7 @@ public:
     long GetCaretPosition() const;
 
     /**
-        Returns the caret height and position for the given character position
+        Returns the caret height and position for the given character position.
     */
     bool GetCaretPositionForIndex(long position, wxRect& rect);
 
@@ -629,10 +671,9 @@ public:
 
     /**
         Returns the current default style, which can be used to change how subsequently
-        inserted
-        text is displayed.
+        inserted text is displayed.
     */
-    const wxTextAttr GetDefaultStyle() const;
+    virtual const wxTextAttr& GetDefaultStyle() const;
 
     /**
         Gets the size of the buffer beyond which layout is delayed during resizing.
@@ -651,31 +692,31 @@ public:
     long GetFirstVisiblePosition() const;
 
     /**
-        Returns flags that change the behaviour of loading or saving. See the
-        documentation for each
-        handler class to see what flags are relevant for each handler.
+        Returns flags that change the behaviour of loading or saving.
+        See the documentation for each handler class to see what flags are
+        relevant for each handler.
     */
     int GetHandlerFlags() const;
 
     /**
         Returns the current insertion point.
     */
-    long GetInsertionPoint() const;
+    virtual long GetInsertionPoint() const;
 
     /**
         Returns the last position in the buffer.
     */
-    wxTextPos GetLastPosition() const;
+    virtual wxTextPos GetLastPosition() const;
 
     /**
         Returns the length of the specified line in characters.
     */
-    int GetLineLength(long lineNo) const;
+    virtual int GetLineLength(long lineNo) const;
 
     /**
         Returns the text for the given line.
     */
-    wxString GetLineText(long lineNo) const;
+    virtual wxString GetLineText(long lineNo) const;
 
     /**
         Transforms physical window position to logical (unscrolled) position.
@@ -685,7 +726,7 @@ public:
     /**
         Returns the number of lines in the buffer.
     */
-    int GetNumberOfLines() const;
+    virtual int GetNumberOfLines() const;
 
     /**
         Transforms logical (unscrolled) position to physical window position.
@@ -694,10 +735,10 @@ public:
 
     /**
         Gets the text for the given range.
-        The end point of range is specified as the last character position of the span
-        of text, plus one.
+        The end point of range is specified as the last character position of
+        the span of text, plus one.
     */
-    wxString GetRange(long from, long to) const;
+    virtual wxString GetRange(long from, long to) const;
 
     /**
         Returns the range of the current selection.
@@ -705,93 +746,91 @@ public:
         of text, plus one.
         If the return values @a from and @a to are the same, there is no selection.
     */
-    void GetSelection(long* from, long* to) const;
+    virtual void GetSelection(long* from, long* to) const;
 
     /**
         Returns the selection range in character positions. -1, -1 means no selection.
     */
-    const wxRichTextRange GetSelectionRange() const;
+    wxRichTextRange GetSelectionRange() const;
 
     /**
         Returns the text within the current selection range, if any.
     */
-    wxString GetStringSelection() const;
+    virtual wxString GetStringSelection() const;
 
     /**
         Gets the attributes at the given position.
         This function gets the combined style - that is, the style you see on the
-        screen as a result
-        of combining base style, paragraph style and character style attributes. To get
-        the character
-        or paragraph style alone, use GetUncombinedStyle().
+        screen as a result of combining base style, paragraph style and character
+        style attributes.
+
+        To get the character or paragraph style alone, use GetUncombinedStyle().
     */
-    bool GetStyle(long position, wxTextAttr& style);
+    virtual bool GetStyle(long position, wxTextAttr& style);
 
     /**
-        Gets the attributes common to the specified range. Attributes that differ in
-        value within the range will
-        not be included in @e style's flags.
+        Gets the attributes common to the specified range.
+        Attributes that differ in value within the range will not be included
+        in @a style flags.
     */
-    bool GetStyleForRange(const wxRichTextRange& range,
-                          wxTextAttr& style);
+    virtual bool GetStyleForRange(const wxRichTextRange& range,
+                                  wxTextAttr& style);
 
     /**
-        Returns the style sheet associated with the control, if any. A style sheet
-        allows named
-        character and paragraph styles to be applied.
+        Returns the style sheet associated with the control, if any.
+        A style sheet allows named character and paragraph styles to be applied.
     */
     wxRichTextStyleSheet* GetStyleSheet() const;
 
     /**
         Gets the attributes at the given position.
         This function gets the @e uncombined style - that is, the attributes associated
-        with the
-        paragraph or character content, and not necessarily the combined attributes you
-        see on the
-        screen. To get the combined attributes, use GetStyle().
+        with the paragraph or character content, and not necessarily the combined
+        attributes you see on the screen.
+        To get the combined attributes, use GetStyle().
+
         If you specify (any) paragraph attribute in @e style's flags, this function
-        will fetch
-        the paragraph attributes. Otherwise, it will return the character attributes.
+        will fetch the paragraph attributes.
+        Otherwise, it will return the character attributes.
     */
-    bool GetUncombinedStyle(long position, wxTextAttr& style);
+    virtual bool GetUncombinedStyle(long position, wxTextAttr& style);
 
     /**
         Returns the content of the entire control as a string.
     */
-    wxString GetValue() const;
+    virtual wxString GetValue() const;
 
     /**
-        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.
+        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.
     */
     wxRichTextLine* GetVisibleLineForCaretPosition(long caretPosition) const;
 
     /**
-        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. @a style must have
-        flags indicating which attributes are of interest.
+        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.
+        @a style must have flags indicating which attributes are of interest.
     */
-    bool HasCharacterAttributes(const wxRichTextRange& range,
-                                const wxTextAttr& style) const;
+    virtual bool HasCharacterAttributes(const wxRichTextRange& range,
+                                        const wxTextAttr& style) const;
 
     /**
-        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. @a style
-        must have
-        flags indicating which attributes are of interest.
+        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.
+        @a style must have flags indicating which attributes are of interest.
     */
-    bool HasParagraphAttributes(const wxRichTextRange& range,
-                                const wxTextAttr& style) const;
+    virtual bool HasParagraphAttributes(const wxRichTextRange& range,
+                                        const wxTextAttr& style) const;
 
     /**
         Returns @true if there is a selection.
     */
-    bool HasSelection() const;
+    virtual bool HasSelection() const;
 
     //@{
     /**
@@ -810,27 +849,22 @@ public:
     */
     void Init();
 
-    /**
-        Initialises the command event.
-    */
-    void InitCommandEvent(wxCommandEvent& event) const;
-
     /**
         Returns @true if the user has recently set the default style without moving
-        the caret,
-        and therefore the UI needs to reflect the default style and not the style at
-        the caret.
+        the caret, and therefore the UI needs to reflect the default style and not
+        the style at the caret.
+
         Below is an example of code that uses this function to determine whether the UI
         should show that the current style is bold.
-        
-        See also SetAndShowDefaultStyle().
+
+        @see SetAndShowDefaultStyle().
     */
     bool IsDefaultStyleShowing() const;
 
     /**
         Returns @true if the control is editable.
     */
-    bool IsEditable() const;
+    virtual bool IsEditable() const;
 
     /**
         Returns @true if Freeze has been called without a Thaw.
@@ -840,7 +874,7 @@ public:
     /**
         Returns @true if the buffer has been modified.
     */
-    bool IsModified() const;
+    virtual bool IsModified() const;
 
     /**
         Returns @true if the control is multiline.
@@ -853,57 +887,58 @@ public:
     bool IsPositionVisible(long pos) const;
 
     /**
-        Returns @true if all of the selection is aligned according to the specified
-        flag.
+        Returns @true if all of the selection is aligned according to the specified flag.
     */
-    bool IsSelectionAligned(wxTextAttrAlignment alignment) const;
+    virtual bool IsSelectionAligned(wxTextAttrAlignment alignment);
 
     /**
         Returns @true if all of the selection is bold.
     */
-    bool IsSelectionBold() const;
+    virtual bool IsSelectionBold();
 
     /**
         Returns @true if all of the selection is italic.
     */
-    bool IsSelectionItalics() const;
+    virtual bool IsSelectionItalics();
 
     /**
         Returns @true if all of the selection is underlined.
     */
-    bool IsSelectionUnderlined() const;
+    virtual bool IsSelectionUnderlined();
 
     /**
-        Returns @true if the control is single-line. Currently wxRichTextCtrl does not
-        support single-line editing.
+        Returns @true if the control is single-line.
+        Currently wxRichTextCtrl does not support single-line editing.
     */
     bool IsSingleLine() const;
 
     /**
         Helper function implementing keyboard navigation.
     */
-    bool KeyboardNavigate(int keyCode, int flags);
+    virtual bool KeyboardNavigate(int keyCode, int flags);
 
     /**
         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.
+        setting the caret position.
+        This function should not normally be required by the application.
     */
-    bool LayoutContent(bool onlyVisibleRect = false);
+    virtual bool LayoutContent(bool onlyVisibleRect = false);
 
     /**
-        Inserts a line break at the current insertion point. A line break forces
-        wrapping within a paragraph, and
-        can be introduced by using this function, by appending the wxChar value @b
-        wxRichTextLineBreakChar to text content,
-        or by typing Shift-Return.
+        Inserts a line break at the current insertion point.
+
+        A line break forces wrapping within a paragraph, and can be introduced by
+        using this function, by appending the wxChar value @b  wxRichTextLineBreakChar
+        to text content, or by typing Shift-Return.
     */
-    bool LineBreak();
+    virtual bool LineBreak();
 
     /**
-        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.
+        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 wxRichTextFileHandler object.
     */
     bool LoadFile(const wxString& file,
@@ -912,12 +947,12 @@ public:
     /**
         Marks the buffer as modified.
     */
-    void MarkDirty();
+    virtual void MarkDirty();
 
     /**
         Move the caret to the given character position.
     */
-    bool MoveCaret(long pos, bool showAtLineStart = false);
+    virtual bool MoveCaret(long pos, bool showAtLineStart = false);
 
     /**
         Move the caret one visual step forward: this may mean setting a flag
@@ -936,71 +971,74 @@ public:
     /**
         Moves the caret down.
     */
-    bool MoveDown(int noLines = 1, int flags = 0);
+    virtual bool MoveDown(int noLines = 1, int flags = 0);
 
     /**
         Moves to the end of the buffer.
     */
-    bool MoveEnd(int flags = 0);
+    virtual bool MoveEnd(int flags = 0);
 
     /**
         Moves to the start of the buffer.
     */
-    bool MoveHome(int flags = 0);
+    virtual bool MoveHome(int flags = 0);
 
     /**
         Moves left.
     */
-    bool MoveLeft(int noPositions = 1, int flags = 0);
+    virtual bool MoveLeft(int noPositions = 1, int flags = 0);
 
     /**
         Moves right.
     */
-    bool MoveRight(int noPositions = 1, int flags = 0);
+    virtual bool MoveRight(int noPositions = 1, int flags = 0);
 
     /**
         Moves to the end of the line.
     */
-    bool MoveToLineEnd(int flags = 0);
+    virtual bool MoveToLineEnd(int flags = 0);
 
     /**
         Moves to the start of the line.
     */
-    bool MoveToLineStart(int flags = 0);
+    virtual bool MoveToLineStart(int flags = 0);
 
     /**
         Moves to the end of the paragraph.
     */
-    bool MoveToParagraphEnd(int flags = 0);
+    virtual bool MoveToParagraphEnd(int flags = 0);
 
     /**
         Moves to the start of the paragraph.
     */
-    bool MoveToParagraphStart(int flags = 0);
+    virtual bool MoveToParagraphStart(int flags = 0);
 
     /**
         Moves up.
     */
-    bool MoveUp(int noLines = 1, int flags = 0);
+    virtual bool MoveUp(int noLines = 1, int flags = 0);
 
     /**
-        Inserts a new paragraph at the current insertion point. See also LineBreak().
+        Inserts a new paragraph at the current insertion point. @see LineBreak().
     */
-    bool Newline();
+    virtual bool Newline();
 
     //@{
     /**
-        Numbers the paragraphs in the given range. Pass flags to determine how the
-        attributes are set.
+        Numbers the paragraphs in the given range.
+        Pass flags to determine how the attributes are set.
+
         Either the style definition or the name of the style definition (in the current
         sheet) can be passed.
+
         @a flags is a bit list of the following:
-         wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
-         wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from @e
-        startFrom, otherwise existing attributes are used.
-         wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
-        as the level for all paragraphs, otherwise the current indentation will be used.
-        See also SetListStyle(), PromoteList(), ClearListStyle().
+        - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+        - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+          @a startFrom, otherwise existing attributes are used.
+        - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+          as the level for all paragraphs, otherwise the current indentation will be used.
+
+        @see SetListStyle(), PromoteList(), ClearListStyle().
     */
     bool NumberList(const wxRichTextRange& range,
                     const wxRichTextListStyleDefinition* style,
@@ -1098,48 +1136,50 @@ public:
     /**
         Moves one or more pages down.
     */
-    bool PageDown(int noPages = 1, int flags = 0);
+    virtual bool PageDown(int noPages = 1, int flags = 0);
 
     /**
         Moves one or more pages up.
     */
-    bool PageUp(int noPages = 1, int flags = 0);
+    virtual bool PageUp(int noPages = 1, int flags = 0);
 
     /**
         Paints the background.
     */
-    void PaintBackground(wxDC& dc);
+    virtual void PaintBackground(wxDC& dc);
 
     /**
         Pastes content from the clipboard to the buffer.
     */
-    void Paste();
+    virtual void Paste();
 
     /**
         Internal function to position the visible caret according to the current caret
         position.
     */
-    void PositionCaret();
+    virtual void PositionCaret();
 
     /**
         Converts a text position to zero-based column and line numbers.
     */
-    bool PositionToXY(long pos, long* x, long* y) const;
+    virtual bool PositionToXY(long pos, long* x, long* y) const;
 
     //@{
     /**
-        Promotes or demotes the paragraphs in the given range. A positive @a promoteBy
-        produces a smaller indent, and a negative number
+        Promotes or demotes the paragraphs in the given range.
+        A positive @a promoteBy produces a smaller indent, and a negative number
         produces a larger indent. Pass flags to determine how the attributes are set.
         Either the style definition or the name of the style definition (in the current
         sheet) can be passed.
+
         @a flags is a bit list of the following:
-         wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
-         wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from @e
-        startFrom, otherwise existing attributes are used.
-         wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+        - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+        - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+          @a startFrom, otherwise existing attributes are used.
+        - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
         as the level for all paragraphs, otherwise the current indentation will be used.
-        See also SetListStyle(), See also SetListStyle(), ClearListStyle().
+
+        @see SetListStyle(), @see SetListStyle(), ClearListStyle().
     */
     bool PromoteList(int promoteBy, const wxRichTextRange& range,
                      const wxRichTextListStyleDefinition* style,
@@ -1154,22 +1194,25 @@ public:
     /**
         Redoes the current command.
     */
-    void Redo();
+    virtual void Redo();
 
     /**
         Removes the content in the specified range.
     */
-    void Remove(long from, long to);
+    virtual void Remove(long from, long to);
 
     /**
-        Replaces the content in the specified range with the string specified by @e
-        value.
+        Replaces the content in the specified range with the string specified by
+        @a value.
     */
-    void Replace(long from, long to, const wxString& value);
+    virtual void Replace(long from, long to, const wxString& value);
 
     /**
-        Saves the buffer content using the given type. If the specified type
-        is wxRICHTEXT_TYPE_ANY, the type is deduced from the filename extension.
+        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 wxRichTextFileHandler object.
     */
     bool SaveFile(const wxString& file = wxEmptyString,
@@ -1178,33 +1221,35 @@ public:
     /**
         Scrolls @a position into view. This function takes a caret position.
     */
-    bool ScrollIntoView(long position, int keyCode);
+    virtual bool ScrollIntoView(long position, int keyCode);
 
     /**
         Selects all the text in the buffer.
     */
-    void SelectAll();
+    virtual void SelectAll();
 
     /**
         Cancels any selection.
     */
-    void SelectNone();
+    virtual void SelectNone();
 
     /**
         Sets @a attr as the default style and tells the control that the UI should
-        reflect
-        this attribute until the user moves the caret.
-        See also IsDefaultStyleShowing().
+        reflect this attribute until the user moves the caret.
+
+        @see IsDefaultStyleShowing().
     */
     void SetAndShowDefaultStyle(const wxTextAttr& attr);
 
     /**
-        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).
+        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).
     */
-    void SetBasicStyle(const wxTextAttr& style);
+    virtual void SetBasicStyle(const wxTextAttr& style);
 
     /**
         The caret position is the character position just before the caret.
@@ -1215,10 +1260,9 @@ public:
 
     /**
         Sets the current default style, which can be used to change how subsequently
-        inserted
-        text is displayed.
+        inserted text is displayed.
     */
-    bool SetDefaultStyle(const wxTextAttr& style);
+    virtual bool SetDefaultStyle(const wxTextAttr& style);
 
     /**
         Sets the default style to the style under the cursor.
@@ -1234,7 +1278,7 @@ public:
     /**
         Makes the control editable, or not.
     */
-    void SetEditable(bool editable);
+    virtual void SetEditable(bool editable);
 
     /**
         Sets the current filename.
@@ -1242,41 +1286,44 @@ public:
     void SetFilename(const wxString& filename);
 
     /**
-        Sets the font, and also the basic and default attributes (see
-        wxRichTextCtrl::SetDefaultStyle).
+        Sets the font, and also the basic and default attributes
+        (see wxRichTextCtrl::SetDefaultStyle).
     */
-    bool SetFont(const wxFont& font);
+    virtual bool SetFont(const wxFont& font);
 
     /**
-        Sets flags that change the behaviour of loading or saving. See the
-        documentation for each
-        handler class to see what flags are relevant for each handler.
+        Sets flags that change the behaviour of loading or saving.
+
+        See the documentation for each handler class to see what flags are
+        relevant for each handler.
     */
     void SetHandlerFlags(int flags);
 
     /**
         Sets the insertion point.
     */
-    void SetInsertionPoint(long pos);
+    virtual void SetInsertionPoint(long pos);
 
     /**
         Sets the insertion point to the end of the text control.
     */
-    void SetInsertionPointEnd();
+    virtual void SetInsertionPointEnd();
 
     //@{
     /**
         Sets the list attributes for the given range, passing flags to determine how
         the attributes are set.
+
         Either the style definition or the name of the style definition (in the current
         sheet) can be passed.
         @a flags is a bit list of the following:
-         wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
-         wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from @e
-        startFrom, otherwise existing attributes are used.
-         wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
-        as the level for all paragraphs, otherwise the current indentation will be used.
-        See also NumberList(), PromoteList(), ClearListStyle().
+        - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+        - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+          @a startFrom, otherwise existing attributes are used.
+        - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+          as the level for all paragraphs, otherwise the current indentation will be used.
+
+        @see NumberList(), PromoteList(), ClearListStyle().
     */
     bool SetListStyle(const wxRichTextRange& range,
                       const wxRichTextListStyleDefinition* style,
@@ -1294,15 +1341,17 @@ public:
         Sets the selection to the given range.
         The end point of range is specified as the last character position of the span
         of text, plus one.
+
         So, for example, to set the selection for a character at position 5, use the
         range (5,6).
     */
-    void SetSelection(long from, long to);
+    virtual void SetSelection(long from, long to);
 
     /**
         Sets the selection to the given range.
         The end point of range is specified as the last character position of the span
         of text, plus one.
+
         So, for example, to set the selection for a character at position 5, use the
         range (5,6).
     */
@@ -1313,6 +1362,7 @@ public:
         Sets the attributes for the given range.
         The end point of range is specified as the last character position of the span
         of text, plus one.
+
         So, for example, to set the style for a character at position 5, use the range
         (5,6).
     */
@@ -1325,29 +1375,29 @@ public:
     /**
         Sets the attributes for the given range, passing flags to determine how the
         attributes are set.
+
         The end point of range is specified as the last character position of the span
-        of text, plus one.
-        So, for example, to set the style for a character at position 5, use the range
-        (5,6).
+        of text, plus one. So, for example, to set the style for a character at
+        position 5, use the range (5,6).
+
         @a flags may contain a bit list of the following values:
-         wxRICHTEXT_SETSTYLE_NONE: no style flag.
-         wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
-        undoable.
-         wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
-        if the
-        combined style at this point is already the style in question.
-         wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
-        applied to paragraphs,
-        and not the content. This allows content styling to be preserved independently
-        from that of e.g. a named paragraph style.
-         wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
-        applied to characters,
-        and not the paragraph. This allows content styling to be preserved
-        independently from that of e.g. a named paragraph style.
-         wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
-        the new style.
-         wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style. Only the style flags
-        are used in this operation.
+        - wxRICHTEXT_SETSTYLE_NONE: no style flag.
+        - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
+          undoable.
+        - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
+          if the combined style at this point is already the style in question.
+        - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
+          applied to paragraphs, and not the content.
+          This allows content styling to be preserved independently from that
+          of e.g. a named paragraph style.
+        - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
+          applied to characters, and not the paragraph.
+          This allows content styling to be preserved independently from that
+          of e.g. a named paragraph style.
+        - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
+          the new style.
+        - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style. Only the style flags
+          are used in this operation.
     */
     bool SetStyleEx(const wxRichTextRange& range,
                     const wxTextAttr& style,
@@ -1358,30 +1408,30 @@ public:
     //@}
 
     /**
-        Sets the style sheet associated with the control. A style sheet allows named
-        character and paragraph styles to be applied.
+        Sets the style sheet associated with the control.
+        A style sheet allows named character and paragraph styles to be applied.
     */
     void SetStyleSheet(wxRichTextStyleSheet* styleSheet);
 
     /**
         Replaces existing content with the given text.
     */
-    void SetValue(const wxString& value);
+    virtual void SetValue(const wxString& value);
 
     /**
         A helper function setting up scrollbars, for example after a resize.
     */
-    void SetupScrollbars(bool atTop = false);
+    virtual void SetupScrollbars(bool atTop = false);
 
     /**
         Scrolls the buffer so that the given position is in view.
     */
-    void ShowPosition(long pos);
+    virtual void ShowPosition(long pos);
 
     /**
         Returns @true if undo history suppression is on.
     */
-    bool SuppressingUndo() const;
+    virtual bool SuppressingUndo() const;
 
     /**
         Call this function to end a Freeze and refresh the display.
@@ -1391,26 +1441,33 @@ public:
     /**
         Undoes the command at the top of the command history, if there is one.
     */
-    void Undo();
+    virtual void Undo();
 
     /**
         Moves a number of words to the left.
     */
-    bool WordLeft(int noWords = 1, int flags = 0);
+    virtual bool WordLeft(int noWords = 1, int flags = 0);
 
     /**
         Move a nuber of words to the right.
     */
-    bool WordRight(int noWords = 1, int flags = 0);
+    virtual bool WordRight(int noWords = 1, int flags = 0);
+
+    /**
+        Loads an image from a file and writes it at the current insertion point.
+    */
+    virtual bool WriteImage(const wxString& filename, wxBitmapType bitmapType);
+
+    /**
+        Writes an image block at the current insertion point.
+    */
+    virtual bool WriteImage(const wxRichTextImageBlock& imageBlock);
 
     //@{
     /**
-        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.
+        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.
     */
-    bool WriteImage(const wxString& filename, int bitmapType);
-    bool WriteImage(const wxRichTextImageBlock& imageBlock);
     bool WriteImage(const wxBitmap& bitmap,
                     int bitmapType = wxBITMAP_TYPE_PNG);
     bool WriteImage(const wxImage& image,
@@ -1420,11 +1477,23 @@ public:
     /**
         Writes text at the current position.
     */
-    void WriteText(const wxString& text);
+    virtual void WriteText(const wxString& text);
 
     /**
         Translates from column and line number to position.
     */
-    long XYToPosition(long x, long y) const;
+    virtual long XYToPosition(long x, long y) const;
+
+protected:
+
+    /**
+        Currently this simply returns @c wxSize(10, 10).
+    */
+    virtual wxSize DoGetBestSize() const;
+
+    /**
+        Initialises the command event.
+    */
+    void InitCommandEvent(wxCommandEvent& event) const;
 };