]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/classic/textctrl.cpp
Testing CVSROOT/loginfo changes
[wxWidgets.git] / src / mac / classic / textctrl.cpp
index 811e00268b0e3ef0546f51512df1f3213adc5a8a..0c1a9e6e771df85f2cb0fea2a331823435f18fd6 100644 (file)
@@ -6,13 +6,9 @@
 // Created:     1998-01-01
 // RCS-ID:      $Id$
 // Copyright:   (c) Stefan Csomor
-// Licence:     wxWidgets licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "textctrl.h"
-#endif
-
 #include "wx/defs.h"
 
 #if wxUSE_TEXTCTRL
@@ -225,7 +221,7 @@ static pascal void TPPaneDrawProc(ControlRef theControl, ControlPartCode thePart
             else
                 TXNSetFrameBounds(  varsp->fTXNRec, varsp->fRTextArea.top + 30000 , varsp->fRTextArea.left + 30000 ,
                     varsp->fRTextArea.bottom + 30000 , varsp->fRTextArea.right + 30000 , varsp->fTXNFrame);
-            
+
         }
 
         if ( IsControlVisible( theControl ) )
@@ -238,7 +234,7 @@ static pascal void TPPaneDrawProc(ControlRef theControl, ControlPartCode thePart
                 /* restore the drawing environment */
                 /* draw the text frame and focus frame (if necessary) */
             DrawThemeEditTextFrame(&varsp->fRTextOutline, varsp->fIsActive ? kThemeStateActive: kThemeStateInactive);
-            if ((**tpvars).fIsActive && varsp->fInFocus) 
+            if ((**tpvars).fIsActive && varsp->fInFocus)
                 DrawThemeFocusRect(&varsp->fRFocusOutline, true);
                 /* release our globals */
             HSetState((Handle) tpvars, state);
@@ -420,7 +416,7 @@ static pascal void TPPaneActivateProc(ControlHandle theControl, Boolean activati
         if ( IsControlVisible( theControl ) )
         {
             DrawThemeEditTextFrame(&varsp->fRTextOutline, varsp->fIsActive ? kThemeStateActive: kThemeStateInactive);
-            if (varsp->fInFocus) 
+            if (varsp->fInFocus)
                 DrawThemeFocusRect(&varsp->fRFocusOutline, varsp->fIsActive);
         }
         HSetState((Handle) tpvars, state);
@@ -483,8 +479,8 @@ static pascal ControlPartCode TPPaneFocusProc(ControlHandle theControl, ControlF
         if ( IsControlVisible( theControl ) )
         {
            /* save the drawing state */
-               SetPort((**tpvars).fDrawingEnvironment);
-               wxMacWindowClipper clipper( wxFindControlFromMacControl(theControl ) ) ;
+            SetPort((**tpvars).fDrawingEnvironment);
+            wxMacWindowClipper clipper( wxFindControlFromMacControl(theControl ) ) ;
             DrawThemeEditTextFrame(&varsp->fRTextOutline, varsp->fIsActive ? kThemeStateActive: kThemeStateInactive);
             DrawThemeFocusRect(&varsp->fRFocusOutline, varsp->fIsActive && varsp->fInFocus);
         }
@@ -637,7 +633,6 @@ OSStatus mUPOpenControl(ControlHandle theControl, long wxStyle )
 
 
 
-#if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxControl)
 
 BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
@@ -655,29 +650,28 @@ BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
     EVT_UPDATE_UI(wxID_UNDO, wxTextCtrl::OnUpdateUndo)
     EVT_UPDATE_UI(wxID_REDO, wxTextCtrl::OnUpdateRedo)
 END_EVENT_TABLE()
-#endif
 
 static void SetTXNData( TXNObject txn , const wxString& st , TXNOffset start , TXNOffset end )
 {
 #if wxUSE_UNICODE
 #if SIZEOF_WCHAR_T == 2
-       size_t len = st.Len() ;
+    size_t len = st.Len() ;
     TXNSetData( txn , kTXNUnicodeTextData,  (void*)st.wc_str(), len * 2,
       start, end);
 #else
-       wxMBConvUTF16BE converter ;
-       ByteCount byteBufferLen = converter.WC2MB( NULL , st.wc_str() , 0 ) ;
-       UniChar *unibuf = (UniChar*) malloc(byteBufferLen) ;
-       converter.WC2MB( (char*) unibuf , st.wc_str() , byteBufferLen ) ;
+    wxMBConvUTF16BE converter ;
+    ByteCount byteBufferLen = converter.WC2MB( NULL , st.wc_str() , 0 ) ;
+    UniChar *unibuf = (UniChar*) malloc(byteBufferLen) ;
+    converter.WC2MB( (char*) unibuf , st.wc_str() , byteBufferLen ) ;
     TXNSetData( txn , kTXNUnicodeTextData,  (void*)unibuf, byteBufferLen ,
       start, end);
-       free( unibuf ) ;
+    free( unibuf ) ;
 #endif
 #else
-       wxCharBuffer text =  st.mb_str(wxConvLocal)  ;
+    wxCharBuffer text =  st.mb_str(wxConvLocal)  ;
     TXNSetData( txn , kTXNTextData,  (void*)text.data(), strlen( text ) ,
       start, end);
-#endif    
+#endif
 }
 
 // Text item
@@ -728,7 +722,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
 
     // base initialization
     if ( !wxTextCtrlBase::Create(parent, id, pos, size, style & ~(wxHSCROLL|wxVSCROLL), validator, name) )
-        return FALSE;
+        return false;
 
     wxSize mySize = size ;
     if ( m_macUsesTXN )
@@ -767,14 +761,14 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
 
     if ( m_windowStyle & wxTE_READONLY)
     {
-        m_editable = FALSE ;
+        m_editable = false ;
     }
 
     wxString st = str ;
     wxMacConvertNewlines13To10( &st ) ;
     if ( !m_macUsesTXN )
     {
-        m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , "\p" , false , 0 , 0 , 1,
+        m_macControl = (WXWidget) ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , "\p" , false , 0 , 0 , 1,
             (style & wxTE_PASSWORD) ? kControlEditTextPasswordProc : kControlEditTextProc , (long) this ) ;
         long size ;
         ::GetControlData((ControlHandle)  m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*)((TEHandle *)&m_macTE) , &size ) ;
@@ -788,7 +782,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
                 | kControlWantsActivate | kControlHandlesTracking | kControlHasSpecialBackground
                 | kControlGetsFocusOnClick | kControlSupportsLiveFeedback;
             /* create the control */
-        m_macControl = NewControl(MAC_WXHWND(parent->MacGetRootWindow()), &bounds, "\p", false , featurSet, 0, featurSet, kControlUserPaneProc, 0);
+        m_macControl = (WXWidget) ::NewControl(MAC_WXHWND(parent->MacGetRootWindow()), &bounds, "\p", false , featurSet, 0, featurSet, kControlUserPaneProc, 0);
             /* set up the mUP specific features and data */
         mUPOpenControl((ControlHandle) m_macControl, m_windowStyle );
     }
@@ -796,7 +790,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
 
     if ( !m_macUsesTXN )
     {
-       wxCharBuffer text = st.mb_str(wxConvLocal) ;
+        wxCharBuffer text = st.mb_str(wxConvLocal) ;
         ::SetControlData( (ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , strlen(text) , text ) ;
     }
     else
@@ -813,7 +807,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
         TXNShowSelection( (TXNObject) m_macTXN, kTXNShowStart);
     }
 
-    return TRUE;
+    return true;
 }
 
 wxString wxTextCtrl::GetValue() const
