+
+
+ return TRUE;
+}
+
+void wxTextCtrl::MacVisibilityChanged()
+{
+#if wxMAC_USE_MLTE
+#if !wxMAC_USE_MLTE_HIVIEW
+ MLTESetObjectVisibility((STPTextPaneVars*) m_macTXNvars , MacIsReallyShown() , GetWindowStyle() ) ;
+ if ( !MacIsReallyShown() )
+ InvalWindowRect( GetControlOwner( *m_peer ) , &((STPTextPaneVars *)m_macTXNvars)->fRBounds ) ;
+#endif
+#else
+ if ( !(m_windowStyle & wxTE_MULTILINE) && MacIsReallyShown() )
+ {
+ // work around a refresh issue insofar as not always the entire content is shown even if this would be possible
+ ControlEditTextSelectionRec sel ;
+ CFStringRef value = NULL ;
+ Size actualSize = 0 ;
+ ResType datatag = GetWindowStyle() & wxTE_PASSWORD ?
+ kControlEditTextPasswordCFStringTag : kControlEditTextCFStringTag ;
+
+ verify_noerr( GetControlData( *m_peer , 0, kControlEditTextSelectionTag,
+ sizeof(ControlEditTextSelectionRec), &sel, &actualSize ) );
+ verify_noerr( GetControlData( *m_peer , 0, datatag , sizeof(CFStringRef), &value, &actualSize ) );
+
+ verify_noerr( SetControlData( *m_peer , 0, datatag, sizeof(CFStringRef), &value ) );
+ verify_noerr( SetControlData( *m_peer , 0, kControlEditTextSelectionTag, sizeof(ControlEditTextSelectionRec), &sel ) );
+
+ CFRelease( value ) ;
+ }
+#endif
+}
+
+void wxTextCtrl::MacEnabledStateChanged()
+{
+}
+
+
+wxString wxTextCtrl::GetValue() const
+{
+ wxString result ;
+#if wxMAC_USE_MLTE
+ OSStatus err ;
+ Size actualSize = 0;
+ {
+#if wxUSE_UNICODE
+ Handle theText ;
+ err = TXNGetDataEncoded( ((TXNObject) m_macTXN), kTXNStartOffset, kTXNEndOffset, &theText , kTXNUnicodeTextData );
+ // all done
+ if ( err )
+ {
+ actualSize = 0 ;
+ }
+ else
+ {
+ actualSize = GetHandleSize( theText ) / sizeof( UniChar) ;
+ if ( actualSize > 0 )
+ {
+ wxChar *ptr = NULL ;
+#if SIZEOF_WCHAR_T == 2
+ ptr = new wxChar[actualSize + 1 ] ;
+ wxStrncpy( ptr , (wxChar*) *theText , actualSize ) ;
+
+#else
+ SetHandleSize( theText , ( actualSize + 1 ) * sizeof( UniChar ) ) ;
+ HLock( theText ) ;
+ (((UniChar*)*theText)[actualSize]) = 0 ;
+ wxMBConvUTF16BE converter ;
+ size_t noChars = converter.MB2WC( NULL , (const char*)*theText , 0 ) ;
+ ptr = new wxChar[noChars + 1] ;
+
+ noChars = converter.MB2WC( ptr , (const char*)*theText , noChars ) ;
+ ptr[noChars] = 0 ;
+ HUnlock( theText ) ;
+#endif
+ ptr[actualSize] = 0 ;
+ result = wxString( ptr ) ;
+ delete[] ptr ;
+ }
+ DisposeHandle( theText ) ;
+ }
+#else
+ Handle theText ;
+ err = TXNGetDataEncoded( ((TXNObject) m_macTXN), kTXNStartOffset, kTXNEndOffset, &theText , kTXNTextData );
+ // all done
+ if ( err )
+ {
+ actualSize = 0 ;
+ }
+ else
+ {
+ actualSize = GetHandleSize( theText ) ;
+ if ( actualSize > 0 )
+ {
+ HLock( theText ) ;
+ result = wxString( *theText , wxConvLocal , actualSize ) ;
+ HUnlock( theText ) ;
+ }
+ DisposeHandle( theText ) ;
+ }
+#endif
+ }
+#else
+ CFStringRef value = NULL ;
+ Size actualSize = 0 ;
+
+ verify_noerr( GetControlData( *m_peer , 0, GetWindowStyle() & wxTE_PASSWORD ?
+ kControlEditTextPasswordCFStringTag : kControlEditTextCFStringTag,
+ sizeof(CFStringRef), &value, &actualSize ) );
+ if ( value )
+ {
+ wxMacCFStringHolder cf(value) ;
+ result = cf.AsString() ;
+ }
+#endif
+ wxMacConvertNewlines10To13( &result ) ;
+ return result ;
+}
+
+void wxTextCtrl::GetSelection(long* from, long* to) const
+{
+#if wxMAC_USE_MLTE
+ TXNGetSelection( (TXNObject) m_macTXN , (TXNOffset*) from , (TXNOffset*) to ) ;
+#else
+ ControlEditTextSelectionRec sel ;
+ Size actualSize ;
+ verify_noerr( GetControlData( *m_peer , 0, kControlEditTextSelectionTag,
+ sizeof(ControlEditTextSelectionRec), &sel, &actualSize ) );
+ if ( from ) *from = sel.selStart ;
+ if ( to ) *to = sel.selEnd ;
+#endif
+}
+
+void wxTextCtrl::SetValue(const wxString& str)
+{
+ // optimize redraws
+ if ( GetValue() == str )
+ return ;
+
+ wxString st = str ;
+ wxMacConvertNewlines13To10( &st ) ;
+#if wxMAC_USE_MLTE
+ {
+ wxMacWindowClipper c( this ) ;
+ bool formerEditable = m_editable ;
+ if ( !formerEditable )
+ SetEditable(true) ;
+
+#if !wxMAC_USE_MLTE_HIVIEW
+ // otherwise scrolling might have problems ?
+ TPUpdateVisibility( ( (STPTextPaneVars *)m_macTXNvars)->fUserPaneRec ) ;
+#endif
+ SetTXNData( (STPTextPaneVars *)m_macTXNvars , (TXNObject) m_macTXN , st , kTXNStartOffset, kTXNEndOffset ) ;
+ TXNSetSelection( (TXNObject) m_macTXN, 0, 0);
+ TXNShowSelection( (TXNObject) m_macTXN, kTXNShowStart);
+ if ( !formerEditable )
+ SetEditable(formerEditable) ;
+ }
+#else
+ wxMacCFStringHolder cf(st , m_font.GetEncoding() ) ;
+ CFStringRef value = cf ;
+ verify_noerr( SetControlData( *m_peer , 0, GetWindowStyle() & wxTE_PASSWORD ?
+ kControlEditTextPasswordCFStringTag : kControlEditTextCFStringTag,
+ sizeof(CFStringRef), &value ) );
+#endif