diff options
author | Lukáš Lalinský <lalinsky@gmail.com> | 2008-12-31 09:58:40 +0100 |
---|---|---|
committer | Lukáš Lalinský <lalinsky@gmail.com> | 2008-12-31 09:58:40 +0100 |
commit | ca579d4487f431baf791ccb0c2635fb339cdfacf (patch) | |
tree | ca4dd097fd927e221b8f4270ed0f2cd0e00ec57d | |
parent | 0cf95269987931e0315fa902cc467eaf314a8a6d (diff) | |
download | dbmodel-ca579d4487f431baf791ccb0c2635fb339cdfacf.tar.gz dbmodel-ca579d4487f431baf791ccb0c2635fb339cdfacf.tar.bz2 |
Save/load line properties
-rw-r--r-- | src/boxsidehub.cpp | 2 | ||||
-rw-r--r-- | src/diagramdocument.cpp | 2 | ||||
-rw-r--r-- | src/domutils.h | 21 | ||||
-rw-r--r-- | src/items/database/databaserelationship.cpp | 1 | ||||
-rw-r--r-- | src/items/database/databasetable.cpp | 8 | ||||
-rw-r--r-- | src/line.cpp | 56 |
6 files changed, 69 insertions, 21 deletions
diff --git a/src/boxsidehub.cpp b/src/boxsidehub.cpp index 1cba872..35e763c 100644 --- a/src/boxsidehub.cpp +++ b/src/boxsidehub.cpp @@ -133,8 +133,8 @@ BoxSideHub::update() } foreach (ConnectorRealPair item, c) { p += dp; - item.first->setPos(p); item.first->setAngle(angle); + item.first->setPos(p); } } } diff --git a/src/diagramdocument.cpp b/src/diagramdocument.cpp index 4074f00..28a3eda 100644 --- a/src/diagramdocument.cpp +++ b/src/diagramdocument.cpp @@ -338,7 +338,7 @@ DiagramDocument::save(const QString &fileName) QFile file(fileName); if (file.open(QIODevice::WriteOnly)) { QTextStream stream(&file); - doc.save(stream, 0); + doc.save(stream, 2); file.close(); } diff --git a/src/domutils.h b/src/domutils.h index bb42ac1..1fe430d 100644 --- a/src/domutils.h +++ b/src/domutils.h @@ -82,7 +82,7 @@ appendBoolElement(QDomDocument doc, QDomElement element, const QString &name, bo } inline bool -readBoolElement(QDomElement &parent, const QString &name, bool defaultValue, const QString &trueName = "True", const QString &falseName = "False") +readBoolElement(QDomElement &parent, const QString &name, bool defaultValue = false, const QString &trueName = "True", const QString &falseName = "False") { QDomElement element = parent.firstChildElement(name); if (!element.isNull()) { @@ -99,4 +99,23 @@ readBoolElement(QDomElement &parent, const QString &name, bool defaultValue, con } return defaultValue; } + +inline void +appendFloatElement(QDomDocument &doc, QDomElement &parent, const QString &name, qreal value) +{ + QDomElement element = doc.createElement(name); + element.appendChild(doc.createTextNode(QString::number(value))); + parent.appendChild(element); +} + +inline qreal +readFloatElement(QDomElement &parent, const QString &name, qreal defaultValue = 0) +{ + QDomElement element = parent.firstChildElement(name); + if (!element.isNull()) { + return element.text().toDouble(); + } + return defaultValue; +} + #endif diff --git a/src/items/database/databaserelationship.cpp b/src/items/database/databaserelationship.cpp index 39c9d25..e120786 100644 --- a/src/items/database/databaserelationship.cpp +++ b/src/items/database/databaserelationship.cpp @@ -110,7 +110,6 @@ DatabaseRelationship::DatabaseRelationship(DiagramItem *parent) : Line(parent), d(new PrivateData) { setFlag(ItemIsSelectable); - connect(this, SIGNAL(endPointChanged()), this, SLOT(updateLayout())); } DatabaseRelationship::~DatabaseRelationship() diff --git a/src/items/database/databasetable.cpp b/src/items/database/databasetable.cpp index 3c6318a..129f66d 100644 --- a/src/items/database/databasetable.cpp +++ b/src/items/database/databasetable.cpp @@ -210,8 +210,8 @@ DatabaseTable::loadFromXml(QDomElement element, DiagramDocument *document) Column *column = new Column(); column->setName(readStringElement(columnElement, "name")); column->setDataType(readStringElement(columnElement, "data-type")); - column->setRequired(readStringElement(columnElement, "required") == "yes"); - column->setPrimaryKey(readStringElement(columnElement, "primary-key") == "yes"); + column->setRequired(readBoolElement(columnElement, "required")); + column->setPrimaryKey(readBoolElement(columnElement, "primary-key")); column->setNotes(readStringElement(columnElement, "notes")); columnList()->appendColumn(column); columnElement = columnElement.nextSiblingElement("column"); @@ -233,8 +233,8 @@ DatabaseTable::saveToXml(QDomDocument doc, QDomElement element) columnListElement.appendChild(columnElement); appendStringElement(doc, columnElement, "name", column->name()); appendStringElement(doc, columnElement, "data-type", column->dataType()); - appendStringElement(doc, columnElement, "required", column->isRequired() ? "yes" : QString()); - appendStringElement(doc, columnElement, "primary-key", column->isPrimaryKey() ? "yes" : QString()); + appendBoolElement(doc, columnElement, "required", column->isRequired()); + appendBoolElement(doc, columnElement, "primary-key", column->isPrimaryKey()); appendStringElement(doc, columnElement, "notes", column->notes()); } } diff --git a/src/line.cpp b/src/line.cpp index 1ca27af..90baa07 100644 --- a/src/line.cpp +++ b/src/line.cpp @@ -15,6 +15,7 @@ // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. #include "line.h" +#include "hub.h" #include "diagramdocument.h" #include "diagramobject.h" #include "connector.h" @@ -45,14 +46,30 @@ void Line::loadFromXml(QDomElement element, DiagramDocument *document) { DiagramItem::loadFromXml(element, document); - QDomElement connectionElement = element.firstChildElement("connection"); - if (!connectionElement.isNull()) { - QString sourceId = readStringElement(connectionElement, "source"); - QString targetId = readStringElement(connectionElement, "target"); - if (document) { -/* setSource(qobject_cast<DiagramObject *>(document->itemById(sourceId))); - setTarget(qobject_cast<DiagramObject *>(document->itemById(targetId)));*/ + QDomElement lineElement = element.firstChildElement("line"); + if (lineElement.isNull()) + return; + QDomElement connectorListElement = lineElement.firstChildElement("connector-list"); + if (connectorListElement.isNull()) + return; + + QDomElement connectorElement = connectorListElement.firstChildElement("connector"); + int i = 0; + while (!connectorElement.isNull()) { + Connector *connector = m_connectors[i++]; + qreal angle = readFloatElement(connectorElement, "angle"); + connector->setAngle(angle); + QDomElement positionElement = connectorElement.firstChildElement("position"); + qreal x = readFloatElement(positionElement, "x"); + qreal y = readFloatElement(positionElement, "y"); + connector->setPos(QPointF(x, y)); + QDomElement hubElement = connectorElement.firstChildElement("hub"); + QString ownerId = hubElement.attribute("owner"); + if (document && !ownerId.isEmpty()) { + DiagramObject *owner = qobject_cast<DiagramObject *>(document->itemById(ownerId)); + connector->setHub(owner->hub()); } + connectorElement = connectorElement.nextSiblingElement("connector"); } } @@ -60,10 +77,23 @@ void Line::saveToXml(QDomDocument doc, QDomElement element) { DiagramItem::saveToXml(doc, element); - QDomElement connectionElement = doc.createElement("connection"); - element.appendChild(connectionElement); -/* if (m_objects[0] != NULL) - appendStringElement(doc, connectionElement, "source", m_objects[0]->id()); - if (m_objects[1] != NULL) - appendStringElement(doc, connectionElement, "target", m_objects[1]->id());*/ + QDomElement lineElement = doc.createElement("line"); + element.appendChild(lineElement); + QDomElement connectorListElement = doc.createElement("connector-list"); + lineElement.appendChild(connectorListElement); + for (int i = 0; i < 2; i++) { + Connector *connector = m_connectors[i]; + QDomElement connectorElement = doc.createElement("connector"); + connectorListElement.appendChild(connectorElement); + QDomElement positionElement = doc.createElement("position"); + connectorElement.appendChild(positionElement); + appendFloatElement(doc, positionElement, "x", connector->pos().x()); + appendFloatElement(doc, positionElement, "y", connector->pos().y()); + appendFloatElement(doc, connectorElement, "angle", connector->angle()); + if (connector->hub()) { + QDomElement hubElement = doc.createElement("hub"); + connectorElement.appendChild(hubElement); + hubElement.setAttribute("owner", connector->hub()->owner()->id()); + } + } } |