Skip to content

Commit 1b173f8

Browse files
authored
fix: correct node copy/paste behavior with unwanted connections (#527)
1 parent 49c2f0c commit 1b173f8

1 file changed

Lines changed: 21 additions & 13 deletions

File tree

src/UndoCommands.cpp

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
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

Comments
 (0)