diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp index cab9f45f9f77ad65fe7eff3970728aeea118006d..8d3dc6bd1459a74bc2bbf82af98235605e09de9a 100644 --- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp +++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.cpp @@ -90,11 +90,13 @@ namespace armarx::skills::gui void SkillExecutionTreeWidget::setupUi() { - this->setColumnCount(4); + this->setColumnCount(6); this->setContextMenuPolicy(Qt::CustomContextMenu); QTreeWidgetItem* ___qtreewidgetitem = this->headerItem(); + ___qtreewidgetitem->setText(5, ""); + ___qtreewidgetitem->setText(4, ""); ___qtreewidgetitem->setText(3, "Status"); ___qtreewidgetitem->setText(2, "SkillID"); ___qtreewidgetitem->setText(1, "Executor"); @@ -170,11 +172,9 @@ namespace armarx::skills::gui if (!found) { // TODO: Sort to executor! - auto item = new SkillExecutionTreeWidgetItem(executionId, memory); + auto item = new SkillExecutionTreeWidgetItem(executionId, memory, this); item->updateItem(statusUpdate.status); - - this->insertTopLevelItem(0, item); } } } diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.cpp b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.cpp index e1b054e6fc8f87f67e906e4e09a86cacd3837bd3..ef7ab34412ad271524988ea0d60a8cc05cb78f18 100644 --- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.cpp +++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.cpp @@ -49,10 +49,38 @@ namespace armarx::skills::gui this->setText(3, QString::fromStdString(i.second)); } } + updateButtonState(skillStatus); } - void SkillExecutionTreeWidgetItem::setupUi() + void + SkillExecutionTreeWidgetItem::abortExecution() + { + memory->stopExecution(executionId); + } + + void + SkillExecutionTreeWidgetItem::setupUi() + { + parentTree->insertTopLevelItem(0, this); + abortButton = new QPushButton("Abort"); + parentTree->setItemWidget(this, 4, abortButton); + connectSignals(); + } + + void + SkillExecutionTreeWidgetItem::connectSignals() { + connect(abortButton, + &QPushButton::clicked, + this, + &SkillExecutionTreeWidgetItem::abortExecution); + } + void + SkillExecutionTreeWidgetItem::updateButtonState(SkillStatus& skillStatus) + { + abortButton->setDisabled(skillStatus == SkillStatus::Aborted || + skillStatus == SkillStatus::Failed || + skillStatus == SkillStatus::Succeeded); } } // namespace armarx::skills::gui diff --git a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.h b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.h index a9a6dd957b4b3500a3a17d9919681fd37da9eae5..cd0376f8f9c123f6046e061a4955293fc833c9ec 100644 --- a/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.h +++ b/source/RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidgetItem.h @@ -1,8 +1,10 @@ #ifndef SKILLEXECUTIONTREEWIDGETITEM_H #define SKILLEXECUTIONTREEWIDGETITEM_H +#include <QPushButton> #include <QTreeWidgetItem> +#include "RobotAPI/libraries/skills_gui/executions/SkillExecutionTreeWidget.h" #include <RobotAPI/libraries/skills/core/SkillExecutionID.h> #include <RobotAPI/libraries/skills/core/SkillStatusUpdate.h> @@ -23,17 +25,21 @@ namespace armarx::skills::gui {skills::SkillStatus::Failed, "Failed"}, {skills::SkillStatus::Succeeded, "Succeeded"}}; - class SkillExecutionTreeWidgetItem : public QTreeWidgetItem, public MemoryCommunicatorBase + class SkillExecutionTreeWidgetItem : + public QObject, + public QTreeWidgetItem, + public MemoryCommunicatorBase { + Q_OBJECT public: SkillExecutionTreeWidgetItem() = delete; - // After constructing an item, it must be manually inserted into the tree! SkillExecutionTreeWidgetItem(const skills::SkillExecutionID& id, - std::shared_ptr<SkillManagerWrapper> _memory) : - MemoryCommunicatorBase(_memory), executionId(id) + std::shared_ptr<SkillManagerWrapper> _memory, + SkillExecutionTreeWidget* parent) : + MemoryCommunicatorBase(_memory), executionId(id), parentTree(parent) { - setupUi() + setupUi(); } static SkillExecutionTreeWidgetItem* @@ -47,8 +53,15 @@ namespace armarx::skills::gui protected: skills::SkillExecutionID executionId; + public slots: + void abortExecution(); + private: void setupUi(); + void connectSignals(); + void updateButtonState(skills::SkillStatus& skillStatus); + SkillExecutionTreeWidget* parentTree = nullptr; + QPushButton* abortButton = nullptr; }; } // namespace armarx::skills::gui