Skip to content

Commit e56d9a9

Browse files
committed
Move (de)serializtion for ConnectionId s to utils
ConnectionId s are serialized and deserialized now by the functions located in `ConnectinoIdUtils.hpp`. The functions shoundn't be a part of the public `AbstractGaphModel` API due to their simplicity. Besides some unification of the code for new generated NodeIds has been made.
1 parent 6963b26 commit e56d9a9

File tree

11 files changed

+67
-181
lines changed

11 files changed

+67
-181
lines changed

examples/dynamic_ports/DynamicPortsModel.cpp

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -385,34 +385,6 @@ loadNode(QJsonObject const & nodeJson)
385385
}
386386

387387

388-
QJsonObject
389-
DynamicPortsModel::
390-
saveConnection(ConnectionId const & connId) const
391-
{
392-
QJsonObject connJson;
393-
394-
connJson["outNodeId"] = static_cast<qint64>(connId.outNodeId);
395-
connJson["outPortIndex"] = static_cast<qint64>(connId.outPortIndex);
396-
connJson["intNodeId"] = static_cast<qint64>(connId.inNodeId);
397-
connJson["inPortIndex"] = static_cast<qint64>(connId.inPortIndex);
398-
399-
return connJson;
400-
}
401-
402-
403-
void
404-
DynamicPortsModel::
405-
loadConnection(QJsonObject const & connJson)
406-
{
407-
ConnectionId connId{static_cast<NodeId>(connJson["outNodeId"].toInt()),
408-
static_cast<PortIndex>(connJson["outPortIndex"].toInt()),
409-
static_cast<NodeId>(connJson["intNodeId"].toInt()),
410-
static_cast<PortIndex>(connJson["inPortIndex"].toInt())};
411-
412-
addConnection(connId);
413-
}
414-
415-
416388
void
417389
DynamicPortsModel::
418390
addPort(NodeId nodeId,

examples/dynamic_ports/DynamicPortsModel.hpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,6 @@ class DynamicPortsModel : public QtNodes::AbstractGraphModel
106106
void
107107
loadNode(QJsonObject const & nodeJson) override;
108108

109-
QJsonObject
110-
saveConnection(ConnectionId const & connId) const override;
111-
112-
void
113-
loadConnection(QJsonObject const & connJson) override;
114-
115109
void
116110
addPort(NodeId nodeId,
117111
PortType portType,
@@ -122,6 +116,8 @@ class DynamicPortsModel : public QtNodes::AbstractGraphModel
122116
PortType portType,
123117
PortIndex first);
124118

119+
NodeId newNodeId() override { return _nextNodeId++; }
120+
125121
private:
126122
std::unordered_set<NodeId> _nodeIds;
127123

examples/simple_graph_model/SimpleGraphModel.cpp

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ NodeId
7474
SimpleGraphModel::
7575
addNode(QString const nodeType)
7676
{
77-
NodeId newId = _nextNodeId++;
77+
NodeId newId = newNodeId();
7878
// Create new node.
7979
_nodeIds.insert(newId);
8080

@@ -307,6 +307,7 @@ deleteNode(NodeId const nodeId)
307307
{
308308
// Delete connections to this node first.
309309
auto connectionIds = allConnectionIds(nodeId);
310+
310311
for (auto & cId : connectionIds)
311312
{
312313
deleteConnection(cId);
@@ -366,31 +367,3 @@ loadNode(QJsonObject const & nodeJson)
366367
pos);
367368
}
368369
}
369-
370-
371-
QJsonObject
372-
SimpleGraphModel::
373-
saveConnection(ConnectionId const & connId) const
374-
{
375-
QJsonObject connJson;
376-
377-
connJson["outNodeId"] = static_cast<qint64>(connId.outNodeId);
378-
connJson["outPortIndex"] = static_cast<qint64>(connId.outPortIndex);
379-
connJson["intNodeId"] = static_cast<qint64>(connId.inNodeId);
380-
connJson["inPortIndex"] = static_cast<qint64>(connId.inPortIndex);
381-
382-
return connJson;
383-
}
384-
385-
386-
void
387-
SimpleGraphModel::
388-
loadConnection(QJsonObject const & connJson)
389-
{
390-
ConnectionId connId{static_cast<NodeId>(connJson["outNodeId"].toInt()),
391-
static_cast<PortIndex>(connJson["outPortIndex"].toInt()),
392-
static_cast<NodeId>(connJson["intNodeId"].toInt()),
393-
static_cast<PortIndex>(connJson["inPortIndex"].toInt())};
394-
395-
addConnection(connId);
396-
}

examples/simple_graph_model/SimpleGraphModel.hpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,7 @@ class SimpleGraphModel : public QtNodes::AbstractGraphModel
107107
void
108108
loadNode(QJsonObject const & nodeJson) override;
109109

110-
QJsonObject
111-
saveConnection(ConnectionId const & connId) const override;
112-
113-
void
114-
loadConnection(QJsonObject const & connJson) override;
110+
NodeId newNodeId() override { return _nextNodeId++; }
115111

116112
private:
117113
std::unordered_set<NodeId> _nodeIds;

examples/vertical_layout/SimpleGraphModel.cpp

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ void
346346
SimpleGraphModel::
347347
loadNode(QJsonObject const & nodeJson)
348348
{
349-
NodeId restoredNodeId = static_cast<NodeId>(nodeJson["id"].toInt());
349+
NodeId restoredNodeId = nodeJson["id"].toInt();
350350

351351
// Next NodeId must be larger that any id existing in the graph
352352
_nextNodeId = std::max(restoredNodeId + 1, _nextNodeId);
@@ -366,31 +366,3 @@ loadNode(QJsonObject const & nodeJson)
366366
pos);
367367
}
368368
}
369-
370-
371-
QJsonObject
372-
SimpleGraphModel::
373-
saveConnection(ConnectionId const & connId) const
374-
{
375-
QJsonObject connJson;
376-
377-
connJson["outNodeId"] = static_cast<qint64>(connId.outNodeId);
378-
connJson["outPortIndex"] = static_cast<qint64>(connId.outPortIndex);
379-
connJson["intNodeId"] = static_cast<qint64>(connId.inNodeId);
380-
connJson["inPortIndex"] = static_cast<qint64>(connId.inPortIndex);
381-
382-
return connJson;
383-
}
384-
385-
386-
void
387-
SimpleGraphModel::
388-
loadConnection(QJsonObject const & connJson)
389-
{
390-
ConnectionId connId{static_cast<NodeId>(connJson["outNodeId"].toInt()),
391-
static_cast<PortIndex>(connJson["outPortIndex"].toInt()),
392-
static_cast<NodeId>(connJson["intNodeId"].toInt()),
393-
static_cast<PortIndex>(connJson["inPortIndex"].toInt())};
394-
395-
addConnection(connId);
396-
}

