// Author: Stefan Csomor
// Modified by: Kevin Ollivier
// Created: 1998-01-01
-// RCS-ID: $Id: textctrl.cpp 54820 2008-07-29 20:04:11Z SC $
+// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#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 ;
}
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() ;
}
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)
wxTextPos wxTextEntry::GetLastPosition() const
{
+ wxCHECK_MSG( GetTextPeer(), -1, "Must create the control first" );
+
return GetTextPeer()->GetLastPosition() ;
}
void wxTextEntry::Remove(long from, long to)
{
- GetTextPeer()->Remove( from , to ) ;
+ wxCHECK_RET( GetTextPeer(), "Must create the control first" );
+
+ {
+ EventsSuppressor noevents(this);
+ GetTextPeer()->Remove( from , to );
+ }
+
+ SendTextUpdatedEventIfAllowed();
}
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)
{
- GetTextPeer()->WriteText( str ) ;
+ wxCHECK_RET( GetTextPeer(), "Must create the control first" );
+
+ {
+ EventsSuppressor noevents(this);
+ GetTextPeer()->WriteText( str );
+ }
+
+ SendTextUpdatedEventIfAllowed();
}
void wxTextEntry::Clear()
{
- GetTextPeer()->Clear() ;
+ wxCHECK_RET( GetTextPeer(), "Must create the control first" );
+
+ {
+ EventsSuppressor noevents(this);
+ GetTextPeer()->Clear();
+ }
+
+ SendTextUpdatedEventIfAllowed();
}
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() ;
}
if ( !IsEditable() )
return false ;
+ wxCHECK_MSG( GetTextPeer(), false, "Must create the control first" );
+
return GetTextPeer()->CanUndo() ;
}
if ( !IsEditable() )
return false ;
+ wxCHECK_MSG( GetTextPeer(), false, "Must create the control first" );
+
return GetTextPeer()->CanRedo() ;
}
return win ? dynamic_cast<wxTextWidgetImpl *>(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