Skip to content
Snippets Groups Projects
Commit 2e049db2 authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

Lamba-visitor for ParameterItem container.

parent f35a9f9a
No related branches found
No related tags found
No related merge requests found
...@@ -50,7 +50,8 @@ void ParameterTreeUtils::createParameterTree(JobItem* jobItem) ...@@ -50,7 +50,8 @@ void ParameterTreeUtils::createParameterTree(JobItem* jobItem)
//! Populates ParameterContainer with ParameterItem's corresponding to all properties found //! Populates ParameterContainer with ParameterItem's corresponding to all properties found
//! in a source item. //! 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) if(container->modelType() != Constants::ParameterContainerType)
throw GUIHelpers::Error("ParameterTreeUtils::populateParameterContainer() -> Error. " throw GUIHelpers::Error("ParameterTreeUtils::populateParameterContainer() -> Error. "
...@@ -61,14 +62,11 @@ void ParameterTreeUtils::populateParameterContainer(SessionItem* container, cons ...@@ -61,14 +62,11 @@ void ParameterTreeUtils::populateParameterContainer(SessionItem* container, cons
handleItem(sourceLabel, source); 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); SessionItem* current(container);
QStack<SessionItem*> stack; QStack<SessionItem*> stack;
stack.push(current); stack.push(current);
...@@ -76,19 +74,31 @@ void ParameterTreeUtils::populateDomainLinks(SessionItem* container) ...@@ -76,19 +74,31 @@ void ParameterTreeUtils::populateDomainLinks(SessionItem* container)
current = stack.pop(); current = stack.pop();
if (current->modelType() == Constants::ParameterLabelType if (current->modelType() == Constants::ParameterLabelType
|| current->modelType() == Constants::ParameterContainerType) { || current->modelType() == Constants::ParameterContainerType) {
for (SessionItem* child : current->getItems()) { for (SessionItem* child : current->getItems())
stack.push(child); stack.push(child);
}
} else { } else {
if (ParameterItem* parItem = dynamic_cast<ParameterItem*>(current)) { if (ParameterItem* parItem = dynamic_cast<ParameterItem*>(current))
QString translation fun(parItem);
= "*/" + ModelPath::itemPathTranslation(*parItem->linkedItem(), container);
parItem->setItemValue(ParameterItem::P_DOMAIN, translation);
}
} }
} }
} }
//! 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 { namespace {
void handleItem(SessionItem* tree, const SessionItem* source) void handleItem(SessionItem* tree, const SessionItem* source)
...@@ -151,3 +161,4 @@ void handleItem(SessionItem* tree, const SessionItem* source) ...@@ -151,3 +161,4 @@ void handleItem(SessionItem* tree, const SessionItem* source)
} // namespace } // namespace
...@@ -18,10 +18,12 @@ ...@@ -18,10 +18,12 @@
#define PARAMETERTREEUTILS_H #define PARAMETERTREEUTILS_H
#include "WinDllMacros.h" #include "WinDllMacros.h"
#include <functional>
#include <QString> #include <QString>
class JobItem; class JobItem;
class SessionItem; class SessionItem;
class ParameterItem;
//! The ParameterTreeBuilder namespace contains helper functions to create container //! The ParameterTreeBuilder namespace contains helper functions to create container
//! with ParameterItems. The ParameterItem appears in RealTimeView and provides real //! with ParameterItems. The ParameterItem appears in RealTimeView and provides real
...@@ -34,6 +36,9 @@ BA_CORE_API_ void createParameterTree(JobItem* jobItem); ...@@ -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 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); BA_CORE_API_ void populateDomainLinks(SessionItem* container);
} }
......
...@@ -89,40 +89,24 @@ void GUITranslationTest::processParameterTree() ...@@ -89,40 +89,24 @@ void GUITranslationTest::processParameterTree()
0, 0,
m_models->documentModel()->getSimulationOptionsItem()); 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; std::string parPath = FitParameterHelper::getParameterItemPath(parItem).toStdString();
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);
} else { std::string domainName = std::string("*") +
if (ParameterItem *parItem = dynamic_cast<ParameterItem *>(current)) { parItem->getItemValue(ParameterItem::P_DOMAIN).toString().toStdString();
if(parItem->isFittable()) {
std::string sampleParLink =
parItem->getItemValue(ParameterItem::P_LINK).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("*") + m_translations.push_back({sampleParLink, parPath, domainName});
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});
}
}
} }
} });
} }
//! Returns multiline string representing results of translation //! Returns multiline string representing results of translation
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment