From af53853c21dbb92a0cb0dc04c6bd7e7e2e237254 Mon Sep 17 00:00:00 2001
From: Matthias Puchner <github@mpuchner.de>
Date: Fri, 16 Apr 2021 14:32:34 +0200
Subject: [PATCH] rm obsolete path translations GUI <-> domain

last user of this has been ParticleDistribution, which was removed in the last commits
---
 GUI/coregui/Models/GroupItem.cpp          |   6 -
 GUI/coregui/Models/GroupItem.h            |   2 -
 GUI/coregui/Models/InstrumentItems.cpp    |  15 --
 GUI/coregui/Models/InstrumentItems.h      |   2 -
 GUI/coregui/Models/MesoCrystalItem.cpp    |  16 --
 GUI/coregui/Models/MesoCrystalItem.h      |   2 -
 GUI/coregui/Models/ModelPath.cpp          |  13 --
 GUI/coregui/Models/ModelPath.h            |   1 -
 GUI/coregui/Models/ParameterTreeUtils.cpp | 194 +++-------------------
 GUI/coregui/Models/ParameterTreeUtils.h   |  16 --
 GUI/coregui/Models/SessionItem.cpp        |  10 --
 GUI/coregui/Models/SessionItem.h          |   3 +-
 12 files changed, 27 insertions(+), 253 deletions(-)

diff --git a/GUI/coregui/Models/GroupItem.cpp b/GUI/coregui/Models/GroupItem.cpp
index 99ab76fbb32..e57588e891a 100644
--- a/GUI/coregui/Models/GroupItem.cpp
+++ b/GUI/coregui/Models/GroupItem.cpp
@@ -55,12 +55,6 @@ SessionItem* GroupItem::setCurrentType(const QString& modelType)
     return currentItem();
 }
 
-QStringList GroupItem::translateList(const QStringList& list) const
-{
-    // we do not add here the name of itself
-    return list;
-}
-
 SessionItem* GroupItem::getItemOfType(const QString& type)
 {
     return m_controller->getItemOfType(type);
diff --git a/GUI/coregui/Models/GroupItem.h b/GUI/coregui/Models/GroupItem.h
index a4224c2430c..6673c31d9ba 100644
--- a/GUI/coregui/Models/GroupItem.h
+++ b/GUI/coregui/Models/GroupItem.h
@@ -35,8 +35,6 @@ public:
 
     SessionItem* setCurrentType(const QString& modelType);
 
-    QStringList translateList(const QStringList& list) const;
-
     SessionItem* getItemOfType(const QString& type);
 
 private:
diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp
index 21227971ef8..eff5510fdae 100644
--- a/GUI/coregui/Models/InstrumentItems.cpp
+++ b/GUI/coregui/Models/InstrumentItems.cpp
@@ -64,21 +64,6 @@ const QString InstrumentItem::P_IDENTIFIER = "Identifier";
 const QString InstrumentItem::P_BEAM = "Beam";
 const QString InstrumentItem::P_BACKGROUND = "Background";
 
-QStringList InstrumentItem::translateList(const QStringList& list) const
-{
-    QStringList result;
-    if (list.back().endsWith(P_BACKGROUND) && list.size() == 2) {
-        result << list[0] << list[1];
-    } else {
-        result = SessionItem::translateList(list);
-        if (instrument_names.contains(result.back())) {
-            result.removeLast();
-            result << "Instrument";
-        }
-    }
-    return result;
-}
-
 QString InstrumentItem::id() const
 {
     return getItemValue(P_IDENTIFIER).toString();
diff --git a/GUI/coregui/Models/InstrumentItems.h b/GUI/coregui/Models/InstrumentItems.h
index 2a1f2f6533e..4a90513c2ac 100644
--- a/GUI/coregui/Models/InstrumentItems.h
+++ b/GUI/coregui/Models/InstrumentItems.h
@@ -40,8 +40,6 @@ public:
 public:
     InstrumentItem() = delete;
 
-    QStringList translateList(const QStringList& list) const override;
-
     QString id() const;
     void setId(const QString& id);
 
diff --git a/GUI/coregui/Models/MesoCrystalItem.cpp b/GUI/coregui/Models/MesoCrystalItem.cpp
index fb559782eac..7029829152e 100644
--- a/GUI/coregui/Models/MesoCrystalItem.cpp
+++ b/GUI/coregui/Models/MesoCrystalItem.cpp
@@ -46,12 +46,6 @@ const QString density_tooltip =
     "Number of mesocrystals per square nanometer (particle surface density).\n "
     "Should be defined for disordered and 1d-ordered particle collections.";
 
-bool IsIParticleName(QString name)
-{
-    return (name.startsWith("Particle") || name.startsWith("ParticleComposition")
-            || name.startsWith("ParticleCoreShell") || name.startsWith("MesoCrystal"));
-}
-
 } // namespace
 
 const QString MesoCrystalItem::P_OUTER_SHAPE = "Outer Shape";
@@ -133,16 +127,6 @@ std::unique_ptr<MesoCrystal> MesoCrystalItem::createMesoCrystal() const
     return result;
 }
 
