Skip to content
Snippets Groups Projects
Commit 0ea8780c authored by Mikhail Svechnikov's avatar Mikhail Svechnikov
Browse files

BeamItem: add r/w

parent 43f171f3
No related branches found
No related tags found
1 merge request!1208GUI: serialization refactoring part 7
......@@ -32,6 +32,7 @@ const QString Wavelength("Wavelength");
const QString AzimuthalAngle("AzimuthalAngle");
const QString InclinationAngle("InclinationAngle");
const QString Footprint("Footprint");
const QString BaseData("BaseData");
} // namespace Tag
......@@ -57,11 +58,79 @@ BeamItem::BeamItem()
void BeamItem::serialize(Streamer& s)
{
s.assertVersion(0);
Serialize::rwProperty(s, Tag::Intensity, m_intensity);
Serialize::rwClass(s, Tag::Wavelength, *m_wavelengthItem);
Serialize::rwClass(s, Tag::AzimuthalAngle, *m_azimuthalAngleItem);
Serialize::rwClass(s, Tag::InclinationAngle, *m_inclinationAngleItem);
// s.assertVersion(0);
// Serialize::rwProperty(s, Tag::Intensity, m_intensity);
// Serialize::rwClass(s, Tag::Wavelength, *m_wavelengthItem);
// Serialize::rwClass(s, Tag::AzimuthalAngle, *m_azimuthalAngleItem);
// Serialize::rwClass(s, Tag::InclinationAngle, *m_inclinationAngleItem);
if (s.xmlReader())
readFrom(s.xmlReader());
else if (s.xmlWriter())
writeTo(s.xmlWriter());
}
void BeamItem::writeTo(QXmlStreamWriter *w) const
{
ASSERT(m_wavelengthItem);
ASSERT(m_inclinationAngleItem);
XML::writeAttribute(w, XML::Attrib::version, uint(1));
// intensity
w->writeStartElement(Tag::Intensity);
m_intensity.writeTo(w);
w->writeEndElement();
// wavelength
w->writeStartElement(Tag::Wavelength);
m_wavelengthItem->writeTo(w);
w->writeEndElement();
// azimuthal angle
w->writeStartElement(Tag::AzimuthalAngle);
m_azimuthalAngleItem->writeTo(w);
w->writeEndElement();
// inclination angle
w->writeStartElement(Tag::InclinationAngle);
m_inclinationAngleItem->writeTo(w);
w->writeEndElement();
}
void BeamItem::readFrom(QXmlStreamReader *r)
{
ASSERT(m_wavelengthItem);
ASSERT(m_inclinationAngleItem);
const uint version = XML::readUIntAttribute(r, XML::Attrib::version);
Q_UNUSED(version)
while (r->readNextStartElement()) {
QString tag = r->name().toString();
// intensity
if (tag == Tag::Intensity) {
m_intensity.readFrom(r);
XML::gotoEndElementOfTag(r, tag);
// wavelength
} else if (tag == Tag::Wavelength) {
m_wavelengthItem->readFrom(r);
XML::gotoEndElementOfTag(r, tag);
// azimuthal angle
} else if (tag == Tag::AzimuthalAngle) {
m_azimuthalAngleItem->readFrom(r);
XML::gotoEndElementOfTag(r, tag);
// inclination angle
} else if (tag == Tag::InclinationAngle) {
m_inclinationAngleItem->readFrom(r);
XML::gotoEndElementOfTag(r, tag);
} else
r->skipCurrentElement();
}
}
double BeamItem::wavelength() const
......@@ -141,9 +210,51 @@ SpecularBeamItem::SpecularBeamItem(const InstrumentItem* owningInstrument)
void SpecularBeamItem::serialize(Streamer& s)
{
s.assertVersion(0);
Serialize::rwBaseClass<BeamItem>(s, "BeamItem", this);
m_footprint.rwSelected(s, Tag::Footprint);
// s.assertVersion(0);
// Serialize::rwBaseClass<BeamItem>(s, "BeamItem", this);
// m_footprint.rwSelected(s, Tag::Footprint);
if (s.xmlReader())
readFrom(s.xmlReader());
else if (s.xmlWriter())
writeTo(s.xmlWriter());
}
void SpecularBeamItem::writeTo(QXmlStreamWriter *w) const
{
XML::writeAttribute(w, XML::Attrib::version, uint(1));
// parameters from base class
w->writeStartElement(Tag::BaseData);
BeamItem::writeTo(w);
w->writeEndElement();
// footprint
w->writeStartElement(Tag::Footprint);
m_footprint.writeTo(w);
w->writeEndElement();
}
void SpecularBeamItem::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) {
BeamItem::readFrom(r);
XML::gotoEndElementOfTag(r, tag);
// footprint
} else if (tag == Tag::Footprint) {
m_footprint.readFrom(r);
XML::gotoEndElementOfTag(r, tag);
} else
r->skipCurrentElement();
}
}
double SpecularBeamItem::getInclinationAngle() const
......
......@@ -35,6 +35,8 @@ public:
virtual ~BeamItem() = default;
virtual void serialize(Streamer& s);
virtual void writeTo(QXmlStreamWriter* w) const;
virtual void readFrom(QXmlStreamReader* r);
DoubleProperty& intensity() { return m_intensity; }
const DoubleProperty& intensity() const { return m_intensity; }
......@@ -73,6 +75,8 @@ class SpecularBeamItem : public BeamItem {
public:
explicit SpecularBeamItem(const InstrumentItem* owningInstrument);
void serialize(Streamer& s) override;
void writeTo(QXmlStreamWriter* w) const override;
void readFrom(QXmlStreamReader* r) override;
double getInclinationAngle() const override;
void setInclinationAngle(double value) override;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment