diff options
Diffstat (limited to 'pokemod/Object.cpp')
| -rw-r--r-- | pokemod/Object.cpp | 121 |
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; +} + +} |
