1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
#include "mainwindowlayoutinfo.h"
OLIVE_NAMESPACE_ENTER
void MainWindowLayoutInfo::toXml(QXmlStreamWriter *writer) const
{
writer->writeStartElement(QStringLiteral("layout"));
writer->writeStartElement(QStringLiteral("folders"));
foreach (Folder* folder, open_folders_) {
writer->writeTextElement(QStringLiteral("folder"),
QString::number(reinterpret_cast<quintptr>(folder)));
}
writer->writeEndElement(); // folders
writer->writeStartElement(QStringLiteral("timeline"));
foreach (const OpenSequence& sequence, open_sequences_) {
writer->writeTextElement(QStringLiteral("sequence"),
QString::number(reinterpret_cast<quintptr>(sequence.sequence)));
writer->writeTextElement(QStringLiteral("state"),
QString(sequence.panel_state.toBase64()));
}
writer->writeEndElement(); // timeline
writer->writeTextElement(QStringLiteral("state"), QString(state_.toBase64()));
writer->writeEndElement(); // layout
}
MainWindowLayoutInfo MainWindowLayoutInfo::fromXml(QXmlStreamReader *reader, XMLNodeData &xml_data)
{
MainWindowLayoutInfo info;
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("folders")) {
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("folder")) {
quintptr item_id = reader->readElementText().toULongLong();
Item* open_item = xml_data.item_ptrs.value(item_id);
if (open_item) {
info.open_folders_.append(static_cast<Folder*>(open_item));
}
} else {
reader->skipCurrentElement();
}
}
} else if (reader->name() == QStringLiteral("timeline")) {
Sequence* open_seq = nullptr;
QByteArray tl_state;
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("sequence")) {
quintptr item_id = reader->readElementText().toULongLong();
open_seq = dynamic_cast<Sequence*>(xml_data.item_ptrs.value(item_id));
} else if (reader->name() == QStringLiteral("state")) {
tl_state = QByteArray::fromBase64(reader->readElementText().toUtf8());
} else {
reader->skipCurrentElement();
}
}
if (open_seq) {
info.open_sequences_.append({open_seq, tl_state});
}
} else if (reader->name() == QStringLiteral("state")) {
info.state_ = QByteArray::fromBase64(reader->readElementText().toLatin1());
} else {
reader->skipCurrentElement();
}
}
return info;
}
void MainWindowLayoutInfo::add_folder(olive::Folder *f)
{
open_folders_.append(f);
}
void MainWindowLayoutInfo::add_sequence(const OpenSequence &seq)
{
open_sequences_.append(seq);
}
void MainWindowLayoutInfo::set_state(const QByteArray &layout)
{
state_ = layout;
}
OLIVE_NAMESPACE_EXIT
|