+void wxMacMLTEControl::SetStringValue( const wxString &str)
+{
+ wxString st = str ;
+
+ wxMacConvertNewlines10To13( &st ) ;
+ EditHelper help(m_txn) ;
+
+ // wxMacWindowClipper c( this ) ;
+#if !TARGET_API_MAC_OSX
+ // otherwise scrolling might have problems ?
+ TPUpdateVisibility( m_controlRef ) ;
+#endif
+ SetTXNData( st , kTXNStartOffset, kTXNEndOffset ) ;
+ TXNSetSelection( m_txn, 0, 0);
+ TXNShowSelection( m_txn, kTXNShowStart);
+}
+
+TXNFrameOptions wxMacMLTEControl::FrameOptionsFromWXStyle( long wxStyle )
+{
+ TXNFrameOptions frameOptions =
+ kTXNDontDrawCaretWhenInactiveMask ;
+ if ( ! ( wxStyle & wxTE_NOHIDESEL ) )
+ frameOptions |= kTXNDontDrawSelectionWhenInactiveMask ;
+
+ if ( wxStyle & wxTE_MULTILINE )
+ {
+ if ( ! ( wxStyle & wxTE_DONTWRAP ) )
+ frameOptions |= kTXNAlwaysWrapAtViewEdgeMask ;
+ else
+ {
+ frameOptions |= kTXNAlwaysWrapAtViewEdgeMask ;
+ frameOptions |= kTXNWantHScrollBarMask ;
+ }
+
+ if ( !(wxStyle & wxTE_NO_VSCROLL ) )
+ frameOptions |= kTXNWantVScrollBarMask ;
+ }
+ else
+ frameOptions |= kTXNSingleLineOnlyMask ;
+
+ if ( wxStyle & wxHSCROLL )
+ frameOptions |= kTXNWantHScrollBarMask ;
+
+ return frameOptions ;
+}
+
+void wxMacMLTEControl::AdjustCreationAttributes( const wxColour &background, bool visible )
+{
+ TXNControlTag iControlTags[3] = { kTXNDoFontSubstitution, kTXNWordWrapStateTag };
+ TXNControlData iControlData[3] = { {false}, {kTXNNoAutoWrap} };
+ int toptag = 2 ;
+#if TARGET_API_MAC_OSX
+ iControlTags[2] = kTXNVisibilityTag ;
+ iControlData[2].uValue = visible ;
+ toptag++ ;
+#endif
+
+ if ( m_windowStyle & wxTE_MULTILINE )
+ {
+ if (m_windowStyle & wxTE_DONTWRAP)
+ iControlData[1].uValue = kTXNNoAutoWrap ;
+ else
+ iControlData[1].uValue = kTXNAutoWrap ;
+ }
+ verify_noerr( TXNSetTXNObjectControls( m_txn, false, toptag,
+ iControlTags, iControlData )) ;
+
+ // setting the default font
+
+ Str255 fontName ;
+ SInt16 fontSize ;
+ Style fontStyle ;
+
+ GetThemeFont(kThemeSystemFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ;
+
+ TXNTypeAttributes typeAttr[] =
+ {
+ { kTXNQDFontNameAttribute , kTXNQDFontNameAttributeSize , { (void*) fontName } } ,
+ { kTXNQDFontSizeAttribute , kTXNFontSizeAttributeSize , { (void*) (fontSize << 16) } } ,
+ { kTXNQDFontStyleAttribute , kTXNQDFontStyleAttributeSize , { (void*) normal } } ,
+ } ;
+
+ verify_noerr( TXNSetTypeAttributes (m_txn, sizeof( typeAttr ) / sizeof(TXNTypeAttributes) , typeAttr,
+ kTXNStartOffset,
+ kTXNEndOffset) );
+
+ if ( m_windowStyle & wxTE_PASSWORD )
+ {
+ UniChar c = 0xA5 ;
+ verify_noerr(TXNEchoMode( m_txn , c , 0 , true )) ;
+ }
+
+ TXNBackground tback;
+ tback.bgType = kTXNBackgroundTypeRGB;
+ tback.bg.color = MAC_WXCOLORREF( background.GetPixel() );
+ TXNSetBackground( m_txn , &tback);
+}
+
+void wxMacMLTEControl::SetBackground( const wxBrush &brush )
+{
+ // currently only solid background are supported
+ TXNBackground tback;
+ tback.bgType = kTXNBackgroundTypeRGB;
+ tback.bg.color = MAC_WXCOLORREF( brush.GetColour().GetPixel() );
+ TXNSetBackground( m_txn , &tback);
+}
+
+void wxMacMLTEControl::TXNSetAttribute( const wxTextAttr& style , long from , long to)
+{
+ 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 ( m_txn , attrCounter , typeAttr, from , to) );
+ }
+}
+
+void wxMacMLTEControl::SetFont( const wxFont & font , const wxColour& foreground , long windowStyle )
+{
+ EditHelper help(m_txn) ;
+ TXNSetAttribute( wxTextAttr(foreground,wxNullColour,font) , kTXNStartOffset,kTXNEndOffset ) ;
+}
+void wxMacMLTEControl::SetStyle(long start, long end, const wxTextAttr& style)
+{
+ EditHelper help(m_txn) ;
+ TXNSetAttribute( style , start,end ) ;
+}
+
+void wxMacMLTEControl::Copy()
+{
+ ClearCurrentScrap();
+ TXNCopy(m_txn);
+ TXNConvertToPublicScrap();
+}
+
+void wxMacMLTEControl::Cut()
+{
+ ClearCurrentScrap();
+ TXNCut(m_txn);
+ TXNConvertToPublicScrap();
+}
+
+void wxMacMLTEControl::Paste()
+{
+ TXNConvertFromPublicScrap();
+ TXNPaste(m_txn);
+}
+
+bool wxMacMLTEControl::CanPaste() const
+{
+ return TXNIsScrapPastable() ;
+}
+
+void wxMacMLTEControl::SetEditable(bool editable)
+{
+ TXNControlTag tag[] = { kTXNIOPrivilegesTag } ;
+ TXNControlData data[] = { { editable ? kTXNReadWrite : kTXNReadOnly } } ;
+ TXNSetTXNObjectControls( m_txn , false , sizeof(tag) / sizeof (TXNControlTag) , tag , data ) ;
+}
+
+wxTextPos wxMacMLTEControl::GetLastPosition() const
+{
+ wxTextPos actualsize = 0 ;
+
+ Handle theText ;
+ OSErr err = TXNGetDataEncoded( m_txn, kTXNStartOffset, kTXNEndOffset, &theText , kTXNTextData );
+ /* all done */
+ if ( err )
+ {
+ actualsize = 0 ;
+ }
+ else
+ {
+ actualsize = GetHandleSize( theText ) ;
+ DisposeHandle( theText ) ;
+ }
+
+ return actualsize ;
+}
+
+void wxMacMLTEControl::Replace( long from , long to , const wxString str )
+{
+ wxString value = str ;
+ wxMacConvertNewlines10To13( &value ) ;
+
+ EditHelper help( m_txn ) ;
+
+ TXNSetSelection(m_txn , from , to ) ;
+ TXNClear( m_txn ) ;
+ SetTXNData( value , kTXNUseCurrentSelection, kTXNUseCurrentSelection ) ;
+}
+
+void wxMacMLTEControl::Remove( long from , long to )
+{
+ EditHelper help( m_txn ) ;
+
+ TXNSetSelection(m_txn , from , to ) ;
+ TXNClear( m_txn ) ;
+}
+
+void wxMacMLTEControl::GetSelection( long* from, long* to) const
+{
+ TXNGetSelection( m_txn , (TXNOffset*) from , (TXNOffset*) to ) ;
+}
+
+void wxMacMLTEControl::SetSelection( long from , long to )
+{
+ /* change the selection */
+ if ((from == -1) && (to == -1))
+ TXNSelectAll(m_txn);
+ else
+ TXNSetSelection( m_txn, from, to);
+ TXNShowSelection( m_txn, kTXNShowStart);
+}
+
+void wxMacMLTEControl::WriteText(const wxString& str)
+{
+ EditHelper helper( m_txn ) ;
+ wxString st = str ;
+ wxMacConvertNewlines10To13( &st ) ;
+
+ long start , end , dummy ;
+ GetSelection( &start , &dummy ) ;
+ SetTXNData( st , kTXNUseCurrentSelection, kTXNUseCurrentSelection ) ;
+ GetSelection( &dummy , &end ) ;
+ // TODO SetStyle( start , end , GetDefaultStyle() ) ;
+}
+
+void wxMacMLTEControl::Clear()
+{
+ EditHelper st(m_txn) ;
+ TXNSetSelection( m_txn , kTXNStartOffset , kTXNEndOffset ) ;
+ TXNClear(m_txn);
+}
+
+bool wxMacMLTEControl::CanUndo() const
+{
+ return TXNCanUndo( m_txn , NULL ) ;
+}
+
+void wxMacMLTEControl::Undo()
+{
+ TXNUndo( m_txn ) ;
+}
+
+bool wxMacMLTEControl::CanRedo() const
+{
+ return TXNCanRedo( m_txn , NULL ) ;
+}
+
+void wxMacMLTEControl::Redo()
+{
+ TXNRedo( m_txn ) ;
+}
+
+int wxMacMLTEControl::GetNumberOfLines() const
+{
+ ItemCount lines = 0 ;
+ TXNGetLineCount(m_txn, &lines ) ;
+ return lines ;
+}
+
+long wxMacMLTEControl::XYToPosition(long x, long y) const