From 5207674f000eb212cd710f393d8ca4f6ce0f5e9c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tobias=20Gr=C3=B6ger?= <tobias.groeger@student.kit.edu>
Date: Thu, 27 Jun 2024 18:36:46 +0200
Subject: [PATCH] Suppress property updates when displaying a scenario or
 application

This will also suppress saving the config file immediately upon reloading it.
---
 .../gui/detailedapplicationview.cpp           | 22 +++++++++----------
 .../gui/detailedapplicationview.h             |  2 --
 2 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp
index 1be9c1a6..9a22dc14 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.cpp
@@ -249,6 +249,8 @@ DetailedApplicationView::showApplicationInstance(ApplicationInstancePtr appInsta
         init();
     }
 
+    // ignore any updates due to us setting the values
+    statusUpdateRelevant = false;
 
     // watch the config file of this application
     const auto appConfigFile = appInstance->getConfigPath();
@@ -302,7 +304,6 @@ DetailedApplicationView::showApplicationInstance(ApplicationInstancePtr appInsta
     }
     ui->dataLabel->setText(QString::fromStdString(label));
 
-    statusUpdateRelevant = true;
     lastAppInstance = appInstance;
     lastScenario = ScenarioPtr(nullptr);
     if (item != nullptr)
@@ -463,6 +464,9 @@ DetailedApplicationView::showApplicationInstance(ApplicationInstancePtr appInsta
 
     ui->propertyBrowser->addProperty(appInstanceTopItem);
     ui->propertyBrowser->setRootIsDecorated(false);
+
+    // re-enable updates
+    statusUpdateRelevant = true;
 }
 
 void
@@ -479,13 +483,15 @@ DetailedApplicationView::showScenario(ScenarioPtr scenario)
         init();
     }
 
+    // ignore any updates due to us setting the values
+    statusUpdateRelevant = false;
+
     // watch the global config file of this scenario
     const auto scenarioGlobalConfigFile = scenario->getGlobalConfigPath();
     setWatcherPaths(fileSystemWatcher, scenarioGlobalConfigFile);
 
 
     ui->dataLabel->setText(QString::fromStdString(scenario->getName()));
-    statusUpdateRelevant = true;
     lastScenario = scenario;
     lastAppInstance = ApplicationInstancePtr(nullptr);
     lastScenarioItem = nullptr;
@@ -649,6 +655,9 @@ DetailedApplicationView::showScenario(ScenarioPtr scenario)
 
     ui->propertyBrowser->addProperty(scenarioTopItem);
     ui->propertyBrowser->setRootIsDecorated(false);
+
+    // re-enable updates
+    statusUpdateRelevant = true;
 }
 
 void
@@ -1033,8 +1042,6 @@ DetailedApplicationView::on_fileUpdate()
 {
     if (lastAppInstance.get() != nullptr)
     {
-        lastFileSave = Clock::now();
-
         //DANGER delets old config
         if (lastAppInstance->isConfigWritable())
         {
@@ -1090,13 +1097,6 @@ DetailedApplicationView::on_makeLocalButton_clicked()
 void
 DetailedApplicationView::on_fileWatcherUpdate(const QString& path)
 {
-
-    if (Clock::now() - lastFileSave < std::chrono::seconds(2))
-    {
-        // file update was cause by us, prevent infinite loop
-        return;
-    }
-
     ARMARX_VERBOSE << "File changed: " << path.toStdString() << " -> reloading config";
 
     if (lastAppInstance.get() != nullptr)
diff --git a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.h b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.h
index 13b99008..227e46c7 100644
--- a/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.h
+++ b/source/ArmarXGui/gui-plugins/ScenarioManager/gui/detailedapplicationview.h
@@ -154,9 +154,7 @@ private:
     bool neadsUpdate;
     QTimer updateTimer;
 
-    using Clock = std::chrono::steady_clock;
     QFileSystemWatcher fileSystemWatcher;
-    Clock::time_point lastFileSave;
 };
 
 using DetailedApplicationViewPtr = std::shared_ptr<DetailedApplicationView>;
-- 
GitLab