void cbDebuggerPlugin::OnCompilerFinished(cb_unused CodeBlocksEvent& event) { if (m_WaitingCompilerToFinish) { m_WaitingCompilerToFinish = false; bool compilerFailed = false; // only proceed if build succeeeded if (m_pCompiler && m_pCompiler->GetExitCode() != 0) { AnnoyingDialog dlg(_("Debug anyway?"), _("Build failed, do you want to debug the program?"), wxART_QUESTION, AnnoyingDialog::YES_NO, AnnoyingDialog::rtNO); if (dlg.ShowModal() != AnnoyingDialog::rtYES) { ProjectManager *manager = Manager::Get()->GetProjectManager(); if (manager->GetIsRunning() && manager->GetIsRunning() == this) manager->SetIsRunning(nullptr); compilerFailed = true; } } ShowLog(false); if (!CompilerFinished(compilerFailed, m_StartType)) { ProjectManager *manager = Manager::Get()->GetProjectManager(); if (manager->GetIsRunning() && manager->GetIsRunning() == this) manager->SetIsRunning(nullptr); } } }
void DebuggerMenuHandler::OnStep(cb_unused wxCommandEvent& event) { cbAssert(m_activeDebugger); if (m_activeDebugger->IsRunning()) { if(!m_disableContinue) { HideValueTooltip(); m_activeDebugger->Step(); } } else { m_disableContinue = true; ProjectManager *manager = Manager::Get()->GetProjectManager(); if (manager->GetIsRunning() == nullptr) { manager->SetIsRunning(m_activeDebugger); m_activeDebugger->ClearLog(); LogActiveConfig(); if (!m_activeDebugger->Debug(true)) manager->SetIsRunning(nullptr); } m_disableContinue = false; } }
void DebuggerMenuHandler::OnRunToCursor(cb_unused wxCommandEvent& event) { cbAssert(m_activeDebugger); cbEditor* ed = Manager::Get()->GetEditorManager()->GetBuiltinActiveEditor(); if (!ed) return; const wxString &line_text = ed->GetControl()->GetLine(ed->GetControl()->GetCurrentLine()); ProjectManager *manager = Manager::Get()->GetProjectManager(); if (manager->GetIsRunning() == nullptr || manager->GetIsRunning() == m_activeDebugger) { manager->SetIsRunning(m_activeDebugger); if (!m_activeDebugger->IsRunning()) { m_activeDebugger->ClearLog(); LogActiveConfig(); } HideValueTooltip(); if (!m_activeDebugger->RunToCursor(ed->GetFilename(), ed->GetControl()->GetCurrentLine() + 1, line_text)) manager->SetIsRunning(nullptr); } }
void DebuggerToolbarHandler::OnUpdateUI(wxUpdateUIEvent& event) { cbDebuggerPlugin *plugin = Manager::Get()->GetDebuggerManager()->GetActiveDebugger(); ProjectManager *manager = Manager::Get()->GetProjectManager(); bool en = false; bool stopped = false, isRunning = false; if (plugin) { cbProject* prj = manager->GetActiveProject(); en = (prj && !prj->GetCurrentlyCompilingTarget()) || plugin->IsAttachedToProcess(); stopped = plugin->IsStopped(); isRunning = plugin->IsRunning(); } if (m_Toolbar) { cbEditor* ed = Manager::Get()->GetEditorManager()->GetBuiltinActiveEditor(); cbPlugin *runningPlugin = manager->GetIsRunning(); if (runningPlugin != NULL && runningPlugin != plugin) en = false; m_Toolbar->EnableTool(idMenuDebug, (!isRunning || stopped) && en); m_Toolbar->EnableTool(idMenuRunToCursor, en && ed && stopped); m_Toolbar->EnableTool(idMenuNext, isRunning && en && stopped); m_Toolbar->EnableTool(idMenuNextInstr, isRunning && en && stopped); m_Toolbar->EnableTool(idMenuStepIntoInstr, isRunning && en && stopped); m_Toolbar->EnableTool(idMenuStep, en && stopped); m_Toolbar->EnableTool(idMenuStepOut, isRunning && en && stopped); m_Toolbar->EnableTool(idToolbarStop, isRunning && en); m_Toolbar->EnableTool(idMenuBreak, isRunning && !stopped && en); m_Toolbar->EnableTool(idDebuggerToolInfo, plugin && plugin->ToolMenuEnabled()); } // allow other UpdateUI handlers to process this event // *very* important! don't forget it... event.Skip(); }