]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/richtext/richtextctrl.h
put grid string in generic/grid.cpp, not common/datacmn.cpp
[wxWidgets.git] / include / wx / richtext / richtextctrl.h
index e9425ea376e960b7b94031c9532d5edadb7ae643..c17fbacfa67f29789fa00d7fed688f477f7718dc 100644 (file)
@@ -20,7 +20,7 @@
 #include "wx/caret.h"
 
 #if wxCHECK_VERSION(2,7,0)
-#define wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE 0
+#define wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE 1
 #else
 #define wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE 0
 #endif
@@ -29,6 +29,8 @@
 #include "wx/textctrl.h"
 #endif
 
+class WXDLLIMPEXP_RICHTEXT wxRichTextStyleDefinition;
+
 /*!
  * Styles and flags
  */
@@ -84,9 +86,9 @@
  * wxRichTextCtrl class declaration
  */
 
-class WXDLLIMPEXP_ADV wxRichTextCtrl:
+class WXDLLIMPEXP_RICHTEXT wxRichTextCtrl:
 #if wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
- public wxTextCtrlBase, wxScrollHelper
+ public wxTextCtrlBase, public wxScrollHelper
 #else
  public wxScrolledWindow
 #endif
@@ -98,14 +100,14 @@ public:
 // Constructors
 
     wxRichTextCtrl( );
-    wxRichTextCtrl( wxWindow* parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
+    wxRichTextCtrl( wxWindow* parent, wxWindowID id = -1, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
         long style = wxRE_MULTILINE );
-    ~wxRichTextCtrl( );
+    virtual ~wxRichTextCtrl( );
 
 // Operations
 
     /// Creation
-    bool Create( wxWindow* parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
+    bool Create( wxWindow* parent, wxWindowID id = -1, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
         long style = wxRE_MULTILINE );
 
     /// Member initialisation
@@ -155,9 +157,14 @@ public:
     virtual void Replace(long from, long to, const wxString& value);
     virtual void Remove(long from, long to);
 
+#if !wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
+    bool LoadFile(const wxString& file, int fileType = wxRICHTEXT_TYPE_ANY);
+    bool SaveFile(const wxString& file = wxEmptyString, int fileType = wxRICHTEXT_TYPE_ANY);
+#endif
+
     // 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();
@@ -175,14 +182,24 @@ public:
     // text control under some platforms supports the text styles: these
     // 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
+    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, 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);
+
+    /// 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);
 
     // TODO: change to GetDefaultStyle if we merge wxTextAttr and wxTextAttrEx
     virtual const wxTextAttrEx& GetDefaultStyleEx() const;
+    virtual const wxTextAttr& GetDefaultStyle() const;
 
     // 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
@@ -373,9 +390,20 @@ public:
     /// 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.
-    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);
@@ -481,16 +509,16 @@ public:
     }
 
     /// Is all of the selection bold?
-    virtual bool IsSelectionBold() const;
+    virtual bool IsSelectionBold();
 
     /// Is all of the selection italics?
-    virtual bool IsSelectionItalics() const;
+    virtual bool IsSelectionItalics();
 
     /// Is all of the selection underlined?
-    virtual bool IsSelectionUnderlined() const;
+    virtual bool IsSelectionUnderlined();
 
     /// 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();
@@ -504,13 +532,19 @@ public:
     /// Apply alignment to the selection
     virtual bool ApplyAlignmentToSelection(wxTextAttrAlignment alignment);
 
+    /// Apply a named style to the selection
+    virtual void ApplyStyle(wxRichTextStyleDefinition* def);
+
     /// Set style sheet, if any.
     void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { GetBuffer().SetStyleSheet(styleSheet); }
     wxRichTextStyleSheet* GetStyleSheet() const { return GetBuffer().GetStyleSheet(); }
 
+    /// 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);
+    void Command(wxCommandEvent& event);
     void OnDropFiles(wxDropFilesEvent& event);
 
     void OnCut(wxCommandEvent& event);
@@ -573,12 +607,6 @@ public:
     /// Scrolling
     void OnScroll(wxScrollWinEvent& event);
 
-// Implementation
-
-#if wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
-     WX_FORWARD_TO_SCROLL_HELPER()
-#endif
-
     /// Set font, and also default attributes
     virtual bool SetFont(const wxFont& font);
 
