diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2008-08-18 18:51:31 +0000 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2008-08-18 18:51:31 +0000 |
| commit | c1793a87ebea8c8e1bb2d5d1a409d105bfae3871 (patch) | |
| tree | b7ff53cf9747ad61a80b169e1adad96950f4b16c /pokemod/Object.cpp | |
| parent | fa4764c9e4d86fdfa976bb9fa9f6976e82c496d5 (diff) | |
| download | sigen-c1793a87ebea8c8e1bb2d5d1a409d105bfae3871.tar.gz sigen-c1793a87ebea8c8e1bb2d5d1a409d105bfae3871.tar.xz sigen-c1793a87ebea8c8e1bb2d5d1a409d105bfae3871.zip | |
[FIX] Script to make a tarball now defaults to HEAD for the revision
[FIX] Enumeration types used to help remove some checks
[FIX] Macro code moved to static members of Object (not all though)
[FIX] Scripting wrappers now share information by keeping track of already-created instances of the wrapper
[FIX] Scripting methods are now Q_SCRIPTABLE and not slots
git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@239 6ecfd1a5-f3ed-3746-8530-beee90d26b22
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; +} + +} |
