@@ -95,6 +95,8 @@ insertSerializedItems(QJsonObject const & json,
9595
9696 // Restore the connection
9797 graphModel.addConnection (connId);
98+
99+ scene->connectionGraphicsObject (connId)->setSelected (true );
98100 }
99101}
100102
@@ -297,6 +299,12 @@ CopyCommand(BasicGraphicsScene* scene)
297299{
298300 QJsonObject sceneJson = serializeSelectedItems (scene);
299301
302+ if (sceneJson.empty () || sceneJson[" nodes" ].toArray ().empty ())
303+ {
304+ setObsolete (true );
305+ return ;
306+ }
307+
300308 QClipboard * clipboard = QApplication::clipboard ();
301309
302310 QByteArray const data = QJsonDocument (sceneJson).toJson ();
@@ -324,6 +332,19 @@ PasteCommand(BasicGraphicsScene* scene,
324332 : _scene(scene)
325333 , _mouseScenePos(mouseScenePos)
326334{
335+ _newSceneJson = takeSceneJsonFromClipboard ();
336+
337+ if (_newSceneJson.empty () || _newSceneJson[" nodes" ].toArray ().empty ())
338+ {
339+ setObsolete (true );
340+ return ;
341+ }
342+
343+ _newSceneJson = makeNewNodeIdsInScene (_newSceneJson);
344+
345+ QPointF averagePos = computeAverageNodePosition (_newSceneJson);
346+
347+ offsetNodeGroup (_newSceneJson, _mouseScenePos - averagePos);
327348}
328349
329350
@@ -341,18 +362,28 @@ redo()
341362{
342363 _scene->clearSelection ();
343364
344- _newSceneJson = takeSceneJsonFromClipboard ();
345-
346- if (_newSceneJson.empty ())
347- return ;
348-
349- _newSceneJson = makeNewNodeIdsInScene (_newSceneJson);
350-
351- QPointF averagePos = computeAverageNodePosition (_newSceneJson);
365+ // Ignore if pasted in content does not generate nodes.
366+ try
367+ {
368+ insertSerializedItems (_newSceneJson, _scene);
369+ }
370+ catch (...)
371+ {
372+ // If the paste does not work, delete all selected nodes and connections
373+ // `deleteNode(...)` implicitly removed connections
374+ auto & graphModel = _scene->graphModel ();
352375
353- offsetNodeGroup (_newSceneJson, _mouseScenePos - averagePos);
376+ QJsonArray nodesJsonArray;
377+ for (QGraphicsItem * item : _scene->selectedItems ())
378+ {
379+ if (auto n = qgraphicsitem_cast<NodeGraphicsObject*>(item))
380+ {
381+ graphModel.deleteNode (n->nodeId ());
382+ }
383+ }
354384
355- insertSerializedItems (_newSceneJson, _scene);
385+ setObsolete (true );
386+ }
356387}
357388
358389
0 commit comments