diff --git a/GUI/Model/Device/BeamItems.cpp b/GUI/Model/Device/BeamItems.cpp index 0c4d289f38709c5b59e2b0d15e8b4cd31e5f394b..33268beba4d656fe8972212b28f3e442000af4af 100644 --- a/GUI/Model/Device/BeamItems.cpp +++ b/GUI/Model/Device/BeamItems.cpp @@ -194,6 +194,34 @@ BeamItem::BeamItem() m_inclinationAngleItem.reset(new BeamInclinationAngleItem); } +void BeamItem::writeTo(QXmlStreamWriter* w) const +{ + XML::writeAttribute(w, XML::Attrib::version, uint(1)); + + // parameters from base class + w->writeStartElement(Tag::BaseData); + SourceItem::writeTo(w); + w->writeEndElement(); +} + +void BeamItem::readFrom(QXmlStreamReader* r) +{ + const uint version = XML::readUIntAttribute(r, XML::Attrib::version); + Q_UNUSED(version) + + while (r->readNextStartElement()) { + QString tag = r->name().toString(); + + // parameters from base class + if (tag == Tag::BaseData) { + SourceItem::readFrom(r); + XML::gotoEndElementOfTag(r, tag); + + } else + r->skipCurrentElement(); + } +} + double BeamItem::getInclinationAngle() const { return dynamic_cast<BeamInclinationAngleItem*>(beamDistributionItem())->inclinationAngle(); diff --git a/GUI/Model/Device/BeamItems.h b/GUI/Model/Device/BeamItems.h index 7fc9f328292727df7d52f2775216f2f6bb03e6f5..fd42c9952973bb48e93524380bfd3c0c67b52abb 100644 --- a/GUI/Model/Device/BeamItems.h +++ b/GUI/Model/Device/BeamItems.h @@ -34,9 +34,6 @@ class InstrumentItem; //! Base class for BeamItem and ScanItem. Name refers to radiation source. class SourceItem { public: - virtual void writeTo(QXmlStreamWriter* w) const; - virtual void readFrom(QXmlStreamReader* r); - DoubleProperty& intensity() { return m_intensity; } const DoubleProperty& intensity() const { return m_intensity; } void setIntensity(double v) { m_intensity.setValue(v); } @@ -61,6 +58,8 @@ public: protected: SourceItem(); + void writeTo(QXmlStreamWriter* w) const; + void readFrom(QXmlStreamReader* r); std::unique_ptr<BeamWavelengthItem> m_wavelengthItem; std::unique_ptr<BeamAzimuthalAngleItem> m_azimuthalAngleItem; @@ -73,6 +72,10 @@ protected: class BeamItem : public SourceItem { public: BeamItem(); + + void writeTo(QXmlStreamWriter* w) const; + void readFrom(QXmlStreamReader* r); + double getInclinationAngle() const override; }; @@ -80,8 +83,8 @@ class ScanItem : public SourceItem { public: explicit ScanItem(const InstrumentItem* owningInstrument); - void writeTo(QXmlStreamWriter* w) const override; - void readFrom(QXmlStreamReader* r) override; + void writeTo(QXmlStreamWriter* w) const; + void readFrom(QXmlStreamReader* r); double getInclinationAngle() const override; void setInclinationAngle(double value) override;