From 238819eb423d18f709afd2b712e13728bdefa0d6 Mon Sep 17 00:00:00 2001 From: Nav Date: Sat, 17 Sep 2022 20:55:17 +0100 Subject: [PATCH] Added single-shot delay times for emitting target stopped events to Insight components, when stepping through code --- .../Events/TargetExecutionResumed.hpp | 6 ++++- src/Insight/Insight.cpp | 26 +++++++++++++++++++ src/Insight/Insight.hpp | 5 ++++ .../TargetControllerComponent.cpp | 6 ++--- 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/EventManager/Events/TargetExecutionResumed.hpp b/src/EventManager/Events/TargetExecutionResumed.hpp index 0b626c04..0fac7bf2 100644 --- a/src/EventManager/Events/TargetExecutionResumed.hpp +++ b/src/EventManager/Events/TargetExecutionResumed.hpp @@ -12,7 +12,11 @@ namespace Bloom::Events static constexpr EventType type = EventType::TARGET_EXECUTION_RESUMED; static inline const std::string name = "TargetExecutionResumed"; - TargetExecutionResumed() = default; + bool stepping = false; + + explicit TargetExecutionResumed(bool stepping) + : stepping(stepping) + {}; [[nodiscard]] EventType getType() const override { return TargetExecutionResumed::type; diff --git a/src/Insight/Insight.cpp b/src/Insight/Insight.cpp index 57623f3a..32116acb 100644 --- a/src/Insight/Insight.cpp +++ b/src/Insight/Insight.cpp @@ -2,6 +2,7 @@ #include #include +#include #include "src/Helpers/Paths.hpp" #include "src/Logger/Logger.hpp" @@ -275,10 +276,35 @@ namespace Bloom } this->lastTargetState = TargetState::STOPPED; + + if (this->targetStepping) { + if (this->targetResumeTimer == nullptr) { + this->targetResumeTimer = new QTimer(this); + this->targetResumeTimer->setSingleShot(true); + + this->targetResumeTimer->callOnTimeout(this, [this] { + if (this->lastTargetState != TargetState::STOPPED) { + return; + } + + emit this->insightSignals->targetStateUpdated(TargetState::STOPPED); + }); + } + + this->targetResumeTimer->start(750); + return; + } + + if (this->targetResumeTimer != nullptr && this->targetResumeTimer->isActive()) { + this->targetResumeTimer->stop(); + } + emit this->insightSignals->targetStateUpdated(TargetState::STOPPED); } void Insight::onTargetResumedEvent(const Events::TargetExecutionResumed& event) { + this->targetStepping = event.stepping; + if (this->lastTargetState != TargetState::RUNNING) { this->lastTargetState = TargetState::RUNNING; emit this->insightSignals->targetStateUpdated(TargetState::RUNNING); diff --git a/src/Insight/Insight.hpp b/src/Insight/Insight.hpp index bae21b00..1a8db870 100644 --- a/src/Insight/Insight.hpp +++ b/src/Insight/Insight.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include "src/Helpers/Thread.hpp" #include "src/Helpers/Paths.hpp" @@ -90,7 +91,11 @@ namespace Bloom ); TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole(); + Targets::TargetState lastTargetState = Targets::TargetState::UNKNOWN; + bool targetStepping = false; + QTimer* targetResumeTimer = nullptr; + InsightSignals* insightSignals = InsightSignals::instance(); void startup(); diff --git a/src/TargetController/TargetControllerComponent.cpp b/src/TargetController/TargetControllerComponent.cpp index 26ffc833..84a7c22b 100644 --- a/src/TargetController/TargetControllerComponent.cpp +++ b/src/TargetController/TargetControllerComponent.cpp @@ -712,7 +712,7 @@ namespace Bloom::TargetController if (newTargetState == TargetState::RUNNING) { Logger::debug("Target state changed - RUNNING"); - EventManager::triggerEvent(std::make_shared()); + EventManager::triggerEvent(std::make_shared(false)); } } } @@ -827,7 +827,7 @@ namespace Bloom::TargetController this->lastTargetState = TargetState::RUNNING; } - EventManager::triggerEvent(std::make_shared()); + EventManager::triggerEvent(std::make_shared(false)); return std::make_unique(); } @@ -928,7 +928,7 @@ namespace Bloom::TargetController this->target->step(); this->lastTargetState = TargetState::RUNNING; - EventManager::triggerEvent(std::make_shared()); + EventManager::triggerEvent(std::make_shared(true)); return std::make_unique(); }