From 2124865820d4b1dfe68580c81972b86d02823d74 Mon Sep 17 00:00:00 2001 From: Lukáš Lalinský Date: Sun, 7 Dec 2008 13:56:43 +0100 Subject: Remove connections along with the object --- src/diagramdocument.cpp | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) (limited to 'src/diagramdocument.cpp') diff --git a/src/diagramdocument.cpp b/src/diagramdocument.cpp index 6edd54e..2aa486d 100644 --- a/src/diagramdocument.cpp +++ b/src/diagramdocument.cpp @@ -15,6 +15,8 @@ // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. #include "diagramdocument.h" +#include "diagramobject.h" +#include "diagramconnection.h" #include "databasetable.h" #include "databaserelationship.h" #include "column.h" @@ -28,7 +30,6 @@ 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 *))); } DiagramDocument::Mode @@ -45,11 +46,10 @@ DiagramDocument::setMode(Mode mode) } void -DiagramDocument::updatePositions(DatabaseTable *table) +DiagramDocument::updatePositions(DiagramObject *object) { - foreach (DatabaseRelationship *relation, findTableRelations(table)) { - relation->updatePositions(); - } + foreach (DiagramConnection *connection, findConnections(object)) + connection->updatePositions(); } template QList @@ -57,9 +57,13 @@ DiagramDocument::itemsByType() { QList result; foreach(QGraphicsItem *item, items()) { - if (item->type() == T::Type) { - result.append(static_cast(item)); + T *typedItem = dynamic_cast(item); + if (typedItem) { + result.append(typedItem); } +/* if (item->type() == T::Type) { + result.append(static_cast(item)); + }*/ } return result; } @@ -165,24 +169,18 @@ DiagramDocument::deleteSelectedItems() foreach (QGraphicsItem *item, selectedItems()) { DatabaseTable *table = qgraphicsitem_cast(item); if (table) { - // FIXME - foreach (DatabaseRelationship *relation, findTableRelations(table)) { - removeItem(relation); - } - undoStack()->push(new RemoveItemCommand(this, table)); + undoStack()->push(new RemoveObjectCommand(this, table)); } } } -QList -DiagramDocument::findTableRelations(DatabaseTable *table) +QList +DiagramDocument::findConnections(DiagramObject *object) { - QList result; - foreach (DatabaseRelationship *relation, itemsByType()) { - if (relation->source() == table || relation->target() == table) { - result << relation; - } - } + QList result; + foreach (DiagramConnection *connection, itemsByType()) + if (connection->source() == object || connection->target() == object) + result.append(connection); return result; } -- cgit v1.2.3-54-g00ecf