diff --git a/src/GraphicsView.cpp b/src/GraphicsView.cpp index cbd87cc8..c587f081 100644 --- a/src/GraphicsView.cpp +++ b/src/GraphicsView.cpp @@ -75,6 +75,21 @@ QAction *GraphicsView::deleteSelectionAction() const void GraphicsView::setScene(BasicGraphicsScene *scene) { QGraphicsView::setScene(scene); + if (!scene) + { + // Clear actions. + delete _clearSelectionAction; + delete _deleteSelectionAction; + delete _duplicateSelectionAction; + delete _copySelectionAction; + delete _pasteAction; + _clearSelectionAction = nullptr; + _deleteSelectionAction = nullptr; + _duplicateSelectionAction = nullptr; + _copySelectionAction = nullptr; + _pasteAction = nullptr; + return; + } { // setup actions @@ -171,6 +186,8 @@ void GraphicsView::contextMenuEvent(QContextMenuEvent *event) return; } + if (!nodeScene()) return; + auto const scenePos = mapToScene(event->pos()); QMenu *menu = nodeScene()->createSceneMenu(scenePos); @@ -274,12 +291,15 @@ void GraphicsView::setupScale(double scale) void GraphicsView::onDeleteSelectedObjects() { + if (!nodeScene()) return; + nodeScene()->undoStack().push(new DeleteCommand(nodeScene())); } void GraphicsView::onDuplicateSelectedObjects() { - qDebug() << "ON DUPLICATE"; + if (!nodeScene()) return; + QPointF const pastePosition = scenePastePosition(); nodeScene()->undoStack().push(new CopyCommand(nodeScene())); @@ -288,11 +308,15 @@ void GraphicsView::onDuplicateSelectedObjects() void GraphicsView::onCopySelectedObjects() { + if (!nodeScene()) return; + nodeScene()->undoStack().push(new CopyCommand(nodeScene())); } void GraphicsView::onPasteObjects() { + if (!nodeScene()) return; + QPointF const pastePosition = scenePastePosition(); nodeScene()->undoStack().push(new PasteCommand(nodeScene(), pastePosition)); } @@ -335,6 +359,9 @@ void GraphicsView::mousePressEvent(QMouseEvent *event) void GraphicsView::mouseMoveEvent(QMouseEvent *event) { QGraphicsView::mouseMoveEvent(event); + + if (!scene()) return; + if (scene()->mouseGrabberItem() == nullptr && event->buttons() == Qt::LeftButton) { // Make sure shift is not being pressed if ((event->modifiers() & Qt::ShiftModifier) == 0) {