From 0c52ffca4eeff40f985b84a774a88b6e33ea562f Mon Sep 17 00:00:00 2001 From: Peter Albrecht <usnlf@student.kit.edu> Date: Fri, 14 Feb 2025 14:58:37 +0100 Subject: [PATCH] fix: execution parameters not loading --- .../skill_details/SkillDetailsGroupBox.cpp | 4 ++ .../skill_details/SkillDetailsTreeWidget.cpp | 44 +++++++++++++++++++ .../skill_details/SkillDetailsTreeWidget.h | 1 + 3 files changed, 49 insertions(+) diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp index 7120093d5..b77ac6bd7 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp +++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp @@ -170,6 +170,10 @@ namespace armarx::skills::gui &SkillDetailsTreeWidget::updated, profileMenuWidget, &ProfileMenuWidget::updateChangesSelector); + connect(profileMenuWidget->historySelector, + &QPushButton::pressed, + skillDetailsTreeWidget, + &SkillDetailsTreeWidget::reloadLastExecutionParameters); } diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp index 988a70e30..96434f8ea 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp +++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp @@ -15,6 +15,7 @@ #include <ArmarXCore/core/logging/Logging.h> +#include "RobotAPI/libraries/skills/core/SkillExecutionID.h" #include "RobotAPI/libraries/skills/core/SkillID.h" #include "RobotAPI/libraries/skills_gui/aron_tree_widget/AronTreeWidgetController.h" #include <RobotAPI/libraries/aron/converter/json/NLohmannJSONConverter.h> @@ -230,6 +231,49 @@ namespace armarx::skills::gui ARMARX_INFO << "Reloaded parameters from the last execution"; aronTreeWidgetController->setFromAron(params.value()); } + + void SkillDetailsTreeWidget::reloadLastExecutionParameters() + { + auto executions = memory->getExecutions(); + if (executions.empty() || not shownSkill.has_value()) + { + return; + } + + + // find the most recent execution with a matching skill id + + std::optional<armarx::skills::SkillStatusUpdate> found = std::nullopt; + for (auto& execution : executions) + { + if (execution.first.skillId == shownSkill->skillId) + { + if (not found.has_value()) + { + found = execution.second; + } + else + { + if (found->executionId.executionStartedTime < execution.first.executionStartedTime) + { + // in this case, we found a more recent execution. + found = execution.second; + } + } + } + } + + if (not found.has_value()) + { + // we didn't find an entry for the execution id + ARMARX_INFO<< "No execution for the skill " << shownSkill->skillId.toString() << " has been found in the memory. The parametrization cannot be reloaded."; + return; + } + auto params = found->parameters; + + ARMARX_INFO << "Reloading parameters of skill " << found->executionId.skillId; + this->aronTreeWidgetController->setFromAron(params); + } aron::data::DictPtr SkillDetailsTreeWidget::getConfigAsAron() diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h index 92308c098..819a61663 100644 --- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h +++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h @@ -38,6 +38,7 @@ namespace armarx::skills::gui void updateGui(SkillManagerWrapper::Snapshot update); void resizeContents(); void reloadLastParameters(); + void reloadLastExecutionParameters(); private: struct ShownSkill -- GitLab