feat(scene): add canvas and element context menus

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Ilya Ashikhmin 2026-07-02 23:39:31 +02:00
parent 730d0fa7a7
commit 3129440e60
2 changed files with 25 additions and 0 deletions

View File

@ -2,6 +2,8 @@
#include "DiagramScene.h" #include "DiagramScene.h"
#include <QContextMenuEvent>
#include <QMenu>
#include <QMimeData> #include <QMimeData>
#include <QMouseEvent> #include <QMouseEvent>
#include <QPainter> #include <QPainter>
@ -153,6 +155,28 @@ void GridView::dropEvent(QDropEvent* event)
event->acceptProposedAction(); 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) bool GridView::handleNodeTypeDrop(const QMimeData* mime, QPoint viewportPos)
{ {
if (!mime || !mime->hasFormat(QLatin1String(kNodeTypeMime))) if (!mime || !mime->hasFormat(QLatin1String(kNodeTypeMime)))

View File

@ -41,6 +41,7 @@ protected:
void dragEnterEvent(QDragEnterEvent* event) override; void dragEnterEvent(QDragEnterEvent* event) override;
void dragMoveEvent(QDragMoveEvent* event) override; void dragMoveEvent(QDragMoveEvent* event) override;
void dropEvent(QDropEvent* event) override; void dropEvent(QDropEvent* event) override;
void contextMenuEvent(QContextMenuEvent* event) override;
private: private:
void applyZoom(double factor); void applyZoom(double factor);