feat(scene): add canvas and element context menus
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
730d0fa7a7
commit
3129440e60
@ -2,6 +2,8 @@
|
||||
|
||||
#include "DiagramScene.h"
|
||||
|
||||
#include <QContextMenuEvent>
|
||||
#include <QMenu>
|
||||
#include <QMimeData>
|
||||
#include <QMouseEvent>
|
||||
#include <QPainter>
|
||||
@ -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)))
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user