From: Stefan Csomor Date: Sun, 8 Feb 2004 10:56:48 +0000 (+0000) Subject: corrected line counts and implemented ShowPosition X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/3a05d58d94a25dee362c5e1025c612ec6e84678c?ds=sidebyside corrected line counts and implemented ShowPosition git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25607 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/mac/carbon/textctrl.cpp b/src/mac/carbon/textctrl.cpp index ad911c3987..69a1ddfacc 100644 --- a/src/mac/carbon/textctrl.cpp +++ b/src/mac/carbon/textctrl.cpp @@ -24,6 +24,8 @@ #include #endif +#include "wx/msgdlg.h" + #if wxUSE_STD_IOSTREAM #if wxUSE_IOSTREAMH #include @@ -878,7 +880,7 @@ void wxTextCtrl::GetSelection(long* from, long* to) const } else { - TXNGetSelection( ((TXNObject) m_macTXN) , (TXNOffset*) from , (TXNOffset*) to ) ; + TXNGetSelection( (TXNObject) m_macTXN , (TXNOffset*) from , (TXNOffset*) to ) ; } } @@ -1442,16 +1444,23 @@ void wxTextCtrl::DiscardEdits() int wxTextCtrl::GetNumberOfLines() const { - // TODO change this if possible to reflect real lines - wxString content = GetValue() ; - - int count = 1; - for (size_t i = 0; i < content.Length() ; i++) + if ( m_macUsesTXN ) { - if (content[i] == '\r') count++; + ItemCount lines ; + TXNGetLineCount((TXNObject)m_macTXN, &lines ) ; + return lines ; } + else + { + wxString content = GetValue() ; - return count; + int count = 1; + for (size_t i = 0; i < content.Length() ; i++) + { + if (content[i] == '\r') count++; + } + return count; + } } long wxTextCtrl::XYToPosition(long x, long y) const @@ -1467,7 +1476,27 @@ bool wxTextCtrl::PositionToXY(long pos, long *x, long *y) const void wxTextCtrl::ShowPosition(long pos) { - // TODO +#if TARGET_RT_MAC_MACHO && defined(AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER) + if ( m_macUsesTXN ) + { + Point current ; + Point desired ; + TXNOffset selstart , selend ; + TXNGetSelection( (TXNObject) m_macTXN , &selstart , &selend) ; + TXNOffsetToPoint( (TXNObject) m_macTXN, selstart , ¤t); + TXNOffsetToPoint( (TXNObject) m_macTXN, pos , &desired); + //TODO use HIPoints for 10.3 and above + if ( (UInt32) TXNScroll != (UInt32) kUnresolvedCFragSymbolAddress ) + { + OSErr theErr = noErr; + 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 ); + wxASSERT_MSG( theErr == noErr, _T("TXNScroll returned an error!") ); + } + } +#endif } int wxTextCtrl::GetLineLength(long lineNo) const diff --git a/src/mac/textctrl.cpp b/src/mac/textctrl.cpp index ad911c3987..69a1ddfacc 100644 --- a/src/mac/textctrl.cpp +++ b/src/mac/textctrl.cpp @@ -24,6 +24,8 @@ #include #endif +#include "wx/msgdlg.h" + #if wxUSE_STD_IOSTREAM #if wxUSE_IOSTREAMH #include @@ -878,7 +880,7 @@ void wxTextCtrl::GetSelection(long* from, long* to) const } else { - TXNGetSelection( ((TXNObject) m_macTXN) , (TXNOffset*) from , (TXNOffset*) to ) ; + TXNGetSelection( (TXNObject) m_macTXN , (TXNOffset*) from , (TXNOffset*) to ) ; } } @@ -1442,16 +1444,23 @@ void wxTextCtrl::DiscardEdits() int wxTextCtrl::GetNumberOfLines() const { - // TODO change this if possible to reflect real lines - wxString content = GetValue() ; - - int count = 1; - for (size_t i = 0; i < content.Length() ; i++) + if ( m_macUsesTXN ) { - if (content[i] == '\r') count++; + ItemCount lines ; + TXNGetLineCount((TXNObject)m_macTXN, &lines ) ; + return lines ; } + else + { + wxString content = GetValue() ; - return count; + int count = 1; + for (size_t i = 0; i < content.Length() ; i++) + { + if (content[i] == '\r') count++; + } + return count; + } } long wxTextCtrl::XYToPosition(long x, long y) const @@ -1467,7 +1476,27 @@ bool wxTextCtrl::PositionToXY(long pos, long *x, long *y) const void wxTextCtrl::ShowPosition(long pos) { - // TODO +#if TARGET_RT_MAC_MACHO && defined(AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER) + if ( m_macUsesTXN ) + { + Point current ; + Point desired ; + TXNOffset selstart , selend ; + TXNGetSelection( (TXNObject) m_macTXN , &selstart , &selend) ; + TXNOffsetToPoint( (TXNObject) m_macTXN, selstart , ¤t); + TXNOffsetToPoint( (TXNObject) m_macTXN, pos , &desired); + //TODO use HIPoints for 10.3 and above + if ( (UInt32) TXNScroll != (UInt32) kUnresolvedCFragSymbolAddress ) + { + OSErr theErr = noErr; + 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 ); + wxASSERT_MSG( theErr == noErr, _T("TXNScroll returned an error!") ); + } + } +#endif } int wxTextCtrl::GetLineLength(long lineNo) const