From 248bf77d45b3c2dec0373d1eb9ad5e4b7211f3e5 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Tue, 6 May 2014 16:31:23 +0200
Subject: [PATCH] ParaCrystal 1D view is added

---
 GUI/coregui/Models/DomainObjectBuilder.cpp    | 23 ++++++++++++++++---
 GUI/coregui/Models/DomainObjectBuilder.h      |  2 ++
 GUI/coregui/Models/GUIObjectBuilder.cpp       |  7 ------
 GUI/coregui/Models/TransformToDomain.cpp      | 15 ++++++++++++
 GUI/coregui/Models/TransformToDomain.h        |  6 ++---
 .../MaterialEditor/MaterialUtils.cpp          |  8 +++----
 6 files changed, 44 insertions(+), 17 deletions(-)

diff --git a/GUI/coregui/Models/DomainObjectBuilder.cpp b/GUI/coregui/Models/DomainObjectBuilder.cpp
index dcd6a4d2e8e..b767c1f09dd 100644
--- a/GUI/coregui/Models/DomainObjectBuilder.cpp
+++ b/GUI/coregui/Models/DomainObjectBuilder.cpp
@@ -15,6 +15,8 @@
 
 #include "DomainObjectBuilder.h"
 #include "TransformToDomain.h"
+#include "GUIHelpers.h"
+#include <QDebug>
 
 #include <boost/scoped_ptr.hpp>
 
@@ -87,16 +89,31 @@ ParticleLayout *DomainObjectBuilder::buildParticleLayout(
                 result->addParticle(*particle, depth, abundance);
             }
         }
-    }
+        else if(children[i]->modelType().startsWith("InterferenceFunction")) {
+            boost::scoped_ptr<IInterferenceFunction>
+                    interference(buildInterferenceFunction(*children[i]));
+            if (interference.get()) {
+                result->addInterferenceFunction(*interference);
+            }
+        }
 
+        else {
+            throw GUIHelpers::Error("DomainObjectBuilder::buildParticleLayout() -> Error! Not implemented");
+        }
+    }
     return result;
 }
 
 
 Particle *DomainObjectBuilder::buildParticle(const ParameterizedItem &item, double &depth, double &abundance) const
 {
-    Particle *particle = TransformToDomain::createParticle(item, depth, abundance);
-    return particle;
+    Particle *result = TransformToDomain::createParticle(item, depth, abundance);
+    return result;
 }
 
+IInterferenceFunction *DomainObjectBuilder::buildInterferenceFunction(const ParameterizedItem &item) const
+{
+    IInterferenceFunction *result = TransformToDomain::createInterferenceFunction(item);
+    return result;
+}
 
diff --git a/GUI/coregui/Models/DomainObjectBuilder.h b/GUI/coregui/Models/DomainObjectBuilder.h
index ddd3fa52e4d..1ede82b8892 100644
--- a/GUI/coregui/Models/DomainObjectBuilder.h
+++ b/GUI/coregui/Models/DomainObjectBuilder.h
@@ -17,6 +17,7 @@
 #define DOMAINOBJECTBUILDER_H
 
 #include "Samples.h"
+#include "InterferenceFunctions.h"
 #include "ParameterizedItem.h"
 
 class DomainObjectBuilder
@@ -36,6 +37,7 @@ private:
     Layer *buildLayer(const ParameterizedItem &item) const;
     ParticleLayout *buildParticleLayout(const ParameterizedItem &item) const;
     Particle *buildParticle(const ParameterizedItem &item, double &depth, double &abundance) const;
+    IInterferenceFunction *buildInterferenceFunction(const ParameterizedItem &item) const;
     ISample *mp_sample;
 };
 
