/* * Copyright 2008 Aike J Sommer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2, * or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ namespace Kephal { template XMLSimpleNodeHandler::XMLSimpleNodeHandler(Getter getter, Setter setter) { m_setter = setter; m_getter = getter; } template void XMLSimpleNodeHandler::beginSave(XMLType * element) { Q_UNUSED(element) m_saved = false; } template void XMLSimpleNodeHandler::beginLoad(XMLType * element) { Q_UNUSED(element) } template bool XMLSimpleNodeHandler::hasMore(XMLType * element) { Q_UNUSED(element) return ! m_saved; } template void XMLSimpleNodeHandler::setNode(XMLType * element, QDomNode node) { QDomNode child = node.firstChild(); if (! child.isNull()) { ((ElementType *)element->*m_setter)(toValue(child.nodeValue())); } } template QDomNode XMLSimpleNodeHandler::node(XMLType * element, QDomDocument doc, QString name) { m_saved = true; QDomNode node = doc.createElement(name); node.appendChild(doc.createTextNode(toString(((ElementType *)element->*m_getter)()))); return node; } template QString XMLSimpleNodeHandler::str(XMLType * element) { return toString(((ElementType *)element->*m_getter)()); } template XMLStringNodeHandler::XMLStringNodeHandler(Getter getter, Setter setter) : XMLSimpleNodeHandler(getter, setter) { } template QString XMLStringNodeHandler::toValue(QString str) { return str; } template QString XMLStringNodeHandler::toString(QString str) { return str; } template XMLIntNodeHandler::XMLIntNodeHandler(Getter getter, Setter setter) : XMLSimpleNodeHandler(getter, setter) { } template int XMLIntNodeHandler::toValue(QString str) { return str.toInt(); } template QString XMLIntNodeHandler::toString(int i) { return QString::number(i); } template XMLUIntNodeHandler::XMLUIntNodeHandler(Getter getter, Setter setter) : XMLSimpleNodeHandler(getter, setter) { } template unsigned int XMLUIntNodeHandler::toValue(QString str) { return str.toUInt(); } template QString XMLUIntNodeHandler::toString(unsigned int i) { return QString::number(i); } template XMLDoubleNodeHandler::XMLDoubleNodeHandler(Getter getter, Setter setter) : XMLSimpleNodeHandler(getter, setter) { } template double XMLDoubleNodeHandler::toValue(QString str) { return str.toDouble(); } template QString XMLDoubleNodeHandler::toString(double i) { return QString::number(i); } template XMLBoolNodeHandler::XMLBoolNodeHandler(Getter getter, Setter setter) : XMLSimpleNodeHandler(getter, setter) { } template bool XMLBoolNodeHandler::toValue(QString str) { return str == "true" || str == "t" || str == "on" || str == "1"; } template QString XMLBoolNodeHandler::toString(bool b) { return b ? "true" : "false"; } template XMLComplexNodeHandler::XMLComplexNodeHandler(XMLFactory * factory, Setter setter) { m_factory = factory; m_setter = setter; } template void XMLComplexNodeHandler::beginSave(XMLType * element) { Q_UNUSED(element) m_saved = false; } template void XMLComplexNodeHandler::beginLoad(XMLType * element) { Q_UNUSED(element) } template bool XMLComplexNodeHandler::hasMore(XMLType * element) { Q_UNUSED(element) return ! m_saved; } template void XMLComplexNodeHandler::setNode(XMLType * element, QDomNode node) { ComplexType * complex = (ComplexType *) m_factory->load(node); ((ElementType *)element->*m_setter)(complex); } template QDomNode XMLComplexNodeHandler::node(XMLType * element, QDomDocument doc, QString name) { Q_UNUSED(element) m_saved = true; QDomNode node; return node; } template QString XMLComplexNodeHandler::str(XMLType * element) { Q_UNUSED(element) return ""; } template XMLComplexListNodeHandler::XMLComplexListNodeHandler(XMLFactory * factory, ListGetter listGetter) { m_factory = factory; m_listGetter = listGetter; } template bool XMLComplexListNodeHandler::hasMore(XMLType * element) { return m_pos < ((ElementType *)element->*m_listGetter)().size(); } template void XMLComplexListNodeHandler::setNode(XMLType * element, QDomNode node) { ComplexType * complex = (ComplexType *) m_factory->load(node); ((ElementType *)element->*m_listGetter)().append(complex); } template QDomNode XMLComplexListNodeHandler::node(XMLType * element, QDomDocument doc, QString name) { ComplexType * complex = ((ElementType *)element->*m_listGetter)().at(m_pos); ++m_pos; return m_factory->save(complex, doc, name); } template void XMLComplexListNodeHandler::beginSave(XMLType * element) { Q_UNUSED(element) m_pos = 0; } template void XMLComplexListNodeHandler::beginLoad(XMLType * element) { ((ElementType *)element->*m_listGetter)().clear(); } template QString XMLComplexListNodeHandler::str(XMLType * element) { Q_UNUSED(element) return ""; } }