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

📄 scintillawx.cpp

📁 robocup rcssserver 运行防真机器人足球比赛所用的服务器端
💻 CPP
📖 第 1 页 / 共 3 页
字号:
////////////////////////////////////////////////////////////////////////////// Name:        ScintillaWX.cxx// Purpose:     A wxWidgets implementation of Scintilla.  A class derived//              from ScintillaBase that uses the "wx platform" defined in//              PlatformWX.cxx  This class is one end of a bridge between//              the wx world and the Scintilla world.  It needs a peer//              object of type wxScintilla to function.//// Author:      Robin Dunn//// Created:     13-Jan-2000// RCS-ID:      $Id: ScintillaWX.cpp,v 1.1 2008/02/24 16:18:07 rollmark Exp $// Copyright:   (c) 2000 by Total Control Software// Licence:     wxWindows license/////////////////////////////////////////////////////////////////////////////#include "ScintillaWX.h"//?#include "ExternalLexer.h"#include "PlatWX.h"#include "wx/wxscintilla.h"#include <wx/textbuf.h>#ifdef __WXMSW__#include <wx/msw/private.h> // GetHwndOf()#endif//----------------------------------------------------------------------// Helper classesclass wxSCITimer : public wxTimer {public:    wxSCITimer(ScintillaWX* swx) {        this->swx = swx;    }    void Notify() {        swx->DoTick();    }private:    ScintillaWX* swx;};#if wxUSE_DRAG_AND_DROPclass wxStartDragTimer : public wxTimer {public:    wxStartDragTimer(ScintillaWX* swx) {        this->swx = swx;    }    void Notify() {        swx->DoStartDrag();    }private:    ScintillaWX* swx;};bool wxSCIDropTarget::OnDropText(wxCoord x, wxCoord y, const wxString& data) {    return swx->DoDropText(x, y, data);}wxDragResult  wxSCIDropTarget::OnEnter(wxCoord x, wxCoord y, wxDragResult def) {    return swx->DoDragEnter(x, y, def);}wxDragResult  wxSCIDropTarget::OnDragOver(wxCoord x, wxCoord y, wxDragResult def) {    return swx->DoDragOver(x, y, def);}void  wxSCIDropTarget::OnLeave() {    swx->DoDragLeave();}#endif#if wxUSE_POPUPWIN && wxSCI_USE_POPUP#include <wx/popupwin.h>#define wxSCICallTipBase wxPopupWindow#define param2  wxBORDER_NONE  // popup's 2nd param is flags#else#define wxSCICallTipBase wxWindow#define param2 -1 // wxWindow's 2nd param is ID#endif#include <wx/dcbuffer.h>class wxSCICallTip : public wxSCICallTipBase {public:    wxSCICallTip(wxWindow* parent, CallTip* ct, ScintillaWX* swx)        : wxSCICallTipBase(parent, param2),          m_ct(ct), m_swx(swx), m_cx(-1), m_cy(-1)        {        }    ~wxSCICallTip() {#if wxUSE_POPUPWIN && wxSCI_USE_POPUP && defined(__WXGTK__)        wxRect rect = GetRect();        rect.x = m_cx;        rect.y = m_cy;        GetParent()->Refresh(false, &rect);#endif    }    bool AcceptsFocus() const { return false; }    void OnPaint(wxPaintEvent& WXUNUSED(evt)) {        wxBufferedPaintDC dc(this);        Surface* surfaceWindow = Surface::Allocate();        surfaceWindow->Init(&dc, m_ct->wDraw.GetID());        m_ct->PaintCT(surfaceWindow);        surfaceWindow->Release();        delete surfaceWindow;    }    void OnFocus(wxFocusEvent& event) {        GetParent()->SetFocus();        event.Skip();    }    void OnLeftDown(wxMouseEvent& event) {        wxPoint pt = event.GetPosition();        Point p(pt.x, pt.y);        m_ct->MouseClick(p);        m_swx->CallTipClick();    }#if wxUSE_POPUPWIN && wxSCI_USE_POPUP    virtual void DoSetSize(int x, int y,                           int width, int height,                           int sizeFlags = wxSIZE_AUTO) {        if (x != -1) {            m_cx = x;            GetParent()->ClientToScreen(&x, NULL);        }        if (y != -1) {            m_cy = y;            GetParent()->ClientToScreen(NULL, &y);        }        wxSCICallTipBase::DoSetSize(x, y, width, height, sizeFlags);    }#endif    wxPoint GetMyPosition() {        return wxPoint(m_cx, m_cy);    }private:    CallTip*      m_ct;    ScintillaWX*  m_swx;    int           m_cx, m_cy;    DECLARE_EVENT_TABLE()};BEGIN_EVENT_TABLE(wxSCICallTip, wxSCICallTipBase)    EVT_PAINT(wxSCICallTip::OnPaint)    EVT_SET_FOCUS(wxSCICallTip::OnFocus)    EVT_LEFT_DOWN(wxSCICallTip::OnLeftDown)END_EVENT_TABLE()//----------------------------------------------------------------------#if wxUSE_DATAOBJstatic wxTextFileType wxConvertEOLMode(int scintillaMode){    wxTextFileType type;    switch (scintillaMode) {        case wxSCI_EOL_CRLF:            type = wxTextFileType_Dos;            break;        case wxSCI_EOL_CR:            type = wxTextFileType_Mac;            break;        case wxSCI_EOL_LF:            type = wxTextFileType_Unix;            break;        default:            type = wxTextBuffer::typeDefault;            break;    }    return type;}#endif // wxUSE_DATAOBJstatic int wxCountLines(const char* text, int scintillaMode){    char eolchar;    switch (scintillaMode) {        case wxSCI_EOL_CRLF:        case wxSCI_EOL_LF:            eolchar = '\n';            break;        case wxSCI_EOL_CR:            eolchar = '\r';            break;        default:            return 0;    }    int count = 0;    int i     = 0;    while (text[i] != 0) {        if (text[i] == eolchar) {            count++;        }        i++;    }    return count;}//----------------------------------------------------------------------// Constructor/DestructorScintillaWX::ScintillaWX(wxScintilla* win) {    capturedMouse = false;    focusEvent = false;    wMain = win;    sci   = win;    wheelRotation = 0;    Initialise();#ifdef __WXMSW__#if wxCHECK_VERSION(2, 5, 0)    sysCaretBitmap = 0;    sysCaretWidth = 0;    sysCaretHeight = 0;#endif#endif#if wxUSE_DRAG_AND_DROP    startDragTimer = new wxStartDragTimer(this);#endif}ScintillaWX::~ScintillaWX() {#if wxUSE_DRAG_AND_DROP    delete startDragTimer;#endif    Finalise();}//----------------------------------------------------------------------// base class virtualsvoid ScintillaWX::Initialise() {    //ScintillaBase::Initialise();#if wxUSE_DRAG_AND_DROP    dropTarget = new wxSCIDropTarget;    dropTarget->SetScintilla(this);    sci->SetDropTarget(dropTarget);    dragRectangle = false;#endif#ifdef __WXMAC__    vs.extraFontFlag = false;  // UseAntiAliasing#else    vs.extraFontFlag = true;   // UseAntiAliasing#endif}void ScintillaWX::Finalise() {    ScintillaBase::Finalise();    SetTicking(false);    SetIdle(false);    DestroySystemCaret();}void ScintillaWX::StartDrag() {#if wxUSE_DRAG_AND_DROP    // We defer the starting of the DnD, otherwise the LeftUp of a normal    // click could be lost and the STC will think it is doing a DnD when the    // user just wanted a normal click.    startDragTimer->Start (200, true);#endif}void ScintillaWX::DoStartDrag() {#if wxUSE_DRAG_AND_DROP    wxString dragText = sci2wx (drag.s, drag.len);    // Send an event to allow the drag text to be changed    wxScintillaEvent evt(wxEVT_SCI_START_DRAG, sci->GetId());    evt.SetEventObject (sci);    evt.SetDragText (dragText);    evt.SetDragAllowMove (true);    evt.SetPosition (wxMin(sci->GetSelectionStart(), sci->GetSelectionEnd()));    sci->GetEventHandler()->ProcessEvent (evt);    dragText = evt.GetDragText();    dragRectangle = drag.rectangular;    if (dragText.Length()) {        wxDropSource source(sci);        wxTextDataObject data(dragText);        wxDragResult result;        source.SetData(data);        dropWentOutside = true;        result = source.DoDragDrop(evt.GetDragAllowMove());        if (result == wxDragMove && dropWentOutside) ClearSelection();        inDragDrop = false;        SetDragPosition (invalidPosition);    }#endif}bool ScintillaWX::SetIdle(bool on) {    if (idler.state != on) {        // connect or disconnect the EVT_IDLE handler        if (on)            sci->Connect(wxID_ANY, wxEVT_IDLE,                         (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) &wxScintilla::OnIdle);        else            sci->Disconnect(wxID_ANY, wxEVT_IDLE,                            (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) &wxScintilla::OnIdle);        idler.state = on;    }    return idler.state;}void ScintillaWX::SetTicking(bool on) {    wxSCITimer* stiTimer;    if (timer.ticking != on) {        timer.ticking = on;        if (timer.ticking) {            stiTimer = new wxSCITimer(this);            stiTimer->Start(timer.tickSize);            timer.tickerID = stiTimer;        } else {            stiTimer = (wxSCITimer*)timer.tickerID;            stiTimer->Stop();            delete stiTimer;            timer.tickerID = 0;        }    }    timer.ticksToWait = caret.period;}void ScintillaWX::SetMouseCapture(bool on) {    if (mouseDownCaptures) {        if (on && !capturedMouse)            sci->CaptureMouse();        else if (!on && capturedMouse && sci->HasCapture())            sci->ReleaseMouse();        capturedMouse = on;    }}bool ScintillaWX::HaveMouseCapture() {    return capturedMouse;}void ScintillaWX::ScrollText(int linesToMove) {    int dy = vs.lineHeight * (linesToMove);    sci->ScrollWindow(0, dy);    sci->Update();}void ScintillaWX::SetVerticalScrollPos() {    if (sci->m_vScrollBar == NULL) {  // Use built-in scrollbar        sci->SetScrollPos(wxVERTICAL, topLine);    }    else { // otherwise use the one that's been given to us        sci->m_vScrollBar->SetThumbPosition(topLine);    }}void ScintillaWX::SetHorizontalScrollPos() {    if (sci->m_hScrollBar == NULL) {  // Use built-in scrollbar        sci->SetScrollPos(wxHORIZONTAL, xOffset);    }    else { // otherwise use the one that's been given to us        sci->m_hScrollBar->SetThumbPosition(xOffset);    }}const int H_SCROLL_STEP = 20;bool ScintillaWX::ModifyScrollBars(int nMax, int nPage) {

⌨️ 快捷键说明

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