examples/vertical_layout/SimpleGraphModel.hpp

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -107,17 +107,9 @@ class SimpleGraphModel : public QtNodes::AbstractGraphModel
107107
void
108108
loadNode(QJsonObject const & nodeJson) override;
109109

110-
/**
111-
* Serializes @param connId to QJsonObject
112-
*/
113-
QJsonObject
114-
saveConnection(ConnectionId const & connId) const override;
115-
116-
/**
117-
* Restores connection from QJsonObject and adds it to the graph.
118-
*/
119-
void
120-
loadConnection(QJsonObject const & connJson) override;
110+
private:
111+
NodeId
112+
newNodeId() override { return _nextNodeId++; }
121113

122114
private:
123115
std::unordered_set<NodeId> _nodeIds;

include/QtNodes/internal/AbstractGraphModel.hpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ class NODE_EDITOR_PUBLIC AbstractGraphModel : public QObject
3030
{
3131
Q_OBJECT
3232
public:
33+
/// Generates a new unique NodeId.
34+
virtual NodeId newNodeId() = 0;
35+
3336
/// @brief Returns the full set of unique Node Ids.
3437
/**
3538
* Model creator is responsible for generating unique `unsigned int`
@@ -230,14 +233,6 @@ class NODE_EDITOR_PUBLIC AbstractGraphModel : public QObject
230233
void
231234
loadNode(QJsonObject const &) {}
232235

233-
virtual
234-
QJsonObject
235-
saveConnection(ConnectionId const & connId) const = 0;
236-
237-
virtual
238-
void
239-
loadConnection(QJsonObject const & connJson) = 0;
240-
241236
public:
242237
/**
243238
* Function clears connections attached to the ports that are scheduled to be

include/QtNodes/internal/ConnectionIdUtils.hpp

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
#pragma once
22

3+
#include "Definitions.hpp"
4+
5+
#include <QJsonObject>
6+
37
#include <iostream>
48
#include <string>
59

6-
#include "Definitions.hpp"
7-
810
namespace QtNodes
911
{
1012

@@ -166,4 +168,32 @@ operator<<(std::ostream & ostr, ConnectionId const connectionId)
166168
}
167169

168170

171+
inline
172+
QJsonObject
173+
toJson(ConnectionId const & connId)
174+
{
175+
QJsonObject connJson;
176+
177+
connJson["outNodeId"] = static_cast<qint64>(connId.outNodeId);
178+
connJson["outPortIndex"] = static_cast<qint64>(connId.outPortIndex);
179+
connJson["intNodeId"] = static_cast<qint64>(connId.inNodeId);
180+
connJson["inPortIndex"] = static_cast<qint64>(connId.inPortIndex);
181+
182+
return connJson;
183+
}
184+
185+
186+
inline
187+
ConnectionId
188+
fromJson(QJsonObject const & connJson)
189+
{
190+
ConnectionId connId{static_cast<NodeId>(connJson["outNodeId"].toInt(InvalidNodeId)),
191+
static_cast<PortIndex>(connJson["outPortIndex"].toInt(InvalidPortIndex)),
192+
static_cast<NodeId>(connJson["intNodeId"].toInt(InvalidNodeId)),
193+
static_cast<PortIndex>(connJson["inPortIndex"].toInt(InvalidPortIndex))};
194+
195+
return connId;
196+
}
197+
198+
169199
}

include/QtNodes/internal/DataFlowGraphModel.hpp

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,6 @@ class NODE_EDITOR_PUBLIC DataFlowGraphModel
104104
void
105105
load(QJsonObject const &json) override;
106106

107-
QJsonObject
108-
saveConnection(ConnectionId const & connId) const override;
109-
110-
void
111-
loadConnection(QJsonObject const & connJson) override;
112-
113107
/**
114108
* Fetches the NodeDelegateModel for the given `nodeId` and tries to cast the
115109
* stored pointer to the given type
@@ -134,20 +128,7 @@ class NODE_EDITOR_PUBLIC DataFlowGraphModel
134128
PortIndex const);
135129

136130
private:
137-
NodeId
138-
newNodeId() { return _nextNodeId++; }
139-
140-
/**
141-
* The function could be used when we restore nodes from some file
142-
* and the NodeId values are already known. In this case we must
143-
* update internal counter for unique "next" node id in order not to
144-
* repeat the values when incrementing.
145-
*/
146-
void
147-
setNextNodeId(NodeId const restoredNodeId)
148-
{
149-
_nextNodeId = std::max(_nextNodeId, restoredNodeId + 1);
150-
}
131+
NodeId newNodeId() override { return _nextNodeId++; }
151132

152133
private Q_SLOTS:
153134
/**

src/DataFlowGraphModel.cpp

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ save() const
479479
QJsonArray connJsonArray;
480480
for (auto const & cid : _connectivity)
481481
{
482-
connJsonArray.append(saveConnection(cid));
482+
connJsonArray.append(toJson(cid));
483483
}
484484
sceneJson["connections"] = connJsonArray;
485485

@@ -538,48 +538,25 @@ load(QJsonObject const &jsonDocument)
538538
{
539539
QJsonArray nodesJsonArray = jsonDocument["nodes"].toArray();
540540

541-
for (QJsonValueRef node : nodesJsonArray)
541+
for (QJsonValueRef nodeJson : nodesJsonArray)
542542
{
543-
loadNode(node.toObject());
543+
loadNode(nodeJson.toObject());
544544
}
545545

546546
QJsonArray connectionJsonArray = jsonDocument["connections"].toArray();
547547

548548
for (QJsonValueRef connection : connectionJsonArray)
549549
{
550-
loadConnection(connection.toObject());
551-
}
552-
}
553-
554-
555-
556-
QJsonObject
557-
DataFlowGraphModel::
558-
saveConnection(ConnectionId const & connId) const
559-
{
560-
QJsonObject connJson;
550+
QJsonObject connJson = connection.toObject();
561551

562-
connJson["outNodeId"] = static_cast<qint64>(connId.outNodeId);
563-
connJson["outPortIndex"] = static_cast<qint64>(connId.outPortIndex);
564-
connJson["intNodeId"] = static_cast<qint64>(connId.inNodeId);
565-
connJson["inPortIndex"] = static_cast<qint64>(connId.inPortIndex);
552+
ConnectionId connId = fromJson(connJson);
566553

567-
return connJson;
554+
// Restore the connection
555+
addConnection(connId);
556+
}
568557
}
569558

570559

571-
void
572-
DataFlowGraphModel::
573-
loadConnection(QJsonObject const & connJson)
574-
{
575-
ConnectionId connId{static_cast<NodeId>(connJson["outNodeId"].toInt()),
576-
static_cast<PortIndex>(connJson["outPortIndex"].toInt()),
577-
static_cast<NodeId>(connJson["intNodeId"].toInt()),
578-
static_cast<PortIndex>(connJson["inPortIndex"].toInt())};
579-
580-
addConnection(connId);
581-
}
582-
583560

584561
void
585562
DataFlowGraphModel::

0 commit comments

Comments
 (0)