@@ -826,12 +820,12 @@ wxString wxTextCtrl::GetValue() const
         err = ::GetControlDataSize((ControlHandle) m_macControl, 0,
             ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag, &actualSize ) ;
 
-       if ( err )
-           return wxEmptyString ;
+        if ( err )
+            return wxEmptyString ;
 
-       if ( actualSize > 0 )
-       {
-                       wxCharBuffer buf(actualSize) ;
+        if ( actualSize > 0 )
+        {
+            wxCharBuffer buf(actualSize) ;
             ::GetControlData( (ControlHandle) m_macControl, 0,
                 ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag,
                 actualSize , buf.data() , &actualSize ) ;
@@ -854,13 +848,13 @@ wxString wxTextCtrl::GetValue() const
             if ( actualSize > 0 )
             {
                 wxChar *ptr = result.GetWriteBuf(actualSize*sizeof(wxChar)) ;
-#if SIZEOF_WCHAR_T == 2                                
+#if SIZEOF_WCHAR_T == 2
                 wxStrncpy( ptr , (wxChar*) *theText , actualSize ) ;
 #else
-                               wxMBConvUTF16BE converter ;
-                               HLock( theText ) ;
-                               converter.MB2WC( ptr , (const char*)*theText , actualSize ) ;
-                               HUnlock( theText ) ;
+                wxMBConvUTF16BE converter ;
+                HLock( theText ) ;
+                converter.MB2WC( ptr , (const char*)*theText , actualSize ) ;
+                HUnlock( theText ) ;
 #endif
                 ptr[actualSize] = 0 ;
                 result.UngetWriteBuf( actualSize *sizeof(wxChar) ) ;
@@ -911,7 +905,7 @@ void wxTextCtrl::SetValue(const wxString& str)
     wxMacConvertNewlines13To10( &st ) ;
     if ( !m_macUsesTXN )
     {
-       wxCharBuffer text =  st.mb_str(wxConvLocal) ;
+        wxCharBuffer text =  st.mb_str(wxConvLocal) ;
         ::SetControlData( (ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , strlen(text) , text ) ;
     }
     else
@@ -990,14 +984,14 @@ bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style)
         if ( !formerEditable )
             SetEditable(formerEditable) ;
     }
-    return TRUE ;
+    return true ;
 }
 
 bool wxTextCtrl::SetDefaultStyle(const wxTextAttr& style)
 {
     wxTextCtrlBase::SetDefaultStyle( style ) ;
     SetStyle( kTXNUseCurrentSelection , kTXNUseCurrentSelection , GetDefaultStyle() ) ;
-    return TRUE ;
+    return true ;
 }
 
 // Clipboard operations
@@ -1039,7 +1033,6 @@ void wxTextCtrl::Cut()
             TXNConvertToPublicScrap();
         }
         wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
