void ClangPlugin::OnEditorHook(cbEditor* ed, wxScintillaEvent& event) { event.Skip(); if (!IsProviderFor(ed)) return; cbStyledTextCtrl* stc = ed->GetControl(); if (event.GetEventType() == wxEVT_SCI_MODIFIED) { if (event.GetModificationType() & (wxSCI_MOD_INSERTTEXT | wxSCI_MOD_DELETETEXT)) { const int pos = stc->GetCurrentPos(); const int line = stc->LineFromPosition(pos); if ( (m_LastModifyLine != -1)&&(line != m_LastModifyLine) ) { RequestReparse(); } m_LastModifyLine = line; } } else if (event.GetEventType() == wxEVT_SCI_CHANGE) { //fprintf(stdout,"wxEVT_SCI_CHANGE\n"); } }
void PythonCodeCtrl::OnCharAdded(wxScintillaEvent& ke) { //User has pressed enter //if the cursor is at the end of a completed statement, submit the statement to the interpreter //otherwise, do auto-indentation if (ke.GetKey() == _T('\n')) { //int pos = GetCurrentPos(); int line = LineFromPosition(GetCurrentPos()); if(line>0) { wxString prevlinetext = GetLine(line-1).Trim(); int indentation = GetLineIndentation(line-1); if((indentation==0) //submit a return pressed on an unindented line || (indentation>0 && prevlinetext==wxEmptyString)) // or an indented block where the previous line was empty { long rs,re; GetSelection(&rs,&re); //if(rs==re && GetLastPosition()==rs) if(rs==re && GetLength()==rs) // only submit if the cursor is at the end of the control (and there is no selection) { m_pyctrl->DispatchCode(GetValue()); ke.Skip(); } } // Otherwise indent the code if necessary if (GetLine(line-1).Trim().EndsWith(_T(":"))) { if(GetStyleAt(GetLineEndPosition(line-1)-1) == wxSCI_P_OPERATOR) indentation+=GetIndent(); } if (indentation>0) { SetLineIndentation(line,indentation); SetCurrentPos(PositionFromLine(line)+indentation); SetAnchor(PositionFromLine(line)+indentation); } } } ke.Skip(); }
void ClangPlugin::OnEditorHook(cbEditor* ed, wxScintillaEvent& event) { event.Skip(); if (!IsProviderFor(ed)) return; if (event.GetEventType() == wxEVT_SCI_MODIFIED) { if (event.GetModificationType() & (wxSCI_MOD_INSERTTEXT | wxSCI_MOD_DELETETEXT)) { m_ReparseTimer.Start(REPARSE_DELAY, wxTIMER_ONE_SHOT); m_DiagnosticTimer.Start(DIAGNOSTIC_DELAY, wxTIMER_ONE_SHOT); } } }
void VObjEvtHandler::OnMarginClick ( wxScintillaEvent& event ) { wxScintilla* scintilla = wxDynamicCast( m_window, wxScintilla ); if ( scintilla != NULL ) { if ( event.GetMargin() == 1 ) { int lineClick = scintilla->LineFromPosition( event.GetPosition() ); int levelClick = scintilla->GetFoldLevel( lineClick ); if ( ( levelClick & wxSCI_FOLDLEVELHEADERFLAG ) > 0 ) { scintilla->ToggleFold( lineClick ); } } } event.Skip(); }
void ClangCodeCompletion::OnEditorHook(cbEditor* ed, wxScintillaEvent& event) { event.Skip(); bool clearIndicator = false; bool reparse = false; //if (!m_pClangPlugin->IsProviderFor(ed)) // return; cbStyledTextCtrl* stc = ed->GetControl(); if (event.GetEventType() == wxEVT_SCI_MODIFIED) { m_ReparseTimer.Stop(); if (event.GetModificationType() & (wxSCI_MOD_INSERTTEXT | wxSCI_MOD_DELETETEXT)) { reparse = true; clearIndicator = true; } } else if (event.GetEventType() == wxEVT_SCI_UPDATEUI) { //fprintf(stdout,"wxEVT_SCI_UPDATEUI\n"); if (event.GetUpdated() & wxSCI_UPDATE_SELECTION) { m_HightlightTimer.Stop(); m_HightlightTimer.Start(HIGHTLIGHT_DELAY, wxTIMER_ONE_SHOT); } clearIndicator = true; } else if (event.GetEventType() == wxEVT_SCI_CHANGE) { //fprintf(stdout,"wxEVT_SCI_CHANGE\n"); } if (clearIndicator) { const int theIndicator = 16; stc->SetIndicatorCurrent(theIndicator); stc->IndicatorClearRange(0, stc->GetLength()); } if (reparse) { RequestReparse(); } }
void CCManager::OnEditorHook(cbEditor* ed, wxScintillaEvent& event) { wxEventType evtType = event.GetEventType(); if (evtType == wxEVT_SCI_CHARADDED) { const wxChar ch = event.GetKey(); CCPluginCharMap::const_iterator ctChars = m_CallTipChars.find(GetProviderFor(ed)); if (ctChars == m_CallTipChars.end()) ctChars = m_CallTipChars.find(nullptr); // default if (ctChars->second.find(ch) != ctChars->second.end()) { CodeBlocksEvent evt(cbEVT_SHOW_CALL_TIP); Manager::Get()->ProcessEvent(evt); } else { cbStyledTextCtrl* stc = ed->GetControl(); const int pos = stc->GetCurrentPos(); const int wordStartPos = stc->WordStartPosition(pos, true); CCPluginCharMap::const_iterator alChars = m_AutoLaunchChars.find(GetProviderFor(ed)); if (alChars == m_AutoLaunchChars.end()) alChars = m_AutoLaunchChars.find(nullptr); // default // TODO: read settings if ( (pos - wordStartPos >= 3 && !stc->AutoCompActive()) || pos - wordStartPos == 3 + 4 ) { CodeBlocksEvent evt(cbEVT_COMPLETE_CODE); Manager::Get()->ProcessEvent(evt); } else if (alChars->second.find(ch) != alChars->second.end()) { m_AutoLaunchTimer.Start(10, wxTIMER_ONE_SHOT); m_AutocompPosition = pos; } } } else if (evtType == wxEVT_SCI_UPDATEUI) { if (event.GetUpdated() & (wxSCI_UPDATE_V_SCROLL|wxSCI_UPDATE_H_SCROLL)) { cbStyledTextCtrl* stc = ed->GetControl(); if (stc->CallTipActive()) { static_cast<wxScintilla*>(stc)->CallTipCancel(); if (m_CallTipActive != wxSCI_INVALID_POSITION && CCManagerHelper::IsPosVisible(m_CallTipActive, stc)) m_CallTipTimer.Start(SCROLL_REFRESH_DELAY, wxTIMER_ONE_SHOT); } else if (m_CallTipTimer.IsRunning()) { if (CCManagerHelper::IsPosVisible(stc->GetCurrentPos(), stc)) m_CallTipTimer.Start(SCROLL_REFRESH_DELAY, wxTIMER_ONE_SHOT); else { m_CallTipTimer.Stop(); m_CallTipActive = wxSCI_INVALID_POSITION; } } if (m_AutoLaunchTimer.IsRunning()) { if (CCManagerHelper::IsPosVisible(stc->GetCurrentPos(), stc)) m_AutoLaunchTimer.Start(SCROLL_REFRESH_DELAY, wxTIMER_ONE_SHOT); else m_AutoLaunchTimer.Stop(); } else if (stc->AutoCompActive()) { stc->AutoCompCancel(); m_AutocompPosition = stc->GetCurrentPos(); if (CCManagerHelper::IsPosVisible(m_AutocompPosition, stc)) m_AutoLaunchTimer.Start(SCROLL_REFRESH_DELAY, wxTIMER_ONE_SHOT); } } } else if (evtType == wxEVT_SCI_KEY) { cbStyledTextCtrl* stc = ed->GetControl(); switch (event.GetKey()) { case wxSCI_KEY_LEFT: case wxSCI_KEY_RIGHT: if (!stc->CallTipActive() && !stc->AutoCompActive()) m_CallTipActive = wxSCI_INVALID_POSITION; // fall through case wxSCI_KEY_UP: case wxSCI_KEY_DOWN: if (m_CallTipActive != wxSCI_INVALID_POSITION && !stc->AutoCompActive()) m_CallTipTimer.Start(CALLTIP_REFRESH_DELAY, wxTIMER_ONE_SHOT); break; default: break; } } else if (evtType == wxEVT_SCI_MODIFIED) { if (event.GetModificationType() & wxSCI_PERFORMED_UNDO) { cbStyledTextCtrl* stc = ed->GetControl(); if (m_CallTipActive != wxSCI_INVALID_POSITION && stc->GetCurrentPos() >= m_CallTipActive) m_CallTipTimer.Start(CALLTIP_REFRESH_DELAY, wxTIMER_ONE_SHOT); else static_cast<wxScintilla*>(stc)->CallTipCancel(); } } else if (evtType == wxEVT_SCI_AUTOCOMP_SELECTION) { DoHidePopup(); cbCodeCompletionPlugin* ccPlugin = GetProviderFor(ed); if (ccPlugin && m_OwnsAutocomp) { if ( m_LastAutocompIndex != wxNOT_FOUND && m_LastAutocompIndex < (int)m_AutocompTokens.size() ) { ccPlugin->DoAutocomplete(m_AutocompTokens[m_LastAutocompIndex], ed); } else { ccPlugin->DoAutocomplete(event.GetText(), ed); } } } else if (evtType == wxEVT_SCI_AUTOCOMP_CANCELLED) DoHidePopup(); else if (evtType == wxEVT_SCI_CALLTIP_CLICK) { switch (event.GetPosition()) { case 1: // up --m_CurCallTip; DoUpdateCallTip(ed); break; case 2: // down ++m_CurCallTip; DoUpdateCallTip(ed); break; case 0: // elsewhere default: break; } } event.Skip(); }
void OutputTabWindow::OnMouseDClick(wxScintillaEvent& e) { e.Skip(); }