X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..daebb84bff054d3833baca58a5dc506de56c64a1:/src/mac/classic/textctrl.cpp diff --git a/src/mac/classic/textctrl.cpp b/src/mac/classic/textctrl.cpp index fb63ab3786..7a5b5c8a92 100644 --- a/src/mac/classic/textctrl.cpp +++ b/src/mac/classic/textctrl.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: textctrl.cpp +// Name: src/mac/classic/textctrl.cpp // Purpose: wxTextCtrl // Author: Stefan Csomor // Modified by: @@ -9,11 +9,11 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "textctrl.h" -#endif +#include "wx/wxprec.h" -#include "wx/defs.h" +#ifdef __BORLANDC__ + #pragma hdrstop +#endif #if wxUSE_TEXTCTRL @@ -225,7 +225,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 +238,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 +420,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 +483,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 +637,6 @@ OSStatus mUPOpenControl(ControlHandle theControl, long wxStyle ) -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxControl) BEGIN_EVENT_TABLE(wxTextCtrl, wxControl) @@ -655,29 +654,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 +726,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 +765,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 +786,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 +794,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 +811,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id, TXNShowSelection( (TXNObject) m_macTXN, kTXNShowStart); } - return TRUE; + return true; } wxString wxTextCtrl::GetValue() const @@ -826,12 +824,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 +852,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 +909,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 +988,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 +1037,6 @@ void wxTextCtrl::Cut() TXNConvertToPublicScrap(); } wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); - event.SetString( GetValue() ) ; event.SetEventObject( this ); GetEventHandler()->ProcessEvent(event); } @@ -1062,7 +1059,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 +1087,7 @@ bool wxTextCtrl::CanCut() const bool wxTextCtrl::CanPaste() const { if (!IsEditable()) - return FALSE; + return false; #if TARGET_CARBON OSStatus err = noErr; @@ -1107,20 +1103,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 +1147,7 @@ void wxTextCtrl::SetInsertionPoint(long pos) void wxTextCtrl::SetInsertionPointEnd() { - long pos = GetLastPosition(); + wxTextPos pos = GetLastPosition(); SetInsertionPoint(pos); } @@ -1162,7 +1158,7 @@ long wxTextCtrl::GetInsertionPoint() const return begin ; } -long wxTextCtrl::GetLastPosition() const +wxTextPos wxTextCtrl::GetLastPosition() const { if ( !m_macUsesTXN ) { @@ -1200,7 +1196,7 @@ void wxTextCtrl::Replace(long from, long to, const wxString& str) ::SetControlData((ControlHandle) m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ; TESetSelect( from , to , ((TEHandle) m_macTE) ) ; TEDelete( ((TEHandle) m_macTE) ) ; - TEInsert( value , value.Length() , ((TEHandle) m_macTE) ) ; + TEInsert( value , value.length() , ((TEHandle) m_macTE) ) ; } else { @@ -1247,14 +1243,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 +1265,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 +1276,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 +1288,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 +1384,9 @@ void wxTextCtrl::Undo() { if (CanUndo()) { - if ( m_macUsesTXN ) + if ( m_macUsesTXN ) { - TXNUndo((TXNObject)m_macTXN); + TXNUndo((TXNObject)m_macTXN); } } } @@ -1399,37 +1395,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,18 +1441,18 @@ 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; - for (size_t i = 0; i < content.Length() ; i++) + for (size_t i = 0; i < content.length() ; i++) { if (content[i] == '\r') count++; } @@ -1472,13 +1468,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 +1489,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!") ); } } @@ -1507,13 +1503,13 @@ int wxTextCtrl::GetLineLength(long lineNo) const // Find line first int count = 0; - for (size_t i = 0; i < content.Length() ; i++) + for (size_t i = 0; i < content.length() ; i++) { if (count == lineNo) { // Count chars in line then count = 0; - for (size_t j = i; j < content.Length(); j++) + for (size_t j = i; j < content.length(); j++) { count++; if (content[j] == '\n') return count; @@ -1533,14 +1529,14 @@ wxString wxTextCtrl::GetLineText(long lineNo) const // Find line first int count = 0; - for (size_t i = 0; i < content.Length() ; i++) + for (size_t i = 0; i < content.length() ; i++) { if (count == lineNo) { // Add chars in line then wxString tmp; - for (size_t j = i; j < content.Length(); j++) + for (size_t j = i; j < content.length(); j++) { if (content[j] == '\n') return tmp; @@ -1587,8 +1583,8 @@ void wxTextCtrl::OnChar(wxKeyEvent& event) } if ( !IsEditable() && key != WXK_LEFT && key != WXK_RIGHT && key != WXK_DOWN && key != WXK_UP && key != WXK_TAB && - !( key == WXK_RETURN && ( (m_windowStyle & wxPROCESS_ENTER) || (m_windowStyle & wxTE_MULTILINE) ) ) -/* && key != WXK_PRIOR && key != WXK_NEXT && key != WXK_HOME && key != WXK_END */ + !( key == WXK_RETURN && ( (m_windowStyle & wxTE_PROCESS_ENTER) || (m_windowStyle & wxTE_MULTILINE) ) ) +/* && key != WXK_PAGEUP && key != WXK_PAGEDOWN && key != WXK_HOME && key != WXK_END */ ) { // eat it @@ -1613,7 +1609,7 @@ void wxTextCtrl::OnChar(wxKeyEvent& event) switch ( key ) { case WXK_RETURN: - if (m_windowStyle & wxPROCESS_ENTER) + if (m_windowStyle & wxTE_PROCESS_ENTER) { wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId); event.SetEventObject( this ); @@ -1643,28 +1639,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 +1670,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 +1700,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); }