]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/textentry_osx.cpp
fixes potential crash under gatekeeper
[wxWidgets.git] / src / osx / textentry_osx.cpp
index 9fad59280c0a8fb3c678d8254f3a3f2de0c01575..8fe74193ea6ef0d9849b5e3d87db1ad5104ad8b4 100644 (file)
 #include "wx/filefn.h"
 #include "wx/sysopt.h"
 #include "wx/thread.h"
 #include "wx/filefn.h"
 #include "wx/sysopt.h"
 #include "wx/thread.h"
+#include "wx/textcompleter.h"
 
 #include "wx/osx/private.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
 {
 wxString wxTextEntry::DoGetValue() const
 {
+    wxCHECK_MSG( GetTextPeer(), wxString(), "Must create the control first" );
+
     return GetTextPeer()->GetStringValue() ;
 }
 
 void wxTextEntry::GetSelection(long* from, long* to) const
 {
     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)
 {
     GetTextPeer()->GetSelection( from , to ) ;
 }
 
 void wxTextEntry::SetMaxLength(unsigned long len)
 {
+    if ( GetTextPeer()->CanClipMaxLength() )
+        GetTextPeer()->SetMaxLength(len);
     m_maxLength = len ;
 }
 
     m_maxLength = len ;
 }
 
@@ -67,18 +86,24 @@ void wxTextEntry::SetMaxLength(unsigned long len)
 
 void wxTextEntry::Copy()
 {
 
 void wxTextEntry::Copy()
 {
+    wxCHECK_RET( GetTextPeer(), "Must create the control first" );
+
     if (CanCopy())
         GetTextPeer()->Copy() ;
 }
 
 void wxTextEntry::Cut()
 {
     if (CanCopy())
         GetTextPeer()->Copy() ;
 }
 
 void wxTextEntry::Cut()
 {
+    wxCHECK_RET( GetTextPeer(), "Must create the control first" );
+
     if (CanCut())
         GetTextPeer()->Cut() ;
 }
 
 void wxTextEntry::Paste()
 {
     if (CanCut())
         GetTextPeer()->Cut() ;
 }
 
 void wxTextEntry::Paste()
 {
+    wxCHECK_RET( GetTextPeer(), "Must create the control first" );
+
     if (CanPaste())
         GetTextPeer()->Paste() ;
 }
     if (CanPaste())
         GetTextPeer()->Paste() ;
 }
@@ -109,16 +134,20 @@ bool wxTextEntry::CanPaste() const
     if (!IsEditable())
         return false;
 
     if (!IsEditable())
         return false;
 
+    wxCHECK_MSG( GetTextPeer(), false, "Must create the control first" );
+
     return GetTextPeer()->CanPaste() ;
 }
 
 void wxTextEntry::SetEditable(bool editable)
 {
     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)
 }
 
 void wxTextEntry::SetInsertionPoint(long pos)
@@ -142,26 +171,34 @@ long wxTextEntry::GetInsertionPoint() const
 
 wxTextPos wxTextEntry::GetLastPosition() const
 {
 
 wxTextPos wxTextEntry::GetLastPosition() const
 {
+    wxCHECK_MSG( GetTextPeer(), -1, "Must create the control first" );
+
     return GetTextPeer()->GetLastPosition() ;
 }
 
 void wxTextEntry::Remove(long from, long to)
 {
     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 );
     }
     {
         EventsSuppressor noevents(this);
         GetTextPeer()->Remove( from , to );
     }
-    
+
     SendTextUpdatedEventIfAllowed();
 }
 
 void wxTextEntry::SetSelection(long from, long 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()->SetSelection( from , to ) ;
 }
 
 void wxTextEntry::WriteText(const wxString& str)
 {
+    wxCHECK_RET( GetTextPeer(), "Must create the control first" );
+
     {
         EventsSuppressor noevents(this);
         GetTextPeer()->WriteText( str );
     {
         EventsSuppressor noevents(this);
         GetTextPeer()->WriteText( str );
@@ -172,6 +209,8 @@ void wxTextEntry::WriteText(const wxString& str)
 
 void wxTextEntry::Clear()
 {
 
 void wxTextEntry::Clear()
 {
+    wxCHECK_RET( GetTextPeer(), "Must create the control first" );
+
     {
         EventsSuppressor noevents(this);
         GetTextPeer()->Clear();
     {
         EventsSuppressor noevents(this);
         GetTextPeer()->Clear();
@@ -191,12 +230,16 @@ bool wxTextEntry::IsEditable() const
 
 void wxTextEntry::Undo()
 {
 
 void wxTextEntry::Undo()
 {
+    wxCHECK_RET( GetTextPeer(), "Must create the control first" );
+
     if (CanUndo())
         GetTextPeer()->Undo() ;
 }
 
 void wxTextEntry::Redo()
 {
     if (CanUndo())
         GetTextPeer()->Undo() ;
 }
 
 void wxTextEntry::Redo()
 {
+    wxCHECK_RET( GetTextPeer(), "Must create the control first" );
+
     if (CanRedo())
         GetTextPeer()->Redo() ;
 }
     if (CanRedo())
         GetTextPeer()->Redo() ;
 }
@@ -206,6 +249,8 @@ bool wxTextEntry::CanUndo() const
     if ( !IsEditable() )
         return false ;
 
     if ( !IsEditable() )
         return false ;
 
+    wxCHECK_MSG( GetTextPeer(), false, "Must create the control first" );
+
     return GetTextPeer()->CanUndo() ;
 }
 
     return GetTextPeer()->CanUndo() ;
 }
 
@@ -214,6 +259,8 @@ bool wxTextEntry::CanRedo() const
     if ( !IsEditable() )
         return false ;
 
     if ( !IsEditable() )
         return false ;
 
+    wxCHECK_MSG( GetTextPeer(), false, "Must create the control first" );
+
     return GetTextPeer()->CanRedo() ;
 }
 
     return GetTextPeer()->CanRedo() ;
 }
 
@@ -224,4 +271,23 @@ wxTextWidgetImpl * wxTextEntry::GetTextPeer() const
     return win ? dynamic_cast<wxTextWidgetImpl *>(win->GetPeer()) : NULL;
 }
 
     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
 #endif // wxUSE_TEXTCTRL