summaryrefslogtreecommitdiff
path: root/src/diagramdocument.cpp
diff options
context:
space:
mode:
authorLukáš Lalinský <lalinsky@gmail.com>2008-12-07 13:05:23 +0100
committerLukáš Lalinský <lalinsky@gmail.com>2008-12-07 13:05:23 +0100
commit9e917b7f88963a7996d5d09c99e4ca41bde60e56 (patch)
treeac47448a6b4da902380a29c167537f39c0c89521 /src/diagramdocument.cpp
parent752a4031c7dfdc9e2bcf8684818d970c647c6920 (diff)
downloaddbmodel-9e917b7f88963a7996d5d09c99e4ca41bde60e56.tar.xz
Make item moves undo-able
Diffstat (limited to 'src/diagramdocument.cpp')
-rw-r--r--src/diagramdocument.cpp28
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 *