]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/textctrl.cpp
Updated to new PyCrust
[wxWidgets.git] / src / mac / carbon / textctrl.cpp
index 9a2c72ef33e438996e7e8ad20ba82887894b24fe..c6a6d86e092aec816ccd0c601333fc1677a232e1 100644 (file)
 #pragma implementation "textctrl.h"
 #endif
 
 #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
   #include <sys/types.h>
   #include <sys/stat.h>
 #else
@@ -34,7 +38,7 @@
 
 #if defined(__BORLANDC__) && !defined(__WIN32__)
   #include <alloc.h>
 
 #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
 
   #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 ) ;
 
 
        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() ;
 
                ( style & wxTE_PASSWORD ) ? kControlEditTextPasswordProc : kControlEditTextProc , (long) this ) ;
        MacPostControlCreate() ;
 
@@ -544,8 +557,16 @@ void wxTextCtrl::DiscardEdits()
 
 int wxTextCtrl::GetNumberOfLines() const
 {
 
 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
 }
 
 long wxTextCtrl::XYToPosition(long x, long y) const
@@ -566,12 +587,59 @@ void wxTextCtrl::ShowPosition(long pos)
 
 int wxTextCtrl::GetLineLength(long lineNo) const
 {
 
 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
 {
 }
 
 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() )
                        {
                        }
                        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
                        }
             }
             //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 ) ;
        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() ) ;
        {
         wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
         event.SetString( GetValue() ) ;
@@ -717,3 +788,5 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
     event.Enable( CanRedo() );
 }
 
     event.Enable( CanRedo() );
 }
 
+#endif
+    // wxUSE_TEXTCTRL