void NodeJSDebugger::OnToggleBreakpoint(clDebugEvent& event) { event.Skip(); if(NodeJSWorkspace::Get()->IsOpen()) { event.Skip(false); IEditor* editor = clGetManager()->GetActiveEditor(); if(editor && (editor->GetFileName().GetFullPath() == event.GetFileName())) { // Correct editor // add marker NodeJSBreakpoint bp = m_bptManager.GetBreakpoint(event.GetFileName(), event.GetInt()); if(bp.IsOk()) { if(bp.IsApplied() && IsConnected()) { // Tell NodeJS to delete this breakpoint DeleteBreakpoint(bp); } m_bptManager.DeleteBreakpoint(event.GetFileName(), event.GetInt()); } else { // We have no breakpoint on this file/line (yet) m_bptManager.AddBreakpoint(event.GetFileName(), event.GetInt()); bp = m_bptManager.GetBreakpoint(event.GetFileName(), event.GetInt()); if(IsConnected()) { SetBreakpoint(bp); } } // Update the UI m_bptManager.SetBreakpoints(editor); clDebugEvent event(wxEVT_NODEJS_DEBUGGER_UPDATE_BREAKPOINTS_VIEW); EventNotifier::Get()->AddPendingEvent(event); } } }
void cbDebuggerPlugin::EditorLinesAddedOrRemoved(cbEditor* editor, int startline, int lines) { // here we keep the breakpoints in sync with the editors // (whenever lines are added or removed) if (!editor || lines == 0) return; const wxString& filename = editor->GetFilename(); std::vector<int> breakpoints_for_file; int count = GetBreakpointsCount(); for (int ii = 0; ii < count; ++ii) { const cb::shared_ptr<cbBreakpoint> &b = GetBreakpoint(ii); if (b->GetLocation() == filename) { breakpoints_for_file.push_back(ii); } } if (lines < 0) { // removed lines // make "lines" positive, for easier reading below lines = -lines; int endline = startline + lines - 1; std::vector<cb::shared_ptr<cbBreakpoint> > to_remove; for (std::vector<int>::iterator it = breakpoints_for_file.begin(); it != breakpoints_for_file.end(); ++it) { const cb::shared_ptr<cbBreakpoint> &b = GetBreakpoint(*it); if (b->GetLine() > endline) ShiftBreakpoint(*it, -lines); else if (b->GetLine() >= startline && b->GetLine() <= endline) to_remove.push_back(b); } for (std::vector<cb::shared_ptr<cbBreakpoint> >::iterator it = to_remove.begin(); it != to_remove.end(); ++it) DeleteBreakpoint(*it); } else { for (std::vector<int>::iterator it = breakpoints_for_file.begin(); it != breakpoints_for_file.end(); ++it) { const cb::shared_ptr<cbBreakpoint> &b = GetBreakpoint(*it); if (b->GetLine() > startline) ShiftBreakpoint(*it, lines); } } }