From 6fb8538f36f04dcba29f2d1096e35e9b8fa3f001 Mon Sep 17 00:00:00 2001 From: Naumann <uhxkb@student.kit.edu> Date: Fri, 20 Oct 2023 18:32:56 +0200 Subject: [PATCH] Indicate source scenario and package for linked applications --- .../gui/detailedapplicationview.cpp | 45 ++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp index 3e5637e3..e62a0cf3 100644 --- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp +++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp @@ -31,12 +31,35 @@ #include <ArmarXCore/core/util/algorithm.h> #include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> #include <ArmarXCore/core/application/properties/PropertyDefinitionHelpFormatter.h> +#include <ArmarXCore/util/ScenarioManagerCommon/parser/XMLScenarioParser.h> +#include <ArmarXCore/util/ScenarioManagerCommon/parser/PackageBuilder.h> #define UPDATE_TIMER_INTERVAL 500 using namespace ScenarioManager; using namespace Data_Structure; +// Returns {package, scenario} +std::pair<std::string, std::string> scenarioInfoFromLink(const std::filesystem::path& linkpath) +{ + auto instancePath = std::filesystem::canonical(linkpath); + auto scenarioFolder = instancePath.parent_path().parent_path(); + std::string scenarioName = scenarioFolder.filename(); + auto scenarioScx = scenarioFolder / (scenarioName + ".scx"); + if (!std::filesystem::exists(scenarioScx)) + { + return {"unknown", "unknown"}; + } + auto packageName = ScenarioManager::Parser::XMLScenarioParser().getPackageNameFromScx(scenarioScx); + + if (packageName.empty()) + { + return {"unknown", scenarioName}; + } + + return {packageName, scenarioName}; +} + DetailedApplicationView::DetailedApplicationView(QWidget* parent) : QWidget(parent), ui(new Ui::DetailedApplicationView), @@ -210,9 +233,27 @@ void DetailedApplicationView::showApplicationInstance(ApplicationInstancePtr app ui->makeLocalButton->setVisible(readOnly); ui->addParameterButton->setVisible(!readOnly); + std::string label = appInstance->getName(); + if (readOnly) + { + auto [package, scenario] = scenarioInfoFromLink(appInstance->getConfigPath()); + label += " -> " + scenario; + std::string tooltip; + if (package == "unknown") + { + tooltip = "Could not determine original scenario for config '" + + std::string(std::filesystem::canonical(appInstance->getConfigPath())) + "'"; + } + else + { + tooltip = "Original is in " + + (package == "unknown" ? "unknown package" : "package " + package) + + ", scenario " + scenario; + } + ui->dataLabel->setToolTip(QString::fromStdString(tooltip)); + } + ui->dataLabel->setText(QString::fromStdString(label)); - ui->dataLabel->setText(QString::fromStdString(appInstance->getName())); - ui->stateLabel->setText(QString::fromStdString(appInstance->getStatus())); statusUpdateRelevant = true; lastAppInstance = appInstance; lastScenario = ScenarioPtr(nullptr); -- GitLab