From 4a55ff40cc486ca9df88c38ffe0e1aff83526611 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Thu, 2 Feb 2017 16:00:27 +0100 Subject: [PATCH] ParameterTreeBuilder turned from static class to namespace. --- GUI/coregui/Models/ParameterTreeBuilder.cpp | 135 +++++++------------- GUI/coregui/Models/ParameterTreeBuilder.h | 23 ++-- 2 files changed, 56 insertions(+), 102 deletions(-) diff --git a/GUI/coregui/Models/ParameterTreeBuilder.cpp b/GUI/coregui/Models/ParameterTreeBuilder.cpp index 350910a548b..66ec9b93288 100644 --- a/GUI/coregui/Models/ParameterTreeBuilder.cpp +++ b/GUI/coregui/Models/ParameterTreeBuilder.cpp @@ -3,7 +3,7 @@ // BornAgain: simulate and fit scattering at grazing incidence // //! @file GUI/coregui/Models/ParameterTreeBuilder.cpp -//! @brief Implements class ParameterTreeBuilder +//! @brief Implements ParameterTreeBuilder namespace //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) @@ -25,74 +25,58 @@ #include "ScientificDoubleProperty.h" #include <QStack> -namespace -{ -int copyNumberOfChild(const SessionItem* parent, const SessionItem* item) -{ - if (!item) - return -1; - int result = -1; - int count = 0; - QString itemName = item->displayName(); - // check child items: - for (auto p_child_item : parent->childItems()) { - QString childName = p_child_item->displayName(); - if (p_child_item == item) - result = count; - if (childName == itemName) - ++count; - } - if (count > 1) - return result; - return -1; -} - -void fixDisplayName(SessionItem *parent) { - QVector<int> copyNumber; - for (SessionItem *child : parent->childItems()) { - copyNumber.push_back(copyNumberOfChild(parent, child)); - } - - int index(0); - for (SessionItem *child : parent->childItems()) { - if(copyNumber[index] >= 0) - child->setDisplayName( child->displayName() + QString::number(copyNumber[index])); - ++index; - } - - for (SessionItem *child : parent->childItems()) { - fixDisplayName(child); - } - +namespace { + void handleItem(SessionItem* tree, SessionItem* source); } -} - -void ParameterTreeBuilder::createParameterTree(JobItem *item, const QString &tag) +void ParameterTreeBuilder::createParameterTree(JobItem* item, const QString& tag) { - SessionItem *container + SessionItem* container = item->model()->insertNewItem(Constants::ParameterContainerType, item->index(), -1, tag); - SessionItem *multiLayer + SessionItem* multiLayer = container->model()->insertNewItem(Constants::ParameterLabelType, container->index()); handleItem(multiLayer, item->getItem(JobItem::T_SAMPLE)); - SessionItem *instrument + SessionItem* instrument = container->model()->insertNewItem(Constants::ParameterLabelType, container->index()); handleItem(instrument, item->getItem(JobItem::T_INSTRUMENT)); -// fixDisplayName(container); - #ifndef NDEBUG // Provides all items in "JobItem/Parameter Tree Container" with domain links already // at the stage of ParameterTree creation. It is necessary for validation, in Release mode // it will lead for unnecessary large project files. - populateDomainLinks(item, tag); + ParameterTreeBuilder::populateDomainLinks(item, tag); #endif +} +//! For every ParameterItem in JobItem's ParameterTree container creates a link to domain. + +void ParameterTreeBuilder::populateDomainLinks(JobItem* jobItem, const QString& tag) +{ + SessionItem* current = jobItem->getItem(tag); // this is container + 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); + } + } else { + if (ParameterItem* parItem = dynamic_cast<ParameterItem*>(current)) { + QString translation + = "*/" + ModelPath::itemPathTranslation(*parItem->linkedItem(), jobItem); + parItem->setItemValue(ParameterItem::P_DOMAIN, translation); + } + } + } } -void ParameterTreeBuilder::handleItem(SessionItem *tree, SessionItem *source) +namespace { + +void handleItem(SessionItem* tree, SessionItem* source) { if (tree->modelType() == Constants::ParameterLabelType) { tree->setDisplayName(source->itemName()); @@ -103,16 +87,16 @@ void ParameterTreeBuilder::handleItem(SessionItem *tree, SessionItem *source) tree->setDisplayName(source->itemName()); double sourceValue = source->value().toDouble(); - if(source->value().typeName() == Constants::ScientificDoublePropertyType) { + if (source->value().typeName() == Constants::ScientificDoublePropertyType) { ScientificDoubleProperty intensity = source->value().value<ScientificDoubleProperty>(); - sourceValue=intensity.getValue(); + sourceValue = intensity.getValue(); } tree->setValue(QVariant(sourceValue)); QString path = ModelPath::getPathFromIndex(source->index()); int firstSlash = path.indexOf('/'); path = path.mid(firstSlash + 1); - tree->setItemValue(ParameterItem::P_LINK, path); + tree->setItemValue(ParameterItem::P_LINK, path); tree->setItemValue(ParameterItem::P_BACKUP, sourceValue); return; } @@ -121,31 +105,28 @@ void ParameterTreeBuilder::handleItem(SessionItem *tree, SessionItem *source) return; } - for (SessionItem *child : source->childItems()) { + for (SessionItem* child : source->childItems()) { if (child->isVisible() && child->isEnabled()) { if (child->modelType() == Constants::PropertyType) { if (child->value().type() == QVariant::Double) { - SessionItem *branch + SessionItem* branch = tree->model()->insertNewItem(Constants::ParameterType, tree->index()); handleItem(branch, child); - } - else if (child->value().typeName() == Constants::ScientificDoublePropertyType) { - SessionItem *branch + } else if (child->value().typeName() == Constants::ScientificDoublePropertyType) { + SessionItem* branch = tree->model()->insertNewItem(Constants::ParameterType, tree->index()); handleItem(branch, child); - } } else if (child->modelType() == Constants::GroupItemType) { - SessionItem *currentItem - = dynamic_cast<GroupItem *>(child)->currentItem(); + SessionItem* currentItem = dynamic_cast<GroupItem*>(child)->currentItem(); if (currentItem && currentItem->rowCount() > 0) { - SessionItem *branch = tree->model()->insertNewItem( + SessionItem* branch = tree->model()->insertNewItem( Constants::ParameterLabelType, tree->index()); handleItem(branch, currentItem); } } else { - SessionItem *branch + SessionItem* branch = tree->model()->insertNewItem(Constants::ParameterLabelType, tree->index()); handleItem(branch, child); } @@ -153,30 +134,4 @@ void ParameterTreeBuilder::handleItem(SessionItem *tree, SessionItem *source) } } -//! For every ParameterItem in JobItem's ParameterTree container creates a link to domain. -void ParameterTreeBuilder::populateDomainLinks(JobItem *jobItem, const QString &tag) -{ - SessionItem *current = jobItem->getItem(tag); // this is container - 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); - } - } else { - if (ParameterItem *parItem = dynamic_cast<ParameterItem *>(current)) { -// QString parItemPath = FitParameterHelper::getParameterItemPath(parItem); -// std::string domainPath = ModelPath::translateParameterName( -// jobItem, parItemPath); -// parItem->setItemValue(ParameterItem::P_DOMAIN, QString::fromStdString(domainPath)); - - // new way of translating - QString translation = "*/" + ModelPath::itemPathTranslation(*parItem->linkedItem(), jobItem); - parItem->setItemValue(ParameterItem::P_DOMAIN, translation); - } - } - } -} +} // namespace diff --git a/GUI/coregui/Models/ParameterTreeBuilder.h b/GUI/coregui/Models/ParameterTreeBuilder.h index 3d1a7af534a..3e70dc72367 100644 --- a/GUI/coregui/Models/ParameterTreeBuilder.h +++ b/GUI/coregui/Models/ParameterTreeBuilder.h @@ -3,7 +3,7 @@ // BornAgain: simulate and fit scattering at grazing incidence // //! @file GUI/coregui/Models/ParameterTreeBuilder.h -//! @brief Defines class ParameterTreeBuilder +//! @brief Defines ParameterTreeBuilder namespace //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) @@ -17,23 +17,22 @@ #ifndef PARAMETERTREEBUILDER_H #define PARAMETERTREEBUILDER_H -#include <QString> #include "WinDllMacros.h" +#include <QString> class JobItem; class SessionItem; -//! The ParameterTreeBuilder class helps JobModel to create a container with ParameterItem's. -//! The ParameterItem appears in RealTimeView and provides real time tuning of MultiLayerItem -//! and InstrumentItem. +//! The ParameterTreeBuilder namespace contains helper functions to create container +//! with ParameterItems. The ParameterItem appears in RealTimeView and provides real +//! time tuning of MultiLayerItem and InstrumentItem. -class BA_CORE_API_ ParameterTreeBuilder +namespace ParameterTreeBuilder { -public: - static void createParameterTree(JobItem *item, const QString &tag = QString()); - static void populateDomainLinks(JobItem *jobItem, const QString &tag); -private: - static void handleItem(SessionItem *tree, SessionItem *source); -}; + +BA_CORE_API_ void createParameterTree(JobItem* item, const QString& tag = QString()); +BA_CORE_API_ void populateDomainLinks(JobItem* jobItem, const QString& tag); + +} #endif // PARAMETERTREEBUILDER_H -- GitLab