⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textctrl.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        src/mac/carbon/textctrl.cpp// Purpose:     wxTextCtrl// Author:      Stefan Csomor// Modified by: Ryan Norton (MLTE GetLineLength and GetLineText)// Created:     1998-01-01// RCS-ID:      $Id: textctrl.cpp,v 1.208.2.1 2006/12/11 16:36:14 RD Exp $// Copyright:   (c) Stefan Csomor// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////#include "wx/wxprec.h"#if wxUSE_TEXTCTRL#include "wx/textctrl.h"#ifndef WX_PRECOMP    #include "wx/intl.h"    #include "wx/app.h"    #include "wx/utils.h"    #include "wx/dc.h"    #include "wx/button.h"    #include "wx/menu.h"    #include "wx/settings.h"    #include "wx/msgdlg.h"    #include "wx/toplevel.h"#endif#ifdef __DARWIN__    #include <sys/types.h>    #include <sys/stat.h>#else    #include <stat.h>#endif#if wxUSE_STD_IOSTREAM    #if wxUSE_IOSTREAMH        #include <fstream.h>    #else        #include <fstream>    #endif#endif#include "wx/filefn.h"#include "wx/sysopt.h"#if defined(__BORLANDC__) && !defined(__WIN32__)    #include <alloc.h>#elif !defined(__MWERKS__) && !defined(__GNUWIN32) && !defined(__DARWIN__)    #include <malloc.h>#endif#ifndef __DARWIN__#include <Scrap.h>#endif#ifndef __DARWIN__#include <MacTextEditor.h>#include <ATSUnicode.h>#include <TextCommon.h>#include <TextEncodingConverter.h>#endif#include "wx/mac/uma.h"#ifndef __WXMAC_OSX__enum{    kTXNVisibilityTag = 'visb' // set the visibility state of the object};#endifclass wxMacFunctor{public :    wxMacFunctor() {}    virtual ~wxMacFunctor() {}    virtual void* operator()() = 0 ;    static void* CallBackProc( void *param )    {        wxMacFunctor* f = (wxMacFunctor*) param ;        void *result = (*f)() ;        return result ;    }} ;template<typename classtype, typename param1type>class wxMacObjectFunctor1 : public wxMacFunctor{    typedef void (classtype::*function)( param1type p1 ) ;    typedef void (classtype::*ref_function)( const param1type& p1 ) ;public :    wxMacObjectFunctor1( classtype *obj , function f , param1type p1 ) :        wxMacFunctor()    {        m_object = obj ;        m_function = f ;        m_param1 = p1 ;    }    wxMacObjectFunctor1( classtype *obj , ref_function f , param1type p1 ) :        wxMacFunctor()    {        m_object = obj ;        m_refFunction = f ;        m_param1 = p1 ;    }    virtual ~wxMacObjectFunctor1() {}    virtual void* operator()()    {        (m_object->*m_function)( m_param1 ) ;        return NULL ;    }private :    classtype* m_object ;    param1type m_param1 ;    union    {        function m_function ;        ref_function m_refFunction ;    } ;} ;template<typename classtype, typename param1type>void* wxMacMPRemoteCall( classtype *object , void (classtype::*function)( param1type p1 ) , param1type p1 ){    wxMacObjectFunctor1<classtype, param1type> params(object, function, p1) ;    void *result =        MPRemoteCall( wxMacFunctor::CallBackProc , &params , kMPOwningProcessRemoteContext ) ;    return result ;}template<typename classtype, typename param1type>void* wxMacMPRemoteCall( classtype *object , void (classtype::*function)( const param1type& p1 ) , param1type p1 ){    wxMacObjectFunctor1<classtype,param1type> params(object, function, p1) ;    void *result =        MPRemoteCall( wxMacFunctor::CallBackProc , &params , kMPOwningProcessRemoteContext ) ;    return result ;}template<typename classtype, typename param1type>void* wxMacMPRemoteGUICall( classtype *object , void (classtype::*function)( param1type p1 ) , param1type p1 ){    wxMutexGuiLeave() ;    void *result = wxMacMPRemoteCall( object , function , p1 ) ;    wxMutexGuiEnter() ;    return result ;}template<typename classtype, typename param1type>void* wxMacMPRemoteGUICall( classtype *object , void (classtype::*function)( const param1type& p1 ) , param1type p1 ){    wxMutexGuiLeave() ;    void *result = wxMacMPRemoteCall( object , function , p1 ) ;    wxMutexGuiEnter() ;    return result ;}// common interface for all implementationsclass wxMacTextControl : public wxMacControl{public :    wxMacTextControl( wxTextCtrl *peer ) ;    virtual ~wxMacTextControl() ;    virtual wxString GetStringValue() const = 0 ;    virtual void SetStringValue( const wxString &val ) = 0 ;    virtual void SetSelection( long from, long to ) = 0 ;    virtual void GetSelection( long* from, long* to ) const = 0 ;    virtual void WriteText( const wxString& str ) = 0 ;    virtual void SetStyle( long start, long end, const wxTextAttr& style ) ;    virtual void Copy() ;    virtual void Cut() ;    virtual void Paste() ;    virtual bool CanPaste() const ;    virtual void SetEditable( bool editable ) ;    virtual wxTextPos GetLastPosition() const ;    virtual void Replace( long from, long to, const wxString &str ) ;    virtual void Remove( long from, long to ) ;    virtual bool HasOwnContextMenu() const    { return false ; }    virtual bool SetupCursor( const wxPoint& pt )    { return false ; }    virtual void Clear() ;    virtual bool CanUndo() const;    virtual void Undo() ;    virtual bool CanRedo() const;    virtual void Redo() ;    virtual int GetNumberOfLines() const ;    virtual long XYToPosition(long x, long y) const;    virtual bool PositionToXY(long pos, long *x, long *y) const ;    virtual void ShowPosition(long WXUNUSED(pos)) ;    virtual int GetLineLength(long lineNo) const ;    virtual wxString GetLineText(long lineNo) const ;    virtual void CheckSpelling(bool check) { }#ifndef __WXMAC_OSX__    virtual void            MacControlUserPaneDrawProc(wxInt16 part) = 0 ;    virtual wxInt16         MacControlUserPaneHitTestProc(wxInt16 x, wxInt16 y) = 0 ;    virtual wxInt16         MacControlUserPaneTrackingProc(wxInt16 x, wxInt16 y, void* actionProc) = 0 ;    virtual void            MacControlUserPaneIdleProc() = 0 ;    virtual wxInt16         MacControlUserPaneKeyDownProc(wxInt16 keyCode, wxInt16 charCode, wxInt16 modifiers) = 0 ;    virtual void            MacControlUserPaneActivateProc(bool activating) = 0 ;    virtual wxInt16         MacControlUserPaneFocusProc(wxInt16 action) = 0 ;    virtual void            MacControlUserPaneBackgroundProc(void* info) = 0 ;#endif} ;// common parts for implementations based on MLTEclass wxMacMLTEControl : public wxMacTextControl{public :    wxMacMLTEControl( wxTextCtrl *peer ) ;    virtual wxString GetStringValue() const ;    virtual void SetStringValue( const wxString &str ) ;    static TXNFrameOptions FrameOptionsFromWXStyle( long wxStyle ) ;    void AdjustCreationAttributes( const wxColour& background, bool visible ) ;    virtual void SetFont( const wxFont & font, const wxColour& foreground, long windowStyle ) ;    virtual void SetBackground( const wxBrush &brush ) ;    virtual void SetStyle( long start, long end, const wxTextAttr& style ) ;    virtual void Copy() ;    virtual void Cut() ;    virtual void Paste() ;    virtual bool CanPaste() const ;    virtual void SetEditable( bool editable ) ;    virtual wxTextPos GetLastPosition() const ;    virtual void Replace( long from, long to, const wxString &str ) ;    virtual void Remove( long from, long to ) ;    virtual void GetSelection( long* from, long* to ) const ;    virtual void SetSelection( long from, long to ) ;    virtual void WriteText( const wxString& str ) ;    virtual bool HasOwnContextMenu() const    {#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4        if ( UMAGetSystemVersion() >= 0x1040 )        {            TXNCommandEventSupportOptions options ;            TXNGetCommandEventSupport( m_txn , & options ) ;            return options & kTXNSupportEditCommandProcessing ;        }#endif        return false ;    }    virtual void CheckSpelling(bool check)    {#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4    TXNSetSpellCheckAsYouType( m_txn, (Boolean) check );#endif    }    virtual void Clear() ;    virtual bool CanUndo() const ;    virtual void Undo() ;    virtual bool CanRedo()  const;    virtual void Redo() ;    virtual int GetNumberOfLines() const ;    virtual long XYToPosition(long x, long y) const ;    virtual bool PositionToXY(long pos, long *x, long *y) const ;    virtual void ShowPosition( long pos ) ;    virtual int GetLineLength(long lineNo) const ;    virtual wxString GetLineText(long lineNo) const ;    void SetTXNData( const wxString& st , TXNOffset start , TXNOffset end ) ;    TXNObject GetTXNObject() { return m_txn ; }protected :    void TXNSetAttribute( const wxTextAttr& style , long from , long to ) ;    TXNObject m_txn ;} ;#if TARGET_API_MAC_OSX// implementation available under OSX#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2class wxMacMLTEHIViewControl : public wxMacMLTEControl{public :    wxMacMLTEHIViewControl( wxTextCtrl *wxPeer,                             const wxString& str,                             const wxPoint& pos,                             const wxSize& size, long style ) ;    virtual ~wxMacMLTEHIViewControl() ;    virtual OSStatus SetFocus( ControlFocusPart focusPart ) ;    virtual bool HasFocus() const ;    virtual void SetBackground( const wxBrush &brush) ;protected :    HIViewRef m_scrollView ;    HIViewRef m_textView ;    EventHandlerRef m_textEventHandlerRef ;};#endifclass wxMacUnicodeTextControl : public wxMacTextControl{public :    wxMacUnicodeTextControl( wxTextCtrl *wxPeer,                             const wxString& str,                             const wxPoint& pos,                             const wxSize& size, long style ) ;    virtual ~wxMacUnicodeTextControl();    virtual void VisibilityChanged(bool shown);    virtual wxString GetStringValue() const ;    virtual void SetStringValue( const wxString &str) ;    virtual void Copy();    virtual void Cut();    virtual void Paste();    virtual bool CanPaste() const;    virtual void SetEditable(bool editable) ;    virtual void GetSelection( long* from, long* to) const ;    virtual void SetSelection( long from , long to ) ;    virtual void WriteText(const wxString& str) ;protected :    // contains the tag for the content (is different for password and non-password controls)    OSType m_valueTag ;    // as the selection tag only works correctly when the control has the focus we have to mirror the    // intended value    EventHandlerRef m_focusHandlerRef ;public :    ControlEditTextSelectionRec m_selection ;};#endif// 'classic' MLTE implementationclass wxMacMLTEClassicControl : public wxMacMLTEControl{public :    wxMacMLTEClassicControl( wxTextCtrl *wxPeer,                             const wxString& str,                             const wxPoint& pos,                             const wxSize& size, long style ) ;    virtual ~wxMacMLTEClassicControl() ;    virtual void VisibilityChanged(bool shown) ;    virtual void SuperChangedPosition() ;    virtual void            MacControlUserPaneDrawProc(wxInt16 part) ;    virtual wxInt16         MacControlUserPaneHitTestProc(wxInt16 x, wxInt16 y) ;    virtual wxInt16         MacControlUserPaneTrackingProc(wxInt16 x, wxInt16 y, void* actionProc) ;    virtual void            MacControlUserPaneIdleProc() ;    virtual wxInt16         MacControlUserPaneKeyDownProc(wxInt16 keyCode, wxInt16 charCode, wxInt16 modifiers) ;    virtual void            MacControlUserPaneActivateProc(bool activating) ;    virtual wxInt16         MacControlUserPaneFocusProc(wxInt16 action) ;    virtual void            MacControlUserPaneBackgroundProc(void* info) ;    virtual bool SetupCursor( const wxPoint& WXUNUSED(pt) )    {        MacControlUserPaneIdleProc();        return true;    }    virtual void            SetRect( Rect *r ) ;protected :    OSStatus                 DoCreate();    void                    MacUpdatePosition() ;    void                    MacActivatePaneText(bool setActive) ;    void                    MacFocusPaneText(bool setFocus) ;    void                    MacSetObjectVisibility(bool vis) ;private :    TXNFrameID              m_txnFrameID ;    GrafPtr                 m_txnPort ;    WindowRef               m_txnWindow ;    // bounds of the control as we last did set the txn frames    Rect                    m_txnControlBounds ;    Rect                    m_txnVisBounds ;#ifdef __WXMAC_OSX__    static pascal void TXNScrollActionProc( ControlRef controlRef , ControlPartCode partCode ) ;    static pascal void TXNScrollInfoProc(        SInt32 iValue, SInt32 iMaximumValue,        TXNScrollBarOrientation iScrollBarOrientation, SInt32 iRefCon ) ;    ControlRef              m_sbHorizontal ;    SInt32                  m_lastHorizontalValue ;    ControlRef              m_sbVertical ;    SInt32                  m_lastVerticalValue ;#endif};IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxTextCtrlBase)BEGIN_EVENT_TABLE(wxTextCtrl, wxTextCtrlBase)    EVT_ERASE_BACKGROUND( wxTextCtrl::OnEraseBackground )    EVT_DROP_FILES(wxTextCtrl::OnDropFiles)    EVT_CHAR(wxTextCtrl::OnChar)    EVT_MENU(wxID_CUT, wxTextCtrl::OnCut)    EVT_MENU(wxID_COPY, wxTextCtrl::OnCopy)    EVT_MENU(wxID_PASTE, wxTextCtrl::OnPaste)    EVT_MENU(wxID_UNDO, wxTextCtrl::OnUndo)    EVT_MENU(wxID_REDO, wxTextCtrl::OnRedo)    EVT_MENU(wxID_CLEAR, wxTextCtrl::OnDelete)    EVT_MENU(wxID_SELECTALL, wxTextCtrl::OnSelectAll)    EVT_CONTEXT_MENU(wxTextCtrl::OnContextMenu)    EVT_UPDATE_UI(wxID_CUT, wxTextCtrl::OnUpdateCut)    EVT_UPDATE_UI(wxID_COPY, wxTextCtrl::OnUpdateCopy)    EVT_UPDATE_UI(wxID_PASTE, wxTextCtrl::OnUpdatePaste)    EVT_UPDATE_UI(wxID_UNDO, wxTextCtrl::OnUpdateUndo)    EVT_UPDATE_UI(wxID_REDO, wxTextCtrl::OnUpdateRedo)    EVT_UPDATE_UI(wxID_CLEAR, wxTextCtrl::OnUpdateDelete)    EVT_UPDATE_UI(wxID_SELECTALL, wxTextCtrl::OnUpdateSelectAll)END_EVENT_TABLE()void wxTextCtrl::Init(){    m_editable = true ;    m_dirty = false;    m_maxLength = 0;    m_privateContextMenu = NULL;    m_triggerOnSetValue = true ;}wxTextCtrl::~wxTextCtrl(){    delete m_privateContextMenu;}bool wxTextCtrl::Create( wxWindow *parent,    wxWindowID id,    const wxString& str,    const wxPoint& pos,    const wxSize& size,    long style,    const wxValidator& validator,    const wxString& name ){    m_macIsUserPane = false ;    m_editable = true ;    if ( ! (style & wxNO_BORDER) )        style = (style & ~wxBORDER_MASK) | wxSUNKEN_BORDER ;    if ( !wxTextCtrlBase::Create( parent, id, pos, size, style & ~(wxHSCROLL | wxVSCROLL), validator, name ) )        return false;    if ( m_windowStyle & wxTE_MULTILINE )    {        // always turn on this style for multi-line controls        m_windowStyle |= wxTE_PROCESS_ENTER;        style |= wxTE_PROCESS_ENTER ;    }    CreatePeer( str, pos, size, style );    MacPostControlCreate(pos, size) ;    // only now the embedding is correct and we can do a positioning update

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -