X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c4d25c01ae813d8fe13d7b2a267864ccaee1840d..ce7208d49d5ce2ca1dc0b3b83f14f1d04f29c4bf:/src/common/textcmn.cpp diff --git a/src/common/textcmn.cpp b/src/common/textcmn.cpp index b31c830a00..6f53679d6b 100644 --- a/src/common/textcmn.cpp +++ b/src/common/textcmn.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: common/textcmn.cpp +// Name: src/common/textcmn.cpp // Purpose: implementation of platform-independent functions of wxTextCtrl // Author: Julian Smart // Modified by: @@ -13,10 +13,6 @@ // declarations // ============================================================================ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "textctrlbase.h" -#endif - // for compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -24,12 +20,17 @@ #pragma hdrstop #endif +#ifndef WX_PRECOMP + #include "wx/event.h" +#endif // WX_PRECOMP + #if wxUSE_TEXTCTRL +#include "wx/textctrl.h" + #ifndef WX_PRECOMP #include "wx/intl.h" #include "wx/log.h" - #include "wx/textctrl.h" #endif // WX_PRECOMP #include "wx/ffile.h" @@ -53,6 +54,8 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER) DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL) DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_MAXLEN) +IMPLEMENT_ABSTRACT_CLASS(wxTextCtrlBase, wxControl) + // ---------------------------------------------------------------------------- // style functions - not implemented here // ---------------------------------------------------------------------------- @@ -193,7 +196,7 @@ const wxTextAttr& wxTextCtrlBase::GetDefaultStyle() const // file IO functions // ---------------------------------------------------------------------------- -bool wxTextCtrlBase::LoadFile(const wxString& filename) +bool wxTextCtrlBase::DoLoadFile(const wxString& filename, int WXUNUSED(fileType)) { #if wxUSE_FFILE wxFFile file(filename); @@ -218,9 +221,9 @@ bool wxTextCtrlBase::LoadFile(const wxString& filename) return false; } -bool wxTextCtrlBase::SaveFile(const wxString& filename) +bool wxTextCtrlBase::SaveFile(const wxString& filename, int fileType) { - wxString filenameToUse = filename.IsEmpty() ? m_filename : filename; + wxString filenameToUse = filename.empty() ? m_filename : filename; if ( filenameToUse.empty() ) { // what kind of message to give? is it an error or a program bug? @@ -229,16 +232,21 @@ bool wxTextCtrlBase::SaveFile(const wxString& filename) return false; } + return DoSaveFile(filenameToUse, fileType); +} + +bool wxTextCtrlBase::DoSaveFile(const wxString& filename, int WXUNUSED(fileType)) +{ #if wxUSE_FFILE - wxFFile file(filenameToUse, _T("w")); + wxFFile file(filename, _T("w")); if ( file.IsOpened() && file.Write(GetValue()) ) { + // if it worked, save for future calls + m_filename = filename; + // it's not modified any longer DiscardEdits(); - // if it worked, save for future calls - m_filename = filenameToUse; - return true; } #endif // wxUSE_FFILE @@ -299,7 +307,7 @@ wxTextCtrl& wxTextCtrlBase::operator<<(const wxChar c) // streambuf methods implementation // ---------------------------------------------------------------------------- -#ifndef NO_TEXT_WINDOW_STREAM +#if wxHAS_TEXT_WINDOW_STREAM int wxTextCtrlBase::overflow(int c) { @@ -309,7 +317,7 @@ int wxTextCtrlBase::overflow(int c) return 0; } -#endif // NO_TEXT_WINDOW_STREAM +#endif // wxHAS_TEXT_WINDOW_STREAM // ---------------------------------------------------------------------------- // clipboard stuff @@ -362,7 +370,7 @@ bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) case WXK_NUMPAD7: case WXK_NUMPAD8: case WXK_NUMPAD9: - ch = _T('0') + keycode - WXK_NUMPAD0; + ch = (wxChar)(_T('0') + keycode - WXK_NUMPAD0); break; case WXK_MULTIPLY: @@ -394,9 +402,8 @@ bool wxTextCtrlBase::EmulateKeyPress(const wxKeyEvent& event) case WXK_NUMPAD_DELETE: // delete the character at cursor { - const long pos = GetInsertionPoint(), - last = GetLastPosition(); - if ( pos < last ) + const long pos = GetInsertionPoint(); + if ( pos < GetLastPosition() ) Remove(pos, pos + 1); } break; @@ -476,9 +483,12 @@ wxString wxTextCtrlBase::GetRange(long from, long to) const // do the window-specific processing after processing the update event void wxTextCtrlBase::DoUpdateWindowUI(wxUpdateUIEvent& event) { - if ( event.GetSetEnabled() ) - Enable(event.GetEnabled()); + // call inherited, but skip the wxControl's version, and call directly the + // wxWindow's one instead, because the only reason why we are overriding this + // function is that we want to use SetValue() instead of wxControl::SetLabel() + wxWindowBase::DoUpdateWindowUI(event); + // update text if ( event.GetSetText() ) { if ( event.GetText() != GetValue() ) @@ -515,13 +525,29 @@ wxTextCtrlBase::HitTest(const wxPoint& WXUNUSED(pt), return wxTE_HT_UNKNOWN; } +// ---------------------------------------------------------------------------- +// events +// ---------------------------------------------------------------------------- + +void wxTextCtrlBase::SendTextUpdatedEvent() +{ + wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, GetId()); + + // do not do this as it could be very inefficient if the text control + // contains a lot of text and we're not using ref-counted wxString + // implementation -- instead, event.GetString() will query the control for + // its current text if needed + //event.SetString(GetValue()); + + event.SetEventObject(this); + GetEventHandler()->ProcessEvent(event); +} + #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 -