From 5f371f0bbfadca7971c4a3b624b031ba83a322c9 Mon Sep 17 00:00:00 2001 From: Peter Albrecht <albrecpe@gmail.com> Date: Thu, 21 Dec 2023 16:23:47 +0100 Subject: [PATCH] feature: stop all button --- .../SkillManagerMonitorWidgetController.cpp | 2 ++ .../libraries/skills_gui/SkillMemoryGui.cpp | 13 +++++++++++++ .../libraries/skills_gui/SkillMemoryGui.h | 5 ++++- .../executions/SkillExecutionTreeWidget.cpp | 16 ---------------- .../executions/SkillExecutionTreeWidget.h | 1 - .../skills_gui/memory/SkillManagerWrapper.cpp | 16 ++++++++++++++++ .../skills_gui/memory/SkillManagerWrapper.h | 5 +++++ 7 files changed, 40 insertions(+), 18 deletions(-) diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp index fecab0d3e..39c7763ac 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp @@ -174,6 +174,8 @@ namespace armarx widget.skillDescription, widget.skillDescription->parentWidget()->layout(), + widget.stopAllLayout, + this->mem_wrapper); connectSignals(); diff --git a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp index 51e0f3a96..119bd2b23 100644 --- a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp +++ b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.cpp @@ -15,6 +15,8 @@ namespace armarx::skills::gui QWidget* skillDescription, QLayout* skillDescriptionParentLayout, + QLayout* stopAllLayout, + std::shared_ptr<SkillManagerWrapper> _memory) { Logging::setTag("SkillMemoryGui"); @@ -58,6 +60,11 @@ namespace armarx::skills::gui _skillGroupBoxParentLayout->insertWidget(0, this->skillDetailGroupBox); _skillGroupBoxParentLayout->insertWidget(0, this->skillGroupBox); + // setup stop all button + stopAllButton = new QPushButton(QString::fromStdString(STOP_ALL_BUTTON_TEXT)); + stopAllButton->setStyleSheet("background-color: red"); + stopAllLayout->addWidget(stopAllButton); + setupUi(); } @@ -107,5 +114,11 @@ namespace armarx::skills::gui // timer -> update connect( this->updateWidget, &PeriodicUpdateWidget::update, this, &SkillMemoryGUI::updateGui); + + // stop all + connect(stopAllButton, + &QPushButton::clicked, + memory.get(), + &SkillManagerWrapper::stopAllExecutions); } } // namespace armarx::skills::gui diff --git a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h index 537dc4fc6..bf01a13a4 100644 --- a/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h +++ b/source/RobotAPI/libraries/skills_gui/SkillMemoryGui.h @@ -22,6 +22,7 @@ namespace armarx::skills::gui Q_OBJECT public: + static const constexpr char* STOP_ALL_BUTTON_TEXT = "Stop all executions"; SkillMemoryGUI(QTreeWidget* _skillExecutionTreeWidget, QLayout* _skillExecutionTreeWidgetParentLayout, QGroupBox* _skillGroupBox, @@ -33,6 +34,8 @@ namespace armarx::skills::gui QWidget* skillDescription, QLayout* skillDescriptionParentLayout, + QLayout* stopAllLayout, + std::shared_ptr<SkillManagerWrapper> _memory); signals: @@ -65,7 +68,7 @@ namespace armarx::skills::gui PeriodicUpdateWidget* updateWidget = nullptr; - SkillDescriptionWidget* skillDescriptionWidget = nullptr; + QPushButton* stopAllButton = nullptr; }; } // namespace armarx::skills::gui diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp index a9e5a4d00..4f7400c2f 100644 --- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp +++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp @@ -122,22 +122,6 @@ namespace armarx::skills::gui return selectedExecution.skillExecutionId.skillId.skillName != skills::SkillID::UNKNOWN; } - void - SkillExecutionTreeWidget::stopAllExecutions() - { - for (ssize_t i = 0; i < this->topLevelItemCount(); ++i) - { - auto item = dynamic_cast<SkillExecutionTreeWidgetItem*>(this->topLevelItem(i)); - - if (!item) - { - continue; - } - - memory->stopExecution(item->getExecutionId()); - } - } - void SkillExecutionTreeWidget::executionSelectionChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous) diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h index cd1d37989..0c7e2ffba 100644 --- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h +++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h @@ -53,7 +53,6 @@ namespace armarx::skills::gui void updateExecutions(); private slots: - void stopAllExecutions(); void executionSelectionChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous); void runContextMenu(const QPoint& pos); void stopSelectedExecution(); diff --git a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp index 35b30d482..01e4f0c92 100644 --- a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp +++ b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp @@ -163,6 +163,22 @@ namespace armarx::skills::gui this->currentSkillSearch = search; } + void + SkillManagerWrapper::stopAllExecutions() + { + ARMARX_IMPORTANT << "Stopping all running executions."; + const auto& executions = this->fetchExecutions(); + for (auto& [executionId, status] : executions) + { + // select all running executions... + if (!status.hasBeenTerminated()) + { + // ... and kill them. + this->stopExecution(executionId, 3); + } + } + } + const std::optional<ProviderID> SkillManagerWrapper::findFirstProvider(SkillMap const& map, SkillID const& skillId) { diff --git a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.h b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.h index 363f8eef2..dfa915459 100644 --- a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.h +++ b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.h @@ -79,6 +79,11 @@ namespace armarx::skills::gui */ void acceptSearchRequest(std::string const& search); + /** + * @brief Stops all available (and running) executions. + */ + void stopAllExecutions(); + private: mutable std::mutex mutex_memory; -- GitLab