-QStringList MesoCrystalItem::translateList(const QStringList& list) const
-{
-    QStringList result = list;
-    // Add CrystalType to path name of basis particle
-    if (IsIParticleName(list.back()))
-        result << QString::fromStdString("Crystal");    // this result is overwritten in any case with the next line
-    result = SessionItem::translateList(result);
-    return result;
-}
-
 Lattice3D MesoCrystalItem::getLattice() const
 {
     const kvector_t a1 = item<VectorItem>(P_VECTOR_A)->getVector();
diff --git a/GUI/coregui/Models/MesoCrystalItem.h b/GUI/coregui/Models/MesoCrystalItem.h
index dfd1de7b082..bf8da62babc 100644
--- a/GUI/coregui/Models/MesoCrystalItem.h
+++ b/GUI/coregui/Models/MesoCrystalItem.h
@@ -37,8 +37,6 @@ public:
 
     std::unique_ptr<MesoCrystal> createMesoCrystal() const;
 
-    QStringList translateList(const QStringList& list) const override;
-
     Lattice3D getLattice() const;
     std::unique_ptr<IParticle> getBasis() const;
     std::unique_ptr<IFormFactor> getOuterShape() const;
diff --git a/GUI/coregui/Models/ModelPath.cpp b/GUI/coregui/Models/ModelPath.cpp
index 65ecd90c0f1..8bb1a1280f4 100644
--- a/GUI/coregui/Models/ModelPath.cpp
+++ b/GUI/coregui/Models/ModelPath.cpp
@@ -93,16 +93,3 @@ const SessionItem* ModelPath::ancestor(const SessionItem* item, const QString& r
     return cur;
 }
 
-//! Returns translation of item path to domain name
-
-QString ModelPath::itemPathTranslation(const SessionItem& item, const SessionItem* topItem)
-{
-    QStringList pathList;
-    const SessionItem* current(&item);
-    while (current && current != topItem) {
-        pathList = current->translateList(pathList);
-        current = current->parent();
-    }
-    std::reverse(pathList.begin(), pathList.end());
-    return pathList.join("/");
-}
diff --git a/GUI/coregui/Models/ModelPath.h b/GUI/coregui/Models/ModelPath.h
index 0819235054e..0f52bb8c0d8 100644
--- a/GUI/coregui/Models/ModelPath.h
+++ b/GUI/coregui/Models/ModelPath.h
@@ -34,7 +34,6 @@ bool isValidItem(SessionModel* model, SessionItem* item, const QModelIndex& pare
 
 const SessionItem* ancestor(const SessionItem* item, const QString& requiredModelType);
 
-QString itemPathTranslation(const SessionItem& item, const SessionItem* topItem = 0);
 } // namespace ModelPath
 
 #endif // BORNAGAIN_GUI_COREGUI_MODELS_MODELPATH_H
diff --git a/GUI/coregui/Models/ParameterTreeUtils.cpp b/GUI/coregui/Models/ParameterTreeUtils.cpp
index 6976c674845..9b6a1cb8fd9 100644
--- a/GUI/coregui/Models/ParameterTreeUtils.cpp
+++ b/GUI/coregui/Models/ParameterTreeUtils.cpp
@@ -25,176 +25,10 @@
 
 namespace {
 
-QString removeLeadingSlash(const QString& name)
-{
-    return name.indexOf('/') == 0 ? name.mid(1) : name;
-}
-
-void handleItem(SessionItem* tree, const SessionItem* source);
-
-} // namespace
-
-void ParameterTreeUtils::createParameterTree(JobItem* jobItem)
-{
-    auto container = jobItem->model()->insertItem<ParameterContainerItem>(
-        jobItem, -1, JobItem::T_PARAMETER_TREE);
-
-    populateParameterContainer(container, jobItem->getItem(JobItem::T_MATERIAL_CONTAINER));
-
-    populateParameterContainer(container, jobItem->getItem(JobItem::T_SAMPLE));
-
-    populateParameterContainer(container, jobItem->getItem(JobItem::T_INSTRUMENT));
-}
-
-//! Populates ParameterContainer with ParameterItem's corresponding to all properties found
-//! in a source item.
-
-void ParameterTreeUtils::populateParameterContainer(SessionItem* container,
-                                                    const SessionItem* source)
-{
-    if (container->modelType() != "Parameter Container")
-        throw GUIHelpers::Error("ParameterTreeUtils::populateParameterContainer() -> Error. "
-                                "Not a ParameterContainerType.");
-
-    auto sourceLabel = container->model()->insertItem<ParameterLabelItem>(container);
-    handleItem(sourceLabel, source);
-}
-
-//! Visit all ParameterItem in container and execute user function.
-
-void ParameterTreeUtils::visitParameterContainer(SessionItem* container,
-                                                 std::function<void(ParameterItem*)> fun)
-{
-    SessionItem* current(container);
-    QStack<SessionItem*> stack;
-    stack.push(current);
-    while (!stack.empty()) {
-        current = stack.pop();
-        if (current->modelType() == "Parameter Label"
-            || current->modelType() == "Parameter Container") {
-            for (SessionItem* child : current->getItems())
-                stack.push(child);
-        } else {
-            if (ParameterItem* parItem = dynamic_cast<ParameterItem*>(current))
-                fun(parItem);
-        }
-    }
-}
-
-//! Creates list with parameter names of source item.
-
-QStringList ParameterTreeUtils::parameterTreeNames(const SessionItem* source)
-{
-    QStringList result;
-
-    for (auto pair : parameterDictionary(source))
-        result << pair.first;
-
-    return result;
-}
-
-//! Creates domain translated list of parameter names for source item.
-
-QStringList ParameterTreeUtils::translatedParameterTreeNames(const SessionItem* source)
-{
-    QStringList result;
-
-    for (auto pair : parameterDictionary(source))
-        result << pair.second;
-
-    return result;
-}
-
-//! Correspondence of parameter name to translated name for all properties found in source
-//! in its children.
-
-QVector<QPair<QString, QString>> ParameterTreeUtils::parameterDictionary(const SessionItem* source)
-{
-    ASSERT(source);
-
-    QVector<QPair<QString, QString>> result;
-
-    // Create container with ParameterItem's of given source item
-    SampleModel model;
-    auto container = model.insertItem<ParameterContainerItem>();
-    populateParameterContainer(container, source);
-
-    // Iterate through all ParameterItems and retrieve necessary data.
-    visitParameterContainer(container, [&](ParameterItem* parItem) {
-        // TODO replace with the method from ModelPath
-        QString parPath = FitParameterHelper::getParameterItemPath(parItem);
-
-        QString relPath =
-            source->displayName() + "/" + parItem->getItemValue(ParameterItem::P_LINK).toString();
-        SessionItem* linkedItem = ModelPath::getItemFromPath(relPath, source);
-        QString translation = ModelPath::itemPathTranslation(*linkedItem, source->parent());
-
-        result.push_back(QPair<QString, QString>(parPath, translation));
-    });
-    std::reverse(result.begin(), result.end());
-
-    return result;
-}
-
-//! Converts domain name to parameterItem name. Parameter name should belong to item or
-//! one of its children.
-
-QString ParameterTreeUtils::domainNameToParameterName(const QString& domainName,
-                                                      const SessionItem* source)
-{
-    QString domain = removeLeadingSlash(domainName);
-    for (auto pair : parameterDictionary(source)) { // parName, domainName
-        if (pair.second == domain)
-            return pair.first;
-    }
-
-    return {};
-}
-
-//! Converts parameter name to domain name. Parameter name should belong to item or
-//! one of its children.
-
-QString ParameterTreeUtils::parameterNameToDomainName(const QString& parName,
-                                                      const SessionItem* source)
-{
-    for (auto pair : parameterDictionary(source)) // parName, domainName
-        if (pair.first == parName)
-            return "/" + pair.second;
-
-    return {};
-}
-
-//! Converts parameter item name to the corresponding item in the tree below the source.
-
-SessionItem* ParameterTreeUtils::parameterNameToLinkedItem(const QString& parName,
-                                                           const SessionItem* source)
-{
-    SampleModel model;
-    auto container = model.insertItem<ParameterContainerItem>();
-    populateParameterContainer(container, source);
-
-    // Iterate through all ParameterItems and retrieve necessary data.
-    SessionItem* result(nullptr);
-    visitParameterContainer(container, [&](ParameterItem* parItem) {
-        // TODO replace with the method from ModelPath
-        QString parPath = FitParameterHelper::getParameterItemPath(parItem);
-        if (parPath == parName) {
-            QString relPath = source->displayName() + "/"
-                              + parItem->getItemValue(ParameterItem::P_LINK).toString();
-            result = ModelPath::getItemFromPath(relPath, source);
-        }
-    });
-
-    return result;
-}
-
-namespace {
-
 void handleItem(SessionItem* tree, const SessionItem* source)
 {
     if (tree->modelType() == "Parameter Label") {
         tree->setDisplayName(source->itemName());
-
     }
 
     else if (tree->modelType() == "Parameter") {
@@ -210,9 +44,8 @@ void handleItem(SessionItem* tree, const SessionItem* source)
         return;
     }
 
-    else {
+    else
         return;
-    }
 
     for (SessionItem* child : source->children()) {
         if (child->isVisible() && child->isEnabled()) {
@@ -236,4 +69,29 @@ void handleItem(SessionItem* tree, const SessionItem* source)
     }
 }
 
+//! Populates ParameterContainer with ParameterItem's corresponding to all properties found
+//! in a source item.
+
+void populateParameterContainer(SessionItem* container, const SessionItem* source)
+{
+    if (container->modelType() != "Parameter Container")
+        throw GUIHelpers::Error("ParameterTreeUtils::populateParameterContainer() -> Error. "
+                                "Not a ParameterContainerType.");
+
+    auto sourceLabel = container->model()->insertItem<ParameterLabelItem>(container);
+    handleItem(sourceLabel, source);
+}
+
 } // namespace
+
+void ParameterTreeUtils::createParameterTree(JobItem* jobItem)
+{
+    auto container = jobItem->model()->insertItem<ParameterContainerItem>(
+        jobItem, -1, JobItem::T_PARAMETER_TREE);
+
+    populateParameterContainer(container, jobItem->getItem(JobItem::T_MATERIAL_CONTAINER));
+
+    populateParameterContainer(container, jobItem->getItem(JobItem::T_SAMPLE));
+
+    populateParameterContainer(container, jobItem->getItem(JobItem::T_INSTRUMENT));
+}
diff --git a/GUI/coregui/Models/ParameterTreeUtils.h b/GUI/coregui/Models/ParameterTreeUtils.h
index a2d656db354..427c7d47298 100644
--- a/GUI/coregui/Models/ParameterTreeUtils.h
+++ b/GUI/coregui/Models/ParameterTreeUtils.h
@@ -31,22 +31,6 @@ namespace ParameterTreeUtils {
 
 void createParameterTree(JobItem* jobItem);
 
-void populateParameterContainer(SessionItem* container, const SessionItem* source);
-
-void visitParameterContainer(SessionItem* container, std::function<void(ParameterItem*)> fun);
-
-QStringList parameterTreeNames(const SessionItem* source);
-
-QStringList translatedParameterTreeNames(const SessionItem* source);
-
-QVector<QPair<QString, QString>> parameterDictionary(const SessionItem* source);
-
-QString domainNameToParameterName(const QString& domainName, const SessionItem* source);
-
-QString parameterNameToDomainName(const QString& parName, const SessionItem* source);
-
-SessionItem* parameterNameToLinkedItem(const QString& parName, const SessionItem* source);
-
 } // namespace ParameterTreeUtils
 
 #endif // BORNAGAIN_GUI_COREGUI_MODELS_PARAMETERTREEUTILS_H
diff --git a/GUI/coregui/Models/SessionItem.cpp b/GUI/coregui/Models/SessionItem.cpp
index 5dc1c6f224c..7af52817036 100644
--- a/GUI/coregui/Models/SessionItem.cpp
+++ b/GUI/coregui/Models/SessionItem.cpp
@@ -553,16 +553,6 @@ ModelMapper* SessionItem::mapper()
     return m_mapper.get();
 }
 
-QStringList SessionItem::translateList(const QStringList& list) const
-{
-    QStringList result = list;
-    for (const IPathTranslator* translator : m_translators)
-        result = translator->translate(result);
-    // TODO consider adding displayName before translators
-    result << displayName();
-    return result;
-}
-
 void SessionItem::addTranslator(const IPathTranslator& translator)
 {
     m_translators.push_back(translator.clone());
diff --git a/GUI/coregui/Models/SessionItem.h b/GUI/coregui/Models/SessionItem.h
index 3ba0c1ba13c..e07dec8cd3a 100644
--- a/GUI/coregui/Models/SessionItem.h
+++ b/GUI/coregui/Models/SessionItem.h
@@ -126,8 +126,7 @@ public:
 
     ModelMapper* mapper();
 
-    virtual QStringList translateList(const QStringList& list) const;
-    void addTranslator(const IPathTranslator& translator);
+    void addTranslator(const IPathTranslator& translator);  // #baRemoveParticleDistribution ++ obsolete?
 
     virtual QByteArray serializeBinaryData() const;
     virtual void deserializeBinaryData(const QByteArray& data);
-- 
GitLab