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

BeamDistributionItems: add readFrom

parent 0590db0b
No related branches found
No related tags found
1 merge request!1208GUI: serialization refactoring part 7
......@@ -16,17 +16,6 @@
#include "Base/Const/Units.h"
#include "GUI/Support/XML/Serialize.h"
namespace {
namespace Tag {
const QString BeamAzimuthalDistribution("BeamAzimuthalDistribution");
const QString BeamInclinationDistribution("BeamInclinationDistribution");
} // namespace Tag
} // namespace
BeamAzimuthalAngleItem::BeamAzimuthalAngleItem()
{
m_distribution.initWithInitializer("Distribution", "", DistributionItemCatalog::types(),
......@@ -35,13 +24,26 @@ BeamAzimuthalAngleItem::BeamAzimuthalAngleItem()
void BeamAzimuthalAngleItem::serialize(Streamer& s)
{
s.assertVersion(0);
m_distribution.rwSelected(s, Tag::BeamAzimuthalDistribution);
// s.assertVersion(0);
// m_distribution.rwSelected(s, Tag::BeamAzimuthalDistribution);
// if (s.xmlReader()) {
// m_distribution->setLimits(RealLimits::limited(-90.0, 90.0));
// m_distribution->setUnit(Unit::degree);
// }
if (s.xmlReader())
readFrom(s.xmlReader());
else if (s.xmlWriter())
writeTo(s.xmlWriter());
}
if (s.xmlReader()) {
m_distribution->setLimits(RealLimits::limited(-90.0, 90.0));
m_distribution->setUnit(Unit::degree);
}
void BeamAzimuthalAngleItem::readFrom(QXmlStreamReader *r)
{
// Here we only directly call parental method, so no versioning
BeamDistributionItem::readFrom(r);
m_distribution->setLimits(RealLimits::limited(-90.0, 90.0));
m_distribution->setUnit(Unit::degree);
}
void BeamAzimuthalAngleItem::initDistribution(DistributionItem* newDistribution,
......@@ -83,13 +85,26 @@ BeamInclinationAngleItem::BeamInclinationAngleItem()
void BeamInclinationAngleItem::serialize(Streamer& s)
{
s.assertVersion(0);
m_distribution.rwSelected(s, Tag::BeamInclinationDistribution);
// s.assertVersion(0);
// m_distribution.rwSelected(s, Tag::BeamInclinationDistribution);
// if (s.xmlReader()) {
// m_distribution->setLimits(RealLimits::limited(-90.0, 90.0));
// m_distribution->setUnit(Unit::degree);
// }
if (s.xmlReader())
readFrom(s.xmlReader());
else if (s.xmlWriter())
writeTo(s.xmlWriter());
}
void BeamInclinationAngleItem::readFrom(QXmlStreamReader *r)
{
// Here we only directly call parental method, so no versioning
BeamDistributionItem::readFrom(r);
if (s.xmlReader()) {
m_distribution->setLimits(RealLimits::limited(-90.0, 90.0));
m_distribution->setUnit(Unit::degree);
}
m_distribution->setLimits(RealLimits::limited(-90.0, 90.0));
m_distribution->setUnit(Unit::degree);
}
double BeamInclinationAngleItem::inclinationAngle() const
......
......@@ -22,6 +22,8 @@ public:
BeamAzimuthalAngleItem();
void serialize(Streamer& s) override;
void readFrom(QXmlStreamReader* r) override;
double azimuthalAngle() const;
double scaleFactor() const override;
......@@ -35,6 +37,8 @@ public:
BeamInclinationAngleItem();
void serialize(Streamer& s) override;
void readFrom(QXmlStreamReader* r) override;
double inclinationAngle() const;
double scaleFactor() const override;
......
......@@ -16,6 +16,42 @@
#include "GUI/Support/XML/Serialize.h"
#include "Param/Distrib/Distributions.h"
namespace {
namespace Tag {
const QString Distribution("Distribution");
}
}
void BeamDistributionItem::writeTo(QXmlStreamWriter *w) const
{
XML::writeAttribute(w, XML::Attrib::version, uint(1));
// distribution
w->writeStartElement(Tag::Distribution);
m_distribution.writeTo(w);
w->writeEndElement();
}
void BeamDistributionItem::readFrom(QXmlStreamReader *r)
{
const uint version = XML::readUIntAttribute(r, XML::Attrib::version);
Q_UNUSED(version)
while (r->readNextStartElement()) {
QString tag = r->name().toString();
// distribution
if (tag == Tag::Distribution) {
m_distribution.readFrom(r);
XML::gotoEndElementOfTag(r, tag);
} else
r->skipCurrentElement();
}
}
std::unique_ptr<ParameterDistribution> BeamDistributionItem::getParameterDistributionForName(
ParameterDistribution::WhichParameter which) const
{
......
......@@ -28,6 +28,8 @@ public:
virtual ~BeamDistributionItem() = default;
virtual void serialize(Streamer& s) = 0;
virtual void writeTo(QXmlStreamWriter* w) const;
virtual void readFrom(QXmlStreamReader* r);
std::unique_ptr<ParameterDistribution>
getParameterDistributionForName(ParameterDistribution::WhichParameter which) const;
......
......@@ -18,12 +18,6 @@
namespace {
namespace Tag {
const QString BeamWavelengthDistribution("BeamWavelengthDistribution");
} // namespace Tag
const double default_wl = 0.1;
void initDistribution(DistributionItem* newDistribution,
......@@ -62,13 +56,26 @@ BeamWavelengthItem::BeamWavelengthItem(bool onlySymmetricDistributions)
void BeamWavelengthItem::serialize(Streamer& s)
{
s.assertVersion(0);
m_distribution.rwSelected(s, Tag::BeamWavelengthDistribution);
// s.assertVersion(0);
// m_distribution.rwSelected(s, Tag::BeamWavelengthDistribution);
// if (s.xmlReader()) {
// m_distribution->setLimits(RealLimits::positive());
// m_distribution->setUnit(Unit::nanometer);
// }
if (s.xmlReader())
readFrom(s.xmlReader());
else if (s.xmlWriter())
writeTo(s.xmlWriter());
}
if (s.xmlReader()) {
m_distribution->setLimits(RealLimits::positive());
m_distribution->setUnit(Unit::nanometer);
}
void BeamWavelengthItem::readFrom(QXmlStreamReader *r)
{
// Here we only directly call parental method, so no versioning
BeamDistributionItem::readFrom(r);
m_distribution->setLimits(RealLimits::positive());
m_distribution->setUnit(Unit::nanometer);
}
double BeamWavelengthItem::wavelength() const
......
......@@ -21,6 +21,7 @@ class BeamWavelengthItem : public BeamDistributionItem {
public:
BeamWavelengthItem();
void serialize(Streamer& s) override;
void readFrom(QXmlStreamReader* r) override;
//! Returns wavelength. In the case of distribution applied, returns its mean.
double wavelength() const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment