diff options
author | Lukáš Lalinský <lalinsky@gmail.com> | 2008-12-07 13:05:23 +0100 |
---|---|---|
committer | Lukáš Lalinský <lalinsky@gmail.com> | 2008-12-07 13:05:23 +0100 |
commit | 9e917b7f88963a7996d5d09c99e4ca41bde60e56 (patch) | |
tree | ac47448a6b4da902380a29c167537f39c0c89521 /src/diagramdocument.cpp | |
parent | 752a4031c7dfdc9e2bcf8684818d970c647c6920 (diff) | |
download | dbmodel-9e917b7f88963a7996d5d09c99e4ca41bde60e56.tar.xz |
Make item moves undo-able
Diffstat (limited to 'src/diagramdocument.cpp')
-rw-r--r-- | src/diagramdocument.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
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 <QGraphicsItem> #include <QDebug> #include <QFile> @@ -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 @@ -52,8 +53,26 @@ 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<DatabaseTable*>(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<DiagramItem *, QPointF> i(m_movedItems); + while (i.hasNext()) { + i.next(); + undoStack()->push(new MoveItemCommand(i.key(), i.value(), i.key()->pos())); + } } DatabaseTable * |