]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/richtext/richtextctrl.h
adapted to new font setter
[wxWidgets.git] / include / wx / richtext / richtextctrl.h
index e3c2cb4e6a92945f7dac5732e5be28d127f66836..15c1d3791af8e7f924c5eed9f58f56cbc322bd0a 100644 (file)
 #include "wx/scrolwin.h"
 #include "wx/caret.h"
 
 #include "wx/scrolwin.h"
 #include "wx/caret.h"
 
-#if wxCHECK_VERSION(2,7,0)
-#define wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE 1
-#else
-#define wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE 0
-#endif
-
-#if wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
 #include "wx/textctrl.h"
 #include "wx/textctrl.h"
+
+#if !defined(__WXGTK__) && !defined(__WXMAC__)
+#define wxRICHTEXT_BUFFERED_PAINTING 1
+#else
+#define wxRICHTEXT_BUFFERED_PAINTING 0
 #endif
 
 class WXDLLIMPEXP_RICHTEXT wxRichTextStyleDefinition;
 #endif
 
 class WXDLLIMPEXP_RICHTEXT wxRichTextStyleDefinition;
@@ -86,12 +84,8 @@ class WXDLLIMPEXP_RICHTEXT wxRichTextStyleDefinition;
  * wxRichTextCtrl class declaration
  */
 
  * wxRichTextCtrl class declaration
  */
 
