X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9e730a78765d0e70ca5b77512569c94585070fe2..ec08d395bd37d7446787f5539b40a8ed5283654c:/contrib/src/stc/ScintillaWX.cpp diff --git a/contrib/src/stc/ScintillaWX.cpp b/contrib/src/stc/ScintillaWX.cpp index 9aeda729c7..3e5ebf0aa6 100644 --- a/contrib/src/stc/ScintillaWX.cpp +++ b/contrib/src/stc/ScintillaWX.cpp @@ -16,6 +16,7 @@ #include "ScintillaWX.h" +#include "ExternalLexer.h" #include "wx/stc/stc.h" #include "PlatWX.h" @@ -253,18 +254,23 @@ void ScintillaWX::SetHorizontalScrollPos() { } } + const int H_SCROLL_STEP = 20; bool ScintillaWX::ModifyScrollBars(int nMax, int nPage) { bool modified = false; + int vertEnd = nMax; + if (!verticalScrollBarVisible) + vertEnd = 0; + // Check the vertical scrollbar if (stc->m_vScrollBar == NULL) { // Use built-in scrollbar int sbMax = stc->GetScrollRange(wxVERTICAL); int sbThumb = stc->GetScrollThumb(wxVERTICAL); int sbPos = stc->GetScrollPos(wxVERTICAL); - if (sbMax != nMax || sbThumb != nPage) { - stc->SetScrollbar(wxVERTICAL, sbPos, nPage, nMax+1); + if (sbMax != vertEnd || sbThumb != nPage) { + stc->SetScrollbar(wxVERTICAL, sbPos, nPage, vertEnd+1); modified = true; } } @@ -272,8 +278,8 @@ bool ScintillaWX::ModifyScrollBars(int nMax, int nPage) { int sbMax = stc->m_vScrollBar->GetRange(); int sbPage = stc->m_vScrollBar->GetPageSize(); int sbPos = stc->m_vScrollBar->GetThumbPosition(); - if (sbMax != nMax || sbPage != nPage) { - stc->m_vScrollBar->SetScrollbar(sbPos, nPage, nMax+1, nPage); + if (sbMax != vertEnd || sbPage != nPage) { + stc->m_vScrollBar->SetScrollbar(sbPos, nPage, vertEnd+1, nPage); modified = true; } } @@ -293,7 +299,7 @@ bool ScintillaWX::ModifyScrollBars(int nMax, int nPage) { int sbThumb = stc->GetScrollThumb(wxHORIZONTAL); int sbPos = stc->GetScrollPos(wxHORIZONTAL); if ((sbMax != horizEnd) || (sbThumb != pageWidth) || (sbPos != 0)) { - stc->SetScrollbar(wxHORIZONTAL, 0, pageWidth, horizEnd); + stc->SetScrollbar(wxHORIZONTAL, sbPos, pageWidth, horizEnd); modified = true; if (scrollWidth < pageWidth) { HorizontalScrollTo(0); @@ -305,7 +311,7 @@ bool ScintillaWX::ModifyScrollBars(int nMax, int nPage) { int sbThumb = stc->m_hScrollBar->GetPageSize(); int sbPos = stc->m_hScrollBar->GetThumbPosition(); if ((sbMax != horizEnd) || (sbThumb != pageWidth) || (sbPos != 0)) { - stc->m_hScrollBar->SetScrollbar(0, pageWidth, horizEnd, pageWidth); + stc->m_hScrollBar->SetScrollbar(sbPos, pageWidth, horizEnd, pageWidth); modified = true; if (scrollWidth < pageWidth) { HorizontalScrollTo(0); @@ -332,12 +338,7 @@ void ScintillaWX::Copy() { if (currentPos != anchor) { SelectionText st; CopySelectionRange(&st); - if (wxTheClipboard->Open()) { - wxTheClipboard->UsePrimarySelection(FALSE); - wxString text = stc2wx(st.s, st.len); - wxTheClipboard->SetData(new wxTextDataObject(text)); - wxTheClipboard->Close(); - } + CopyToClipboard(st); } } @@ -367,18 +368,30 @@ void ScintillaWX::Paste() { } +void ScintillaWX::CopyToClipboard(const SelectionText& st) { + if (wxTheClipboard->Open()) { + wxTheClipboard->UsePrimarySelection(FALSE); + wxString text = stc2wx(st.s, st.len); + wxTheClipboard->SetData(new wxTextDataObject(text)); + wxTheClipboard->Close(); + } +} + + bool ScintillaWX::CanPaste() { bool canPaste = FALSE; bool didOpen; - if ( (didOpen = !wxTheClipboard->IsOpened()) ) - wxTheClipboard->Open(); + if (Editor::CanPaste()) { + if ( (didOpen = !wxTheClipboard->IsOpened()) ) + wxTheClipboard->Open(); - if (wxTheClipboard->IsOpened()) { - wxTheClipboard->UsePrimarySelection(FALSE); - canPaste = wxTheClipboard->IsSupported(wxUSE_UNICODE ? wxDF_UNICODETEXT : wxDF_TEXT); - if (didOpen) - wxTheClipboard->Close(); + if (wxTheClipboard->IsOpened()) { + wxTheClipboard->UsePrimarySelection(FALSE); + canPaste = wxTheClipboard->IsSupported(wxUSE_UNICODE ? wxDF_UNICODETEXT : wxDF_TEXT); + if (didOpen) + wxTheClipboard->Close(); + } } return canPaste; } @@ -467,6 +480,11 @@ long ScintillaWX::WndProc(unsigned int iMessage, unsigned long wParam, long lPar break; } +#ifdef SCI_LEXER + case SCI_LOADLEXERLIBRARY: + LexerManager::GetInstance()->Load((const char*)lParam); + break; +#endif default: return ScintillaBase::WndProc(iMessage, wParam, lParam); }