-        event.SetString( GetValue() ) ;
         event.SetEventObject( this );
         GetEventHandler()->ProcessEvent(event);
       }
@@ -1062,7 +1055,6 @@ void wxTextCtrl::Paste()
             SetStyle( kTXNUseCurrentSelection , kTXNUseCurrentSelection , GetDefaultStyle() ) ;
         }
         wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
-        event.SetString( GetValue() ) ;
         event.SetEventObject( this );
         GetEventHandler()->ProcessEvent(event);
     }
@@ -1091,7 +1083,7 @@ bool wxTextCtrl::CanCut() const
 bool wxTextCtrl::CanPaste() const
 {
     if (!IsEditable())
-        return FALSE;
+        return false;
 
 #if TARGET_CARBON
     OSStatus err = noErr;
@@ -1107,20 +1099,20 @@ bool wxTextCtrl::CanPaste() const
         {
             if (( err = GetScrapFlavorSize( scrapRef, 'TEXT', &byteCount )) == noErr)
             {
-                return TRUE ;
+                return true ;
             }
         }
     }
-    return FALSE;
+    return false;
 
 #else
     long offset ;
     if ( GetScrap( NULL , 'TEXT' , &offset ) > 0 )
     {
-        return TRUE ;
+        return true ;
     }
 #endif
-    return FALSE ;
+    return false ;
 }
 
 void wxTextCtrl::SetEditable(bool editable)
@@ -1151,7 +1143,7 @@ void wxTextCtrl::SetInsertionPoint(long pos)
 
 void wxTextCtrl::SetInsertionPointEnd()
 {
-    long pos = GetLastPosition();
+    wxTextPos pos = GetLastPosition();
     SetInsertionPoint(pos);
 }
 
