From 9e917b7f88963a7996d5d09c99e4ca41bde60e56 Mon Sep 17 00:00:00 2001 From: Lukáš Lalinský Date: Sun, 7 Dec 2008 13:05:23 +0100 Subject: Make item moves undo-able --- src/diagramdocument.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'src/diagramdocument.cpp') diff --git a/src/diagramdocument.cpp b/src/diagramdocument.cpp index 573d08c..fe8c53f 100644 --- a/src/diagramdocument.cpp +++ b/src/diagramdocument.cpp @@ -18,6 +18,7 @@ #include "databasetable.h" #include "databaserelationship.h" #include "column.h" +#include "commands.h" #include #include #include @@ -27,7 +28,7 @@ DiagramDocument::DiagramDocument(QObject *parent) : QGraphicsScene(parent), m_mode(DiagramDocument::Select), m_line(NULL) { m_undoStack = new QUndoStack(this); - connect(this, SIGNAL(tableMoved(DatabaseTable *)), SLOT(updatePositions(DatabaseTable *))); + //connect(this, SIGNAL(tableMoved(DatabaseTable *)), SLOT(updatePositions(DatabaseTable *))); } DiagramDocument::Mode @@ -51,9 +52,27 @@ DiagramDocument::updatePositions(DatabaseTable *table) } } +void +DiagramDocument::itemMoved(DiagramItem *item) +{ + if (m_trackingMoves) { + if (!m_movedItems.contains(item)) { + m_movedItems[item] = item->pos(); + } + } +} + +void +DiagramDocument::itemHasMoved(DiagramItem *item) +{ + updatePositions(static_cast(item)); +} + void DiagramDocument::mousePressEvent(QGraphicsSceneMouseEvent *event) { + m_movedItems.clear(); + m_trackingMoves = true; if (m_mode == AddTable && event->button() == Qt::LeftButton) { DatabaseTable *table = new DatabaseTable(); table->setPos(event->scenePos()); @@ -112,6 +131,13 @@ DiagramDocument::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) return; } QGraphicsScene::mouseReleaseEvent(event); + m_trackingMoves = false; + + QMapIterator i(m_movedItems); + while (i.hasNext()) { + i.next(); + undoStack()->push(new MoveItemCommand(i.key(), i.value(), i.key()->pos())); + } } DatabaseTable * -- cgit v1.2.3-54-g00ecf