X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ce00f59b5b169752d2f05ce3bb1a88ddc1b38b4c..ad653fa23069c5d9378247084f03c9a718c3ad62:/src/osx/textentry_osx.cpp?ds=sidebyside diff --git a/src/osx/textentry_osx.cpp b/src/osx/textentry_osx.cpp index 5f51fca1b7..c5f53512b2 100644 --- a/src/osx/textentry_osx.cpp +++ b/src/osx/textentry_osx.cpp @@ -45,21 +45,40 @@ #include "wx/filefn.h" #include "wx/sysopt.h" #include "wx/thread.h" +#include "wx/textcompleter.h" #include "wx/osx/private.h" +wxTextEntry::wxTextEntry() +{ + m_completer = NULL; + m_editable = true; + m_maxLength = 0; +} + +wxTextEntry::~wxTextEntry() +{ + delete m_completer; +} + wxString wxTextEntry::DoGetValue() const { + wxCHECK_MSG( GetTextPeer(), wxString(), "Must create the control first" ); + return GetTextPeer()->GetStringValue() ; } void wxTextEntry::GetSelection(long* from, long* to) const { + wxCHECK_RET( GetTextPeer(), "Must create the control first" ); + GetTextPeer()->GetSelection( from , to ) ; } void wxTextEntry::SetMaxLength(unsigned long len) { + if ( GetTextPeer()->CanClipMaxLength() ) + GetTextPeer()->SetMaxLength(len); m_maxLength = len ; } @@ -67,18 +86,24 @@ void wxTextEntry::SetMaxLength(unsigned long len) void wxTextEntry::Copy() { + wxCHECK_RET( GetTextPeer(), "Must create the control first" ); + if (CanCopy()) GetTextPeer()->Copy() ; } void wxTextEntry::Cut() { + wxCHECK_RET( GetTextPeer(), "Must create the control first" ); + if (CanCut()) GetTextPeer()->Cut() ; } void wxTextEntry::Paste() { + wxCHECK_RET( GetTextPeer(), "Must create the control first" ); + if (CanPaste()) GetTextPeer()->Paste() ; } @@ -109,16 +134,20 @@ bool wxTextEntry::CanPaste() const if (!IsEditable()) return false; + wxCHECK_MSG( GetTextPeer(), false, "Must create the control first" ); + return GetTextPeer()->CanPaste() ; } void wxTextEntry::SetEditable(bool editable) { - if ( editable != m_editable ) - { - m_editable = editable ; - GetTextPeer()->SetEditable( editable ) ; - } + if ( editable == m_editable ) + return; + + m_editable = editable ; + + wxCHECK_RET( GetTextPeer(), "Must create the control first" ); + GetTextPeer()->SetEditable( editable ) ; } void wxTextEntry::SetInsertionPoint(long pos) @@ -142,11 +171,15 @@ long wxTextEntry::GetInsertionPoint() const wxTextPos wxTextEntry::GetLastPosition() const { + wxCHECK_MSG( GetTextPeer(), -1, "Must create the control first" ); + return GetTextPeer()->GetLastPosition() ; } void wxTextEntry::Remove(long from, long to) { + wxCHECK_RET( GetTextPeer(), "Must create the control first" ); + { EventsSuppressor noevents(this); GetTextPeer()->Remove( from , to ); @@ -157,11 +190,15 @@ void wxTextEntry::Remove(long from, long to) void wxTextEntry::SetSelection(long from, long to) { + wxCHECK_RET( GetTextPeer(), "Must create the control first" ); + GetTextPeer()->SetSelection( from , to ) ; } void wxTextEntry::WriteText(const wxString& str) { + wxCHECK_RET( GetTextPeer(), "Must create the control first" ); + { EventsSuppressor noevents(this); GetTextPeer()->WriteText( str ); @@ -172,6 +209,8 @@ void wxTextEntry::WriteText(const wxString& str) void wxTextEntry::Clear() { + wxCHECK_RET( GetTextPeer(), "Must create the control first" ); + { EventsSuppressor noevents(this); GetTextPeer()->Clear(); @@ -185,18 +224,39 @@ bool wxTextEntry::IsEditable() const return m_editable ; } +bool wxTextEntry::SendMaxLenEvent() +{ + wxWindow *win = GetEditableWindow(); + wxCHECK_MSG( win, false, "can't send an event without a window" ); + + wxCommandEvent event(wxEVT_TEXT_MAXLEN, win->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(win->GetValue()); + + event.SetEventObject(win); + return win->HandleWindowEvent(event); +} + // ---------------------------------------------------------------------------- // Undo/redo // ---------------------------------------------------------------------------- void wxTextEntry::Undo() { + wxCHECK_RET( GetTextPeer(), "Must create the control first" ); + if (CanUndo()) GetTextPeer()->Undo() ; } void wxTextEntry::Redo() { + wxCHECK_RET( GetTextPeer(), "Must create the control first" ); + if (CanRedo()) GetTextPeer()->Redo() ; } @@ -206,6 +266,8 @@ bool wxTextEntry::CanUndo() const if ( !IsEditable() ) return false ; + wxCHECK_MSG( GetTextPeer(), false, "Must create the control first" ); + return GetTextPeer()->CanUndo() ; } @@ -214,6 +276,8 @@ bool wxTextEntry::CanRedo() const if ( !IsEditable() ) return false ; + wxCHECK_MSG( GetTextPeer(), false, "Must create the control first" ); + return GetTextPeer()->CanRedo() ; } @@ -224,4 +288,23 @@ wxTextWidgetImpl * wxTextEntry::GetTextPeer() const return win ? dynamic_cast(win->GetPeer()) : NULL; } +// ---------------------------------------------------------------------------- +// Auto-completion +// ---------------------------------------------------------------------------- + +bool wxTextEntry::DoAutoCompleteStrings(const wxArrayString& choices) +{ + wxTextCompleterFixed * const completer = new wxTextCompleterFixed; + completer->SetCompletions(choices); + + return DoAutoCompleteCustom(completer); +} + +bool wxTextEntry::DoAutoCompleteCustom(wxTextCompleter *completer) +{ + m_completer = completer; + + return true; +} + #endif // wxUSE_TEXTCTRL