diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp index a518220d4752595a0e913e1ef123bf88932aebad..be7b4593ead507d4c711936e33d23ca748df641b 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 6d35a527996a77536ee369a0061aab7915dc51e2..4a7d0e79efba5ad76d7de95ecf212b85c934f797 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: