From 0d693950195e6ca83e7b3d07c4203686e8457b30 Mon Sep 17 00:00:00 2001
From: Dmitry Yurov <d.yurov@fz-juelich.de>
Date: Mon, 12 Feb 2018 16:52:34 +0100
Subject: [PATCH] Make IntensityDataItem derived from DataItem

Redmine: #1936
---
 GUI/coregui/Models/IntensityDataItem.cpp | 44 ++----------------------
 GUI/coregui/Models/IntensityDataItem.h   | 21 +++--------
 2 files changed, 7 insertions(+), 58 deletions(-)

diff --git a/GUI/coregui/Models/IntensityDataItem.cpp b/GUI/coregui/Models/IntensityDataItem.cpp
index da3341a9a70..276589c57c8 100644
--- a/GUI/coregui/Models/IntensityDataItem.cpp
+++ b/GUI/coregui/Models/IntensityDataItem.cpp
@@ -42,11 +42,10 @@ const QString IntensityDataItem::P_GRADIENT = "Gradient";
 const QString IntensityDataItem::P_XAXIS = "x-axis";
 const QString IntensityDataItem::P_YAXIS = "y-axis";
 const QString IntensityDataItem::P_ZAXIS = "color-axis";
-const QString IntensityDataItem::P_FILE_NAME = "FileName";
 const QString IntensityDataItem::T_MASKS = "Mask tag";
 const QString IntensityDataItem::T_PROJECTIONS = "Projection tag";
 
-IntensityDataItem::IntensityDataItem() : SessionItem(Constants::IntensityDataType)
+IntensityDataItem::IntensityDataItem() : DataItem(Constants::IntensityDataType)
 {
     ComboProperty units = ComboProperty() << Constants::UnitsNbins;
     addProperty(P_AXES_UNITS, units.variant());
@@ -69,32 +68,15 @@ IntensityDataItem::IntensityDataItem() : SessionItem(Constants::IntensityDataTyp
     setXaxisTitle("X [nbins]");
     setYaxisTitle("Y [nbins]");
 
-    // name of the file used to serialize given IntensityDataItem
-    addProperty(P_FILE_NAME, QStringLiteral("undefined"))->setVisible(false);
-
     registerTag(T_MASKS, 0, -1, QStringList() << Constants::MaskContainerType);
     setDefaultTag(T_MASKS);
 
     registerTag(T_PROJECTIONS, 0, -1, QStringList() << Constants::ProjectionContainerType);
-
-    mapper()->setOnPropertyChange([this](const QString& name)
-    {
-        if(name == P_FILE_NAME)
-            setLastModified(QDateTime::currentDateTime());
-    });
-
-    mapper()->setOnValueChange([this]()
-    {
-        // OutputData was modified
-        setLastModified(QDateTime::currentDateTime());
-    });
-
 }
 
 void IntensityDataItem::setOutputData(OutputData<double>* data)
 {
-    Q_ASSERT(data);
-    m_data.reset(data);
+    DataItem::setOutputData(data);
 
     updateAxesZoomLevel();
     updateAxesLabels();
@@ -107,11 +89,7 @@ void IntensityDataItem::setOutputData(OutputData<double>* data)
 
 void IntensityDataItem::setRawDataVector(const OutputData<double>* data)
 {
-    if (!m_data->hasSameDimensions(*data)) {
-        throw GUIHelpers::Error("IntensityDataItem::setRawDataVector() -> Error. "
-                                "Different dimensions of data.");
-    }
-    m_data->setRawDataVector(data->getRawDataVector());
+    DataItem::setRawDataVector(data);
     emitDataChanged();
 }
 
@@ -221,12 +199,6 @@ QString IntensityDataItem::selectedAxesUnits() const
     return combo.getValue();
 }
 
-QString IntensityDataItem::fileName(const QString& projectDir) const
-{
-    QString filename = getItemValue(IntensityDataItem::P_FILE_NAME).toString();
-    return projectDir.isEmpty() ? filename : projectDir + QStringLiteral("/") + filename;
-}
-
 void IntensityDataItem::setLowerX(double xmin)
 {
     getItem(P_XAXIS)->setItemValue(BasicAxisItem::P_MIN, xmin);
@@ -416,13 +388,3 @@ ProjectionContainerItem* IntensityDataItem::projectionContainerItem()
 {
     return dynamic_cast<ProjectionContainerItem*>(getItem(IntensityDataItem::T_PROJECTIONS));
 }
-
-QDateTime IntensityDataItem::lastModified() const
-{
-    return m_last_modified;
-}
-
-void IntensityDataItem::setLastModified(const QDateTime &dtime)
-{
-    m_last_modified = dtime;
-}
diff --git a/GUI/coregui/Models/IntensityDataItem.h b/GUI/coregui/Models/IntensityDataItem.h
index 0c8372630b9..10585d8daae 100644
--- a/GUI/coregui/Models/IntensityDataItem.h
+++ b/GUI/coregui/Models/IntensityDataItem.h
@@ -15,15 +15,13 @@
 #ifndef INTENSITYDATAITEM_H
 #define INTENSITYDATAITEM_H
 
-#include "SessionItem.h"
-#include "OutputData.h"
-#include <QDateTime>
+#include "DataItem.h"
 
 class BasicAxisItem;
 class MaskContainerItem;
 class ProjectionContainerItem;
 
-class BA_CORE_API_ IntensityDataItem : public SessionItem
+class BA_CORE_API_ IntensityDataItem : public DataItem
 {
 public:
     static const QString P_PROJECTIONS_FLAG;
@@ -34,16 +32,13 @@ public:
     static const QString P_XAXIS;
     static const QString P_YAXIS;
     static const QString P_ZAXIS;
-    static const QString P_FILE_NAME;
     static const QString T_MASKS;
     static const QString T_PROJECTIONS;
 
     IntensityDataItem();
 
-    OutputData<double>* getOutputData() { return m_data.get(); }
-    const OutputData<double>* getOutputData() const { return m_data.get(); }
-    void setOutputData(OutputData<double>* data);
-    void setRawDataVector(const OutputData<double>* data);
+    void setOutputData(OutputData<double>* data) override;
+    void setRawDataVector(const OutputData<double>* data) override;
 
     int getNbinsX() const;
     int getNbinsY() const;
@@ -80,8 +75,6 @@ public:
 
     QString selectedAxesUnits() const;
 
-    QString fileName(const QString& projectDir = QString()) const;
-
     void updateDataRange();
     void computeDataRange();
     QPair<double, double> dataRange() const;
@@ -98,9 +91,6 @@ public:
     MaskContainerItem* maskContainerItem();
     ProjectionContainerItem* projectionContainerItem();
 
-    QDateTime lastModified() const;
-    void setLastModified(const QDateTime& dtime);
-
 public slots:
     void setLowerX(double xmin);
     void setUpperX(double xmax);
@@ -118,9 +108,6 @@ public slots:
 private:
     void updateAxesZoomLevel();
     void updateAxesLabels();
-
-    std::unique_ptr<OutputData<double>> m_data; //!< simulation results
-    QDateTime m_last_modified;
 };
 
 #endif // INTENSITYDATAITEM_H
-- 
GitLab