File: mainwindowlayoutinfo.cpp

package info (click to toggle)
olive-editor 20200620-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 40,228 kB
  • sloc: cpp: 51,932; sh: 56; makefile: 7; xml: 7
file content (104 lines) | stat: -rw-r--r-- 2,911 bytes parent folder | download
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