diff --git a/src/scene/GridView.cpp b/src/scene/GridView.cpp index afc1891..130fec4 100644 --- a/src/scene/GridView.cpp +++ b/src/scene/GridView.cpp @@ -2,6 +2,8 @@ #include "DiagramScene.h" +#include +#include #include #include #include @@ -153,6 +155,28 @@ void GridView::dropEvent(QDropEvent* event) event->acceptProposedAction(); } +void GridView::contextMenuEvent(QContextMenuEvent* event) +{ + QGraphicsItem* item = itemAt(event->pos()); + QMenu menu(this); + if (item) { + // Right-clicking an unselected element makes it the selection. + if (!item->isSelected()) { + scene()->clearSelection(); + item->setSelected(true); + } + menu.addAction(tr("Copy"), m_scene, &DiagramScene::copySelection); + menu.addAction(tr("Cut"), m_scene, &DiagramScene::cutSelection); + menu.addAction(tr("Delete"), m_scene, &DiagramScene::deleteSelection); + } else { + QAction* pasteAct = menu.addAction(tr("Paste"), m_scene, &DiagramScene::paste); + pasteAct->setEnabled(m_scene->canPaste()); + menu.addAction(tr("Select All"), m_scene, &DiagramScene::selectAll); + menu.addAction(tr("Zoom to Fit"), this, &GridView::zoomToFit); + } + menu.exec(event->globalPos()); +} + bool GridView::handleNodeTypeDrop(const QMimeData* mime, QPoint viewportPos) { if (!mime || !mime->hasFormat(QLatin1String(kNodeTypeMime))) diff --git a/src/scene/GridView.h b/src/scene/GridView.h index 58151ee..589f321 100644 --- a/src/scene/GridView.h +++ b/src/scene/GridView.h @@ -41,6 +41,7 @@ protected: void dragEnterEvent(QDragEnterEvent* event) override; void dragMoveEvent(QDragMoveEvent* event) override; void dropEvent(QDropEvent* event) override; + void contextMenuEvent(QContextMenuEvent* event) override; private: void applyZoom(double factor);