- 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
-}
-
-void wxTextCtrl::SetMaxLength(unsigned long len)
-{
- m_maxLength = len ;
-}
-
-bool wxTextCtrl::SetFont( const wxFont& font )
-{
- if ( !wxTextCtrlBase::SetFont( font ) )
- return FALSE ;
-
-#if wxMAC_USE_MLTE
- wxMacWindowClipper c( this ) ;
- bool formerEditable = m_editable ;
- if ( !formerEditable )
- SetEditable(true) ;
-
- TXNTypeAttributes typeAttr[4] ;
- Str255 fontName = "\pMonaco" ;
- SInt16 fontSize = 12 ;
- Style fontStyle = normal ;
- int attrCounter = 0 ;
-
- wxMacStringToPascal( font.GetFaceName() , fontName ) ;
- fontSize = font.MacGetFontSize() ;
- fontStyle = font.MacGetFontStyle() ;
-
- typeAttr[attrCounter].tag = kTXNQDFontNameAttribute ;
- typeAttr[attrCounter].size = kTXNQDFontNameAttributeSize ;
- typeAttr[attrCounter].data.dataPtr = (void*) fontName ;
- typeAttr[attrCounter+1].tag = kTXNQDFontSizeAttribute ;
- typeAttr[attrCounter+1].size = kTXNFontSizeAttributeSize ;
- typeAttr[attrCounter+1].data.dataValue = (fontSize << 16) ;
- typeAttr[attrCounter+2].tag = kTXNQDFontStyleAttribute ;
- typeAttr[attrCounter+2].size = kTXNQDFontStyleAttributeSize ;
- typeAttr[attrCounter+2].data.dataValue = fontStyle ;
- attrCounter += 3 ;
- /*
- typeAttr[attrCounter].tag = kTXNQDFontColorAttribute ;
- typeAttr[attrCounter].size = kTXNQDFontColorAttributeSize ;
- typeAttr[attrCounter].data.dataPtr = (void*) &color ;
- color = MAC_WXCOLORREF(GetForegroundColour().GetPixel()) ;
- attrCounter += 1 ;
- */
- verify_noerr( TXNSetTypeAttributes ((TXNObject)m_macTXN, attrCounter , typeAttr, kTXNStartOffset,kTXNEndOffset) );
-
- if ( !formerEditable )
- SetEditable(formerEditable) ;
-#endif
- return true ;
-}
-
-bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style)
-{
-#if wxMAC_USE_MLTE
- bool formerEditable = m_editable ;
- if ( !formerEditable )
- SetEditable(true) ;
- TXNTypeAttributes typeAttr[4] ;
- Str255 fontName = "\pMonaco" ;
- SInt16 fontSize = 12 ;
- Style fontStyle = normal ;
- RGBColor color ;
- int attrCounter = 0 ;
- if ( style.HasFont() )
- {
- const wxFont &font = style.GetFont() ;
- wxMacStringToPascal( font.GetFaceName() , fontName ) ;
- fontSize = font.GetPointSize() ;
- if ( font.GetUnderlined() )
- fontStyle |= underline ;
- if ( font.GetWeight() == wxBOLD )
- fontStyle |= bold ;
- if ( font.GetStyle() == wxITALIC )
- fontStyle |= italic ;
-
- typeAttr[attrCounter].tag = kTXNQDFontNameAttribute ;
- typeAttr[attrCounter].size = kTXNQDFontNameAttributeSize ;
- typeAttr[attrCounter].data.dataPtr = (void*) fontName ;
- typeAttr[attrCounter+1].tag = kTXNQDFontSizeAttribute ;
- typeAttr[attrCounter+1].size = kTXNFontSizeAttributeSize ;
- typeAttr[attrCounter+1].data.dataValue = (fontSize << 16) ;
- typeAttr[attrCounter+2].tag = kTXNQDFontStyleAttribute ;
- typeAttr[attrCounter+2].size = kTXNQDFontStyleAttributeSize ;
- typeAttr[attrCounter+2].data.dataValue = fontStyle ;
- attrCounter += 3 ;
-
- }
- if ( style.HasTextColour() )
- {
- typeAttr[attrCounter].tag = kTXNQDFontColorAttribute ;
- typeAttr[attrCounter].size = kTXNQDFontColorAttributeSize ;
- typeAttr[attrCounter].data.dataPtr = (void*) &color ;
- color = MAC_WXCOLORREF(style.GetTextColour().GetPixel()) ;
- attrCounter += 1 ;
- }
-
- if ( attrCounter > 0 )
- {
- verify_noerr( TXNSetTypeAttributes ((TXNObject)m_macTXN, attrCounter , typeAttr, start,end) );
- }
- if ( !formerEditable )
- SetEditable(formerEditable) ;
-#endif
- return TRUE ;
-}
-
-bool wxTextCtrl::SetDefaultStyle(const wxTextAttr& style)
-{
- wxTextCtrlBase::SetDefaultStyle( style ) ;
- SetStyle( kTXNUseCurrentSelection , kTXNUseCurrentSelection , GetDefaultStyle() ) ;
- return TRUE ;
-}
-
-// Clipboard operations
-void wxTextCtrl::Copy()
-{
- if (CanCopy())
- {
-#if wxMAC_USE_MLTE
- ClearCurrentScrap();
- TXNCopy((TXNObject)m_macTXN);
- TXNConvertToPublicScrap();
-#else
- m_peer->SendHICommand( kHICommandCopy ) ;
-#endif
- }
-}
-
-void wxTextCtrl::Cut()
-{
- if (CanCut())
- {
-#if wxMAC_USE_MLTE
- ClearCurrentScrap();
- TXNCut((TXNObject)m_macTXN);
- TXNConvertToPublicScrap();
-#else
- m_peer->SendHICommand( kHICommandCut ) ;
-#endif
- wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
- event.SetString( GetValue() ) ;
- event.SetEventObject( this );
- GetEventHandler()->ProcessEvent(event);
- }
-}
-
-void wxTextCtrl::Paste()
-{
- if (CanPaste())
- {
-#if wxMAC_USE_MLTE
- TXNConvertFromPublicScrap();
- TXNPaste((TXNObject)m_macTXN);
- SetStyle( kTXNUseCurrentSelection , kTXNUseCurrentSelection , GetDefaultStyle() ) ;
-#else
- m_peer->SendHICommand( kHICommandPaste ) ;
-#endif
- wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
- event.SetString( GetValue() ) ;
- event.SetEventObject( this );
- GetEventHandler()->ProcessEvent(event);
- }
-}
-
-bool wxTextCtrl::CanCopy() const
-{
- // Can copy if there's a selection
- long from, to;
- GetSelection(& from, & to);
- return (from != to);
-}
-
-bool wxTextCtrl::CanCut() const
-{
- if ( !IsEditable() )
- {
- return false ;
- }
- // Can cut if there's a selection
- long from, to;
- GetSelection(& from, & to);
- return (from != to);
-}
-
-bool wxTextCtrl::CanPaste() const
-{
- if (!IsEditable())
- return FALSE;
-
-#if wxMAC_USE_MLTE
- return TXNIsScrapPastable() ;
-#else
- return true ;
-#endif
-}
-
-void wxTextCtrl::SetEditable(bool editable)
-{
- if ( editable != m_editable )
- {
- m_editable = editable ;
-#if wxMAC_USE_MLTE
- TXNControlTag tag[] = { kTXNIOPrivilegesTag } ;
- TXNControlData data[] = { { editable ? kTXNReadWrite : kTXNReadOnly } } ;
- TXNSetTXNObjectControls( (TXNObject) m_macTXN , false , sizeof(tag) / sizeof (TXNControlTag) , tag , data ) ;
-#else
- Boolean value = !editable ;
- ::SetControlData( *m_peer, 0, kControlEditTextLockedTag , sizeof( value ) , &value ) ;
-#endif
- }
-}
-
-void wxTextCtrl::SetInsertionPoint(long pos)
-{
- SetSelection( pos , pos ) ;
-}
-
-void wxTextCtrl::SetInsertionPointEnd()
-{
- long pos = GetLastPosition();
- SetInsertionPoint(pos);
-}
-
-long wxTextCtrl::GetInsertionPoint() const
-{
- long begin,end ;
- GetSelection( &begin , &end ) ;
- return begin ;
-}
-
-long wxTextCtrl::GetLastPosition() const
-{
- long actualsize = 0 ;
-#if wxMAC_USE_MLTE
- Handle theText ;
- OSErr err = TXNGetDataEncoded( (TXNObject) m_macTXN, kTXNStartOffset, kTXNEndOffset, &theText , kTXNTextData );
- /* all done */
- if ( err )
- {
- actualsize = 0 ;
- }
- else
- {
- actualsize = GetHandleSize( theText ) ;
- DisposeHandle( theText ) ;
- }
-#endif
- return actualsize ;
-}
-
-void wxTextCtrl::Replace(long from, long to, const wxString& str)
-{
-#if wxMAC_USE_MLTE
- wxString value = str ;
- wxMacConvertNewlines13To10( &value ) ;
-
- bool formerEditable = m_editable ;
- if ( !formerEditable )
- SetEditable(true) ;
- TXNSetSelection( ((TXNObject) m_macTXN) , from , to ) ;
- TXNClear( ((TXNObject) m_macTXN) ) ;
- SetTXNData( (STPTextPaneVars *)m_macTXNvars , (TXNObject) m_macTXN , str , kTXNUseCurrentSelection, kTXNUseCurrentSelection ) ;
- if ( !formerEditable )
- SetEditable( formerEditable ) ;
-
- Refresh() ;