X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fdaf613add176525ed8b6cafaf278dfd80f85074..16d38102e8ad5534d185cc532b9aa8077a75e0a4:/src/mac/textctrl.cpp?ds=sidebyside

diff --git a/src/mac/textctrl.cpp b/src/mac/textctrl.cpp
index 9a2c72ef33..c6a6d86e09 100644
--- a/src/mac/textctrl.cpp
+++ b/src/mac/textctrl.cpp
@@ -13,7 +13,11 @@
 #pragma implementation "textctrl.h"
 #endif
 
-#ifdef __UNIX__
+#include "wx/defs.h"
+
+#if wxUSE_TEXTCTRL
+
+#ifdef __DARWIN__
   #include <sys/types.h>
   #include <sys/stat.h>
 #else
@@ -34,7 +38,7 @@
 
 #if defined(__BORLANDC__) && !defined(__WIN32__)
   #include <alloc.h>
-#elif !defined(__MWERKS__) && !defined(__GNUWIN32) && !defined(__WXMAC_X__)
+#elif !defined(__MWERKS__) && !defined(__GNUWIN32) && !defined(__DARWIN__)
   #include <malloc.h>
 #endif
 
@@ -107,7 +111,16 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
 
 	MacPreControlCreate( parent , id ,  "" , pos , mySize ,style, validator , name , &bounds , title ) ;
 
-	m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , "\p" , false , 0 , 0 , 1, 
+    if ( m_windowStyle & wxTE_MULTILINE )
+    {
+        wxASSERT_MSG( !(m_windowStyle & wxTE_PROCESS_ENTER),
+                      wxT("wxTE_PROCESS_ENTER style is ignored for multiline text controls (they always process it)") );
+
+        m_windowStyle |= wxTE_PROCESS_ENTER;
+    }
+
+
+	m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , "\p" , true , 0 , 0 , 1, 
 	  	( style & wxTE_PASSWORD ) ? kControlEditTextPasswordProc : kControlEditTextProc , (long) this ) ;
 	MacPostControlCreate() ;
 
@@ -544,8 +557,16 @@ void wxTextCtrl::DiscardEdits()
 
 int wxTextCtrl::GetNumberOfLines() const
 {
-    // TODO
-    return 0;
+	Size actualsize;
+	UMAGetControlData( m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 32767 , wxBuffer , &actualsize) ;
+	
+	int count = 1;
+	for (int i = 0; i < actualsize; i++)
+	{
+	    if (wxBuffer[i] == '\r') count++;
+	}
+	
+    return count;
 }
 
 long wxTextCtrl::XYToPosition(long x, long y) const
@@ -566,12 +587,59 @@ void wxTextCtrl::ShowPosition(long pos)
 
 int wxTextCtrl::GetLineLength(long lineNo) const
 {
-    return GetValue().Length();
+	Size actualsize;
+	UMAGetControlData( m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 32767 , wxBuffer , &actualsize) ;
+	
+	// Find line first
+	int count = 0;
+	for (int i = 0; i < actualsize; i++)
+	{
+	    if (count == lineNo)
+	    {
+	        // Count chars in line then
+	    	count = 0;
+	    	for (int j = i; j < actualsize; j++)
+	    	{
+	    	    count++;
+	    	    if (wxBuffer[j] == '\r') return count;
+	    	}
+	    	
+	    	return count;
+	    }
+	    if (wxBuffer[i] == '\r') count++;
+	}
+	
+    return 0;
 }
 
 wxString wxTextCtrl::GetLineText(long lineNo) const
 {
-    return GetValue();
+	Size actualsize;
+	UMAGetControlData( m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 32767 , wxBuffer , &actualsize) ;
+	
+	// Find line first
+	int count = 0;
+	for (int i = 0; i < actualsize; i++)
+	{
+	    if (count == lineNo)
+	    {
+	        // Add chars in line then
+	    	wxString tmp("");
+	    	
+	    	for (int j = i; j < actualsize; j++)
+	    	{
+	    	    if (wxBuffer[j] == '\r')
+	    	        return tmp;
+	    	        
+	    	    tmp += wxBuffer[j];
+	    	}
+	    	
+	    	return tmp;
+	    }
+	    if (wxBuffer[i] == '\r') count++;
+	}
+	
+    return wxString("");
 }
 
 /*
@@ -616,12 +684,15 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
     			}
            		if ( panel && panel->GetDefaultItem() )
            		{
-           			wxButton *def = panel->GetDefaultItem() ;
-    				wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
-   					event.SetEventObject(def);
-   					def->Command(event);
-               		event.Skip() ;
-                	return ;
+                    wxButton *def = wxDynamicCast(panel->GetDefaultItem(),
+                                                          wxButton);
+           			if ( def && def->IsEnabled() )
+           			{
+    				    wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
+   					    event.SetEventObject(def);
+   					    def->Command(event);
+                    	return ;
+                   }
            		}
             }
             //else: multiline controls need Enter for themselves
@@ -653,7 +724,7 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
 	keychar = short(ev->message & charCodeMask);
 	keycode = short(ev->message & keyCodeMask) >> 8 ;
 	UMAHandleControlKey( m_macControl , keycode , keychar , ev->modifiers ) ;
-	if ( keychar >= 0x20 || event.KeyCode() == WXK_RETURN)
+	if ( keychar >= 0x20 || event.KeyCode() == WXK_RETURN || event.KeyCode() == WXK_DELETE || event.KeyCode() == WXK_BACK)
 	{
         wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
         event.SetString( GetValue() ) ;
@@ -717,3 +788,5 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
     event.Enable( CanRedo() );
 }
 
+#endif
+    // wxUSE_TEXTCTRL