X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f5c6eb5c178b44f4400495e06274ffd130635190..3a922bb4bd8dbcb04e31e324648c2912e167e0cd:/src/mac/textctrl.cpp

diff --git a/src/mac/textctrl.cpp b/src/mac/textctrl.cpp
index cda4bcd0de..f522366b32 100644
--- a/src/mac/textctrl.cpp
+++ b/src/mac/textctrl.cpp
@@ -553,8 +553,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
@@ -575,12 +583,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("");
 }
 
 /*
@@ -625,12 +680,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