blob: e6711d98961baf9bb8143a6debea7a4c985d7f09 (
plain)
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
105
106
107
108
109
110
111
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
#pragma once
#include <QPoint>
#include <QPointF>
#include <QPolygon>
#include <QPolygonF>
#include <QRect>
#include <QRectF>
#include <QStringList>
namespace ScxmlEditor {
namespace PluginInterface {
/**
* @brief The Serializer class provides serialization of item-data to the string.
*
* For example items inside the graphicsview uses this class when they need to save ui-properties to the scxmltag-attribute.
*/
class Serializer
{
public:
Serializer();
void seek(int pos);
void clear();
void append(const QPolygonF &d);
void append(const QPolygon &d);
void append(const QRectF &d);
void append(const QRect &d);
void append(const QPointF &d);
void append(const QPoint &d);
void read(QPolygonF &d);
void read(QPolygon &d);
void read(QRectF &d);
void read(QRect &d);
void read(QPointF &d);
void read(QPoint &d);
void setSeparator(const QString &sep);
void setData(const QString &d);
QString data() const;
private:
void append(double d);
double readNext();
int m_index = 0;
const QString m_separator;
QStringList m_data;
template <class T, class P>
void readPolygon(P &d)
{
int count = (m_data.count() - m_index) / 2;
for (int i = 0; i < count; ++i) {
T p;
read(p);
d << p;
}
}
template <class T>
void readRect(T &d)
{
d.setLeft(readNext());
d.setTop(readNext());
d.setWidth(readNext());
d.setHeight(readNext());
}
template <class T>
void readPoint(T &d)
{
d.setX(readNext());
d.setY(readNext());
}
template <class T>
void appendPolygon(const T &d)
{
for (int i = 0; i < d.count(); ++i) {
append(d[i].x());
append(d[i].y());
}
}
template <class T>
void appendPoint(const T &d)
{
append(d.x());
append(d.y());
}
template <class T>
void appendRect(const T &d)
{
append(d.left());
append(d.top());
append(d.width());
append(d.height());
}
};
} // namespace PluginInterface
} // namespace ScxmlEditor
|