@@ -1162,7 +1154,7 @@ long wxTextCtrl::GetInsertionPoint() const
     return begin ;
 }
 
-long wxTextCtrl::GetLastPosition() const
+wxTextPos wxTextCtrl::GetLastPosition() const
 {
     if ( !m_macUsesTXN )
     {
@@ -1247,14 +1239,14 @@ void wxTextCtrl::SetSelection(long from, long to)
         ControlEditTextSelectionRec selection ;
         if ((from == -1) && (to == -1))
         {
-               selection.selStart = 0 ;
-               selection.selEnd = 32767 ;
-        } 
+            selection.selStart = 0 ;
+            selection.selEnd = 32767 ;
+        }
         else
         {
-               selection.selStart = from ;
-               selection.selEnd = to ;
-       }
+            selection.selStart = from ;
+            selection.selEnd = to ;
+        }
 
         TESetSelect( selection.selStart , selection.selEnd , ((TEHandle) m_macTE) ) ;
         ::SetControlData((ControlHandle)  m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ;
@@ -1269,9 +1261,9 @@ void wxTextCtrl::SetSelection(long from, long to)
         SetPort((**tpvars).fDrawingEnvironment);
         /* change the selection */
         if ((from == -1) && (to == -1))
-               TXNSelectAll((TXNObject) m_macTXN);
+            TXNSelectAll((TXNObject) m_macTXN);
         else
-               TXNSetSelection( (**tpvars).fTXNRec, from, to);
+            TXNSetSelection( (**tpvars).fTXNRec, from, to);
         TXNShowSelection( (TXNObject) m_macTXN, kTXNShowStart);
     }
 }
@@ -1280,10 +1272,10 @@ bool wxTextCtrl::LoadFile(const wxString& file)
 {
     if ( wxTextCtrlBase::LoadFile(file) )
     {
-        return TRUE;
+        return true;
     }
 
-    return FALSE;
+    return false;
 }
 
 void wxTextCtrl::WriteText(const wxString& str)
@@ -1292,7 +1284,7 @@ void wxTextCtrl::WriteText(const wxString& str)
     wxMacConvertNewlines13To10( &st ) ;
     if ( !m_macUsesTXN )
     {
-       wxCharBuffer text =  st.mb_str(wxConvLocal) ;
+        wxCharBuffer text =  st.mb_str(wxConvLocal) ;
         TEInsert( text , strlen(text) , ((TEHandle) m_macTE) ) ;
     }
     else
@@ -1388,9 +1380,9 @@ void wxTextCtrl::Undo()
 {
     if (CanUndo())
     {
-        if ( m_macUsesTXN ) 
+        if ( m_macUsesTXN )
         {
-            TXNUndo((TXNObject)m_macTXN); 
+            TXNUndo((TXNObject)m_macTXN);
         }
     }
 }
@@ -1399,37 +1391,37 @@ void wxTextCtrl::Redo()
 {
     if (CanRedo())
     {
-        if ( m_macUsesTXN ) 
+        if ( m_macUsesTXN )
         {
-            TXNRedo((TXNObject)m_macTXN); 
+            TXNRedo((TXNObject)m_macTXN);
         }
     }
 }
 
 bool wxTextCtrl::CanUndo() const
 {
-    if ( !IsEditable() ) 
+    if ( !IsEditable() )
     {
-        return false ; 
+        return false ;
     }
-    if ( m_macUsesTXN ) 
+    if ( m_macUsesTXN )
     {
-        return TXNCanUndo((TXNObject)m_macTXN,NULL); 
+        return TXNCanUndo((TXNObject)m_macTXN,NULL);
     }
-    return FALSE ;
+    return false ;
 }
 
 bool wxTextCtrl::CanRedo() const
 {
-    if ( !IsEditable() ) 
+    if ( !IsEditable() )
     {
-        return false ; 
+        return false ;
     }
-    if ( m_macUsesTXN ) 
+    if ( m_macUsesTXN )
     {
-        return TXNCanRedo((TXNObject)m_macTXN,NULL); 
+        return TXNCanRedo((TXNObject)m_macTXN,NULL);
     }
-    return FALSE ;
+    return false ;
 }
 
 // Makes modifie or unmodified
