summaryrefslogtreecommitdiff
path: root/src/diagramitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/diagramitem.cpp')
-rw-r--r--src/diagramitem.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/diagramitem.cpp b/src/diagramitem.cpp
index ddb6269..bcb5e24 100644
--- a/src/diagramitem.cpp
+++ b/src/diagramitem.cpp
@@ -14,9 +14,98 @@
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#include <QMimeData>
+#include <QDomProcessingInstruction>
+#include <QDebug>
+#include "diagramdocument.h"
#include "diagramitem.h"
+#include "diagramitemregistry.h"
DiagramItem::DiagramItem(DiagramItem *parent)
: QGraphicsItem(parent)
{
}
+
+void
+DiagramItem::setId(QUuid id)
+{
+ m_id = id;
+}
+
+void
+DiagramItem::createId()
+{
+ m_id = QUuid::createUuid();
+}
+
+DiagramDocument *
+DiagramItem::document() const
+{
+ return qobject_cast<DiagramDocument *>(scene());
+}
+
+void
+DiagramItem::loadFromXml(QDomElement element, DiagramDocument *)
+{
+ setId(element.attribute("id", QUuid()));
+ QDomElement positionElement = element.firstChildElement("position");
+ if (!positionElement.isNull()) {
+ QPoint pos;
+ pos.setX(positionElement.attribute("x", "0").toInt());
+ pos.setY(positionElement.attribute("y", "0").toInt());
+ setPos(pos);
+ }
+}
+
+void
+DiagramItem::saveToXml(QDomDocument doc, QDomElement element)
+{
+ element.setAttribute("type", typeName());
+ element.setAttribute("id", id());
+ QDomElement positionElement = doc.createElement("position");
+ positionElement.setAttribute("x", pos().x());
+ positionElement.setAttribute("y", pos().y());
+ element.appendChild(positionElement);
+}
+
+QMimeData *
+DiagramItem::toMimeData()
+{
+ QDomDocument doc;
+ QDomProcessingInstruction xml = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
+ doc.appendChild(xml);
+ QDomElement element = doc.createElement("item");
+ doc.appendChild(element);
+ saveToXml(doc, element);
+
+ QByteArray data;
+ QTextStream stream(&data);
+ doc.save(stream, 0);
+
+ QMimeData *mimeData = new QMimeData();
+ mimeData->setData("application/dbmodel.item", data);
+ return mimeData;
+}
+
+DiagramItem *
+DiagramItem::fromMimeData(const QMimeData *mimeData)
+{
+ QByteArray data = mimeData->data("application/dbmodel.item");
+ if (data.isNull())
+ return 0;
+
+ QDomDocument doc;
+ doc.setContent(data);
+
+ QDomElement element = doc.firstChildElement("item");
+ if (element.isNull())
+ return 0;
+
+ DiagramItem *item = DiagramItemRegistry::createItem(element.attribute("type"));
+ if (item == NULL)
+ return 0;
+
+ item->loadFromXml(element);
+ item->createId();
+ return item;
+}