// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "textctrlbase.h"
#endif
#ifndef NO_TEXT_WINDOW_STREAM
#if wxUSE_STD_IOSTREAM
- #include "wx/ioswrap.h" // for iostream classes if we need them
+ #include "wx/ioswrap.h" // derivation: we need the full decls.
#else // !wxUSE_STD_IOSTREAM
// can't compile this feature in if we don't use streams at all
#define NO_TEXT_WINDOW_STREAM
#endif
class WXDLLEXPORT wxTextCtrl;
+class WXDLLEXPORT wxTextCtrlBase;
// ----------------------------------------------------------------------------
// constants
// wxTextCtrl style flags
// ----------------------------------------------------------------------------
-// the flag bits 0x0001, 2, 4 and 8 are free but should be used only for the
+// the flag bits 0x0001, and 0x0004 are free but should be used only for the
// things which don't make sense for a text control used by wxTextEntryDialog
// because they would otherwise conflict with wxOK, wxCANCEL, wxCENTRE
+
+#define wxTE_NO_VSCROLL 0x0002
+#define wxTE_AUTO_SCROLL 0x0008
+
#define wxTE_READONLY 0x0010
#define wxTE_MULTILINE 0x0020
#define wxTE_PROCESS_TAB 0x0040
+// alignment flags
+#define wxTE_LEFT 0x0000 // 0x0000
+#define wxTE_CENTER wxALIGN_CENTER_HORIZONTAL // 0x0100
+#define wxTE_RIGHT wxALIGN_RIGHT // 0x0200
+#define wxTE_CENTRE wxTE_CENTER
+
// this style means to use RICHEDIT control and does something only under wxMSW
// and Win32 and is silently ignored under all other platforms
#define wxTE_RICH 0x0080
-#define wxTE_NO_VSCROLL 0x0100
-#define wxTE_AUTO_SCROLL 0x0200
+
#define wxTE_PROCESS_ENTER 0x0400
#define wxTE_PASSWORD 0x0800
// doesn't have focus - use this style to force it to always show it
#define wxTE_NOHIDESEL 0x2000
+// use wxHSCROLL to not wrap text at all, wxTE_LINEWRAP to wrap it at any
+// position and wxTE_WORDWRAP to wrap at words boundary
+#define wxTE_DONTWRAP wxHSCROLL
+#define wxTE_LINEWRAP 0x4000
+#define wxTE_WORDWRAP 0x0000 // it's just == !wxHSCROLL
+
+// force using RichEdit version 2.0 or 3.0 instead of 1.0 (default) for
+// wxTE_RICH controls - can be used together with or instead of wxTE_RICH
+#define wxTE_RICH2 0x8000
+
// ----------------------------------------------------------------------------
// wxTextAttr: a structure containing the visual attributes of a text
// ----------------------------------------------------------------------------
return !HasTextColour() && !HasBackgroundColour() && !HasFont();
}
+ // return the attribute having the valid font and colours: it uses the
+ // attributes set in attr and falls back first to attrDefault and then to
+ // the text control font/colours for those attributes which are not set
+ static wxTextAttr Combine(const wxTextAttr& attr,
+ const wxTextAttr& attrDef,
+ const wxTextCtrlBase *text);
+
private:
wxColour m_colText,
m_colBack;
virtual wxString GetValue() const = 0;
virtual void SetValue(const wxString& value) = 0;
+ virtual wxString GetRange(long from, long to) const;
+
virtual int GetLineLength(long lineNo) const = 0;
virtual wxString GetLineText(long lineNo) const = 0;
virtual int GetNumberOfLines() const = 0;
virtual bool IsModified() const = 0;
virtual bool IsEditable() const = 0;
+ // more readable flag testing methods
+ bool IsSingleLine() const { return !(GetWindowStyle() & wxTE_MULTILINE); }
+ bool IsMultiLine() const { return !IsSingleLine(); }
+
// If the return values from and to are the same, there is no selection.
virtual void GetSelection(long* from, long* to) const = 0;
virtual void WriteText(const wxString& text) = 0;
virtual void AppendText(const wxString& text) = 0;
+ // insert the character which would have resulted from this key event,
+ // return TRUE if anything has been inserted
+ virtual bool EmulateKeyPress(const wxKeyEvent& event);
+
// 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
// include the platform-dependent class definition
// ----------------------------------------------------------------------------
-#if defined(__WXUNIVERSAL__)
+#if defined(__WXX11__)
+ #include "wx/x11/textctrl.h"
+#elif defined(__WXUNIVERSAL__)
#include "wx/univ/textctrl.h"
#elif defined(__WXMSW__)
#include "wx/msw/textctrl.h"
#include "wx/gtk/textctrl.h"
#elif defined(__WXMAC__)
#include "wx/mac/textctrl.h"
+#elif defined(__WXCOCOA__)
+ #include "wx/cocoa/textctrl.h"
#elif defined(__WXPM__)
#include "wx/os2/textctrl.h"
-#elif defined(__WXSTUBS__)
- #include "wx/stubs/textctrl.h"
#endif
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxTextUrlEvent : public wxCommandEvent
{
public:
- wxTextUrlEvent(int id, const wxMouseEvent& evtMouse,
+ wxTextUrlEvent(int winid, const wxMouseEvent& evtMouse,
long start, long end)
- : wxCommandEvent(wxEVT_COMMAND_TEXT_URL, id),
- m_evtMouse(evtMouse)
- { m_start = start; m_end = end; }
+ : wxCommandEvent(wxEVT_COMMAND_TEXT_URL, winid)
+ , m_evtMouse(evtMouse), m_start(start), m_end(end)
+ { }
// get the mouse event which happend over the URL
const wxMouseEvent& GetMouseEvent() const { return m_evtMouse; }
public:
// for wxWin RTTI only, don't use
- wxTextUrlEvent() { }
+ wxTextUrlEvent() : m_evtMouse(), m_start(0), m_end(0) { }
};
typedef void (wxEvtHandler::*wxTextUrlEventFunction)(wxTextUrlEvent&);