From 1e2b9b43a6213c61a96abb33fb50dbe47603f032 Mon Sep 17 00:00:00 2001
From: Peter Albrecht <albrecpe@gmail.com>
Date: Sat, 21 Oct 2023 23:59:52 +0200
Subject: [PATCH] Disabled the 'stop skill' prompt when skill has finished

---
 .../SkillManagerMonitorWidgetController.cpp   | 21 ++++++++++++++-----
 .../SkillManagerMonitorWidgetController.h     |  2 +-
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
index a518220d4..be7b4593e 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
@@ -83,16 +83,25 @@ namespace armarx
 namespace armarx
 {
     void
-    SkillManagerMonitorWidgetController::prepareMenu(const QPoint& pos)
+    SkillManagerMonitorWidgetController::prepareAndRunMenu(const QPoint& pos)
     {
         QMenu* menu = new QMenu();
-        // TODO: gray out option if skill has finished
+
+        // Stop skill
         QAction* stopSkillAction = new QAction("Stop Skill", this);
+        skills::SkillStatus currentStatus =
+            skillStatusUpdates.at(selectedSkill.skillExecutionId).status;
+        stopSkillAction->setDisabled(currentStatus == skills::SkillStatus::Aborted ||
+                                     currentStatus == skills::SkillStatus::Failed ||
+                                     currentStatus == skills::SkillStatus::Succeeded);
+
+        // TODO: re-run with similar params; remove skill entry (if finished)
         menu->addAction(stopSkillAction);
         connect(stopSkillAction,
                 &QAction::triggered,
                 this,
                 &SkillManagerMonitorWidgetController::stopSkill);
+        // open menu
         menu->popup(widget.treeWidgetSkillExecutions->viewport()->mapToGlobal(pos));
     }
 
@@ -136,7 +145,7 @@ namespace armarx
         connect(widget.treeWidgetSkillExecutions,
                 &QTreeWidget::customContextMenuRequested,
                 this,
-                &SkillManagerMonitorWidgetController::prepareMenu);
+                &SkillManagerMonitorWidgetController::prepareAndRunMenu);
 
         connect(widget.doubleSpinBoxUpdateFreq,
                 &QDoubleSpinBox::editingFinished,
@@ -387,6 +396,9 @@ namespace armarx
                 auto executionId = skills::SkillExecutionID::FromIce(k);
                 auto statusUpdate = skills::SkillStatusUpdate::FromIce(v);
 
+                // update snapshot
+                skillStatusUpdates.insert_or_assign(executionId, statusUpdate);
+
                 SkillExecutionInfoTreeWidgetItem* found = nullptr;
                 for (int i = 0; i < widget.treeWidgetSkillExecutions->topLevelItemCount(); ++i)
                 {
@@ -509,8 +521,7 @@ namespace armarx
         }
         */
 
-        ARMARX_INFO << "Stopping skill from GUI: "
-                    << selectedSkill.skillExecutionId.skillId.skillName;
+        ARMARX_INFO << "Stopping skill from GUI: " << selectedSkill.skillExecutionId.toString();
 
         memory->abortSkill(selectedSkill.skillExecutionId.toManagerIce());
     }
diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h
index 6d35a5279..4a7d0e79e 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h
@@ -130,7 +130,7 @@ namespace armarx
         void pasteCurrentConfig();
         void resetCurrentConfig();
 
-        void prepareMenu(const QPoint& pos);
+        void prepareAndRunMenu(const QPoint& pos);
 
 
     private:
-- 
GitLab