diff --git a/GUI/coregui/Models/ParameterTreeUtils.cpp b/GUI/coregui/Models/ParameterTreeUtils.cpp index 06cfe5bb42a89663c087e4eb1eb31522f2abb54f..4d1284b62cde0c56c98118306a889f4f02b79438 100644 --- a/GUI/coregui/Models/ParameterTreeUtils.cpp +++ b/GUI/coregui/Models/ParameterTreeUtils.cpp @@ -50,7 +50,8 @@ void ParameterTreeUtils::createParameterTree(JobItem* jobItem) //! Populates ParameterContainer with ParameterItem's corresponding to all properties found //! in a source item. -void ParameterTreeUtils::populateParameterContainer(SessionItem* container, const SessionItem* source) +void ParameterTreeUtils::populateParameterContainer(SessionItem* container, + const SessionItem* source) { if(container->modelType() != Constants::ParameterContainerType) throw GUIHelpers::Error("ParameterTreeUtils::populateParameterContainer() -> Error. " @@ -61,14 +62,11 @@ void ParameterTreeUtils::populateParameterContainer(SessionItem* container, cons handleItem(sourceLabel, source); } -//! For every ParameterItem in a container creates a link to the domain. +//! Visit all ParameterItem in container and execute user function. -void ParameterTreeUtils::populateDomainLinks(SessionItem* container) +void ParameterTreeUtils::visitParameterContainer(SessionItem* container, + std::function<void(ParameterItem*)> fun) { - if(container->modelType() != Constants::ParameterContainerType) - throw GUIHelpers::Error("ParameterTreeUtils::populateParameterContainer() -> Error. " - "Not a ParameterContainerType."); - SessionItem* current(container); QStack<SessionItem*> stack; stack.push(current); @@ -76,19 +74,31 @@ void ParameterTreeUtils::populateDomainLinks(SessionItem* container) current = stack.pop(); if (current->modelType() == Constants::ParameterLabelType || current->modelType() == Constants::ParameterContainerType) { - for (SessionItem* child : current->getItems()) { + for (SessionItem* child : current->getItems()) stack.push(child); - } } else { - if (ParameterItem* parItem = dynamic_cast<ParameterItem*>(current)) { - QString translation - = "*/" + ModelPath::itemPathTranslation(*parItem->linkedItem(), container); - parItem->setItemValue(ParameterItem::P_DOMAIN, translation); - } + if (ParameterItem* parItem = dynamic_cast<ParameterItem*>(current)) + fun(parItem); } } } +//! For every ParameterItem in a container creates a link to the domain. + +void ParameterTreeUtils::populateDomainLinks(SessionItem* container) +{ + if(container->modelType() != Constants::ParameterContainerType) + throw GUIHelpers::Error("ParameterTreeUtils::populateParameterContainer() -> Error. " + "Not a ParameterContainerType."); + + visitParameterContainer(container, [container](ParameterItem* parItem) + { + QString translation = "*/" + ModelPath::itemPathTranslation(*parItem->linkedItem(), + container->parent()); + parItem->setItemValue(ParameterItem::P_DOMAIN, translation); + }); +} + namespace { void handleItem(SessionItem* tree, const SessionItem* source) @@ -151,3 +161,4 @@ void handleItem(SessionItem* tree, const SessionItem* source) } // namespace + diff --git a/GUI/coregui/Models/ParameterTreeUtils.h b/GUI/coregui/Models/ParameterTreeUtils.h index 799de376a2c201668ed423f66c05638cb399b90b..22520fced6b09661a21ecbb8c1212aa363728ef4 100644 --- a/GUI/coregui/Models/ParameterTreeUtils.h +++ b/GUI/coregui/Models/ParameterTreeUtils.h @@ -18,10 +18,12 @@ #define PARAMETERTREEUTILS_H #include "WinDllMacros.h" +#include <functional> #include <QString> class JobItem; class SessionItem; +class ParameterItem; //! The ParameterTreeBuilder namespace contains helper functions to create container //! with ParameterItems. The ParameterItem appears in RealTimeView and provides real @@ -34,6 +36,9 @@ BA_CORE_API_ void createParameterTree(JobItem* jobItem); BA_CORE_API_ void populateParameterContainer(SessionItem* container, const SessionItem* source); +BA_CORE_API_ void visitParameterContainer(SessionItem* container, + std::function<void(ParameterItem*)> fun); + BA_CORE_API_ void populateDomainLinks(SessionItem* container); } diff --git a/Tests/Functional/GUI/GUITranslationTest/GUITranslationTest.cpp b/Tests/Functional/GUI/GUITranslationTest/GUITranslationTest.cpp index 916d88417c70f57ed1066a0db8b2761e85111bcd..64c7b07c8afe93fb9d3509047ddc38b15b0575ab 100644 --- a/Tests/Functional/GUI/GUITranslationTest/GUITranslationTest.cpp +++ b/Tests/Functional/GUI/GUITranslationTest/GUITranslationTest.cpp @@ -89,40 +89,24 @@ void GUITranslationTest::processParameterTree() 0, m_models->documentModel()->getSimulationOptionsItem()); - ParameterTreeUtils::populateDomainLinks(jobItem->parameterContainerItem()); + SessionItem *container = jobItem->parameterContainerItem(); - SessionItem *current = jobItem->getItem(JobItem::T_PARAMETER_TREE); + ParameterTreeUtils::visitParameterContainer(container, [&](ParameterItem *parItem){ + if(parItem->isFittable()) { + std::string sampleParLink = + parItem->getItemValue(ParameterItem::P_LINK).toString().toStdString(); - QStack<SessionItem *> stack; - stack.push(current); - while (!stack.empty()) { - current = stack.pop(); - if (current->modelType() == Constants::ParameterLabelType - || current->modelType() == Constants::ParameterContainerType) { - for (SessionItem *child : current->getItems()) - stack.push(child); + std::string parPath = FitParameterHelper::getParameterItemPath(parItem).toStdString(); - } else { - if (ParameterItem *parItem = dynamic_cast<ParameterItem *>(current)) { - if(parItem->isFittable()) { - std::string sampleParLink = - parItem->getItemValue(ParameterItem::P_LINK).toString().toStdString(); + std::string domainName = std::string("*") + + parItem->getItemValue(ParameterItem::P_DOMAIN).toString().toStdString(); - std::string parPath = FitParameterHelper::getParameterItemPath(parItem).toStdString(); + QString translation = ModelPath::itemPathTranslation(*parItem->linkedItem(), jobItem); + domainName = std::string("*/") + translation.toStdString(); - std::string domainName = std::string("*") + - parItem->getItemValue(ParameterItem::P_DOMAIN).toString().toStdString(); - - // new way of translating - QString translation = ModelPath::itemPathTranslation(*parItem->linkedItem(), jobItem); - domainName = std::string("*/") + translation.toStdString(); - - m_translations.push_back({sampleParLink, parPath, domainName}); - } - } + m_translations.push_back({sampleParLink, parPath, domainName}); } - } - + }); } //! Returns multiline string representing results of translation