wiRedPanda
Logic Circuit Simulator
Loading...
Searching...
No Matches
GraphicElementSerializer.h
Go to the documentation of this file.
1// Copyright 2015 - 2026, GIBIS-UNIFESP and the wiRedPanda contributors
2// SPDX-License-Identifier: GPL-3.0-or-later
3
7
8#pragma once
9
10#include <QCoreApplication>
11#include <QHash>
12#include <QList>
13#include <QMap>
14#include <QString>
15#include <QtGlobal>
16#include <QVariant>
17
18class GraphicElement;
19class Port;
20class QDataStream;
21class QPointF;
22class QVersionNumber;
25
38{
39 // tr context for the load-error PANDACEPTION throws. lupdate extracts the plain
40 // PANDACEPTION(...) calls below under the "GraphicElementSerializer" context (the
41 // tr+=PANDACEPTION alias resolves via this class scope); PANDACEPTION_WITH_CONTEXT is NOT
42 // extracted.
43 Q_DECLARE_TR_FUNCTIONS(GraphicElementSerializer)
44
45public:
47 static void save(const GraphicElement &element, QDataStream &stream, SerializationOptions options);
48
50 static void load(GraphicElement &element, QDataStream &stream, SerializationContext &context);
51
52private:
53 static void loadOldFormat(GraphicElement &element, QDataStream &stream, SerializationContext &context);
54 static void loadNewFormat(GraphicElement &element, QDataStream &stream, SerializationContext &context);
55
58 static void validateFinitePos(const QPointF &pos);
59
62 static void validateFiniteAngle(qreal angle);
63
64 static void loadPos(GraphicElement &element, QDataStream &stream);
65 static void loadRotation(GraphicElement &element, QDataStream &stream, const QVersionNumber &version);
66 static void loadLabel(GraphicElement &element, QDataStream &stream, const QVersionNumber &version);
67 static void loadPortsSize(QDataStream &stream, const QVersionNumber &version);
68 static void loadTrigger(GraphicElement &element, QDataStream &stream, const QVersionNumber &version);
69
70 static void loadInputPorts(GraphicElement &element, QDataStream &stream, SerializationContext &context);
71 static void loadInputPort(GraphicElement &element, QDataStream &stream, SerializationContext &context, int port);
72 static void loadOutputPorts(GraphicElement &element, QDataStream &stream, SerializationContext &context);
73 static void loadOutputPort(GraphicElement &element, QDataStream &stream, SerializationContext &context, int port);
74
75 static void removeSurplusInputs(GraphicElement &element, quint64 inputSize_, SerializationContext &context);
76 static void removeSurplusOutputs(GraphicElement &element, quint64 outputSize_, SerializationContext &context);
77
78 static void loadPixmapAppearanceNames(GraphicElement &element, QDataStream &stream, SerializationContext &context);
79 static void loadPixmapAppearanceName(GraphicElement &element, QDataStream &stream, int index, const SerializationContext &context);
80
84 static QList<QMap<QString, QVariant>> readPortList(QDataStream &stream, const char *label);
85
87 static void removePortFromMap(Port *deletedPort, QHash<quint64, Port *> &portMap);
88};
Serializes a GraphicElement to/from a versioned QDataStream.
static void save(const GraphicElement &element, QDataStream &stream, SerializationOptions options)
Writes element to stream (current keyed-QMap format).
static void load(GraphicElement &element, QDataStream &stream, SerializationContext &context)
Reads element from stream, dispatching on the format version in context.
Abstract base class for all graphical circuit elements in wiRedPanda.
Abstract base class for circuit element ports (connection endpoints).
Definition Port.h:39
Bundles all per-deserialization state so that load() overrides receive it through one explicit parame...
Options passed to GraphicElement::save() (and friends); the save-side counterpart of SerializationCon...