From 61361b89835fcd29df44ef4d42de998e2fbeaa76 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Fri, 27 Jan 2017 13:43:11 +0100
Subject: [PATCH] ParameterItem now can deal with ScientificDoubleProperty.

---
 GUI/coregui/Models/ParameterTreeBuilder.cpp   | 21 ++++++++++++++++---
 GUI/coregui/Models/ParameterTreeItems.cpp     | 13 ++++++++++--
 GUI/coregui/Models/ScientificDoubleProperty.h |  3 +++
 3 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/GUI/coregui/Models/ParameterTreeBuilder.cpp b/GUI/coregui/Models/ParameterTreeBuilder.cpp
index ecff9b83ee5..e2705334c23 100644
--- a/GUI/coregui/Models/ParameterTreeBuilder.cpp
+++ b/GUI/coregui/Models/ParameterTreeBuilder.cpp
@@ -22,6 +22,7 @@
 #include "MultiLayerItem.h"
 #include "ParameterTreeItems.h"
 #include "SampleModel.h"
+#include "ScientificDoubleProperty.h"
 #include <QStack>
 
 void ParameterTreeBuilder::createParameterTree(JobItem *item, const QString &tag)
@@ -54,12 +55,19 @@ void ParameterTreeBuilder::handleItem(SessionItem *tree, SessionItem *source)
 
     else if (tree->modelType() == Constants::ParameterType) {
         tree->setDisplayName(source->itemName());
-        tree->setValue(source->value());
+
+        double sourceValue = source->value().toDouble();
+        if(source->value().typeName() == QString("ScientificDoubleProperty")) {
+            ScientificDoubleProperty intensity = source->value().value<ScientificDoubleProperty>();
+            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_BACKUP, source->value());
+        tree->setItemValue(ParameterItem::P_LINK, path);        
+        tree->setItemValue(ParameterItem::P_BACKUP, sourceValue);
         return;
     }
 
@@ -75,6 +83,13 @@ void ParameterTreeBuilder::handleItem(SessionItem *tree, SessionItem *source)
                         = tree->model()->insertNewItem(Constants::ParameterType, tree->index());
                     handleItem(branch, child);
                 }
+                else if (child->value().typeName() == QString("ScientificDoubleProperty")) {
+                    SessionItem *branch
+                        = tree->model()->insertNewItem(Constants::ParameterType, tree->index());
+                    handleItem(branch, child);
+
+                }
+
             } else if (child->modelType() == Constants::GroupItemType) {
                 SessionItem *currentItem
                     = dynamic_cast<GroupItem *>(child)->group()->getCurrentItem();
diff --git a/GUI/coregui/Models/ParameterTreeItems.cpp b/GUI/coregui/Models/ParameterTreeItems.cpp
index 601d6d243ab..22ea863b053 100644
--- a/GUI/coregui/Models/ParameterTreeItems.cpp
+++ b/GUI/coregui/Models/ParameterTreeItems.cpp
@@ -18,6 +18,7 @@
 #include "ModelPath.h"
 #include "SessionModel.h"
 #include "FitParameterHelper.h"
+#include "ScientificDoubleProperty.h"
 
 // ----------------------------------------------------------------------------
 
@@ -53,8 +54,16 @@ void ParameterItem::propagateValueLink(bool backup)
     if (backup)
         setValue(getItemValue(P_BACKUP));
     SessionItem *item = getLinkedItem();
-    if (item)
-        item->setValue(value());
+    if (item) {
+
+        if(item->value().typeName() == QString("ScientificDoubleProperty")) {
+            ScientificDoubleProperty intensity = item->value().value<ScientificDoubleProperty>();
+            intensity.setValue(value().toDouble());
+            item->setValue(intensity.getVariant());
+        } else {
+            item->setValue(value());
+        }
+    }
 }
 
 //! Returns corresponding linked item in MultiLayerItem/IsntrumentItem
diff --git a/GUI/coregui/Models/ScientificDoubleProperty.h b/GUI/coregui/Models/ScientificDoubleProperty.h
index c0a82249ceb..fc49324c64b 100644
--- a/GUI/coregui/Models/ScientificDoubleProperty.h
+++ b/GUI/coregui/Models/ScientificDoubleProperty.h
@@ -17,6 +17,9 @@
 #ifndef SCIENTIFICDOUBLEPROPERTY_H
 #define SCIENTIFICDOUBLEPROPERTY_H
 
+#include "WinDllMacros.h"
+#include <QString>
+#include <QVariant>
 
 //! The ScientificDoubleProperty for SessionItem and PropertyEditor
 //!
-- 
GitLab