summaryrefslogtreecommitdiffstats
path: root/pokemod/Object.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pokemod/Object.cpp')
-rw-r--r--pokemod/Object.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/pokemod/Object.cpp b/pokemod/Object.cpp
index 2ad06fef..b0fb3b64 100644
--- a/pokemod/Object.cpp
+++ b/pokemod/Object.cpp
@@ -19,7 +19,15 @@
#include "Object.h"
// Pokemod includes
+#include "Fraction.h"
#include "Macros.h"
+#include "Script.h"
+
+// Qt includes
+#include <QtCore/QBuffer>
+#include <QtCore/QPoint>
+#include <QtGui/QImage>
+#include <QtGui/QPixmap>
Pokemod::Object::Object(const Object& object) :
QObject(NULL),
@@ -62,6 +70,13 @@ QString Pokemod::Object::className() const
return QString(metaObject()->className()).section(':', -1);
}
+QDomDocument Pokemod::Object::xml(const Object* object)
+{
+ QDomDocument xml(object->className());
+ xml.appendChild(object->save());
+ return xml;
+}
+
QString Pokemod::Object::unused(const QString& variable)
{
return QString("Setting unused variable %1").arg(variable);
@@ -85,3 +100,109 @@ QString Pokemod::Object::subclass(const QString& subclass, const QString& name)
void Pokemod::Object::clear()
{
}
+
+namespace Pokemod
+{
+template<> void Object::loadValue<bool>(const QDomElement& xml, bool* value)
+{
+ *value = (xml.firstChild().toText().data() == "true");
+}
+
+template<> void Object::loadValue<int>(const QDomElement& xml, int* value)
+{
+ *value = xml.firstChild().toText().data().toInt();
+}
+
+template<> void Object::loadValue<Fraction>(const QDomElement& xml, Fraction* value)
+{
+ value->set(xml.attribute("numerator", "1").toInt(), xml.attribute("denominator", "1").toInt());
+}
+
+template<> void Object::loadValue<QPoint>(const QDomElement& xml, QPoint* value)
+{
+ value->setX(xml.attribute("x", "0").toInt());
+ value->setY(xml.attribute("y", "0").toInt());
+}
+
+template<> void Object::loadValue<QPixmap>(const QDomElement& xml, QPixmap* value)
+{
+ // FIXME: QPixmap::fromData static member would be nice
+ *value = QPixmap::fromImage(QImage::fromData(QByteArray::fromBase64(xml.firstChild().toText().data().toUtf8())));
+}
+
+template<> void Object::loadValue<QByteArray>(const QDomElement& xml, QByteArray* value)
+{
+ *value = QByteArray::fromBase64(xml.firstChild().toText().data().toUtf8());
+}
+
+template<> void Object::loadValue<Script>(const QDomElement& xml, Script* value)
+{
+ value->setInterpreter(xml.attribute("interpreter", ""));
+ value->setScript(xml.firstChild().toText().data());
+}
+
+template<> QDomElement Object::saveValue<bool>(const QString& name, const bool& value)
+{
+ QDomElement element = QDomDocument().createElement(name);
+ element.appendChild(QDomDocument().createTextNode(value ? "true" : "false"));
+ return element;
+}
+
+template<> QDomElement Object::saveValue<int>(const QString& name, const int& value)
+{
+ QDomElement element = QDomDocument().createElement(name);
+ element.appendChild(QDomDocument().createTextNode(QString::number(value)));
+ return element;
+}
+
+template<> QDomElement Object::saveValue<QString>(const QString& name, const QString& value)
+{
+ QDomElement element = QDomDocument().createElement(name);
+ element.appendChild(QDomDocument().createTextNode(value));
+ return element;
+}
+
+template<> QDomElement Object::saveValue<Fraction>(const QString& name, const Fraction& value)
+{
+ QDomElement element = QDomDocument().createElement(name);
+ element.setAttribute("numerator", value.numerator());
+ element.setAttribute("denominator", value.denominator());
+ return element;
+}
+
+template<> QDomElement Object::saveValue<QPoint>(const QString& name, const QPoint& value)
+{
+ QDomElement element = QDomDocument().createElement(name);
+ element.setAttribute("x", value.x());
+ element.setAttribute("y", value.y());
+ return element;
+}
+
+template<> QDomElement Object::saveValue<QPixmap>(const QString& name, const QPixmap& value)
+{
+ QDomElement element = QDomDocument().createElement(name);
+ QByteArray bytes;
+ QBuffer* buffer = new QBuffer(&bytes);
+ buffer->open(QIODevice::WriteOnly);
+ value.save(buffer, "PNG");
+ element.appendChild(QDomDocument().createTextNode(bytes.toBase64()));
+ delete buffer;
+ return element;
+}
+
+template<> QDomElement Object::saveValue<QByteArray>(const QString& name, const QByteArray& value)
+{
+ QDomElement element = QDomDocument().createElement(name);
+ element.appendChild(QDomDocument().createTextNode(value.toBase64()));
+ return element;
+}
+
+template<> QDomElement Object::saveValue<Script>(const QString& name, const Script& value)
+{
+ QDomElement element = QDomDocument().createElement(name);
+ element.setAttribute("interpreter", value.interpreter());
+ element.appendChild(QDomDocument().createCDATASection(value.script()));
+ return element;
+}
+
+}