-class WXDLLIMPEXP_RICHTEXT wxRichTextCtrl:
-#if wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
- public wxTextCtrlBase, wxScrollHelper
-#else
- public wxScrolledWindow
-#endif
+class WXDLLIMPEXP_RICHTEXT wxRichTextCtrl : public wxTextCtrlBase,
+                                            public wxScrollHelper
 {
     DECLARE_CLASS( wxRichTextCtrl )
     DECLARE_EVENT_TABLE()
 {
     DECLARE_CLASS( wxRichTextCtrl )
     DECLARE_EVENT_TABLE()
@@ -118,7 +112,6 @@ public:
 // Accessors
 
     virtual wxString GetValue() const;
 // Accessors
 
     virtual wxString GetValue() const;
-    virtual void SetValue(const wxString& value);
 
     virtual wxString GetRange(long from, long to) const;
 
 
     virtual wxString GetRange(long from, long to) const;
 
@@ -158,8 +151,8 @@ public:
     virtual void Remove(long from, long to);
 
     // load/save the controls contents from/to the file
     virtual void Remove(long from, long to);
 
     // load/save the controls contents from/to the file
-    virtual bool LoadFile(const wxString& file, int type = wxRICHTEXT_TYPE_ANY);
-    virtual bool SaveFile(const wxString& file = wxEmptyString, int type = wxRICHTEXT_TYPE_ANY);
+    virtual bool DoLoadFile(const wxString& file, int fileType);
+    virtual bool DoSaveFile(const wxString& file = wxEmptyString, int fileType = wxRICHTEXT_TYPE_ANY);
 
     // sets/clears the dirty flag
     virtual void MarkDirty();
 
     // sets/clears the dirty flag
     virtual void MarkDirty();
@@ -180,9 +173,22 @@ public:
     virtual bool SetStyle(long start, long end, const wxTextAttr& style);
     virtual bool SetStyle(long start, long end, const wxTextAttrEx& style);
     virtual bool SetStyle(const wxRichTextRange& range, const wxRichTextAttr& style);
     virtual bool SetStyle(long start, long end, const wxTextAttr& style);
     virtual bool SetStyle(long start, long end, const wxTextAttrEx& style);
     virtual bool SetStyle(const wxRichTextRange& range, const wxRichTextAttr& style);
-    virtual bool GetStyle(long position, wxTextAttr& style) const;
-    virtual bool GetStyle(long position, wxTextAttrEx& style) const;
-    virtual bool GetStyle(long position, wxRichTextAttr& style) const;
+    virtual bool GetStyle(long position, wxTextAttr& style);
+    virtual bool GetStyle(long position, wxTextAttrEx& style);
+    virtual bool GetStyle(long position, wxRichTextAttr& style);
+
+    // extended style setting operation with flags including:
+    // wxRICHTEXT_SETSTYLE_WITH_UNDO, wxRICHTEXT_SETSTYLE_OPTIMIZE, wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY, wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY
+    // see richtextbuffer.h for more details.
+    virtual bool SetStyleEx(long start, long end, const wxTextAttrEx& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+    virtual bool SetStyleEx(const wxRichTextRange& range, const wxTextAttrEx& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+    virtual bool SetStyleEx(const wxRichTextRange& range, const wxRichTextAttr& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+
+    /// Get the content (uncombined) attributes for this position.
+    virtual bool GetUncombinedStyle(long position, wxTextAttr& style);
+    virtual bool GetUncombinedStyle(long position, wxTextAttrEx& style);
+    virtual bool GetUncombinedStyle(long position, wxRichTextAttr& style);
+
     virtual bool SetDefaultStyle(const wxTextAttrEx& style);
     virtual bool SetDefaultStyle(const wxTextAttr& style);
 
     virtual bool SetDefaultStyle(const wxTextAttrEx& style);
     virtual bool SetDefaultStyle(const wxTextAttr& style);
 
@@ -190,6 +196,23 @@ public:
     virtual const wxTextAttrEx& GetDefaultStyleEx() const;
     virtual const wxTextAttr& GetDefaultStyle() const;
 
     virtual const wxTextAttrEx& GetDefaultStyleEx() const;
     virtual const wxTextAttr& GetDefaultStyle() const;
 
+    /// Set list style
+    virtual bool SetListStyle(const wxRichTextRange& range, wxRichTextListStyleDefinition* def, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+    virtual bool SetListStyle(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+
+    /// Clear list for given range
+    virtual bool ClearListStyle(const wxRichTextRange& range, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+
+    /// Number/renumber any list elements in the given range
+    /// def/defName can be NULL/empty to indicate that the existing list style should be used.
+    virtual bool NumberList(const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+    virtual bool NumberList(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+
+    /// Promote the list items within the given range. promoteBy can be a positive or negative number, e.g. 1 or -1
+    /// def/defName can be NULL/empty to indicate that the existing list style should be used.
+    virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
+    virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
+
     // translate between the position (which is just an index in the text ctrl
     // considering all its contents as a single strings) and (x, y) coordinates
     // which represent column and line.
     // translate between the position (which is just an index in the text ctrl
     // considering all its contents as a single strings) and (x, y) coordinates
     // which represent column and line.
@@ -361,6 +384,13 @@ public:
     /// End symbol bullet
     bool EndSymbolBullet() { return GetBuffer().EndSymbolBullet(); }
 
     /// End symbol bullet
     bool EndSymbolBullet() { return GetBuffer().EndSymbolBullet(); }
 
+    /// Begin standard bullet
+    bool BeginStandardBullet(const wxString& bulletName, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD)
+    { return GetBuffer().BeginStandardBullet(bulletName, leftIndent, leftSubIndent, bulletStyle); }
+
+    /// End standard bullet
+    bool EndStandardBullet() { return GetBuffer().EndStandardBullet(); }
+
     /// Begin named character style
     bool BeginCharacterStyle(const wxString& characterStyle) { return GetBuffer().BeginCharacterStyle(characterStyle); }
 
     /// Begin named character style
     bool BeginCharacterStyle(const wxString& characterStyle) { return GetBuffer().BeginCharacterStyle(characterStyle); }
 
@@ -373,15 +403,32 @@ public:
     /// End named character style
     bool EndParagraphStyle() { return GetBuffer().EndParagraphStyle(); }
 
     /// End named character style
     bool EndParagraphStyle() { return GetBuffer().EndParagraphStyle(); }
 
+    /// Begin named list style
+    bool BeginListStyle(const wxString& listStyle, int level = 1, int number = 1) { return GetBuffer().BeginListStyle(listStyle, level, number); }
+
+    /// End named character style
+    bool EndListStyle() { return GetBuffer().EndListStyle(); }
+
     /// Sets the default style to the style under the cursor
     bool SetDefaultStyleToCursorStyle();
 
     /// Clear the selection
     virtual void SelectNone();
 
     /// Sets the default style to the style under the cursor
     bool SetDefaultStyleToCursorStyle();
 
     /// Clear the selection
     virtual void SelectNone();
 
+    /// Select the word at the given character position
+    virtual bool SelectWord(long position);
+
+    /// Get/set the selection range in character positions. -1, -1 means no selection.
+    /// The range is in API convention, i.e. a single character selection is denoted
+    /// by (n, n+1)
+    wxRichTextRange GetSelectionRange() const;
+    void SetSelectionRange(const wxRichTextRange& range);
+
     /// Get/set the selection range in character positions. -1, -1 means no selection.
     /// Get/set the selection range in character positions. -1, -1 means no selection.
-    const wxRichTextRange& GetSelectionRange() const { return m_selectionRange; }
-    void SetSelectionRange(const wxRichTextRange& range) { m_selectionRange = range; }
+    /// The range is in internal format, i.e. a single character selection is denoted
+    /// by (n, n)
+    const wxRichTextRange& GetInternalSelectionRange() const { return m_selectionRange; }
+    void SetInternalSelectionRange(const wxRichTextRange& range) { m_selectionRange = range; }
 
     /// Add a new paragraph of text to the end of the buffer
     virtual wxRichTextRange AddParagraph(const wxString& text);
 
     /// Add a new paragraph of text to the end of the buffer
     virtual wxRichTextRange AddParagraph(const wxString& text);
@@ -487,16 +534,16 @@ public:
     }
 
     /// Is all of the selection bold?
     }
 
     /// Is all of the selection bold?
-    virtual bool IsSelectionBold() const;
+    virtual bool IsSelectionBold();
 
     /// Is all of the selection italics?
 
     /// Is all of the selection italics?
-    virtual bool IsSelectionItalics() const;
+    virtual bool IsSelectionItalics();
 
     /// Is all of the selection underlined?
 
     /// Is all of the selection underlined?
-    virtual bool IsSelectionUnderlined() const;
+    virtual bool IsSelectionUnderlined();
 
     /// Is all of the selection aligned according to the specified flag?
 
     /// Is all of the selection aligned according to the specified flag?
-    virtual bool IsSelectionAligned(wxTextAttrAlignment alignment) const;
+    virtual bool IsSelectionAligned(wxTextAttrAlignment alignment);
 
     /// Apply bold to the selection
     virtual bool ApplyBoldToSelection();
 
     /// Apply bold to the selection
     virtual bool ApplyBoldToSelection();
@@ -511,12 +558,21 @@ public:
     virtual bool ApplyAlignmentToSelection(wxTextAttrAlignment alignment);
 
     /// Apply a named style to the selection
     virtual bool ApplyAlignmentToSelection(wxTextAttrAlignment alignment);
 
     /// Apply a named style to the selection
-    virtual void ApplyStyle(wxRichTextStyleDefinition* def);
+    virtual bool ApplyStyle(wxRichTextStyleDefinition* def);
 
 
-    /// Set style sheet, if any.
+    /// Set style sheet, if any
     void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { GetBuffer().SetStyleSheet(styleSheet); }
     wxRichTextStyleSheet* GetStyleSheet() const { return GetBuffer().GetStyleSheet(); }
 
     void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { GetBuffer().SetStyleSheet(styleSheet); }
     wxRichTextStyleSheet* GetStyleSheet() const { return GetBuffer().GetStyleSheet(); }
 
+    /// Push style sheet to top of stack
+    bool PushStyleSheet(wxRichTextStyleSheet* styleSheet) { return GetBuffer().PushStyleSheet(styleSheet); }
+
+    /// Pop style sheet from top of stack
+    wxRichTextStyleSheet* PopStyleSheet() { return GetBuffer().PopStyleSheet(); }
+
+    /// Apply the style sheet to the buffer, for example if the styles have changed.
+    bool ApplyStyleSheet(wxRichTextStyleSheet* styleSheet = NULL);
+
 // Command handlers
 
     void Command(wxCommandEvent& event);
 // Command handlers
 
     void Command(wxCommandEvent& event);
@@ -582,8 +638,6 @@ public:
     /// Scrolling
     void OnScroll(wxScrollWinEvent& event);
 
     /// Scrolling
     void OnScroll(wxScrollWinEvent& event);
 
-// Implementation
-
     /// Set font, and also default attributes
     virtual bool SetFont(const wxFont& font);
 
     /// Set font, and also default attributes
     virtual bool SetFont(const wxFont& font);
 
@@ -596,26 +650,16 @@ public:
     /// Paint the background
     virtual void PaintBackground(wxDC& dc);
 
     /// Paint the background
     virtual void PaintBackground(wxDC& dc);
 
+#if wxRICHTEXT_BUFFERED_PAINTING
     /// Recreate buffer bitmap if necessary
     virtual bool RecreateBuffer(const wxSize& size = wxDefaultSize);
     /// Recreate buffer bitmap if necessary
     virtual bool RecreateBuffer(const wxSize& size = wxDefaultSize);
+#endif
 
     /// Set the selection
     virtual void DoSetSelection(long from, long to, bool scrollCaret = true);
 
     /// Write text
 
     /// Set the selection
     virtual void DoSetSelection(long from, long to, bool scrollCaret = true);
 
     /// Write text
-    virtual void DoWriteText(const wxString& value, bool selectionOnly = true);
-
-    /// Send an update event
-    virtual bool SendUpdateEvent();
-
-    /// Init command event
-    void InitCommandEvent(wxCommandEvent& event) const;
-
-    /// do the window-specific processing after processing the update event
-    //  (duplicated code from wxTextCtrlBase)
-#if !wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
-    virtual void DoUpdateWindowUI(wxUpdateUIEvent& event);
-#endif
+    virtual void DoWriteText(const wxString& value, int flags = 0);
 
     /// Should we inherit colours?
     virtual bool ShouldInheritColours() const { return false; }
 
     /// Should we inherit colours?
     virtual bool ShouldInheritColours() const { return false; }
@@ -704,30 +748,36 @@ public:
         SetCaretPositionForDefaultStyle(GetCaretPosition());
     }
 
         SetCaretPositionForDefaultStyle(GetCaretPosition());
     }
 
-#if wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
+// Implementation
+
+     /// Font names take a long time to retrieve, so cache them (on demand)
+     static const wxArrayString& GetAvailableFontNames();
+     static void ClearAvailableFontNames();
+
      WX_FORWARD_TO_SCROLL_HELPER()
      WX_FORWARD_TO_SCROLL_HELPER()
-#endif
 
 // Overrides
 protected:
 
     virtual wxSize DoGetBestSize() const ;
 
 
 // Overrides
 protected:
 
     virtual wxSize DoGetBestSize() const ;
 
+    virtual void DoSetValue(const wxString& value, int flags = 0);
+
+
 // Data members
 private:
 
     /// Allows nested Freeze/Thaw
     int                     m_freezeCount;
 
 // Data members
 private:
 
     /// Allows nested Freeze/Thaw
     int                     m_freezeCount;
 
+#if wxRICHTEXT_BUFFERED_PAINTING
     /// Buffer bitmap
     wxBitmap                m_bufferBitmap;
     /// Buffer bitmap
     wxBitmap                m_bufferBitmap;
+#endif
 
     /// Text buffer
     wxRichTextBuffer        m_buffer;
 
 
     /// Text buffer
     wxRichTextBuffer        m_buffer;
 
-    /// Filename
-    wxString                m_filename;
-
     wxMenu*                 m_contextMenu;
 
     /// Caret position (1 less than the character position, so -1 is the
     wxMenu*                 m_contextMenu;
 
     /// Caret position (1 less than the character position, so -1 is the
@@ -766,6 +816,8 @@ private:
 
     /// Threshold for doing delayed layout
     long                    m_delayedLayoutThreshold;
 
     /// Threshold for doing delayed layout
     long                    m_delayedLayoutThreshold;
+
+    static wxArrayString    sm_availableFontNames;
 };
 
 /*!
 };
 
 /*!
@@ -830,4 +882,3 @@ typedef void (wxEvtHandler::*wxRichTextEventFunction)(wxRichTextEvent&);
 
 #endif
     // _WX_RICHTEXTCTRL_H_
 
 #endif
     // _WX_RICHTEXTCTRL_H_
-