]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/textctrl.h
Trying to hide evidence of my negative programming skills...
[wxWidgets.git] / include / wx / textctrl.h
index ec72f8f37719fdcb511712341354450d6fc4b00e..eb83f06c399a48f9379993f31eff2e785bb9bea1 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 
 // headers
 // ----------------------------------------------------------------------------
 
+#ifdef __GNUG__
+    #pragma interface "textctrlbase.h"
+#endif
+
 #include "wx/defs.h"
 #include "wx/defs.h"
+
+#if wxUSE_TEXTCTRL
+
 #include "wx/control.h"         // the base class
 
 // 16-bit Borland 4.0 doesn't seem to allow multiple inheritance with wxWindow
 #include "wx/control.h"         // the base class
 
 // 16-bit Borland 4.0 doesn't seem to allow multiple inheritance with wxWindow
     #define NO_TEXT_WINDOW_STREAM
 #endif
 
     #define NO_TEXT_WINDOW_STREAM
 #endif
 
+// the streambuf which is used in the declaration of wxTextCtrlBase below is not compatible
+// with the standard-conforming implementation found in newer egcs versions
+// (that is, the libstdc++ v3 that is shipped with it)
+#if defined(__GNUC__)&&( (__GNUC__>2) ||( (__GNUC__==2)&&(__GNUC_MINOR__>97) ) )
+    #define NO_TEXT_WINDOW_STREAM
+#endif
+
 #ifndef NO_TEXT_WINDOW_STREAM
 #ifndef NO_TEXT_WINDOW_STREAM
-    #ifdef wxUSE_STD_IOSTREAM
-        #include "ioswrap.h"    // for iostream classes if we need them
+    #if wxUSE_STD_IOSTREAM
+        #include "wx/ioswrap.h"    // for iostream classes if we need them
     #else // !wxUSE_STD_IOSTREAM
         // can't compile this feature in if we don't use streams at all
         #define NO_TEXT_WINDOW_STREAM
     #else // !wxUSE_STD_IOSTREAM
         // can't compile this feature in if we don't use streams at all
         #define NO_TEXT_WINDOW_STREAM
@@ -45,6 +59,47 @@ class WXDLLEXPORT wxTextCtrl;
 WXDLLEXPORT_DATA(extern const wxChar*) wxTextCtrlNameStr;
 WXDLLEXPORT_DATA(extern const wxChar*) wxEmptyString;
 
 WXDLLEXPORT_DATA(extern const wxChar*) wxTextCtrlNameStr;
 WXDLLEXPORT_DATA(extern const wxChar*) wxEmptyString;
 
+// ----------------------------------------------------------------------------
+// wxTextAttr: a structure containing the visual attributes of a text
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxTextAttr
+{
+public:
+    // ctors
+    wxTextAttr() { }
+    wxTextAttr(const wxColour& colText,
+               const wxColour& colBack = wxNullColour,
+               const wxFont& font = wxNullFont)
+        : m_colText(colText), m_colBack(colBack), m_font(font) { }
+
+    // setters
+    void SetTextColour(const wxColour& colText) { m_colText = colText; }
+    void SetBackgroundColour(const wxColour& colBack) { m_colBack = colBack; }
+    void SetFont(const wxFont& font) { m_font = font; }
+
+    // accessors
+    bool HasTextColour() const { return m_colText.Ok(); }
+    bool HasBackgroundColour() const { return m_colBack.Ok(); }
+    bool HasFont() const { return m_font.Ok(); }
+
+    // setters
+    const wxColour& GetTextColour() const { return m_colText; }
+    const wxColour& GetBackgroundColour() const { return m_colBack; }
+    const wxFont& GetFont() const { return m_font; }
+
+    // returns false if we have any attributes set, true otherwise
+    bool IsDefault() const
+    {
+        return !HasTextColour() && !HasBackgroundColour() && !HasFont();
+    }
+
+private:
+    wxColour m_colText,
+             m_colBack;
+    wxFont   m_font;
+};
+
 // ----------------------------------------------------------------------------
 // wxTextCtrl: a single or multiple line text zone where user can enter and
 // edit text
 // ----------------------------------------------------------------------------
 // wxTextCtrl: a single or multiple line text zone where user can enter and
 // edit text
@@ -61,6 +116,7 @@ public:
     // --------
 
     wxTextCtrlBase();
     // --------
 
     wxTextCtrlBase();