diff --git a/GUI/coregui/Models/GUIObjectBuilder.cpp b/GUI/coregui/Models/GUIObjectBuilder.cpp
index 92f9ec1bac1..71717db1903 100644
--- a/GUI/coregui/Models/GUIObjectBuilder.cpp
+++ b/GUI/coregui/Models/GUIObjectBuilder.cpp
@@ -295,14 +295,7 @@ void GUIObjectBuilder::visit(const FormFactorTruncatedSpheroid *sample)
 
 void GUIObjectBuilder::visit(const InterferenceFunction1DParaCrystal *sample)
 {
-    qDebug() << "GUIObjectBuilder::visit(const InterferenceFunction1DParaCrystal *)" << getLevel();
-
-    qDebug() << " ";
-    qDebug() << " ";
-    qDebug() << " ";
-
     ParameterizedItem *parent = m_levelToParent[getLevel()-1];
-    qDebug() << " " << parent->itemName() << parent->modelType();
     Q_ASSERT(parent);
     ParameterizedItem *item = m_sessionModel->insertNewItem("InterferenceFunction1DParaCrystal", m_sessionModel->indexOfItem(parent));
     Q_ASSERT(item);
diff --git a/GUI/coregui/Models/TransformToDomain.cpp b/GUI/coregui/Models/TransformToDomain.cpp
index 829f154047f..1aafb8683d8 100644
--- a/GUI/coregui/Models/TransformToDomain.cpp
+++ b/GUI/coregui/Models/TransformToDomain.cpp
@@ -102,4 +102,19 @@ IFormFactor *TransformToDomain::createFormFactor(const ParameterizedItem &item)
 }
 
 
+IInterferenceFunction *TransformToDomain::createInterferenceFunction(const ParameterizedItem &item)
+{
+    IInterferenceFunction *result(0);
+
+    if(item.modelType() == "InterferenceFunction1DParaCrystal") {
+        result = new InterferenceFunction1DParaCrystal(
+                    item.property("PeakDistance").toDouble(),
+                    item.property("Width").toDouble(),
+                    item.property("CorrLength").toDouble()
+                    );
+    }
+
+    return result;
+}
+
 
diff --git a/GUI/coregui/Models/TransformToDomain.h b/GUI/coregui/Models/TransformToDomain.h
index 0fc54dd0b3c..0ee669a7c6f 100644
--- a/GUI/coregui/Models/TransformToDomain.h
+++ b/GUI/coregui/Models/TransformToDomain.h
@@ -17,18 +17,18 @@
 #define TRANSFORMTODOMAIN_H
 
 #include "Samples.h"
+#include "InterferenceFunctions.h"
 #include "ParameterizedItem.h"
 
 namespace TransformToDomain
 {
+IMaterial *createDomainMaterial(const ParameterizedItem &item);
 MultiLayer *createMultiLayer(const ParameterizedItem &item);
 Layer *createLayer(const ParameterizedItem &item);
 ParticleLayout *createParticleLayout(const ParameterizedItem &item);
 Particle *createParticle(const ParameterizedItem &item, double &depth, double &abundance);
 IFormFactor *createFormFactor(const ParameterizedItem &item);
-
-IMaterial *createDomainMaterial(const ParameterizedItem &item);
-
+IInterferenceFunction *createInterferenceFunction(const ParameterizedItem &item);
 }
 
 #endif // TRANSFORMTODOMAIN_H
diff --git a/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.cpp b/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.cpp
index e7d46f6e17c..aada5883f3f 100644
--- a/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.cpp
+++ b/GUI/coregui/Views/Components/MaterialEditor/MaterialUtils.cpp
@@ -10,13 +10,13 @@
 
 QColor MaterialUtils::suggestMaterialColor(const QString &name)
 {
-    if(name == QStringLiteral("Air") ) {
+    if(name.contains("Air") ) {
         return QColor(179, 242, 255);
-    } else if(name == QStringLiteral("Substrate") ) {
+    } else if(name.contains("Substrate") ) {
         return QColor(205,102,0);
-    } else if ( name == QStringLiteral("Default") ) {
+    } else if ( name.contains("Default") ) {
         return QColor(Qt::green);
-    } else if ( name == QStringLiteral("Particle") ) {
+    } else if ( name.contains("Particle") ) {
         return QColor(146, 198, 255);
     }
     return DesignerHelper::getRandomColor();
-- 
GitLab