diff --git a/GUI/Model/Data/DataItem.cpp b/GUI/Model/Data/DataItem.cpp index b541159594aff7b81941366a51a26066e9576581..bffd5caef4dcbae6b80eeb58e5b313bd30c94450 100644 --- a/GUI/Model/Data/DataItem.cpp +++ b/GUI/Model/Data/DataItem.cpp @@ -19,7 +19,6 @@ #include "GUI/Util/Error.h" namespace { - namespace Tag { const QString FileName("FileName"); @@ -28,13 +27,6 @@ const QString XAxis("XAxis"); const QString YAxis("YAxis"); } // namespace Tag - -namespace Attrib { - -const QString value("value"); - -} // namespace Attrib - } // namespace const QString x_axis_default_name = "X [nbins]"; @@ -267,11 +259,13 @@ void DataItem::setAxesRangeToData() setUpperY(yMax()); } -void DataItem::writeTo(QXmlStreamWriter* writer) const +void DataItem::writeBaseData(QXmlStreamWriter* writer) const { + XML::writeAttribute(writer, XML::Attrib::version, uint(1)); + // file name writer->writeStartElement(Tag::FileName); - XML::writeAttribute(writer, Attrib::value, m_fileName); + XML::writeAttribute(writer, XML::Attrib::value, m_fileName); writer->writeEndElement(); // axes units @@ -290,34 +284,35 @@ void DataItem::writeTo(QXmlStreamWriter* writer) const writer->writeEndElement(); } -void DataItem::readFrom(QXmlStreamReader* reader) +void DataItem::readBaseData(QXmlStreamReader* reader) { - while (reader->readNextStartElement()) - readBasicTags(reader); -} + uint version = XML::readUIntAttribute(reader, XML::Attrib::version); + Q_UNUSED(version) -void DataItem::readBasicTags(QXmlStreamReader* reader) -{ - // file name - if (reader->name() == Tag::FileName) { - XML::readAttribute(reader, Attrib::value, &m_fileName); - XML::gotoEndElementOfTag(reader, Tag::FileName); - - // axes units - } else if (reader->name() == Tag::AxesUnits) { - m_axesUnits.readFrom(reader); - XML::gotoEndElementOfTag(reader, Tag::AxesUnits); - - // x axis - } else if (reader->name() == Tag::XAxis) { - m_xAxis->readFrom(reader); - XML::gotoEndElementOfTag(reader, Tag::XAxis); - - // y axis - } else if (reader->name() == Tag::YAxis) { - m_yAxis->readFrom(reader); - XML::gotoEndElementOfTag(reader, Tag::YAxis); - - } else - reader->skipCurrentElement(); + while (reader->readNextStartElement()) { + QString name = reader->name().toString(); + + // file name + if (name == Tag::FileName) { + XML::readAttribute(reader, XML::Attrib::value, &m_fileName); + XML::gotoEndElementOfTag(reader, name); + + // axes units + } else if (name == Tag::AxesUnits) { + m_axesUnits.readFrom(reader); + XML::gotoEndElementOfTag(reader, name); + + // x axis + } else if (name == Tag::XAxis) { + m_xAxis->readFrom(reader); + XML::gotoEndElementOfTag(reader, name); + + // y axis + } else if (name == Tag::YAxis) { + m_yAxis->readFrom(reader); + XML::gotoEndElementOfTag(reader, name); + + } else + reader->skipCurrentElement(); + } } diff --git a/GUI/Model/Data/DataItem.h b/GUI/Model/Data/DataItem.h index 0c5756fef1faa4d81619b357df058b1c49868649..efe24cce3eaa16822b0e78d3ce8eb9bd440d24ee 100644 --- a/GUI/Model/Data/DataItem.h +++ b/GUI/Model/Data/DataItem.h @@ -121,11 +121,12 @@ public: //! Set axes viewport to original data. virtual void resetView() = 0; + virtual void writeTo(QXmlStreamWriter* writer) const = 0; + virtual void readFrom(QXmlStreamReader* reader) = 0; + protected: - // write/read - virtual void writeTo(QXmlStreamWriter* writer) const; - virtual void readFrom(QXmlStreamReader* reader); - void readBasicTags(QXmlStreamReader* reader); + 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 8214f5d92950d6fcf002178b9149a6826038fd38..a2a629536966b7ce34b6adf35044a1b2862fe8bd 100644 --- a/GUI/Model/Data/IntensityDataItem.cpp +++ b/GUI/Model/Data/IntensityDataItem.cpp @@ -28,18 +28,13 @@ namespace { namespace Tag { +const QString BaseData("BaseData"); const QString ZAxis("ZAxis"); const QString Interpolation("Interpolation"); const QString Gradient("Gradient"); } // namespace Tag -namespace Attrib { - -const QString value("value"); - -} // namespace Attrib - // gradient map for colormaps const QMap<QString, QCPColorGradient::GradientPreset> gradient_map = { {"Grayscale", QCPColorGradient::gpGrayscale}, @@ -321,11 +316,16 @@ void IntensityDataItem::resetView() void IntensityDataItem::writeTo(QXmlStreamWriter* writer) const { - DataItem::writeTo(writer); + XML::writeAttribute(writer, XML::Attrib::version, uint(1)); + + // parameters from base class + writer->writeStartElement(Tag::BaseData); + DataItem::writeBaseData(writer); + writer->writeEndElement(); // interpolation writer->writeStartElement(Tag::Interpolation); - XML::writeAttribute(writer, Attrib::value, m_isInterpolated); + XML::writeAttribute(writer, XML::Attrib::value, m_isInterpolated); writer->writeEndElement(); // gradient @@ -341,27 +341,34 @@ void IntensityDataItem::writeTo(QXmlStreamWriter* writer) const void IntensityDataItem::readFrom(QXmlStreamReader* reader) { + uint version = XML::readUIntAttribute(reader, XML::Attrib::version); + Q_UNUSED(version) + while (reader->readNextStartElement()) { + QString name = reader->name().toString(); + + // parameters from base class + if (name == Tag::BaseData) { + DataItem::readBaseData(reader); + XML::gotoEndElementOfTag(reader, name); - // interpolation - if (reader->name() == Tag::Interpolation) { - XML::readAttribute(reader, Attrib::value, &m_isInterpolated); - XML::gotoEndElementOfTag(reader, Tag::Interpolation); + // interpolation + } else if (name == Tag::Interpolation) { + XML::readAttribute(reader, XML::Attrib::value, &m_isInterpolated); + XML::gotoEndElementOfTag(reader, name); // gradient - } else if (reader->name() == Tag::Gradient) { + } else if (name == Tag::Gradient) { m_gradient.readFrom(reader); - XML::gotoEndElementOfTag(reader, Tag::Gradient); + XML::gotoEndElementOfTag(reader, name); // z axis - } else if (reader->name() == Tag::ZAxis) { + } else if (name == Tag::ZAxis) { m_zAxis->readFrom(reader); - XML::gotoEndElementOfTag(reader, Tag::ZAxis); + XML::gotoEndElementOfTag(reader, name); - // types from base class - } else { - DataItem::readBasicTags(reader); - } + } else + reader->skipCurrentElement(); } } diff --git a/GUI/Model/Data/SpecularDataItem.cpp b/GUI/Model/Data/SpecularDataItem.cpp index 27e0bdddd87353a5adf796bf4b7befeacbf2f6ee..338af33b6c1bcee8cb3b0a520469fe95d95ab7ad 100644 --- a/GUI/Model/Data/SpecularDataItem.cpp +++ b/GUI/Model/Data/SpecularDataItem.cpp @@ -21,9 +21,9 @@ #include "GUI/Util/Error.h" namespace { - namespace Tag { +const QString BaseData("BaseData"); const QString LineType("LineType"); const QString Color("Color"); const QString Thickness("Thickness"); @@ -32,12 +32,6 @@ const QString ScatterSize("ScatterSize"); } // namespace Tag -namespace Attrib { - -const QString value("value"); - -} // namespace Attrib - // scatters for representation of 1D graphs const QMap<QString, QCPScatterStyle::ScatterShape> scatter_map = { {"None", QCPScatterStyle::ScatterShape::ssNone}, @@ -215,69 +209,81 @@ void SpecularDataItem::setRealPlotStyle() void SpecularDataItem::writeTo(QXmlStreamWriter* writer) const { - DataItem::writeTo(writer); + XML::writeAttribute(writer, XML::Attrib::version, uint(1)); + + // parameters from base class + writer->writeStartElement(Tag::BaseData); + DataItem::writeBaseData(writer); + writer->writeEndElement(); // line type writer->writeStartElement(Tag::LineType); - XML::writeAttribute(writer, Attrib::value, m_lineType); + XML::writeAttribute(writer, XML::Attrib::value, m_lineType); writer->writeEndElement(); // color writer->writeStartElement(Tag::Color); - XML::writeAttribute(writer, Attrib::value, m_color.name(QColor::HexArgb)); + XML::writeAttribute(writer, XML::Attrib::value, m_color.name(QColor::HexArgb)); writer->writeEndElement(); // thickness writer->writeStartElement(Tag::Thickness); - XML::writeAttribute(writer, Attrib::value, m_thickness); + XML::writeAttribute(writer, XML::Attrib::value, m_thickness); writer->writeEndElement(); // scatter type writer->writeStartElement(Tag::ScatterType); - XML::writeAttribute(writer, Attrib::value, m_scatterType); + XML::writeAttribute(writer, XML::Attrib::value, m_scatterType); writer->writeEndElement(); // scatter size writer->writeStartElement(Tag::ScatterSize); - XML::writeAttribute(writer, Attrib::value, m_scatterSize); + XML::writeAttribute(writer, XML::Attrib::value, m_scatterSize); writer->writeEndElement(); } void SpecularDataItem::readFrom(QXmlStreamReader* reader) { + uint version = XML::readUIntAttribute(reader, XML::Attrib::version); + Q_UNUSED(version) + while (reader->readNextStartElement()) { + QString name = reader->name().toString(); - // line type - if (reader->name() == Tag::LineType) { - XML::readAttribute(reader, Attrib::value, &m_lineType); - XML::gotoEndElementOfTag(reader, Tag::LineType); + // parameters from base class + if (name == Tag::BaseData) { + DataItem::readBaseData(reader); + XML::gotoEndElementOfTag(reader, name); + + // line type + } else if (name == Tag::LineType) { + XML::readAttribute(reader, XML::Attrib::value, &m_lineType); + XML::gotoEndElementOfTag(reader, name); // color - } else if (reader->name() == Tag::Color) { + } else if (name == Tag::Color) { QString col; - XML::readAttribute(reader, Attrib::value, &col); + XML::readAttribute(reader, XML::Attrib::value, &col); m_color = QColor(col); - XML::gotoEndElementOfTag(reader, Tag::Color); + XML::gotoEndElementOfTag(reader, name); // thickness - } else if (reader->name() == Tag::Thickness) { - XML::readAttribute(reader, Attrib::value, &m_thickness); - XML::gotoEndElementOfTag(reader, Tag::Thickness); + } else if (name == Tag::Thickness) { + XML::readAttribute(reader, XML::Attrib::value, &m_thickness); + XML::gotoEndElementOfTag(reader, name); // scatter type - } else if (reader->name() == Tag::ScatterType) { - XML::readAttribute(reader, Attrib::value, &m_scatterType); - XML::gotoEndElementOfTag(reader, Tag::ScatterType); + } else if (name == Tag::ScatterType) { + XML::readAttribute(reader, XML::Attrib::value, &m_scatterType); + XML::gotoEndElementOfTag(reader, name); // scatter size - } else if (reader->name() == Tag::ScatterSize) { - XML::readAttribute(reader, Attrib::value, &m_scatterSize); - XML::gotoEndElementOfTag(reader, Tag::ScatterSize); - - // types from base class - } else { - DataItem::readBasicTags(reader); - } + } else if (name == Tag::ScatterSize) { + XML::readAttribute(reader, XML::Attrib::value, &m_scatterSize); + XML::gotoEndElementOfTag(reader, name); + + } else + reader->skipCurrentElement(); } } diff --git a/GUI/Model/Project/ProjectDocument.cpp b/GUI/Model/Project/ProjectDocument.cpp index ab653cde70a536473ba8a471f58ba124c7deb97d..1f32de750e976baf9adf0e08b8b662eca9f288dc 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); diff --git a/GUI/Support/XML/UtilXML.cpp b/GUI/Support/XML/UtilXML.cpp index 6592d5970de7bc3a857b997b93901a67bd9b8901..511cbd1e82b8da71d56aec58b0d6ba19132c78e0 100644 --- a/GUI/Support/XML/UtilXML.cpp +++ b/GUI/Support/XML/UtilXML.cpp @@ -126,16 +126,6 @@ void XML::writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, writer->writeAttribute(attributeName, QString::number(d)); } -void XML::writeUid(QXmlStreamWriter* writer, const QString& id) -{ - writer->writeAttribute(Tags::Id, id); -} - -void XML::writeUid(QXmlStreamWriter* writer, const QUuid& id) -{ - writer->writeAttribute(Tags::Id, id.toString()); -} - void XML::writeVariant(QXmlStreamWriter* writer, QVariant variant, int role) { ASSERT(writer); @@ -144,7 +134,7 @@ void XML::writeVariant(QXmlStreamWriter* writer, QVariant variant, int role) writer->writeAttribute(Tags::ParameterTypeAttribute, variant.typeName()); writer->writeAttribute(Tags::ParameterRoleAttribute, QString::number(role)); writeAttribute(writer, Tags::ParameterValueAttribute, variant); - writer->writeEndElement(); // end ParameterTag + writer->writeEndElement(); } } diff --git a/GUI/Support/XML/UtilXML.h b/GUI/Support/XML/UtilXML.h index 15dd258fbe83a84883bd1b8ffbdc818342aecadf..b7b2e1f9f213e87fc5029a39ee06ec5c6c232ec2 100644 --- a/GUI/Support/XML/UtilXML.h +++ b/GUI/Support/XML/UtilXML.h @@ -20,15 +20,15 @@ #include <heinz/Complex.h> #include <heinz/Vectors3D.h> -class QXmlStreamReader; -class MessageService; -class QUuid; +namespace XML { +namespace Attrib { +const QString version("version"); +const QString value("value"); -namespace XML { +} // namespace Attrib namespace Tags { -constexpr auto Id("id"); constexpr auto TagAttribute("Tag"); constexpr auto ModelTypeAttribute("ModelType"); constexpr auto DisplayNameAttribute("DisplayName"); @@ -56,8 +56,6 @@ void writeVariant(QXmlStreamWriter* writer, QVariant variant, int role); void writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, const QVariant& variant); -void writeUid(QXmlStreamWriter* writer, const QString& id); -void writeUid(QXmlStreamWriter* writer, const QUuid& id); void writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, int d); void writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, bool b); void writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, unsigned d);