summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukáš Lalinský <lalinsky@gmail.com>2009-01-01 09:18:03 +0100
committerLukáš Lalinský <lalinsky@gmail.com>2009-01-01 09:18:03 +0100
commitb278e279a783de2e05dcf10be10aa0e18019baa5 (patch)
tree150b7b0f34fb341824b77d30732985a419405712
parenta02fbb306009ab27ab91867d0736e133d4d42b45 (diff)
downloaddbmodel-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.cpp84
-rw-r--r--src/items/database/databaserelationship.h1
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);