@@ -1445,14 +1437,14 @@ void wxTextCtrl::DiscardEdits()
 
 int wxTextCtrl::GetNumberOfLines() const
 {
-    if ( m_macUsesTXN ) 
+    if ( m_macUsesTXN )
     {
         ItemCount lines ;
         TXNGetLineCount((TXNObject)m_macTXN, &lines ) ;
         return lines ;
     }
     else
-    {          
+    {
         wxString content = GetValue() ;
 
         int count = 1;
@@ -1472,13 +1464,13 @@ long wxTextCtrl::XYToPosition(long x, long y) const
 
 bool wxTextCtrl::PositionToXY(long pos, long *x, long *y) const
 {
-    return FALSE ;
+    return false ;
 }
 
 void wxTextCtrl::ShowPosition(long pos)
 {
 #if TARGET_RT_MAC_MACHO && defined(AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER)
-    if ( m_macUsesTXN ) 
+    if ( m_macUsesTXN )
     {
         Point current ;
         Point desired ;
@@ -1493,7 +1485,7 @@ void wxTextCtrl::ShowPosition(long pos)
             SInt32 dv = desired.v - current.v ;
             SInt32 dh = desired.h - current.h ;
             TXNShowSelection(  (TXNObject) m_macTXN , true ) ;
-            theErr = TXNScroll( (TXNObject) m_macTXN, kTXNScrollUnitsInPixels , kTXNScrollUnitsInPixels , &dv , &dh );          
+            theErr = TXNScroll( (TXNObject) m_macTXN, kTXNScrollUnitsInPixels , kTXNScrollUnitsInPixels , &dv , &dh );
             wxASSERT_MSG( theErr == noErr, _T("TXNScroll returned an error!") );
         }
     }
@@ -1643,28 +1635,28 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
                 // this will make wxWidgets eat the ENTER key so that
                 // we actually prevent line wrapping in a single line
                 // text control
-                eat_key = TRUE;
+                eat_key = true;
             }
 
             break;
 
         case WXK_TAB:
-            // always produce navigation event - even if we process TAB
-            // ourselves the fact that we got here means that the user code
-            // decided to skip processing of this TAB - probably to let it
-            // do its default job.
+            if ( !(m_windowStyle & wxTE_PROCESS_TAB))
             {
-                wxNavigationKeyEvent eventNav;
-                eventNav.SetDirection(!event.ShiftDown());
-                eventNav.SetWindowChange(event.ControlDown());
-                eventNav.SetEventObject(this);
-
-                if ( GetParent()->GetEventHandler()->ProcessEvent(eventNav) )
-                    return;
-
-                event.Skip() ;
+                int flags = 0;
+                if (!event.ShiftDown())
+                    flags |= wxNavigationKeyEvent::IsForward ;
+                if (event.ControlDown())
+                    flags |= wxNavigationKeyEvent::WinChange ;
+                Navigate(flags);
                 return;
             }
+            else
+            {
+                // This is necessary (don't know why) or the tab will not
+                // be inserted.
+                WriteText(wxT("\t"));
+            }
             break;
     }
 
@@ -1674,7 +1666,7 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
 #if TARGET_CARBON
         if ( m_macUsesTXN && wxTheApp->MacGetCurrentEvent() != NULL && wxTheApp->MacGetCurrentEventHandlerCallRef() != NULL )
             CallNextEventHandler((EventHandlerCallRef)wxTheApp->MacGetCurrentEventHandlerCallRef() , (EventRef) wxTheApp->MacGetCurrentEvent() ) ;
-        else 
+        else
         {
             EventRecord rec ;
             if ( wxMacConvertEventToRecord(  (EventRef) wxTheApp->MacGetCurrentEvent() , &rec ) )
@@ -1704,7 +1696,6 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
          key == WXK_BACK)
     {
         wxCommandEvent event1(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
-        event1.SetString( GetValue() ) ;
         event1.SetEventObject( this );
         wxPostEvent(GetEventHandler(),event1);
     }