33#include " BasicGraphicsScene.hpp"
44#include " ConnectionGraphicsObject.hpp"
55#include " ConnectionIdUtils.hpp"
6+ #include " ConnectionIdHash.hpp"
67#include " Definitions.hpp"
78#include " GroupGraphicsObject.hpp"
89#include " NodeGraphicsObject.hpp"
@@ -24,6 +25,7 @@ static QJsonObject serializeSelectedItems(BasicGraphicsScene *scene)
2425 auto &graphModel = scene->graphModel ();
2526
2627 std::unordered_set<NodeId> selectedNodes;
28+ std::unordered_set<ConnectionId> selectedConnections;
2729
2830 QJsonArray nodesJsonArray;
2931 QJsonArray groupsJsonArray;
@@ -43,21 +45,13 @@ static QJsonObject serializeSelectedItems(BasicGraphicsScene *scene)
4345 if (auto group = qgraphicsitem_cast<GroupGraphicsObject *>(item)) {
4446 for (auto *node : group->group ().childNodes ()) {
4547 appendNode (node);
46-
47- for (auto const &connectionId : graphModel.allConnectionIds (node->nodeId ())) {
48- connJsonArray.append (toJson (connectionId));
49- }
5048 }
5149 }
5250 }
5351
5452 for (QGraphicsItem *item : scene->selectedItems ()) {
5553 if (auto ngo = qgraphicsitem_cast<NodeGraphicsObject *>(item)) {
5654 appendNode (ngo);
57-
58- for (auto const &connectionId : graphModel.allConnectionIds (ngo->nodeId ())) {
59- connJsonArray.append (toJson (connectionId));
60- }
6155 }
6256 }
6357
@@ -79,13 +73,27 @@ static QJsonObject serializeSelectedItems(BasicGraphicsScene *scene)
7973 }
8074 }
8175
76+ auto appendConnection = [&](ConnectionId const &connectionId) {
77+ if (selectedNodes.count (connectionId.outNodeId ) == 0
78+ || selectedNodes.count (connectionId.inNodeId ) == 0 ) {
79+ return ;
80+ }
81+
82+ auto const inserted = selectedConnections.insert (connectionId);
83+ if (inserted.second ) {
84+ connJsonArray.append (toJson (connectionId));
85+ }
86+ };
87+
88+ for (NodeId nodeId : selectedNodes) {
89+ for (auto const &connectionId : graphModel.allConnectionIds (nodeId)) {
90+ appendConnection (connectionId);
91+ }
92+ }
93+
8294 for (QGraphicsItem *item : scene->selectedItems ()) {
8395 if (auto c = qgraphicsitem_cast<ConnectionGraphicsObject *>(item)) {
84- auto const &cid = c->connectionId ();
85-
86- if (selectedNodes.count (cid.outNodeId ) > 0 && selectedNodes.count (cid.inNodeId ) > 0 ) {
87- connJsonArray.append (toJson (cid));
88- }
96+ appendConnection (c->connectionId ());
8997 }
9098 }
9199
0 commit comments