X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fbbba98df450fd35641d32d289143040834e9826..d9f7f49ea3aca3e0e0beafe648a61e6606e37663:/src/common/textcmn.cpp?ds=sidebyside diff --git a/src/common/textcmn.cpp b/src/common/textcmn.cpp index d1c0434cc2..8b5744f1bf 100644 --- a/src/common/textcmn.cpp +++ b/src/common/textcmn.cpp @@ -12,10 +12,11 @@ // ============================================================================ // declarations // ============================================================================ + #ifdef __GNUG__ #pragma implementation "textctrlbase.h" #endif - + // for compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -23,6 +24,8 @@ #pragma hdrstop #endif +#if wxUSE_TEXTCTRL + #ifndef WX_PRECOMP #include "wx/intl.h" #include "wx/log.h" @@ -43,23 +46,48 @@ // implementation // ============================================================================ +IMPLEMENT_DYNAMIC_CLASS(wxTextUrlEvent, wxCommandEvent) + +DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED) +DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER) +DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL) +DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_MAXLEN) + // ---------------------------------------------------------------------------- // ctor // ---------------------------------------------------------------------------- wxTextCtrlBase::wxTextCtrlBase() -#if !wxUSE_IOSTREAMH - #ifndef NO_TEXT_WINDOW_STREAM - :streambuf() - #endif //NO_TEXT_WINDOW_STREAM -#endif //!wxUSE_IOSTREAMH { -#if wxUSE_IOSTREAMH - #ifndef NO_TEXT_WINDOW_STREAM - if (allocate()) - setp(base(),ebuf()); - #endif // NO_TEXT_WINDOW_STREAM -#endif //wxUSE_IOSTREAMH +} + +wxTextCtrlBase::~wxTextCtrlBase() +{ +} + +// ---------------------------------------------------------------------------- +// style functions - not implemented here +// ---------------------------------------------------------------------------- + +// apply styling to text range +bool wxTextCtrlBase::SetStyle(long WXUNUSED(start), long WXUNUSED(end), + const wxTextAttr& WXUNUSED(style)) +{ + // to be implemented in derived TextCtrl classes + return FALSE; +} + +// change default text attributes +bool wxTextCtrlBase::SetDefaultStyle(const wxTextAttr &style) +{ + m_defaultStyle = style; + return TRUE; +} + +// get default text attributes +const wxTextAttr& wxTextCtrlBase::GetDefaultStyle() const +{ + return m_defaultStyle; } // ---------------------------------------------------------------------------- @@ -68,6 +96,7 @@ wxTextCtrlBase::wxTextCtrlBase() bool wxTextCtrlBase::LoadFile(const wxString& filename) { +#if wxUSE_FFILE wxFFile file(filename); if ( file.IsOpened() ) { @@ -85,6 +114,7 @@ bool wxTextCtrlBase::LoadFile(const wxString& filename) } wxLogError(_("File couldn't be loaded.")); +#endif // wxUSE_FFILE return FALSE; } @@ -100,6 +130,7 @@ bool wxTextCtrlBase::SaveFile(const wxString& filename) return FALSE; } +#if wxUSE_FFILE wxFFile file(filename, "w"); if ( file.IsOpened() && file.Write(GetValue()) ) { @@ -112,6 +143,7 @@ bool wxTextCtrlBase::SaveFile(const wxString& filename) } wxLogError(_("The text couldn't be saved.")); +#endif // wxUSE_FFILE return FALSE; } @@ -169,34 +201,70 @@ wxTextCtrl& wxTextCtrlBase::operator<<(const wxChar c) #ifndef NO_TEXT_WINDOW_STREAM -int wxTextCtrlBase::overflow( int WXUNUSED(c) ) +int wxTextCtrlBase::overflow(int c) { - int len = pptr() - pbase(); - char *txt = new char[len+1]; - strncpy(txt, pbase(), len); - txt[len] = '\0'; - (*this) << txt; - setp(pbase(), epptr()); - delete[] txt; - return EOF; + AppendText((wxChar)c); + + // return something different from EOF + return 0; } -int wxTextCtrlBase::sync() +#endif // NO_TEXT_WINDOW_STREAM + +// ---------------------------------------------------------------------------- +// clipboard stuff +// ---------------------------------------------------------------------------- + +bool wxTextCtrlBase::CanCopy() const { - int len = pptr() - pbase(); - char *txt = new char[len+1]; - strncpy(txt, pbase(), len); - txt[len] = '\0'; - (*this) << txt; - setp(pbase(), epptr()); - delete[] txt; - return 0; + // can copy if there's a selection + long from, to; + GetSelection(&from, &to); + return from != to; } -int wxTextCtrlBase::underflow() +bool wxTextCtrlBase::CanCut() const { - return EOF; + // can cut if there's a selection and if we're not read only + return CanCopy() && IsEditable(); } -#endif // NO_TEXT_WINDOW_STREAM +bool wxTextCtrlBase::CanPaste() const +{ + // can paste if we are not read only + return IsEditable(); +} + +// ---------------------------------------------------------------------------- +// misc +// ---------------------------------------------------------------------------- + +void wxTextCtrlBase::SelectAll() +{ + SetSelection(0, GetLastPosition()); +} + +wxString wxTextCtrlBase::GetStringSelection() const +{ + long from, to; + GetSelection(&from, &to); + + wxString sel; + if ( from < to ) + { + sel = GetValue().Mid(from, to - from); + } + + return sel; +} + +#else // !wxUSE_TEXTCTRL + +// define this one even if !wxUSE_TEXTCTRL because it is also used by other +// controls (wxComboBox and wxSpinCtrl) +#include "wx/event.h" + +DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED) + +#endif // wxUSE_TEXTCTRL/!wxUSE_TEXTCTRL