summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukáš Lalinský <lalinsky@gmail.com>2008-12-31 09:58:40 +0100
committerLukáš Lalinský <lalinsky@gmail.com>2008-12-31 09:58:40 +0100
commitca579d4487f431baf791ccb0c2635fb339cdfacf (patch)
treeca4dd097fd927e221b8f4270ed0f2cd0e00ec57d
parent0cf95269987931e0315fa902cc467eaf314a8a6d (diff)
downloaddbmodel-ca579d4487f431baf791ccb0c2635fb339cdfacf.tar.gz
dbmodel-ca579d4487f431baf791ccb0c2635fb339cdfacf.tar.bz2
Save/load line properties
-rw-r--r--src/boxsidehub.cpp2
-rw-r--r--src/diagramdocument.cpp2
-rw-r--r--src/domutils.h21
-rw-r--r--src/items/database/databaserelationship.cpp1
-rw-r--r--src/items/database/databasetable.cpp8
-rw-r--r--src/line.cpp56
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());
+ }
+ }
}