From 234f63623cf536ed55f297cc0c49d13f2bda3a18 Mon Sep 17 00:00:00 2001
From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de>
Date: Thu, 8 Dec 2022 14:17:11 +0100
Subject: [PATCH] DataItem: make readFrom and writeTo pure virtual

---
 GUI/Model/Data/DataItem.cpp           | 10 ++--------
 GUI/Model/Data/DataItem.h             |  7 ++++---
 GUI/Model/Data/IntensityDataItem.cpp  |  4 ++--
 GUI/Model/Data/RealItem.cpp           |  6 +++---
 GUI/Model/Data/SpecularDataItem.cpp   |  4 ++--
 GUI/Model/Project/ProjectDocument.cpp |  6 +++---
 6 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/GUI/Model/Data/DataItem.cpp b/GUI/Model/Data/DataItem.cpp
index b541159594a..9fea9ff55af 100644
--- a/GUI/Model/Data/DataItem.cpp
+++ b/GUI/Model/Data/DataItem.cpp
@@ -267,7 +267,7 @@ void DataItem::setAxesRangeToData()
     setUpperY(yMax());
 }
 
-void DataItem::writeTo(QXmlStreamWriter* writer) const
+void DataItem::writeBaseData(QXmlStreamWriter *writer) const
 {
     // file name
     writer->writeStartElement(Tag::FileName);
@@ -290,13 +290,7 @@ void DataItem::writeTo(QXmlStreamWriter* writer) const
     writer->writeEndElement();
 }
 
-void DataItem::readFrom(QXmlStreamReader* reader)
-{
-    while (reader->readNextStartElement())
-        readBasicTags(reader);
-}
-
-void DataItem::readBasicTags(QXmlStreamReader* reader)
+void DataItem::readBaseData(QXmlStreamReader* reader)
 {
     // file name
     if (reader->name() == Tag::FileName) {
diff --git a/GUI/Model/Data/DataItem.h b/GUI/Model/Data/DataItem.h
index 0c5756fef1f..e220ee1693a 100644
--- a/GUI/Model/Data/DataItem.h
+++ b/GUI/Model/Data/DataItem.h
@@ -123,9 +123,10 @@ public:
 
 protected:
     // write/read
-    virtual void writeTo(QXmlStreamWriter* writer) const;
-    virtual void readFrom(QXmlStreamReader* reader);
-    void readBasicTags(QXmlStreamReader* reader);
+    virtual void writeTo(QXmlStreamWriter* writer) const = 0;
+    virtual void readFrom(QXmlStreamReader* reader) = 0;
+    void writeBaseData(QXmlStreamWriter* writer) const;
+    void readBaseData(QXmlStreamReader* reader);
 
 signals:
     void datafieldChanged();
diff --git a/GUI/Model/Data/IntensityDataItem.cpp b/GUI/Model/Data/IntensityDataItem.cpp
index 8214f5d9295..28dd9feb455 100644
--- a/GUI/Model/Data/IntensityDataItem.cpp
+++ b/GUI/Model/Data/IntensityDataItem.cpp
@@ -321,7 +321,7 @@ void IntensityDataItem::resetView()
 
 void IntensityDataItem::writeTo(QXmlStreamWriter* writer) const
 {
-    DataItem::writeTo(writer);
+    DataItem::writeBaseData(writer);
 
     // interpolation
     writer->writeStartElement(Tag::Interpolation);
@@ -360,7 +360,7 @@ void IntensityDataItem::readFrom(QXmlStreamReader* reader)
 
             // types from base class
         } else {
-            DataItem::readBasicTags(reader);
+            DataItem::readBaseData(reader);
         }
     }
 }
diff --git a/GUI/Model/Data/RealItem.cpp b/GUI/Model/Data/RealItem.cpp
index 64dff323bbf..f4a430f79ed 100644
--- a/GUI/Model/Data/RealItem.cpp
+++ b/GUI/Model/Data/RealItem.cpp
@@ -44,7 +44,7 @@ const QString NativeDataUnits("NativeDataUnits");
 
 namespace Attrib {
 
-const QString version("version");
+const QString BA_Version("version");
 const QString value("value");
 
 } // namespace Attrib
@@ -351,7 +351,7 @@ void RealItem::writeTo(QXmlStreamWriter* writer) const
     QByteArray a = serializeBinaryData();
     if (!a.isEmpty()) {
         writer->writeStartElement(Tag::BinaryData);
-        writer->writeAttribute(Attrib::version, "1");
+        writer->writeAttribute(Attrib::BA_Version, "1");
         writer->writeCharacters(a.toBase64());
         writer->writeEndElement();
     }
@@ -400,7 +400,7 @@ void RealItem::readFrom(QXmlStreamReader* reader)
 
         // binary data
         if (reader->name() == Tag::BinaryData) {
-            if (reader->attributes().value(Attrib::version).toInt() == 1) {
+            if (reader->attributes().value(Attrib::BA_Version).toInt() == 1) {
                 QString valueAsBase64 =
                     reader->readElementText(QXmlStreamReader::SkipChildElements);
                 const auto data = QByteArray::fromBase64(
diff --git a/GUI/Model/Data/SpecularDataItem.cpp b/GUI/Model/Data/SpecularDataItem.cpp
index 27e0bdddd87..852217314bc 100644
--- a/GUI/Model/Data/SpecularDataItem.cpp
+++ b/GUI/Model/Data/SpecularDataItem.cpp
@@ -215,7 +215,7 @@ void SpecularDataItem::setRealPlotStyle()
 
 void SpecularDataItem::writeTo(QXmlStreamWriter* writer) const
 {
-    DataItem::writeTo(writer);
+    DataItem::writeBaseData(writer);
 
     // line type
     writer->writeStartElement(Tag::LineType);
@@ -276,7 +276,7 @@ void SpecularDataItem::readFrom(QXmlStreamReader* reader)
 
             // types from base class
         } else {
-            DataItem::readBasicTags(reader);
+            DataItem::readBaseData(reader);
         }
     }
 }
diff --git a/GUI/Model/Project/ProjectDocument.cpp b/GUI/Model/Project/ProjectDocument.cpp
index ab653cde70a..1f32de750e9 100644
--- a/GUI/Model/Project/ProjectDocument.cpp
+++ b/GUI/Model/Project/ProjectDocument.cpp
@@ -50,7 +50,7 @@ const QString Instruments("Instruments");
 
 namespace Attrib {
 
-const QString version("Version");
+const QString BA_Version("BA_Version");
 const QString projectName("projectName");
 
 } // namespace Attrib
@@ -319,7 +319,7 @@ ProjectDocument::ReadResult ProjectDocument::readProject(QIODevice* device,
             if (reader.isStartElement()) {
                 if (reader.name() == Tag::BornAgain) {
                     Streamer(&reader).assertVersion(2);
-                    m_currentVersion = reader.attributes().value(Attrib::version).toString();
+                    m_currentVersion = reader.attributes().value(Attrib::BA_Version).toString();
 
                     if (!GUI::Util::Path::isVersionMatchMinimal(m_currentVersion,
                                                                 minimal_supported_version)) {
@@ -392,7 +392,7 @@ void ProjectDocument::writeTo(QIODevice* device)
     writer.writeStartDocument();
     writer.writeStartElement(Tag::BornAgain);
     QString version_string = GUI::Util::Path::getBornAgainVersionString();
-    writer.writeAttribute(Attrib::version, version_string);
+    writer.writeAttribute(Attrib::BA_Version, version_string);
     Streamer(&writer).writeVersion(2);
 
     writer.writeStartElement(Tag::DocumentInfo);
-- 
GitLab