📄 textctrl.cpp
字号:
{ *from = (**((TEHandle) m_macTE)).selStart; *to = (**((TEHandle) m_macTE)).selEnd; } else { TXNGetSelection( (TXNObject) m_macTXN , (TXNOffset*) from , (TXNOffset*) to ) ; }}void wxTextCtrl::SetValue(const wxString& str){ wxString st = str ; wxMacConvertNewlines13To10( &st ) ; if ( !m_macUsesTXN ) { wxCharBuffer text = st.mb_str(wxConvLocal) ; ::SetControlData( (ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , strlen(text) , text ) ; } else { bool formerEditable = m_editable ; if ( !formerEditable ) SetEditable(true) ; SetTXNData( (TXNObject) m_macTXN , st , kTXNStartOffset, kTXNEndOffset ) ; TXNSetSelection( (TXNObject) m_macTXN, 0, 0); TXNShowSelection( (TXNObject) m_macTXN, kTXNShowStart); if ( !formerEditable ) SetEditable(formerEditable) ; } MacRedrawControl() ;}void wxTextCtrl::SetMaxLength(unsigned long len){ m_maxLength = len ;}bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style){ if ( m_macUsesTXN ) { 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 ) {#ifdef __WXDEBUG__ OSStatus status =#endif // __WXDEBUG__ TXNSetTypeAttributes ((TXNObject)m_macTXN, attrCounter , typeAttr, start,end); wxASSERT_MSG( status == noErr , wxT("Couldn't set text attributes") ) ; } if ( !formerEditable ) SetEditable(formerEditable) ; } return true ;}bool wxTextCtrl::SetDefaultStyle(const wxTextAttr& style){ wxTextCtrlBase::SetDefaultStyle( style ) ; SetStyle( kTXNUseCurrentSelection , kTXNUseCurrentSelection , GetDefaultStyle() ) ; return true ;}// Clipboard operationsvoid wxTextCtrl::Copy(){ if (CanCopy()) { if ( !m_macUsesTXN ) { TECopy( ((TEHandle) m_macTE) ) ; ClearCurrentScrap(); TEToScrap() ; MacRedrawControl() ; } else { ClearCurrentScrap(); TXNCopy((TXNObject)m_macTXN); TXNConvertToPublicScrap(); } }}void wxTextCtrl::Cut(){ if (CanCut()) { if ( !m_macUsesTXN ) { TECut( ((TEHandle) m_macTE) ) ; ClearCurrentScrap(); TEToScrap() ; MacRedrawControl() ; } else { ClearCurrentScrap(); TXNCut((TXNObject)m_macTXN); TXNConvertToPublicScrap(); } wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); event.SetEventObject( this ); GetEventHandler()->ProcessEvent(event); }}void wxTextCtrl::Paste(){ if (CanPaste()) { if ( !m_macUsesTXN ) { TEFromScrap() ; TEPaste( (TEHandle) m_macTE ) ; MacRedrawControl() ; } else { TXNConvertFromPublicScrap(); TXNPaste((TXNObject)m_macTXN); SetStyle( kTXNUseCurrentSelection , kTXNUseCurrentSelection , GetDefaultStyle() ) ; } wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); 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 TARGET_CARBON OSStatus err = noErr; ScrapRef scrapRef; err = GetCurrentScrap( &scrapRef ); if ( err != noTypeErr && err != memFullErr ) { ScrapFlavorFlags flavorFlags; Size byteCount; if (( err = GetScrapFlavorFlags( scrapRef, 'TEXT', &flavorFlags )) == noErr) { if (( err = GetScrapFlavorSize( scrapRef, 'TEXT', &byteCount )) == noErr) { return true ; } } } return false;#else long offset ; if ( GetScrap( NULL , 'TEXT' , &offset ) > 0 ) { return true ; }#endif return false ;}void wxTextCtrl::SetEditable(bool editable){ if ( editable != m_editable ) { m_editable = editable ; if ( !m_macUsesTXN ) { if ( editable ) UMAActivateControl( (ControlHandle) m_macControl ) ; else UMADeactivateControl((ControlHandle) m_macControl ) ; } else { TXNControlTag tag[] = { kTXNIOPrivilegesTag } ; TXNControlData data[] = { { editable ? kTXNReadWrite : kTXNReadOnly } } ; TXNSetTXNObjectControls( (TXNObject) m_macTXN , false , sizeof(tag) / sizeof (TXNControlTag) , tag , data ) ; } }}void wxTextCtrl::SetInsertionPoint(long pos){ SetSelection( pos , pos ) ;}void wxTextCtrl::SetInsertionPointEnd(){ wxTextPos pos = GetLastPosition(); SetInsertionPoint(pos);}long wxTextCtrl::GetInsertionPoint() const{ long begin,end ; GetSelection( &begin , &end ) ; return begin ;}wxTextPos wxTextCtrl::GetLastPosition() const{ if ( !m_macUsesTXN ) { return (**((TEHandle) m_macTE)).teLength ; } else { Handle theText ; long actualsize ; OSErr err = TXNGetDataEncoded( (TXNObject) m_macTXN, kTXNStartOffset, kTXNEndOffset, &theText , kTXNTextData ); /* all done */ if ( err ) { actualsize = 0 ; } else { actualsize = GetHandleSize( theText ) ; DisposeHandle( theText ) ; } return actualsize ; }}void wxTextCtrl::Replace(long from, long to, const wxString& str){ wxString value = str ; wxMacConvertNewlines13To10( &value ) ; if ( !m_macUsesTXN ) { ControlEditTextSelectionRec selection ; selection.selStart = from ; selection.selEnd = to ; ::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) ) ; } else { bool formerEditable = m_editable ; if ( !formerEditable ) SetEditable(true) ; TXNSetSelection( ((TXNObject) m_macTXN) , from , to ) ; TXNClear( ((TXNObject) m_macTXN) ) ; SetTXNData( (TXNObject) m_macTXN , str , kTXNUseCurrentSelection, kTXNUseCurrentSelection ) ; if ( !formerEditable ) SetEditable( formerEditable ) ; } Refresh() ;}void wxTextCtrl::Remove(long from, long to){ if ( !m_macUsesTXN ) { ControlEditTextSelectionRec selection ; selection.selStart = from ; selection.selEnd = to ; ::SetControlData( (ControlHandle) m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ; TEDelete( ((TEHandle) m_macTE) ) ; } else { bool formerEditable = m_editable ; if ( !formerEditable ) SetEditable(true) ; TXNSetSelection( ((TXNObject) m_macTXN) , from , to ) ; TXNClear( ((TXNObject) m_macTXN) ) ; if ( !formerEditable ) SetEditable( formerEditable ) ; } Refresh() ;}void wxTextCtrl::SetSelection(long from, long to){ if ( !m_macUsesTXN ) { ControlEditTextSelectionRec selection ; if ((from == -1) && (to == -1)) { selection.selStart = 0 ; selection.selEnd = 32767 ; } else { selection.selStart = from ; selection.selEnd = to ; } TESetSelect( selection.selStart , selection.selEnd , ((TEHandle) m_macTE) ) ; ::SetControlData((ControlHandle) m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ; } else { STPTextPaneVars **tpvars; /* set up our locals */ tpvars = (STPTextPaneVars **) GetControlReference((ControlHandle) m_macControl); /* and our drawing environment as the operation may force a redraw in the text area. */ SetPort((**tpvars).fDrawingEnvironment); /* change the selection */ if ((from == -1) && (to == -1)) TXNSelectAll((TXNObject) m_macTXN); else TXNSetSelection( (**tpvars).fTXNRec, from, to); TXNShowSelection( (TXNObject) m_macTXN, kTXNShowStart); }}void wxTextCtrl::WriteText(const wxString& str){ wxString st = str ; wxMacConvertNewlines13To10( &st ) ; if ( !m_macUsesTXN ) { wxCharBuffer text = st.mb_str(wxConvLocal) ; TEInsert( text , strlen(text) , ((TEHandle) m_macTE) ) ; } else { bool formerEditable = m_editable ; if ( !formerEditable ) SetEditable(true) ; long start , end , dummy ; GetSelection( &start , &dummy ) ; SetTXNData( (TXNObject) m_macTXN , st , kTXNUseCurrentSelection, kTXNUseCurrentSelection ) ; GetSelection( &dummy , &end ) ; SetStyle( start , end , GetDefaultStyle() ) ; if ( !formerEditable ) SetEditable( formerEditable ) ; } MacRedrawControl() ;}void wxTextCtrl::AppendText(const wxString& text){ SetInsertionPointEnd(); WriteText(text);}void wxTextCtrl::Clear(){ if ( !m_macUsesTXN ) { ::SetControlData((ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 0 , (char*) ((const char*)NULL) ) ; } else { TXNSetSelection( (TXNObject)m_macTXN , kTXNStartOffset , kTXNEndOffset ) ; TXNClear((TXNObject)m_macTXN); } Refresh() ;}bool wxTextCtrl::IsModified() const{ return m_dirty;}bool wxTextCtrl::IsEditable() const{ return IsEnabled() && m_editable ;}bool wxTextCtrl::AcceptsFocus() const{ // we don't want focus if we can't be edited return /*IsEditable() && */ wxControl::AcceptsFocus();}wxSize wxTextCtrl::DoGetBestSize() const{ int wText = 100 ; int hText; if ( m_macUsesTXN ) { hText = 17 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -