diff options
author | Lukáš Lalinský <lalinsky@gmail.com> | 2009-01-01 09:18:03 +0100 |
---|---|---|
committer | Lukáš Lalinský <lalinsky@gmail.com> | 2009-01-01 09:18:03 +0100 |
commit | b278e279a783de2e05dcf10be10aa0e18019baa5 (patch) | |
tree | 150b7b0f34fb341824b77d30732985a419405712 | |
parent | a02fbb306009ab27ab91867d0736e133d4d42b45 (diff) | |
download | dbmodel-b278e279a783de2e05dcf10be10aa0e18019baa5.tar.gz dbmodel-b278e279a783de2e05dcf10be10aa0e18019baa5.tar.bz2 |
Update line ends only on line property change, not on layout change
-rw-r--r-- | src/items/database/databaserelationship.cpp | 84 | ||||
-rw-r--r-- | src/items/database/databaserelationship.h | 1 |
2 files changed, 45 insertions, 40 deletions
diff --git a/src/items/database/databaserelationship.cpp b/src/items/database/databaserelationship.cpp index c47375a..35e6658 100644 --- a/src/items/database/databaserelationship.cpp +++ b/src/items/database/databaserelationship.cpp @@ -129,7 +129,7 @@ DatabaseRelationship::setCardinality(Cardinality cardinality) if (d->cardinality != cardinality) { d->cardinality = cardinality; emit propertyChanged("cardinality", cardinality); - updateLayout(); + updateEnds(); update(); } } @@ -146,7 +146,7 @@ DatabaseRelationship::setChildOptional(bool optional) if (d->childOptional != optional) { d->childOptional = optional; emit propertyChanged("childOptional", optional); - updateLayout(); + updateEnds(); update(); } } @@ -163,7 +163,7 @@ DatabaseRelationship::setParentOptional(bool optional) if (d->parentOptional != optional) { d->parentOptional = optional; emit propertyChanged("parentOptional", optional); - updateLayout(); + updateEnds(); update(); } } @@ -218,7 +218,7 @@ DatabaseRelationship::isIdentifying() const QRectF DatabaseRelationship::boundingRect() const { - return shape().boundingRect(); + return shape().controlPointRect(); } QPainterPath @@ -232,7 +232,7 @@ DatabaseRelationship::shape() const path.lineTo(d->line[i]); path.addPath(d->targetEnd); path.addPath(d->sourceEnd); - QPen pen(QPen(QColor(0, 0, 0), 1.5)); + QPen pen(QPen(QColor(0, 0, 0), 1.33)); pen.setJoinStyle(Qt::MiterJoin); QPainterPathStroker ps; ps.setCapStyle(pen.capStyle()); @@ -278,11 +278,47 @@ DatabaseRelationship::itemChange(GraphicsItemChange change, const QVariant &valu } void -DatabaseRelationship::updateLayout() +DatabaseRelationship::updateEnds() { - if (!scene()) + if (!document()) return; + switch (document()->notation()) { + case DiagramDocument::Relational: + d->fillEnds = true; + d->targetEnd = d->arrowHeadPath(); + d->sourceEnd = QPainterPath(); + d->lineStyle = Qt::SolidLine; + break; + case DiagramDocument::CrowsFoot: + d->fillEnds = false; + d->targetEnd = d->crowsFootPath(d->cardinality == ManyToMany, isParentOptional()); + d->sourceEnd = d->crowsFootPath(d->cardinality != OneToOne, isChildOptional()); + d->lineStyle = isIdentifying() ? Qt::SolidLine : Qt::DashLine; + break; + } + + if (!d->sourceEnd.isEmpty()) { + QLineF firstSegment(d->line[0], d->line[1]); + QMatrix matrix; + matrix.translate(firstSegment.p1().x(), firstSegment.p1().y()); + matrix.rotate(360 - firstSegment.angle() + 90 + 180); + d->sourceEnd = matrix.map(d->sourceEnd); + } + + if (!d->targetEnd.isEmpty()) { + int size = d->line.size(); + QLineF lastSegment(d->line[size-2], d->line[size-1]); + QMatrix matrix; + matrix.translate(lastSegment.p2().x(), lastSegment.p2().y()); + matrix.rotate(-lastSegment.angle() + 90); + d->targetEnd = matrix.map(d->targetEnd); + } +} + +void +DatabaseRelationship::updateLayout() +{ prepareGeometryChange(); Connector *connector1 = connector(0); @@ -329,39 +365,7 @@ DatabaseRelationship::updateLayout() haveLine = true; } - Q_ASSERT(haveLine); - - switch (document()->notation()) { - case DiagramDocument::Relational: - d->fillEnds = true; - d->targetEnd = d->arrowHeadPath(); - d->sourceEnd = QPainterPath(); - d->lineStyle = Qt::SolidLine; - break; - case DiagramDocument::CrowsFoot: - d->fillEnds = false; - d->targetEnd = d->crowsFootPath(d->cardinality == ManyToMany, isParentOptional()); - d->sourceEnd = d->crowsFootPath(d->cardinality != OneToOne, isChildOptional()); - d->lineStyle = isIdentifying() ? Qt::SolidLine : Qt::DashLine; - break; - } - - if (!d->sourceEnd.isEmpty()) { - QLineF firstSegment(d->line[0], d->line[1]); - QMatrix matrix; - matrix.translate(firstSegment.p1().x(), firstSegment.p1().y()); - matrix.rotate(360 - firstSegment.angle() + 90 + 180); - d->sourceEnd = matrix.map(d->sourceEnd); - } - - if (!d->targetEnd.isEmpty()) { - int size = d->line.size(); - QLineF lastSegment(d->line[size-2], d->line[size-1]); - QMatrix matrix; - matrix.translate(lastSegment.p2().x(), lastSegment.p2().y()); - matrix.rotate(-lastSegment.angle() + 90); - d->targetEnd = matrix.map(d->targetEnd); - } + updateEnds(); } #include "domutils.h" diff --git a/src/items/database/databaserelationship.h b/src/items/database/databaserelationship.h index b11f93e..044a891 100644 --- a/src/items/database/databaserelationship.h +++ b/src/items/database/databaserelationship.h @@ -101,6 +101,7 @@ public: public slots: void updateLayout(); + void updateEnds(); protected: QVariant itemChange(GraphicsItemChange change, const QVariant &value); |