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