summaryrefslogtreecommitdiff
path: root/src/diagramdocument.cpp
diff options
context:
space:
mode:
authorLukáš Lalinský <lalinsky@gmail.com>2008-12-07 13:23:12 +0100
committerLukáš Lalinský <lalinsky@gmail.com>2008-12-07 13:23:12 +0100
commit67aa58e87c32fad4948abd859db30a4e7f9551c7 (patch)
tree493d42a676db1ad41d0bb04d019d82e5951b6c32 /src/diagramdocument.cpp
parent9e917b7f88963a7996d5d09c99e4ca41bde60e56 (diff)
downloaddbmodel-67aa58e87c32fad4948abd859db30a4e7f9551c7.tar.xz
Make item additions undo-able
Diffstat (limited to 'src/diagramdocument.cpp')
-rw-r--r--src/diagramdocument.cpp39
1 files changed, 24 insertions, 15 deletions
diff --git a/src/diagramdocument.cpp b/src/diagramdocument.cpp
index fe8c53f..d0a8b4c 100644
--- a/src/diagramdocument.cpp
+++ b/src/diagramdocument.cpp
@@ -52,6 +52,18 @@ DiagramDocument::updatePositions(DatabaseTable *table)
}
}
+template <class T> QList<T *>
+DiagramDocument::itemsByType()
+{
+ QList<T *> result;
+ foreach(QGraphicsItem *item, items()) {
+ if (item->type() == T::Type) {
+ result.append(static_cast<T *>(item));
+ }
+ }
+ return result;
+}
+
void
DiagramDocument::itemMoved(DiagramItem *item)
{
@@ -77,8 +89,7 @@ DiagramDocument::mousePressEvent(QGraphicsSceneMouseEvent *event)
DatabaseTable *table = new DatabaseTable();
table->setPos(event->scenePos());
table->setZValue(10.0);
- m_tables << table;
- addItem(table);
+ undoStack()->push(new AddItemCommand(this, table));
clearSelection();
table->setSelected(true);
setMode(Select);
@@ -121,7 +132,6 @@ DiagramDocument::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
relation->setTarget(target);
relation->setZValue(1.0);
addItem(relation);
- m_relations << relation;
}
delete m_line;
@@ -157,10 +167,8 @@ DiagramDocument::deleteSelectedItems()
if (table) {
foreach (DatabaseRelationship *relation, findTableRelations(table)) {
removeItem(relation);
- m_relations.removeAll(relation);
}
removeItem(table);
- m_tables.removeAll(table);
}
}
}
@@ -169,7 +177,7 @@ QList<DatabaseRelationship *>
DiagramDocument::findTableRelations(DatabaseTable *table)
{
QList<DatabaseRelationship *> result;
- foreach (DatabaseRelationship *relation, m_relations) {
+ foreach (DatabaseRelationship *relation, itemsByType<DatabaseRelationship>()) {
if (relation->source() == table || relation->target() == table) {
result << relation;
}
@@ -208,7 +216,8 @@ DiagramDocument::save(const QString &fileName)
QDomElement tableListElement = doc.createElement("table-list");
root.appendChild(tableListElement);
- foreach (DatabaseTable *table, m_tables) {
+ QList<DatabaseTable *> tables = itemsByType<DatabaseTable>();
+ foreach (DatabaseTable *table, tables) {
QDomElement tableElement = doc.createElement("table");
tableListElement.appendChild(tableElement);
@@ -238,10 +247,10 @@ DiagramDocument::save(const QString &fileName)
QDomElement relationListElement = doc.createElement("relation-list");
root.appendChild(relationListElement);
- foreach (DatabaseRelationship *relation, m_relations) {
+ foreach (DatabaseRelationship *relation, itemsByType<DatabaseRelationship>()) {
QDomElement relationElement = doc.createElement("relation");
- relationElement.setAttribute("from", QString::number(m_tables.indexOf(relation->sourceTable())));
- relationElement.setAttribute("to", QString::number(m_tables.indexOf(relation->targetTable())));
+ relationElement.setAttribute("from", QString::number(tables.indexOf(relation->sourceTable())));
+ relationElement.setAttribute("to", QString::number(tables.indexOf(relation->targetTable())));
relationListElement.appendChild(relationElement);
}
@@ -269,6 +278,8 @@ DiagramDocument::load(const QString &fileName)
QDomElement root = doc.firstChildElement("database-model");
+ QList<DatabaseTable *> tables;
+
QDomElement tableListElement = root.firstChildElement("table-list");
QDomElement tableElement = tableListElement.firstChildElement("table");
while (!tableElement.isNull()) {
@@ -297,8 +308,8 @@ DiagramDocument::load(const QString &fileName)
columnElement = columnElement.nextSiblingElement("column");
}
- m_tables << table;
addItem(table);
+ tables.append(table);
tableElement = tableElement.nextSiblingElement("table");
}
@@ -313,12 +324,10 @@ DiagramDocument::load(const QString &fileName)
int index1 = relationElement.attribute("to").toInt(&ok);
if (ok) {
DatabaseRelationship *relation = new DatabaseRelationship();
- relation->setSource(m_tables[index0]);
- relation->setTarget(m_tables[index1]);
- m_relations << relation;
+ relation->setSource(tables[index0]);
+ relation->setTarget(tables[index1]);
addItem(relation);
}
}
}
-
}