+    ~wxTextCtrlBase();
 
     // accessors
     // ---------
 
     // accessors
     // ---------
@@ -98,6 +154,13 @@ public:
     virtual void WriteText(const wxString& text) = 0;
     virtual void AppendText(const wxString& text) = 0;
 
     virtual void WriteText(const wxString& text) = 0;
     virtual void AppendText(const wxString& text) = 0;
 
+    // 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 SetDefaultStyle(const wxTextAttr& style);
+    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
     // 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.
@@ -111,9 +174,9 @@ public:
     virtual void Cut() = 0;
     virtual void Paste() = 0;
 
     virtual void Cut() = 0;
     virtual void Paste() = 0;
 
-    virtual bool CanCopy() const = 0;
-    virtual bool CanCut() const = 0;
-    virtual bool CanPaste() const = 0;
+    virtual bool CanCopy() const;
+    virtual bool CanCut() const;
+    virtual bool CanPaste() const;
 
     // Undo/redo
     virtual void Undo() = 0;
 
     // Undo/redo
     virtual void Undo() = 0;
@@ -129,6 +192,7 @@ public:
     virtual long GetLastPosition() const = 0;
 
     virtual void SetSelection(long from, long to) = 0;
     virtual long GetLastPosition() const = 0;
 
     virtual void SetSelection(long from, long to) = 0;
+    virtual void SelectAll();
     virtual void SetEditable(bool editable) = 0;
 
     // streambuf methods
     virtual void SetEditable(bool editable) = 0;
 
     // streambuf methods
@@ -145,24 +209,36 @@ public:
     wxTextCtrl& operator<<(long i);
     wxTextCtrl& operator<<(float f);
     wxTextCtrl& operator<<(double d);
     wxTextCtrl& operator<<(long i);
     wxTextCtrl& operator<<(float f);
     wxTextCtrl& operator<<(double d);
-    wxTextCtrl& operator<<(const char c);
+    wxTextCtrl& operator<<(const wxChar c);
 
     // obsolete functions
 #if WXWIN_COMPATIBILITY
     bool Modified() const { return IsModified(); }
 #endif
 
 
     // obsolete functions
 #if WXWIN_COMPATIBILITY
     bool Modified() const { return IsModified(); }
 #endif
 
-private:
+protected:
     // the name of the last file loaded with LoadFile() which will be used by
     // SaveFile() by default
     wxString m_filename;
     // the name of the last file loaded with LoadFile() which will be used by
     // SaveFile() by default
     wxString m_filename;
+
+    // the text style which will be used for any new text added to the control
+    wxTextAttr m_defaultStyle;
+
+private:
+#ifndef NO_TEXT_WINDOW_STREAM
+#if !wxUSE_IOSTREAMH
+    char *m_streambuf;
+#endif
+#endif
 };
 
 // ----------------------------------------------------------------------------
 // include the platform-dependent class definition
 // ----------------------------------------------------------------------------
 
 };
 
 // ----------------------------------------------------------------------------
 // include the platform-dependent class definition
 // ----------------------------------------------------------------------------
 
-#if defined(__WXMSW__)
+#if defined(__WXUNIVERSAL__)
+    #include "wx/univ/textctrl.h"
+#elif defined(__WXMSW__)
     #include "wx/msw/textctrl.h"
 #elif defined(__WXMOTIF__)
     #include "wx/motif/textctrl.h"
     #include "wx/msw/textctrl.h"
 #elif defined(__WXMOTIF__)
     #include "wx/motif/textctrl.h"
@@ -172,9 +248,13 @@ private:
     #include "wx/qt/textctrl.h"
 #elif defined(__WXMAC__)
     #include "wx/mac/textctrl.h"
     #include "wx/qt/textctrl.h"
 #elif defined(__WXMAC__)
     #include "wx/mac/textctrl.h"
+#elif defined(__WXPM__)
+    #include "wx/os2/textctrl.h"
 #elif defined(__WXSTUBS__)
     #include "wx/stubs/textctrl.h"
 #endif
 
 #elif defined(__WXSTUBS__)
     #include "wx/stubs/textctrl.h"
 #endif
 
+#endif // wxUSE_TEXTCTRL
+
 #endif
     // _WX_TEXTCTRL_H_BASE_
 #endif
     // _WX_TEXTCTRL_H_BASE_