moved serialization
This commit is contained in:
@@ -144,6 +144,65 @@ QRect TimelineMarker::Draw(QPainter *p, const QPoint &pt, int max_right, double
|
||||
}
|
||||
}
|
||||
|
||||
bool TimelineMarker::load(QXmlStreamReader *reader)
|
||||
{
|
||||
rational in, out;
|
||||
|
||||
XMLAttributeLoop(reader, attr) {
|
||||
if (attr.name() == QStringLiteral("name")) {
|
||||
this->set_name(attr.value().toString());
|
||||
} else if (attr.name() == QStringLiteral("in")) {
|
||||
in = rational::fromString(attr.value().toString().toStdString());
|
||||
} else if (attr.name() == QStringLiteral("out")) {
|
||||
out = rational::fromString(attr.value().toString().toStdString());
|
||||
} else if (attr.name() == QStringLiteral("color")) {
|
||||
this->set_color(attr.value().toInt());
|
||||
}
|
||||
}
|
||||
|
||||
this->set_time(TimeRange(in, out));
|
||||
|
||||
// This element has no inner text, so just skip it
|
||||
reader->skipCurrentElement();
|
||||
}
|
||||
|
||||
void TimelineMarker::save(QXmlStreamWriter *writer) const
|
||||
{
|
||||
writer->writeAttribute(QStringLiteral("name"), this->name());
|
||||
writer->writeAttribute(QStringLiteral("in"), QString::fromStdString(this->time().in().toString()));
|
||||
writer->writeAttribute(QStringLiteral("out"), QString::fromStdString(this->time().out().toString()));
|
||||
writer->writeAttribute(QStringLiteral("color"), QString::number(this->color()));
|
||||
}
|
||||
|
||||
bool TimelineMarkerList::load(QXmlStreamReader *reader)
|
||||
{
|
||||
while (XMLReadNextStartElement(reader)) {
|
||||
if (reader->name() == QStringLiteral("marker")) {
|
||||
TimelineMarker *marker = new TimelineMarker(this);
|
||||
if (!marker->load(reader)) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
reader->skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void TimelineMarkerList::save(QXmlStreamWriter *writer) const
|
||||
{
|
||||
for (auto it=this->cbegin(); it!=this->cend(); it++) {
|
||||
TimelineMarker* marker = *it;
|
||||
|
||||
writer->writeStartElement(QStringLiteral("marker"));
|
||||
|
||||
marker->save(writer);
|
||||
|
||||
writer->writeEndElement(); // marker
|
||||
}
|
||||
}
|
||||
|
||||
void TimelineMarkerList::childEvent(QChildEvent *e)
|
||||
{
|
||||
QObject::childEvent(e);
|
||||
|
||||
@@ -55,6 +55,9 @@ public:
|
||||
static int GetMarkerHeight(const QFontMetrics &fm);
|
||||
QRect Draw(QPainter *p, const QPoint &pt, int max_right, double scale, bool selected);
|
||||
|
||||
bool load(QXmlStreamReader *reader);
|
||||
void save(QXmlStreamWriter *writer) const;
|
||||
|
||||
signals:
|
||||
void TimeChanged(const TimeRange& time);
|
||||
|
||||
@@ -89,6 +92,9 @@ public:
|
||||
inline TimelineMarker *front() const { return markers_.front(); }
|
||||
inline size_t size() const { return markers_.size(); }
|
||||
|
||||
bool load(QXmlStreamReader *reader);
|
||||
void save(QXmlStreamWriter *writer) const;
|
||||
|
||||
TimelineMarker *GetMarkerAtTime(const rational &t) const
|
||||
{
|
||||
for (auto it=markers_.cbegin(); it!=markers_.cend(); it++) {
|
||||
|
||||
@@ -55,6 +55,48 @@ void TimelineWorkArea::set_range(const TimeRange &range)
|
||||
emit RangeChanged(workarea_range_);
|
||||
}
|
||||
|
||||
bool TimelineWorkArea::load(QXmlStreamReader *reader)
|
||||
{
|
||||
rational range_in = this->in();
|
||||
rational range_out = this->out();
|
||||
|
||||
uint version = 0;
|
||||
XMLAttributeLoop(reader, attr) {
|
||||
if (attr.name() == QStringLiteral("version")) {
|
||||
version = attr.value().toUInt();
|
||||
}
|
||||
}
|
||||
|
||||
while (XMLReadNextStartElement(reader)) {
|
||||
if (reader->name() == QStringLiteral("enabled")) {
|
||||
this->set_enabled(reader->readElementText() != QStringLiteral("0"));
|
||||
} else if (reader->name() == QStringLiteral("in")) {
|
||||
range_in = rational::fromString(reader->readElementText().toStdString());
|
||||
} else if (reader->name() == QStringLiteral("out")) {
|
||||
range_out = rational::fromString(reader->readElementText().toStdString());
|
||||
} else {
|
||||
reader->skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
TimeRange loaded_workarea(range_in, range_out);
|
||||
|
||||
if (loaded_workarea != this->range()) {
|
||||
this->set_range(loaded_workarea);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void TimelineWorkArea::save(QXmlStreamWriter *writer) const
|
||||
{
|
||||
writer->writeAttribute(QStringLiteral("version"), QString::number(1));
|
||||
|
||||
writer->writeTextElement(QStringLiteral("enabled"), QString::number(this->enabled()));
|
||||
writer->writeTextElement(QStringLiteral("in"), QString::fromStdString(this->in().toString()));
|
||||
writer->writeTextElement(QStringLiteral("out"), QString::fromStdString(this->out().toString()));
|
||||
}
|
||||
|
||||
const rational &TimelineWorkArea::in() const
|
||||
{
|
||||
return workarea_range_.in();
|
||||
|
||||
@@ -45,6 +45,9 @@ public:
|
||||
const TimeRange& range() const;
|
||||
void set_range(const TimeRange& range);
|
||||
|
||||
bool load(QXmlStreamReader *reader);
|
||||
void save(QXmlStreamWriter *writer) const;
|
||||
|
||||
static const rational kResetIn;
|
||||
static const rational kResetOut;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user