@@ -607,7 +635,10 @@ public:
     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
 
     /// Should we inherit colours?
     virtual bool ShouldInheritColours() const { return false; }
@@ -627,6 +658,11 @@ public:
     void SetCaretPosition(long position, bool showAtLineStart = false) ;
     long GetCaretPosition() const { return m_caretPosition; }
 
+    /// The adjusted caret position is the character position adjusted to take
+    /// into account whether we're at the start of a paragraph, in which case
+    /// style information should be taken from the next position, not current one.
+    long GetAdjustedCaretPosition(long caretPos) const;
+
     /// Move caret one visual step forward: this may mean setting a flag
     /// and keeping the same position if we're going from the end of one line
     /// to the start of the next, which may be the exact same caret position.
@@ -670,6 +706,33 @@ public:
     /// Returns the first visible position in the current view
     long GetFirstVisiblePosition() const;
 
+    /// Returns the caret position since the default formatting was changed. As
+    /// soon as this position changes, we no longer reflect the default style
+    /// in the UI. A value of -2 means that we should only reflect the style of the
+    /// content under the caret.
+    long GetCaretPositionForDefaultStyle() const { return m_caretPositionForDefaultStyle; }
+
+    /// Set the caret position for the default style that the user is selecting.
+    void SetCaretPositionForDefaultStyle(long pos) { m_caretPositionForDefaultStyle = pos; }
+
+    /// Should the UI reflect the default style chosen by the user, rather than the style under
+    /// the caret?
+    bool IsDefaultStyleShowing() const { return m_caretPositionForDefaultStyle != -2; }
+
+    /// Convenience function that tells the control to start reflecting the default
+    /// style, since the user is changing it.
+    void SetAndShowDefaultStyle(const wxRichTextAttr& attr)
+    {
+        SetDefaultStyle(attr);
+        SetCaretPositionForDefaultStyle(GetCaretPosition());
+    }
+
+// Implementation
+
+#if wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
+     WX_FORWARD_TO_SCROLL_HELPER()
+#endif
+
 // Overrides
 protected:
 
@@ -687,8 +750,10 @@ private:
     /// Text buffer
     wxRichTextBuffer        m_buffer;
 
+#if !wxRICHTEXT_DERIVES_FROM_TEXTCTRLBASE
     /// Filename
     wxString                m_filename;
+#endif
 
     wxMenu*                 m_contextMenu;
 
@@ -696,6 +761,11 @@ private:
     /// first caret position).
     long                    m_caretPosition;
 
+    /// Caret position when the default formatting has been changed. As
+    /// soon as this position changes, we no longer reflect the default style
+    /// in the UI.
+    long                    m_caretPositionForDefaultStyle;
+
     /// Selection range in character positions. -2, -2 means no selection.
     wxRichTextRange         m_selectionRange;
 
@@ -729,7 +799,7 @@ private:
  * wxRichTextEvent - the event class for wxRichTextCtrl notifications
  */
 
-class WXDLLIMPEXP_ADV wxRichTextEvent : public wxNotifyEvent
+class WXDLLIMPEXP_RICHTEXT wxRichTextEvent : public wxNotifyEvent
 {
 public:
     wxRichTextEvent(wxEventType commandType = wxEVT_NULL, int winid = 0)
@@ -763,13 +833,13 @@ private:
  */
 
 BEGIN_DECLARE_EVENT_TYPES()
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_RICHTEXT_ITEM_SELECTED, 2600)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_RICHTEXT_ITEM_DESELECTED, 2601)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_RICHTEXT_LEFT_CLICK, 2602)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK, 2603)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK, 2604)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_RICHTEXT_LEFT_DCLICK, 2605)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_RICHTEXT_RETURN, 2606)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_ITEM_SELECTED, 2600)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_ITEM_DESELECTED, 2601)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_LEFT_CLICK, 2602)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK, 2603)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK, 2604)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_LEFT_DCLICK, 2605)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_RETURN, 2606)
 END_DECLARE_EVENT_TYPES()
 
 typedef void (wxEvtHandler::*wxRichTextEventFunction)(wxRichTextEvent&);
@@ -787,4 +857,3 @@ typedef void (wxEvtHandler::*wxRichTextEventFunction)(wxRichTextEvent&);
 
 #endif
     // _WX_RICHTEXTCTRL_H_
-