28 #include <QToolButton>
37 #include <ArmarXGui/gui-plugins/ScenarioManager/gui/ui_detailedapplicationview.h>
39 #define UPDATE_TIMER_INTERVAL 500
42 using namespace Data_Structure;
46 setWatcherPaths(QFileSystemWatcher& watcher,
T... paths)
48 if (not watcher.files().empty())
50 watcher.removePaths(watcher.files());
52 if (not watcher.directories().empty())
54 watcher.removePaths(watcher.directories());
57 (watcher.addPath(QString::fromStdString(paths)), ...);
61 std::pair<std::string, std::string>
64 auto instancePath = std::filesystem::canonical(linkpath);
65 auto scenarioFolder = instancePath.parent_path().parent_path();
66 std::string scenarioName = scenarioFolder.filename();
67 auto scenarioScx = scenarioFolder / (scenarioName +
".scx");
68 if (!std::filesystem::exists(scenarioScx))
70 return {
"unknown",
"unknown"};
75 if (packageName.empty())
77 return {
"unknown", scenarioName};
80 return {packageName, scenarioName};
86 variantManager(nullptr),
87 variantFactory(nullptr),
88 statusUpdateRelevant(false),
89 lastScenarioItem(nullptr),
92 updateTimer.setSingleShot(
true);
93 QObject::connect(&updateTimer, SIGNAL(timeout()),
this, SLOT(on_fileUpdate()));
96 QObject::connect(&fileSystemWatcher,
97 &QFileSystemWatcher::fileChanged,
99 &DetailedApplicationView::on_fileWatcherUpdate);
108 DetailedApplicationView::init()
114 ui->propertyBrowser->setFactoryForManager(variantManager.get(), variantFactory.get());
116 ui->propertyBrowser->setAlternatingRowColors(
true);
117 ui->propertyBrowser->setResizeMode(QtTreePropertyBrowser::ResizeMode::Interactive);
118 ui->propertyBrowser->setSplitterPosition(200);
120 QObject::connect(variantManager.get(),
121 SIGNAL(valueChanged(
QtProperty*,
const QVariant&)),
123 SLOT(itemChanged(
QtProperty*,
const QVariant&)));
125 QObject::connect(variantManager.get(),
126 SIGNAL(attributeChanged(
QtProperty*,
const QString&,
const QVariant&)),
128 SLOT(itemAttributeChanged(
QtProperty*,
const QString&,
const QVariant&)));
131 void attributeChanged(
QtProperty * property,
const QString& attribute,
const QVariant& val);
133 ui->linkedInfoLabel->setVisible(
false);
134 ui->makeLocalButton->setVisible(
false);
135 ui->addParameterButton->setEnabled(
false);
143 if (application.get() ==
nullptr)
147 if (variantManager.get() ==
nullptr || variantFactory.get() ==
nullptr)
152 ui->dataLabel->setText(QString::fromStdString(application->getName()));
156 lastScenarioItem =
nullptr;
157 statusUpdateRelevant =
false;
159 ui->stateLabel->setStyleSheet(
"QLabel { color : black; }");
160 ui->stateLabel->setText(
"No Status");
162 ui->startButton->setEnabled(
false);
163 ui->stopButton->setEnabled(
false);
164 ui->restartButton->setEnabled(
false);
165 ui->addParameterButton->setEnabled(
false);
166 ui->addParameterButton->setMenu(
nullptr);
168 ui->toolButton->setEnabled(
false);
171 variantManager->clear();
173 ->setElementName(QString::fromStdString(application->getName()));
174 ui->propertyBrowser->clear();
177 QLatin1String(
"Application"));
182 nameItem->
setValue(QString::fromStdString(application->getName()));
187 execPathItem->
setValue(QString::fromStdString(application->getPathToExecutable()));
190 QtProperty* appPropertyTopItem = variantManager->addProperty(
196 Ice::PropertyDict dict = props->getProperties()->getPropertiesForPrefix(
"");
198 for (
auto const& property : dict)
200 QStringList valueList;
201 if (props->hasDefinition(property.first))
204 props->getDefintion<std::string>(
property.first);
207 for (
auto& key : keys)
209 valueList << QString::fromStdString(key);
214 ARMARX_WARNING <<
"Could not find definition: " <<
property.first;
219 variantManager->addProperty(
QVariant::String, QString::fromStdString(property.first));
221 appPropertyItem->
setAttribute(
"PossibleValues", valueList);
223 appPropertyItem->
setValue(QString::fromStdString(property.second));
224 appPropertyItem->
setStatusTip(QString::fromStdString(props->getDescription()));
225 if (property.second.compare(
"<set value!>") == 0 ||
226 property.second.compare(
"::_NOT_SET_::") == 0)
233 ui->propertyBrowser->addProperty(appTopItem);
234 ui->propertyBrowser->setRootIsDecorated(
false);
241 if (appInstance.get() ==
nullptr)
247 if (variantManager.get() ==
nullptr || variantFactory.get() ==
nullptr)
253 statusUpdateRelevant =
false;
256 const auto appConfigFile = appInstance->getConfigPath();
257 setWatcherPaths(fileSystemWatcher, appConfigFile);
259 if (appInstance->getStatus() ==
"Running")
261 ui->stateLabel->setStyleSheet(
"QLabel { color : green; }");
264 else if (appInstance->getStatus().compare(
"Stopped") == 0)
266 ui->stateLabel->setStyleSheet(
"QLabel { color : red; }");
268 else if (appInstance->getStatus().compare(
"Inactive") == 0)
270 ui->stateLabel->setStyleSheet(
"QLabel { color : gray; }");
274 ui->stateLabel->setStyleSheet(
"QLabel { color : black; }");
277 bool readOnly = appInstance->isReadOnly();
278 ui->linkedInfoLabel->setVisible(readOnly);
279 ui->linkedInfoLabel->setText(
"Linked Application - read only");
280 ui->linkedInfoLabel->setToolTip(
281 "The application's config file is a link to another file, making it read only");
282 ui->makeLocalButton->setVisible(readOnly);
283 ui->makeLocalButton->setToolTip(
"Replace the linked application with a local copy");
284 ui->addParameterButton->setEnabled(!readOnly);
286 std::string label = appInstance->getName();
290 label +=
" -> " + scenario;
292 if (package ==
"unknown")
294 tooltip =
"Could not determine original scenario for config '" +
295 std::string(std::filesystem::canonical(appInstance->getConfigPath())) +
"'";
299 tooltip =
"Original is in " +
300 (
package == "unknown" ? "unknown package" : "package " + package) +
301 ", scenario " + scenario;
303 ui->dataLabel->setToolTip(QString::fromStdString(tooltip));
305 ui->dataLabel->setText(QString::fromStdString(label));
307 lastAppInstance = appInstance;
311 lastScenarioItem = item;
314 if (lastAppInstance->getEnabled())
316 ui->startButton->setEnabled(
true);
317 ui->stopButton->setEnabled(
true);
318 ui->restartButton->setEnabled(
true);
322 ui->startButton->setEnabled(
false);
323 ui->stopButton->setEnabled(
false);
324 ui->restartButton->setEnabled(
false);
327 ui->addParameterButton->setMenu(
nullptr);
328 ui->toolButton->setEnabled(
true);
331 variantManager->clear();
333 ->setElementName(QString::fromStdString(appInstance->getName()));
334 ui->propertyBrowser->clear();
336 QtProperty* appInstanceTopItem = variantManager->addProperty(
339 if (!appInstance->isConfigWritable() || appInstance->isReadOnly())
346 nameItem->
setValue(QString::fromStdString(appInstance->getName()));
351 execPathItem->
setValue(QString::fromStdString(appInstance->getPathToExecutable()));
356 instanceNameItem->
setValue(QString::fromStdString(appInstance->getInstanceName()));
361 configPathItem->
setValue(QString::fromStdString(appInstance->getConfigPath()));
365 variantManager->addProperty(
QVariant::Int, QString(
"Pid (Stopped = -1)"));
366 pidItem->
setValue(appInstance->getPid());
372 enabledItem->
setValue(appInstance->getEnabled());
375 QtProperty* appPropertyTopItem = variantManager->addProperty(
381 Ice::PropertyDict dict = props->getProperties()->getPropertiesForPrefix(
"");
383 for (
auto const& property : dict)
385 if (property.first !=
"Ice.Config")
387 QStringList valueList;
388 if (props->hasDefinition(property.first))
391 props->getDefintion<std::string>(
property.first);
393 for (
auto& key : keys)
395 valueList << QString::fromStdString(key);
400 ARMARX_WARNING <<
"Could not find definition: " <<
property.first;
405 if (appInstance->isDefaultProperty(property.first))
409 QString::fromStdString(property.first));
412 QLatin1String(
"enabled"),
413 QVariant(appInstance->isDefaultPropertyEnabled(property.first)));
417 appPropertyItem = variantManager->addProperty(
420 appPropertyItem->
setValue(QString::fromStdString(property.second));
421 appPropertyItem->
setAttribute(QLatin1String(
"PossibleValues"), QVariant(valueList));
426 auto helpString = props->getDefintion<std::string>(
property.first)
427 .
toString(formatter, props->getValue(property.first));
429 QString result = QString::fromStdString(
"Current value: " + property.second +
430 "\n\n" + helpString);
433 catch (armarx::LocalException&)
438 appPropertyItem->
setAttribute(QLatin1String(
"readOnly"),
439 QVariant(appInstance->isReadOnly()));
445 QtProperty* appIcePropertyTopItem = variantManager->addProperty(
451 nodePropertyItem->
setValue(QString::fromStdString(appInstance->getNodeName()));
453 "Describes on which Node the current Application should be deployed on");
454 nodePropertyItem->
setAttribute(QLatin1String(
"readOnly"), QVariant(appInstance->isReadOnly()));
461 "Describes if Ice should automatically restart this Application");
462 iceAutoRestartItem->
setAttribute(
"enabled", QVariant(appInstance->isReadOnly()));
465 ui->propertyBrowser->addProperty(appInstanceTopItem);
466 ui->propertyBrowser->setRootIsDecorated(
false);
469 statusUpdateRelevant =
true;
475 if (scenario.get() ==
nullptr)
481 if (variantManager.get() ==
nullptr || variantFactory.get() ==
nullptr)
487 statusUpdateRelevant =
false;
490 const auto scenarioGlobalConfigFile = scenario->getGlobalConfigPath();
491 setWatcherPaths(fileSystemWatcher, scenarioGlobalConfigFile);
494 ui->dataLabel->setText(QString::fromStdString(scenario->getName()));
495 lastScenario = scenario;
497 lastScenarioItem =
nullptr;
499 QAction* addVariableToScenarioAction =
new QAction(
this);
501 icon.addFile(QString::fromUtf8(
":/icons/images/add.png"), QSize(), QIcon::Normal,
QIcon::Off);
502 addVariableToScenarioAction->setIcon(icon);
503 addVariableToScenarioAction->setIconVisibleInMenu(
true);
504 addVariableToScenarioAction->setText(
"Add Scenario Variable");
505 addVariableToScenarioAction->setToolTip(
"Add an Variable to the Scenario");
506 connect(addVariableToScenarioAction,
509 SLOT(on_addParameterButton_clicked()));
511 QAction* addVariableToIceAction =
new QAction(
this);
512 addVariableToIceAction->setIcon(icon);
513 addVariableToIceAction->setIconVisibleInMenu(
true);
514 addVariableToIceAction->setText(
"Add Ice Enviroment Variable");
515 addVariableToIceAction->setToolTip(
"Add an Ice Enviroment Variable to the Scenario");
516 connect(addVariableToIceAction, SIGNAL(triggered()),
this, SLOT(on_addIceEnvButton_clicked()));
518 QMenu* subMenu =
new QMenu(
this);
519 subMenu->addAction(addVariableToScenarioAction);
520 subMenu->addAction(addVariableToIceAction);
523 bool readOnly = scenario->isReadOnly();
524 ui->linkedInfoLabel->setVisible(readOnly);
525 ui->linkedInfoLabel->setText(
"Linked Scenario config - read only");
526 ui->linkedInfoLabel->setToolTip(
527 "The Secnario's global configuration is a link to another file, making it read only");
528 ui->makeLocalButton->setVisible(readOnly);
529 ui->makeLocalButton->setToolTip(
"Replace the linked global scenario configuration with a local "
530 "copy. Does not alter any applications.");
531 ui->addParameterButton->setEnabled(!readOnly);
533 std::string label = scenario->getName();
537 label +=
" -> " + origScenario;
539 if (package ==
"unknown")
541 tooltip =
"Could not determine original scenario for config '" +
542 std::string(std::filesystem::canonical(scenario->getGlobalConfigPath())) +
547 tooltip =
"Original is in " +
548 (
package == "unknown" ? "unknown package" : "package " + package) +
549 ", scenario " + origScenario;
551 ui->dataLabel->setToolTip(QString::fromStdString(tooltip));
553 ui->dataLabel->setText(QString::fromStdString(label));
556 ui->addParameterButton->setMenu(subMenu);
559 if (scenario->getStatus().compare(
"Running") == 0)
561 ui->stateLabel->setStyleSheet(
"QLabel { color : green; }");
564 else if (scenario->getStatus().compare(
"Stopped") == 0)
566 ui->stateLabel->setStyleSheet(
"QLabel { color : red; }");
568 else if (scenario->getStatus().compare(
"Inactive") == 0)
570 ui->stateLabel->setStyleSheet(
"QLabel { color : gray; }");
572 else if (scenario->getStatus().compare(
"Mixed") == 0)
574 ui->stateLabel->setStyleSheet(
"QLabel { color : darkYellow; }");
578 ui->stateLabel->setStyleSheet(
"QLabel { color : black; }");
582 ui->stateLabel->setText(QString::fromStdString(scenario->getStatus()));
584 ui->startButton->setEnabled(
true);
585 ui->restartButton->setEnabled(
true);
586 ui->stopButton->setEnabled(
true);
587 ui->toolButton->setEnabled(
true);
590 variantManager->clear();
592 ->setElementName(QString::fromStdString(scenario->getName()));
593 ui->propertyBrowser->clear();
595 QtProperty* scenarioTopItem = variantManager->addProperty(
597 if (!scenario->isScenarioFileWriteable() || scenario->isReadOnly())
603 nameItem->
setValue(QString::fromStdString(scenario->getName()));
608 scenarioPathItem->
setValue(QString::fromStdString(scenario->getPath()));
613 createdAtItem->
setValue(QString::fromStdString(scenario->getCreationTime()));
618 lastChangeItem->
setValue(QString::fromStdString(scenario->getLastChangedTime()));
621 QtProperty* scenarioPropertyTopItem = variantManager->addProperty(
624 if (!scenario->isGlobalConfigWritable())
631 Ice::PropertyDict dict = props->getProperties()->getPropertiesForPrefix(
"");
633 for (
auto const& property : dict)
635 if (property.first !=
"Ice.Config")
639 scenarioPropertyItem->
setValue(QString::fromStdString(property.second));
642 scenarioPropertyItem->
setToolTip(QString::fromStdString(
643 props->getDefintion<std::string>(property.first).getDescription()));
645 catch (armarx::LocalException&)
650 scenarioPropertyItem->
setAttribute(QLatin1String(
"readOnly"),
651 QVariant(scenario->isReadOnly()));
656 ui->propertyBrowser->addProperty(scenarioTopItem);
657 ui->propertyBrowser->setRootIsDecorated(
false);
660 statusUpdateRelevant =
true;
666 if (variantManager.get() ==
nullptr || variantFactory.get() ==
nullptr)
670 if (package ==
nullptr)
673 variantManager->clear();
674 ui->propertyBrowser->clear();
676 ui->startButton->setEnabled(
false);
677 ui->stopButton->setEnabled(
false);
678 ui->restartButton->setEnabled(
false);
679 ui->addParameterButton->setEnabled(
false);
680 ui->toolButton->setEnabled(
false);
681 ui->linkedInfoLabel->setVisible(
false);
682 ui->makeLocalButton->setVisible(
false);
686 statusUpdateRelevant =
false;
692 ui->dataLabel->setText(QString::fromStdString(package->getName()));
696 lastScenarioItem =
nullptr;
698 statusUpdateRelevant =
false;
700 ui->stateLabel->setStyleSheet(
"QLabel { color : black; }");
701 ui->stateLabel->setText(
"No Status");
703 ui->startButton->setEnabled(
false);
704 ui->stopButton->setEnabled(
false);
705 ui->restartButton->setEnabled(
false);
706 ui->addParameterButton->setEnabled(
false);
707 ui->addParameterButton->setMenu(
nullptr);
709 ui->toolButton->setEnabled(
false);
712 variantManager->clear();
714 ->setElementName(QString::fromStdString(package->getName()));
715 ui->propertyBrowser->clear();
717 QtProperty* packageTopItem = variantManager->addProperty(
723 nameItem->
setValue(QString::fromStdString(package->getName()));
728 packagePathItem->
setValue(QString::fromStdString(package->getPath()));
731 ui->propertyBrowser->addProperty(packageTopItem);
732 ui->propertyBrowser->setRootIsDecorated(
false);
736 DetailedApplicationView::show_or_hide_property(
QtProperty* prop,
bool visible)
738 for (
auto& item : ui->propertyBrowser->items(prop))
740 ui->propertyBrowser->setItemVisible(item, visible);
745 DetailedApplicationView::show_or_hide_subproperties(
QtProperty* parent_prop,
const QString& text)
747 if (parent_prop ==
nullptr)
752 bool active_subproperty =
false;
757 if (!ui->showInactiveProperties->isChecked())
763 this->show_or_hide_property(prop,
false);
768 if (prop->
propertyName().contains(text, Qt::CaseInsensitive) ||
769 prop->
valueText().contains(text, Qt::CaseInsensitive) || text ==
"")
771 this->show_or_hide_property(prop,
true);
772 active_subproperty =
true;
776 this->show_or_hide_property(prop,
false);
783 active_subproperty = this->show_or_hide_subproperties(prop, text) || active_subproperty;
786 if (active_subproperty)
788 this->show_or_hide_property(parent_prop,
true);
792 this->show_or_hide_property(parent_prop,
false);
794 return active_subproperty;
798 DetailedApplicationView::on_searchBar_textEdited(
const QString& text)
800 for (
auto prop : ui->propertyBrowser->properties())
802 this->show_or_hide_subproperties(prop, text);
807 DetailedApplicationView::on_showInactiveProperties_stateChanged(
int)
809 ARMARX_INFO <<
"Checkbox Statechanged with text " << ui->searchBar->text().toStdString();
810 this->on_searchBar_textEdited(ui->searchBar->text());
814 DetailedApplicationView::on_startButton_clicked()
820 DetailedApplicationView::on_stopButton_clicked()
826 DetailedApplicationView::on_restartButton_clicked()
832 DetailedApplicationView::on_addParameterButton_clicked()
838 DetailedApplicationView::on_toolButton_clicked()
846 if (statusUpdateRelevant)
848 QPalette stateLabelPallet;
849 if (lastAppInstance.get() !=
nullptr)
851 ui->stateLabel->setText(QString::fromStdString(lastAppInstance->getStatus()));
853 if (lastAppInstance->getStatus().compare(
"Running") == 0)
855 ui->stateLabel->setStyleSheet(
"QLabel { color : green; }");
858 else if (lastAppInstance->getStatus().compare(
"Stopped") == 0)
860 ui->stateLabel->setStyleSheet(
"QLabel { color : red; }");
864 ui->stateLabel->setStyleSheet(
"QLabel { color : black; }");
867 else if (lastScenario.get() !=
nullptr)
869 ui->stateLabel->setText(QString::fromStdString(lastScenario->getStatus()));
871 if (lastScenario->getStatus().compare(
"Running") == 0)
873 ui->stateLabel->setStyleSheet(
"QLabel { color : green; }");
876 else if (lastScenario->getStatus().compare(
"Stopped") == 0)
878 ui->stateLabel->setStyleSheet(
"QLabel { color : red; }");
880 else if (lastScenario->getStatus().compare(
"Mixed") == 0)
882 ui->stateLabel->setStyleSheet(
"QLabel { color : darkYellow; }");
886 ui->stateLabel->setStyleSheet(
"QLabel { color : black; }");
889 ui->stateLabel->setAutoFillBackground(
true);
890 ui->stateLabel->setPalette(stateLabelPallet);
895 DetailedApplicationView::itemChanged(
QtProperty* property,
const QVariant&
value)
897 if (statusUpdateRelevant)
899 if (lastAppInstance.get() !=
nullptr)
906 property->
propertyName().compare(
"Executable Path") == 0 ||
908 property->
propertyName().compare(
"Pid (Stopped = -1)") == 0 ||
909 property->
propertyName().compare(
"Scenario Path") == 0 ||
911 property->
propertyName().compare(
"Package Path") == 0 ||
912 property->
propertyName().compare(
"Last Change At") == 0 ||
913 property->
propertyName().compare(
"Default Properties") == 0)
918 if (property->
propertyName().compare(
"Instance Name") == 0 &&
919 lastAppInstance->getInstanceName().compare(
value.toString().toStdString()))
921 lastAppInstance->setInstanceName(
value.toString().toStdString());
925 else if (property->
propertyName().compare(
"Instance Name") &&
930 lastAppInstance->setEnabled(
true);
931 ui->startButton->setEnabled(
true);
932 ui->stopButton->setEnabled(
true);
933 ui->restartButton->setEnabled(
true);
934 if (lastScenarioItem !=
nullptr)
941 lastAppInstance->setEnabled(
false);
942 ui->startButton->setEnabled(
false);
943 ui->stopButton->setEnabled(
false);
944 ui->restartButton->setEnabled(
false);
945 if (lastScenarioItem !=
nullptr)
952 else if (property->
propertyName().compare(
"Instance Name") &&
953 properties->getProperty(property->
propertyName().toStdString())
954 .compare(
value.toString().toStdString()))
956 lastAppInstance->modifyProperty(property->
propertyName().toStdString(),
958 if (
value.toString().compare(
"<set value!>") &&
959 value.toString().compare(
"::NOT_DEFINED::") &&
960 value.toString().compare(
"::_NOT_SET_::"))
962 lastAppInstance->setDefaultPropertyEnabled(
964 variantManager->setAttribute(property, QLatin1String(
"enabled"),
true);
970 else if (lastScenario.get() !=
nullptr)
977 property->
propertyName().compare(
"Scenario Path") == 0 ||
979 property->
propertyName().compare(
"Package Path") == 0 ||
980 property->
propertyName().compare(
"Last Change At") == 0 ||
981 property->
propertyName().compare(
"Default Properties") == 0)
985 else if (properties->getProperty(property->
propertyName().toStdString()) !=
"" &&
986 properties->getProperty(property->
propertyName().toStdString())
987 .compare(
value.toString().toStdString()))
989 lastScenario->getGlobalConfig()->defineOptionalProperty<std::string>(
990 property->propertyName().toStdString(),
"::NOT_DEFINED::",
"Custom Property");
991 lastScenario->getGlobalConfig()->getProperties()->setProperty(
992 property->
propertyName().toStdString(),
property->valueText().toStdString());
1001 DetailedApplicationView::itemAttributeChanged(
QtProperty* property,
1002 const QString& attribute,
1003 const QVariant& val)
1005 if (statusUpdateRelevant)
1007 if (lastAppInstance.get() !=
nullptr && attribute.compare(QLatin1String(
"enabled")) == 0)
1009 lastAppInstance->setDefaultPropertyEnabled(property->
propertyName().toStdString(),
1018 properties->getDefintion<std::string>(
property->propertyName().toStdString());
1022 properties->getProperties()->setProperty(property->
propertyName().toStdString(),
1024 internalManager->
setValue(property,
"::_NOT_SET_::");
1028 properties->getProperties()->setProperty(property->
propertyName().toStdString(),
1030 internalManager->
setValue(property,
1041 DetailedApplicationView::on_fileUpdate()
1043 if (lastAppInstance.get() !=
nullptr)
1046 if (lastAppInstance->isConfigWritable())
1048 lastAppInstance->resetConfigPath();
1049 lastAppInstance->save();
1053 ignoreFileChanges =
true;
1055 ignoreFileChanges =
false;
1057 else if (lastScenario.get() !=
nullptr)
1059 if (lastScenario->isScenarioFileWriteable())
1061 lastScenario->save();
1067 DetailedApplicationView::on_reloadButton_clicked()
1069 if (statusUpdateRelevant)
1071 if (lastAppInstance.get() !=
nullptr)
1073 lastAppInstance->load();
1076 else if (lastScenario.get() !=
nullptr)
1078 lastScenario->reloadGlobalConf();
1085 DetailedApplicationView::on_makeLocalButton_clicked()
1087 if (lastAppInstance)
1089 lastAppInstance->makeLocal();
1092 else if (lastScenario)
1094 lastScenario->makeLocalGlobalConfig();
1100 DetailedApplicationView::on_fileWatcherUpdate(
const QString& path)
1102 if (ignoreFileChanges)
1104 ARMARX_VERBOSE <<
"Ignoring file change from: " << path.toStdString();
1108 ARMARX_VERBOSE <<
"File changed: " << path.toStdString() <<
" -> reloading config";
1110 if (lastAppInstance.get() !=
nullptr)
1112 lastAppInstance->load();
1115 else if (lastScenario.get() !=
nullptr)
1117 lastScenario->reloadGlobalConf();