diff options
author | Lukáš Lalinský <lalinsky@gmail.com> | 2009-01-04 20:59:00 +0100 |
---|---|---|
committer | Lukáš Lalinský <lalinsky@gmail.com> | 2009-01-04 20:59:00 +0100 |
commit | 4022a373822cf0e17151dc2a599ff7310a822599 (patch) | |
tree | 2f817739e3dfcb3471dc2d7b448534c4cc5d35ea | |
parent | fe60af400f8bb9e969abf6c9a877ed256df8cd23 (diff) | |
download | dbmodel-4022a373822cf0e17151dc2a599ff7310a822599.tar.gz dbmodel-4022a373822cf0e17151dc2a599ff7310a822599.tar.bz2 |
Show "FK" next to foreign key columns
-rw-r--r-- | src/hub.cpp | 15 | ||||
-rw-r--r-- | src/hub.h | 3 | ||||
-rw-r--r-- | src/items/database/column.cpp | 14 | ||||
-rw-r--r-- | src/items/database/column.h | 2 | ||||
-rw-r--r-- | src/items/database/databaserelationship.cpp | 6 | ||||
-rw-r--r-- | src/items/database/databasetable.cpp | 32 | ||||
-rw-r--r-- | src/items/database/databasetable.h | 4 |
7 files changed, 63 insertions, 13 deletions
diff --git a/src/hub.cpp b/src/hub.cpp index 52ca0e9..bdb1026 100644 --- a/src/hub.cpp +++ b/src/hub.cpp @@ -17,6 +17,8 @@ #include "hub.h" #include "diagramobject.h" #include "diagramdocument.h" +#include "connector.h" +#include "line.h" Hub::Hub(DiagramObject *owner) : m_owner(owner) @@ -57,3 +59,16 @@ void Hub::update() { } + +QList<Line *> +Hub::outgoingLines() const +{ + QList<Line *> result; + foreach (Connector *connector, m_connectors) { + Line *line = connector->owner(); + if (connector == line->connector(0)) { + result << line; + } + } + return result; +} @@ -19,6 +19,7 @@ #include <QSet> class Connector; +class Line; class DiagramObject; class Hub @@ -34,6 +35,8 @@ public: QSet<Connector *> connectors() const; + QList<Line *> outgoingLines() const; + private: QSet<Connector *> m_connectors; DiagramObject *m_owner; diff --git a/src/items/database/column.cpp b/src/items/database/column.cpp index e8a355b..1af3b9f 100644 --- a/src/items/database/column.cpp +++ b/src/items/database/column.cpp @@ -16,6 +16,8 @@ #include "column.h" #include "columnlist.h" +#include "hub.h" +#include "databaserelationship.h" Column::Column(ColumnList *columnList) : QObject(columnList), m_primaryKey(false), m_required(false) @@ -66,3 +68,15 @@ Column::setRequired(bool required) emit propertyChanged("required", required); } } + +bool +Column::isForeignKey() const +{ + foreach (Line *line, columnList()->table()->hub()->outgoingLines()) { + DatabaseRelationship *rel = (DatabaseRelationship *)line; + if (rel->childColumn() == this) { + return true; + } + } + return false; +} diff --git a/src/items/database/column.h b/src/items/database/column.h index bbf4fff..79ca86c 100644 --- a/src/items/database/column.h +++ b/src/items/database/column.h @@ -49,6 +49,8 @@ public: bool isPrimaryKey() const { return m_primaryKey; } void setPrimaryKey(bool primaryKey); + bool isForeignKey() const; + bool isRequired() const { return m_required; } void setRequired(bool required); diff --git a/src/items/database/databaserelationship.cpp b/src/items/database/databaserelationship.cpp index 35e6658..e407ce2 100644 --- a/src/items/database/databaserelationship.cpp +++ b/src/items/database/databaserelationship.cpp @@ -19,9 +19,12 @@ #include "diagramdocument.h" #include "column.h" #include "databasetable.h" +#include "line.h" #include "databaserelationship.h" #include "databaserelationshipproperties.h" #include "utils/range.h" +#include "domutils.h" +#include "hub.h" class DatabaseRelationship::PrivateData { @@ -180,6 +183,7 @@ DatabaseRelationship::setChildColumn(Column *column) if (d->childColumn != column) { d->childColumn = column; emit propertyChanged("childColumn", column); + static_cast<DatabaseTable *>(connector(0)->hub()->owner())->updateLayout(); updateLayout(); update(); } @@ -368,8 +372,6 @@ DatabaseRelationship::updateLayout() updateEnds(); } -#include "domutils.h" - void DatabaseRelationship::loadFromXml(QDomElement element, DiagramDocument *document) { diff --git a/src/items/database/databasetable.cpp b/src/items/database/databasetable.cpp index a1f83c1..a987984 100644 --- a/src/items/database/databasetable.cpp +++ b/src/items/database/databasetable.cpp @@ -15,6 +15,7 @@ // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. #include <QGraphicsScene> +#include <QStringList> #include <QMimeData> #include <QDebug> #include "databasetable.h" @@ -89,17 +90,20 @@ DatabaseTable::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, // Draw the table name QPointF colPos = m_firstColPos; QPointF leftSizePos = colPos - QPointF(m_leftSideWidth, 0); + int i = 0; foreach (Column *column, m_columnList->columns()) { - painter->setFont(column->isRequired() + bool isBold = column->isRequired(); + painter->setFont(isBold ? (column->isPrimaryKey() ? boldFontWithUnderline : boldFont) : font); painter->drawText(colPos, column->name()); - if (column->isPrimaryKey()) { - painter->setFont(column->isRequired() ? boldFont : font); - painter->drawText(leftSizePos, "PK"); + if (!m_columnLabels[i].isEmpty()) { + painter->setFont(isBold ? boldFont : font); + painter->drawText(leftSizePos, m_columnLabels[i]); } colPos += m_colPosIncrement; leftSizePos += m_colPosIncrement; + ++i; } // Draw the outside border @@ -166,17 +170,25 @@ DatabaseTable::updateLayout() qreal width = nameWidth + spaceWidth * 2; qreal maxColumnWidth = 0; + m_columnLabels.clear(); foreach (Column *column, m_columnList->columns()) { qreal columnWidth = column->isRequired() ? boldFontMetrics.width(column->name()) : fontMetrics.width(column->name()); maxColumnWidth = qMax(maxColumnWidth, columnWidth); qreal columnLeftSideWidth = 0; + QStringList label; if (column->isPrimaryKey()) { - if (column->isRequired()) { - columnLeftSideWidth = boldFontMetrics.width("PK"); - } - else { - columnLeftSideWidth = fontMetrics.width("PK"); - } + label << "PK"; + } + if (column->isForeignKey()) { + label << "FK"; + } + QString labelStr = label.join(","); + m_columnLabels << labelStr; + if (column->isRequired()) { + columnLeftSideWidth = boldFontMetrics.width(labelStr); + } + else { + columnLeftSideWidth = fontMetrics.width(labelStr); } m_leftSideWidth = qMax(m_leftSideWidth, columnLeftSideWidth); } diff --git a/src/items/database/databasetable.h b/src/items/database/databasetable.h index c2306e2..df3d630 100644 --- a/src/items/database/databasetable.h +++ b/src/items/database/databasetable.h @@ -19,6 +19,7 @@ #include <QGraphicsItem> #include <QPainter> +#include <QList> #include "diagramobject.h" class Column; @@ -62,7 +63,7 @@ public: static DiagramItemProperties *createPropertiesEditor(QWidget *parent = 0); -protected slots: +public slots: void updateLayout(); protected: @@ -71,6 +72,7 @@ protected: private: QString m_name; ColumnList *m_columnList; + QList<QString> m_columnLabels; QRectF m_outerRect, m_nameBgRect; QPointF m_namePos, m_firstColPos, m_colPosIncrement; |