From fb2973e6f0fcd99de3f3b600cb54a1af04464618 Mon Sep 17 00:00:00 2001 From: Matthias Puchner <github@mpuchner.de> Date: Wed, 1 Dec 2021 15:16:47 +0100 Subject: [PATCH] improve project reading/writing --- GUI/Model/Project/ProjectDocument.cpp | 13 ++++++++++++- GUI/Model/Session/SessionXML.cpp | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/GUI/Model/Project/ProjectDocument.cpp b/GUI/Model/Project/ProjectDocument.cpp index e2b3723845a..4dc755ab5fa 100644 --- a/GUI/Model/Project/ProjectDocument.cpp +++ b/GUI/Model/Project/ProjectDocument.cpp @@ -339,9 +339,10 @@ ProjectDocument::ReadResult ProjectDocument::readProject(QIODevice* device, else if (reader.name() == SimulationOptionsTag) { m_simulationOptionsItem.readContentFrom(&reader); reader.skipCurrentElement(); + ASSERT(reader.name() == SimulationOptionsTag); } else if (reader.name() == MaterialsTag) { m_materials.readContentFrom(&reader); - reader.skipCurrentElement(); + ASSERT(reader.name() == MaterialsTag); } else m_applicationModels.readFrom(&reader, &messageService); } @@ -353,6 +354,16 @@ ProjectDocument::ReadResult ProjectDocument::readProject(QIODevice* device, for (auto itemWithMaterial : multiLayerItem->itemsWithMaterial()) itemWithMaterial->setMaterialModel(materialModel()); + // make a sanity check whether all materials are present + for (auto multiLayerItem : m_applicationModels.sampleModel()->multiLayerItems()) + for (auto itemWithMaterial : multiLayerItem->itemsWithMaterial()) + if (itemWithMaterial->materialItem() == nullptr) { + QString message = QString("Material link is broken (id: '%1')") + .arg(itemWithMaterial->materialIdentifier()); + messageService.addError(this, message); + return ReadResult::error; + } + if (reader.hasError()) { QString message = QString("Format error '%1'").arg(reader.errorString()); messageService.addError(this, message); diff --git a/GUI/Model/Session/SessionXML.cpp b/GUI/Model/Session/SessionXML.cpp index ce963bbd232..bca4da3f09b 100644 --- a/GUI/Model/Session/SessionXML.cpp +++ b/GUI/Model/Session/SessionXML.cpp @@ -157,7 +157,7 @@ void GUI::Session::XML::writeAttribute(QXmlStreamWriter* writer, const QString& void GUI::Session::XML::writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, double d) { - writer->writeAttribute(attributeName, QString::number(d, 'e', 12)); + writer->writeAttribute(attributeName, d == 0.0 ? "0" : QString::number(d, 'e', 12)); } void GUI::Session::XML::writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, -- GitLab