///////////////////////////////////////////////////////////////////////////////
-// Name: textctrl.h
+// Name: wx/textctrl.h
// Purpose: wxTextCtrlBase class - the interface of wxTextCtrl
// Author: Vadim Zeitlin
// Modified by:
// Created: 13.07.99
// RCS-ID: $Id$
-// Copyright: (c) wxWidgets team
+// Copyright: (c) Vadim Zeitlin
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma interface "textctrlbase.h"
-#endif
-
#include "wx/defs.h"
#if wxUSE_TEXTCTRL
#include "wx/dynarray.h" // wxArrayInt
#include "wx/gdicmn.h" // wxPoint
-// 16-bit Borland 4.0 doesn't seem to allow multiple inheritance with wxWindow
-// and streambuf: it complains about deriving a huge class from the huge class
-// streambuf. !! Also, can't use streambuf if making or using a DLL :-(
+// Open Watcom 1.3 does allow only ios::rdbuf() while
+// we want something with streambuf parameter
+// Also, can't use streambuf if making or using a DLL :-(
-#if (defined(__BORLANDC__)) || defined(__MWERKS__) || \
+#if defined(__WATCOMC__) || \
+ defined(__MWERKS__) || \
(defined(__WINDOWS__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL)))
- #define NO_TEXT_WINDOW_STREAM
-#endif
-
-#ifndef NO_TEXT_WINDOW_STREAM
- #if wxUSE_STD_IOSTREAM
- #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 // wxUSE_STD_IOSTREAM/!wxUSE_STD_IOSTREAM
+ #define wxHAS_TEXT_WINDOW_STREAM 0
+#elif wxUSE_STD_IOSTREAM
+ #include "wx/ioswrap.h"
+ #define wxHAS_TEXT_WINDOW_STREAM 1
+#else
+ #define wxHAS_TEXT_WINDOW_STREAM 0
#endif
-#if defined(__WXMSW__) && defined(__MINGW32__)
- #include "wx/msw/winundef.h"
+#if WXWIN_COMPATIBILITY_2_4 && !wxHAS_TEXT_WINDOW_STREAM
+ // define old flag if one could use it somewhere
+ #define NO_TEXT_WINDOW_STREAM
#endif
class WXDLLEXPORT wxTextCtrl;
// constants
// ----------------------------------------------------------------------------
-extern WXDLLEXPORT_DATA(const wxChar*) wxTextCtrlNameStr;
+extern WXDLLEXPORT_DATA(const wxChar) wxTextCtrlNameStr[];
// this is intentionally not enum to avoid warning fixes with
// typecasting from enum type to wxTextCoord
// wxTextCtrl style flags
// ----------------------------------------------------------------------------
-// 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
+// the flag bit 0x0001 s 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
// 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
+// use wxHSCROLL to not wrap text at all, wxTE_CHARWRAP to wrap it at any
// position and wxTE_WORDWRAP to wrap at words boundary
+//
+// if no wrapping style is given at all, the control wraps at word boundary
#define wxTE_DONTWRAP wxHSCROLL
-#define wxTE_LINEWRAP 0x4000
-#define wxTE_WORDWRAP 0x0000 // it's just == !wxHSCROLL
+#define wxTE_CHARWRAP 0x4000 // wrap at any position
+#define wxTE_WORDWRAP 0x0001 // wrap only at words boundaries
+#define wxTE_BESTWRAP 0x0000 // this is the default
+
+#if WXWIN_COMPATIBILITY_2_6
+ // obsolete synonym
+ #define wxTE_LINEWRAP wxTE_CHARWRAP
+#endif // WXWIN_COMPATIBILITY_2_6
// 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
+// reuse wxTE_RICH2's value for CAPEDIT control on Windows CE
+#if defined(__SMARTPHONE__) || defined(__POCKETPC__)
+#define wxTE_CAPITALIZE wxTE_RICH2
+#else
+#define wxTE_CAPITALIZE 0
+#endif
+
// ----------------------------------------------------------------------------
// wxTextCtrl::HitTest return values
// ----------------------------------------------------------------------------
#define wxTEXT_ATTR_FONT_ITALIC 0x0020
#define wxTEXT_ATTR_FONT_UNDERLINE 0x0040
#define wxTEXT_ATTR_FONT \
- wxTEXT_ATTR_FONT_FACE | wxTEXT_ATTR_FONT_SIZE | wxTEXT_ATTR_FONT_WEIGHT | wxTEXT_ATTR_FONT_ITALIC | wxTEXT_ATTR_FONT_UNDERLINE
+ ( wxTEXT_ATTR_FONT_FACE | wxTEXT_ATTR_FONT_SIZE | wxTEXT_ATTR_FONT_WEIGHT | \
+ wxTEXT_ATTR_FONT_ITALIC | wxTEXT_ATTR_FONT_UNDERLINE )
#define wxTEXT_ATTR_ALIGNMENT 0x0080
#define wxTEXT_ATTR_LEFT_INDENT 0x0100
#define wxTEXT_ATTR_RIGHT_INDENT 0x0200
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxTextCtrlBase : public wxControl
-#ifndef NO_TEXT_WINDOW_STREAM
+#if wxHAS_TEXT_WINDOW_STREAM
, public wxSTD streambuf
#endif
virtual bool IsEditable() const = 0;
// more readable flag testing methods
- bool IsSingleLine() const { return !(GetWindowStyle() & wxTE_MULTILINE); }
+ bool IsSingleLine() const { return !HasFlag(wxTE_MULTILINE); }
bool IsMultiLine() const { return !IsSingleLine(); }
// If the return values from and to are the same, there is no selection.
virtual void SelectAll();
virtual void SetEditable(bool editable) = 0;
- // override streambuf method
-#ifndef NO_TEXT_WINDOW_STREAM
- int overflow(int i);
-#endif // NO_TEXT_WINDOW_STREAM
-
// stream-like insertion operators: these are always available, whether we
// were, or not, compiled with streambuf support
wxTextCtrl& operator<<(const wxString& s);
virtual bool ShouldInheritColours() const { return false; }
protected:
+ // override streambuf method
+#if wxHAS_TEXT_WINDOW_STREAM
+ int overflow(int i);
+#endif // wxHAS_TEXT_WINDOW_STREAM
+
// the name of the last file loaded with LoadFile() which will be used by
// SaveFile() by default
wxString m_filename;
#include "wx/msw/textctrl.h"
#elif defined(__WXMOTIF__)
#include "wx/motif/textctrl.h"
-#elif defined(__WXGTK__)
+#elif defined(__WXGTK20__)
#include "wx/gtk/textctrl.h"
+#elif defined(__WXGTK__)
+ #include "wx/gtk1/textctrl.h"
#elif defined(__WXMAC__)
#include "wx/mac/textctrl.h"
#elif defined(__WXCOCOA__)
#define wxTextEventHandler(func) wxCommandEventHandler(func)
#define wxTextUrlEventHandler(func) \
- (wxObjectEventFunction)wxStaticCastEvent(wxTextUrlEventFunction, &func)
+ (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxTextUrlEventFunction, &func)
#define wx__DECLARE_TEXTEVT(evt, id, fn) \
wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_ ## evt, id, wxTextEventHandler(fn))
#define EVT_TEXT_URL(id, fn) wx__DECLARE_TEXTURLEVT(URL, id, fn)
#define EVT_TEXT_MAXLEN(id, fn) wx__DECLARE_TEXTEVT(MAXLEN, id, fn)
-#ifndef NO_TEXT_WINDOW_STREAM
+#if wxHAS_TEXT_WINDOW_STREAM
// ----------------------------------------------------------------------------
// wxStreamToTextRedirector: this class redirects all data sent to the given
wxSTD streambuf *m_sbufOld;
};
-#endif // !NO_TEXT_WINDOW_STREAM
+#endif // wxHAS_TEXT_WINDOW_STREAM
#endif // wxUSE_TEXTCTRL