1 /***************************************************************************
2 * Copyright (C) 2006 by David Cuadrado *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
21 #include "serializer.h"
23 #include <QGraphicsItem>
25 #include <QXmlStreamReader>
26 #include <QXmlStreamWriter>
28 #include <dcore/debug.h>
30 #include <private/svg2qt.h>
35 Serializer::Serializer()
40 Serializer::~Serializer()
46 * Convierte las propiedades del @p item a un elemento del documento xml @p doc.
48 QDomElement
Serializer::properties(const QGraphicsItem
*item
, QDomDocument
&doc
)
50 QDomElement properties
= doc
.createElement("properties");
52 QString strMatrix
= YAMF::Item::Private::Svg2Qt::matrixToString(item
->matrix());
53 properties
.setAttribute( "transform", strMatrix
);
55 properties
.setAttribute( "pos", YAMF::Item::Private::Svg2Qt::pointToString(item
->pos()) );
56 properties
.setAttribute("z", item
->zValue());
58 properties
.setAttribute( "enabled", item
->isEnabled());
59 // properties.setAttribute( "flags", item->flags());
67 * Grava las propiedades del @p item en un Xml.
69 void Serializer::properties(const QGraphicsItem
*item
, QXmlStreamWriter
*writer
)
71 writer
->writeStartElement("properties");
73 QString strMatrix
= YAMF::Item::Private::Svg2Qt::matrixToString(item
->matrix());
74 writer
->writeAttribute("transform", strMatrix
);
76 writer
->writeAttribute( "pos", YAMF::Item::Private::Svg2Qt::pointToString(item
->pos()) );
77 writer
->writeAttribute("z", QString::number(item
->zValue()));
79 writer
->writeAttribute( "enabled", item
->isEnabled() ? "1" : "0" );
81 // writer->writeAttribute( "flags", QString::number(item->flags()) );
83 writer
->writeEndElement();
89 * Asigna las propiedades que est�n el los atributos de un documento xml @p atts al �tem @p item.
91 void Serializer::loadProperties(QGraphicsItem
*item
, const QXmlAttributes
&atts
)
94 Item::Private::Svg2Qt::svgmatrix2qtmatrix( atts
.value("transform"), matrix
);
95 item
->setMatrix(matrix
);
98 Item::Private::Svg2Qt::parsePointF(atts
.value("pos"), pos
);
101 item
->setEnabled(atts
.value("enabled") != "0"); // default true
103 // item->setFlags( static_cast<QGraphicsItem::GraphicsItemFlags>(atts.value("flags").toInt()) );
105 item
->setZValue( atts
.value("z").toDouble() );
111 * Asigna las propiedades que est�n en un elemento de un documento xml @p e al �tem @p item.
113 void Serializer::loadProperties(QGraphicsItem
*item
, const QDomElement
&element
)
115 if ( element
.tagName() == "properties" )
118 Item::Private::Svg2Qt::svgmatrix2qtmatrix( element
.attribute( "transform"), matrix
);
120 item
->setMatrix(matrix
);
123 Item::Private::Svg2Qt::parsePointF(element
.attribute("pos"), pos
);
126 item
->setEnabled(element
.attribute("enabled") != "0");
128 // item->setFlags( QGraphicsItem::GraphicsItemFlags(element.attribute("flags").toInt()) );
130 item
->setZValue( element
.attribute("z").toDouble() );
136 * Asigna las propiedades al item, desde un XML
140 void Serializer::loadProperties(QGraphicsItem
*item
, const QString
&properties
)
142 QXmlStreamReader
reader(properties
);
144 while( !reader
.atEnd() )
146 if( reader
.readNext() == QXmlStreamReader::StartElement
)
148 if( reader
.name() == "properties" )
150 loadProperties(item
, &reader
);
159 * Asigna las propiedades al item, desde un QXmlStreamReader
163 void Serializer::loadProperties(QGraphicsItem
*item
, QXmlStreamReader
*reader
)
165 if( reader
->name().toString() == "properties" )
167 foreach(QXmlStreamAttribute att
, reader
->attributes() )
169 QString name
= att
.name().toString();
171 if( name
== "transform" )
174 Item::Private::Svg2Qt::svgmatrix2qtmatrix( att
.value().toString(), matrix
);
176 item
->setMatrix(matrix
);
178 else if( name
== "pos" )
181 Item::Private::Svg2Qt::parsePointF(att
.value().toString(), pos
);
185 else if( name
== "enabled" )
187 item
->setEnabled(att
.value().toString() != "0");
189 // else if( name == "flags" )
191 // item->setFlags( QGraphicsItem::GraphicsItemFlags(att.value().toString().toInt()) );
193 else if( name
== "z" )
195 item
->setZValue( att
.value().toString().toDouble() );
204 * Convierte un gradiente @p grandient a un elemento del documento xml @p doc.
206 QDomElement
Serializer::gradient(const QGradient
*gradient
, QDomDocument
&doc
)
208 QDomElement element
= doc
.createElement("gradient");
209 element
.setAttribute("type", gradient
->type() );
210 element
.setAttribute("spread", gradient
->spread() );
212 switch(gradient
->type() )
214 case QGradient::LinearGradient
:
216 element
.setAttribute("start", YAMF::Item::Private::Svg2Qt::pointToString(static_cast<const QLinearGradient
*>(gradient
)->start()) );
217 element
.setAttribute("final", YAMF::Item::Private::Svg2Qt::pointToString(static_cast<const QLinearGradient
*>(gradient
)->finalStop() ));
220 case QGradient::RadialGradient
:
222 element
.setAttribute("center", YAMF::Item::Private::Svg2Qt::pointToString(static_cast<const QRadialGradient
*>(gradient
)->center()) );
224 element
.setAttribute("focal", YAMF::Item::Private::Svg2Qt::pointToString(static_cast<const QRadialGradient
*>(gradient
)->focalPoint()) );
226 element
.setAttribute("radius", static_cast<const QRadialGradient
*>(gradient
)->radius() );
229 case QGradient::ConicalGradient
:
231 element
.setAttribute("center", YAMF::Item::Private::Svg2Qt::pointToString(static_cast<const QConicalGradient
*>(gradient
)->center()) );
232 element
.setAttribute("angle", static_cast<const QConicalGradient
*>(gradient
)->angle() );
235 case QGradient::NoGradient
:
242 QGradientStops stops
= gradient
->stops();
244 foreach(QGradientStop stop
, stops
)
246 QDomElement stopElement
= doc
.createElement("stop");
247 stopElement
.setAttribute("value", stop
.first
);
248 stopElement
.setAttribute("color", stop
.second
.name());
249 stopElement
.setAttribute("alpha", stop
.second
.alpha());
250 element
.appendChild(stopElement
);
258 * Escribe el gradiente utilizando @p writer
262 void Serializer::gradient(const QGradient
*gradient
, QXmlStreamWriter
*writer
)
264 writer
->writeStartElement("gradient");
265 writer
->writeAttribute("type", QString::number(gradient
->type()) );
266 writer
->writeAttribute("spread", QString::number(gradient
->spread()) );
268 switch(gradient
->type() )
270 case QGradient::LinearGradient
:
272 writer
->writeAttribute("start", YAMF::Item::Private::Svg2Qt::pointToString(static_cast<const QLinearGradient
*>(gradient
)->start()));
274 writer
->writeAttribute("final", YAMF::Item::Private::Svg2Qt::pointToString(static_cast<const QLinearGradient
*>(gradient
)->finalStop() ));
277 case QGradient::RadialGradient
:
279 writer
->writeAttribute("center", YAMF::Item::Private::Svg2Qt::pointToString(static_cast<const QRadialGradient
*>(gradient
)->center()) );
281 writer
->writeAttribute("focal", YAMF::Item::Private::Svg2Qt::pointToString(static_cast<const QRadialGradient
*>(gradient
)->focalPoint()) );
283 writer
->writeAttribute("radius", QString::number(static_cast<const QRadialGradient
*>(gradient
)->radius()) );
286 case QGradient::ConicalGradient
:
288 writer
->writeAttribute("center", YAMF::Item::Private::Svg2Qt::pointToString(static_cast<const QConicalGradient
*>(gradient
)->center()) );
290 writer
->writeAttribute("angle", QString::number(static_cast<const QConicalGradient
*>(gradient
)->angle()) );
293 case QGradient::NoGradient
:
300 QGradientStops stops
= gradient
->stops();
302 foreach(QGradientStop stop
, stops
)
304 writer
->writeStartElement("stop");
305 writer
->writeAttribute("value", QString::number(stop
.first
) );
306 writer
->writeAttribute("color", stop
.second
.name());
307 writer
->writeAttribute("alpha", QString::number(stop
.second
.alpha()));
308 writer
->writeEndElement();
311 writer
->writeEndElement();
317 * Crea un degradado con los atributos de un elemento del documento xml @p atts.
320 QGradient
*Serializer::createGradient(const QXmlAttributes
&atts
)
322 QGradient
*result
= 0;
323 switch(atts
.value("type").toInt() )
325 case QGradient::LinearGradient
:
327 QPointF start
, final
;
328 YAMF::Item::Private::Svg2Qt::parsePointF(atts
.value("start"), start
);
329 YAMF::Item::Private::Svg2Qt::parsePointF(atts
.value("final"), final
);
331 result
= new QLinearGradient( start
, final
);
334 case QGradient::RadialGradient
:
336 QPointF center
, focal
;
337 YAMF::Item::Private::Svg2Qt::parsePointF(atts
.value("center"), center
);
338 YAMF::Item::Private::Svg2Qt::parsePointF(atts
.value("focal"), focal
);
341 result
= new QRadialGradient(center
, atts
.value("radius").toDouble(), focal
);
344 case QGradient::ConicalGradient
:
347 YAMF::Item::Private::Svg2Qt::parsePointF(atts
.value("center"), center
);
349 result
= new QConicalGradient(center
, atts
.value("angle").toDouble());
352 case QGradient::NoGradient
:
363 result
->setSpread(QGradient::Spread( atts
.value("spread").toInt() ) );
367 QGradient
*Serializer::loadGradient(QXmlStreamReader
*reader
)
369 QGradient
*result
= 0;
371 Q_ASSERT(QXmlStreamReader::NoToken
!= reader
->tokenType());
372 Q_ASSERT(reader
->tokenType() != QXmlStreamReader::StartDocument
);
374 if(reader
->name().toString() == "gradient")
376 switch(reader
->attributes().value("type").toString().toInt() )
378 case QGradient::LinearGradient
:
380 QPointF start
, final
;
381 YAMF::Item::Private::Svg2Qt::parsePointF(reader
->attributes().value("start").toString(), start
);
382 YAMF::Item::Private::Svg2Qt::parsePointF(reader
->attributes().value("final").toString(), final
);
384 result
= new QLinearGradient(start
, final
);
387 case QGradient::RadialGradient
:
389 QPointF center
, focal
;
390 YAMF::Item::Private::Svg2Qt::parsePointF(reader
->attributes().value("center").toString(), center
);
391 YAMF::Item::Private::Svg2Qt::parsePointF(reader
->attributes().value("focal").toString(), focal
);
392 qreal radius
= reader
->attributes().value("radius").toString().toDouble();
394 result
= new QRadialGradient(center
, radius
, focal
);
397 case QGradient::ConicalGradient
:
400 YAMF::Item::Private::Svg2Qt::parsePointF(reader
->attributes().value("center").toString(), center
);
401 qreal angle
= reader
->attributes().value("angle").toString().toDouble();
402 result
= new QConicalGradient(center
, angle
);
414 result
->setSpread(QGradient::Spread( reader
->attributes().value("spread").toString().toInt() ) );
416 while(!reader
->atEnd())
418 if( reader
->readNext() == QXmlStreamReader::StartElement
)
420 if( reader
->name() == "stop" )
425 foreach(QXmlStreamAttribute att
, reader
->attributes())
427 if( att
.name() == "value" )
429 value
= att
.value().toString().toDouble();
431 else if( att
.name() == "color" )
433 colorName
= att
.value().toString();
435 else if( att
.name() == "alpha" )
437 alpha
= att
.value().toString().toInt();
441 QColor
color(colorName
);
442 color
.setAlpha(alpha
);
443 result
->setColorAt(value
, color
);
446 else if(reader
->tokenType() == QXmlStreamReader::EndElement
)
448 if( reader
->name() == "gradient" )
460 * Crea un gradient con un documento xml @p doc.
462 QGradient
*Serializer::loadGradient(const QString
&doc
)
464 QXmlStreamReader
reader(doc
);
466 while(!reader
.atEnd() )
468 if( reader
.readNext() == QXmlStreamReader::StartElement
)
470 if( reader
.name() == "gradient" )
472 return loadGradient(&reader
);
482 * Crea una brocha con un documento xml @p doc.
484 QDomElement
Serializer::brush(const QBrush
*brush
, QDomDocument
&doc
)
486 QDomElement brushElement
= doc
.createElement("brush");
488 brushElement
.setAttribute( "style", brush
->style());
491 if ( brush
->gradient() )
493 brushElement
.appendChild( gradient( brush
->gradient() , doc
));
495 else if(brush
->color().isValid())
497 brushElement
.setAttribute( "color", brush
->color().name() );
498 brushElement
.setAttribute( "alpha", brush
->color().alpha());
501 QString strMatrix
= YAMF::Item::Private::Svg2Qt::matrixToString(brush
->matrix());
503 brushElement
.setAttribute( "transform", strMatrix
);
510 * Guarda los valores de una brocha usando @p writer
512 void Serializer::brush(const QBrush
*brush
, QXmlStreamWriter
*writer
)
515 writer
->writeStartElement("brush");
516 writer
->writeAttribute( "style", QString::number(brush
->style()));
518 QString strMatrix
= YAMF::Item::Private::Svg2Qt::matrixToString(brush
->matrix());
519 writer
->writeAttribute( "transform", strMatrix
);
521 if ( brush
->gradient() )
523 Serializer::gradient( brush
->gradient() , writer
);
525 else if(brush
->color().isValid())
527 writer
->writeAttribute( "color", brush
->color().name() );
528 writer
->writeAttribute( "alpha", QString::number(brush
->color().alpha()) );
531 writer
->writeEndElement();
535 * Carga la brocha utilizando @p reader
539 void Serializer::loadBrush(QBrush
&brush
, QXmlStreamReader
*reader
)
541 if( reader
->name().toString() == "brush" )
543 Qt::BrushStyle style
= static_cast<Qt::BrushStyle
>(reader
->attributes().value("style").toString().toInt());
546 Item::Private::Svg2Qt::svgmatrix2qtmatrix( reader
->attributes().value("transform").toString(), matrix
);
547 brush
.setMatrix(matrix
);
549 QString color
= reader
->attributes().value("color").toString();
554 c
.setAlpha(reader
->attributes().value("alpha").toString().toInt());
557 brush
.setStyle(style
);
561 if( reader
->readNext() == QXmlStreamReader::StartElement
)
563 if( reader
->name() == "gradient" )
565 QGradient
*gradient
= loadGradient(reader
);
567 QBrush
nbrush(*gradient
);
569 nbrush
.setMatrix(brush
.matrix());
581 * Carga una brush utilizando el documento xml @p doc
585 void Serializer::loadBrush(QBrush
&brush
, const QString
&doc
)
587 QXmlStreamReader
reader(doc
);
589 while( !reader
.atEnd() )
591 if( reader
.readNext() == QXmlStreamReader::StartElement
)
593 if( reader
.name() == "brush" )
595 Serializer::loadBrush(brush
, &reader
);
605 * Asigna los valores de los atributos @p atts a la brocha @p brush.
607 void Serializer::loadBrush(QBrush
&brush
, const QXmlAttributes
&atts
)
609 brush
.setStyle(Qt::BrushStyle(atts
.value("style").toInt()) );
612 if(!atts
.value("color").isEmpty())
614 QColor
color(atts
.value("color"));
615 color
.setAlpha(atts
.value("alpha").toInt());
616 brush
.setColor(color
);
620 Item::Private::Svg2Qt::svgmatrix2qtmatrix( atts
.value("transform"), matrix
);
621 brush
.setMatrix(matrix
);
626 * Asigna los valores de un elemento de un documento xml @p e a la brocha @p brush.
628 void Serializer::loadBrush(QBrush
&brush
, const QDomElement
&e
)
630 Q_ASSERT(e
.tagName() == "brush");
631 Qt::BrushStyle style
= static_cast<Qt::BrushStyle
>(e
.attribute("style").toInt());
634 Item::Private::Svg2Qt::svgmatrix2qtmatrix( e
.attribute("transform"), matrix
);
635 brush
.setMatrix(matrix
);
637 if(!e
.attribute("color").isEmpty())
639 brush
.setColor(QColor(e
.attribute("color")));
640 brush
.setStyle(style
);
644 QDomElement brushElement
= e
.firstChild().toElement();
645 if( brushElement
.tagName() == "gradient" )
649 QTextStream
ts(&str
);
653 QGradient
*gradient
= loadGradient(str
);
656 QBrush
newBrush(*gradient
);
659 newBrush
.setMatrix(brush
.matrix());
669 * Crea una estilo de linea con un documento xml @p doc.
671 QDomElement
Serializer::pen(const QPen
*pen
, QDomDocument
&doc
)
673 QDomElement penElement
= doc
.createElement("pen");
675 penElement
.setAttribute( "style", pen
->style());
676 penElement
.setAttribute( "color", pen
->color().name() );
677 penElement
.setAttribute( "alpha", pen
->color().alpha() );
678 penElement
.setAttribute( "cap", pen
->capStyle() );
679 penElement
.setAttribute( "join", pen
->joinStyle() );
680 penElement
.setAttribute( "width", pen
->width() );
681 penElement
.setAttribute( "ml", pen
->miterLimit() );
683 QBrush brush
= pen
->brush();
684 penElement
.appendChild(Serializer::brush(&brush
, doc
));
690 * Serializa @p pen utilizando @p writer
694 void Serializer::pen(const QPen
*pen
, QXmlStreamWriter
*writer
)
696 writer
->writeStartElement("pen");
698 writer
->writeAttribute( "style", QString::number(pen
->style()));
699 writer
->writeAttribute( "color", pen
->color().name() );
700 writer
->writeAttribute( "alpha", QString::number(pen
->color().alpha()) );
701 writer
->writeAttribute( "cap", QString::number(pen
->capStyle()) );
702 writer
->writeAttribute( "join", QString::number(pen
->joinStyle()) );
703 writer
->writeAttribute( "width", QString::number(pen
->width()) );
704 writer
->writeAttribute( "ml", QString::number(pen
->miterLimit()) );
706 QBrush brush
= pen
->brush();
707 Serializer::brush(&brush
, writer
);
709 writer
->writeEndElement();
714 * Asigna los valores de los atributos @p atts a la estilo de linea @p pen.
716 void Serializer::loadPen(QPen
&pen
, const QXmlAttributes
&atts
)
718 pen
.setCapStyle( Qt::PenCapStyle(atts
.value("cap").toInt() ));
719 pen
.setStyle( Qt::PenStyle(atts
.value("style").toInt() ));
720 pen
.setJoinStyle( Qt::PenJoinStyle(atts
.value("join").toInt() ));
721 pen
.setWidth( atts
.value("width").toInt() );
722 pen
.setMiterLimit( atts
.value("ml").toInt() );
724 if(!atts
.value("color").isEmpty())
726 QColor
color(atts
.value("color") );
727 color
.setAlpha(atts
.value("alpha").toInt() );
733 * Asigna los valores desde un documento XML utilizando @p reader al estilo de linea @p pen.
735 void Serializer::loadPen(QPen
&pen
, QXmlStreamReader
*reader
)
737 pen
.setCapStyle( Qt::PenCapStyle(reader
->attributes().value("cap").toString().toInt() ));
738 pen
.setStyle( Qt::PenStyle(reader
->attributes().value("style").toString().toInt() ));
739 pen
.setJoinStyle( Qt::PenJoinStyle(reader
->attributes().value("join").toString().toInt() ));
740 pen
.setWidth( reader
->attributes().value("width").toString().toInt() );
741 pen
.setMiterLimit( reader
->attributes().value("ml").toString().toInt() );
743 QString c
= reader
->attributes().value("color").toString();
747 color
.setAlpha(reader
->attributes().value("alpha").toString().toInt() );
752 if( reader
->readNext() == QXmlStreamReader::StartElement
)
754 if( reader
->name() == "brush" )
757 loadBrush(brush
, reader
);
763 void Serializer::loadPen(QPen
&pen
, const QDomElement
&e
)
765 pen
.setCapStyle( Qt::PenCapStyle(e
.attribute("cap").toInt() ));
766 pen
.setStyle( Qt::PenStyle(e
.attribute("style").toInt() ));
767 pen
.setJoinStyle( Qt::PenJoinStyle(e
.attribute("join").toInt() ));
768 pen
.setWidth( e
.attribute("width").toInt() );
769 pen
.setMiterLimit( e
.attribute("ml").toInt() );
771 QString c
= e
.attribute("color");
775 color
.setAlpha(e
.attribute("alpha").toInt() );
780 QDomElement brushElement
= e
.firstChild().toElement();
781 if( brushElement
.tagName() == "brush" )
784 loadBrush(brush
, brushElement
);
792 * Carga un pen utilizando el documento XML @p doc
796 void Serializer::loadPen(QPen
&pen
, const QString
&doc
)
798 QXmlStreamReader
reader(doc
);
800 while(!reader
.atEnd())
802 if( reader
.readNext() == QXmlStreamReader::StartElement
)
804 if( reader
.name() == "pen" )
806 loadPen(pen
, &reader
);
815 * Convierte un tipo de letra @p font a un elemento del documento xml @p doc.
817 QDomElement
Serializer::font(const QFont
&font
, QDomDocument
&doc
)
819 QDomElement fontElement
= doc
.createElement("font");
821 fontElement
.setAttribute( "family", font
.family());
822 fontElement
.setAttribute( "point-size", font
.pointSize());
823 fontElement
.setAttribute( "weight", font
.weight());
824 fontElement
.setAttribute( "italic", font
.italic());
825 fontElement
.setAttribute( "bold", font
.bold());
826 fontElement
.setAttribute( "style", font
.style());
828 fontElement
.setAttribute( "underline", font
.underline());
829 fontElement
.setAttribute( "overline", font
.overline());
835 * Serializa la letra @p _font
839 void Serializer::font(const QFont
&_font
, QString
*strFont
)
841 QXmlStreamWriter
writer(strFont
);
842 font(_font
, &writer
);
846 * Serializa la letra usando @p writer
850 void Serializer::font(const QFont
&_font
, QXmlStreamWriter
*writer
)
852 writer
->writeStartElement("font");
854 writer
->writeAttribute( "family", _font
.family());
855 writer
->writeAttribute( "point-size", QString::number(_font
.pointSize()));
856 writer
->writeAttribute( "weight", QString::number(_font
.weight()));
857 writer
->writeAttribute( "italic", QString::number(_font
.italic()));
858 writer
->writeAttribute( "bold", QString::number(_font
.bold()));
859 writer
->writeAttribute( "style", QString::number(_font
.style()));
861 writer
->writeAttribute( "underline", QString::number(_font
.underline()));
862 writer
->writeAttribute( "overline", QString::number(_font
.overline()));
864 writer
->writeEndElement();
869 * Asigna los valores de un elemento de un documento xml @p e al tipo de letra @p font.
871 void Serializer::loadFont(QFont
&font
, const QDomElement
&e
)
873 font
= QFont(e
.attribute( "family" ), e
.attribute( "point-size", "-1").toInt(), e
.attribute( "weight", "-1").toInt(), e
.attribute( "italic", "0").toInt());
875 font
.setBold( e
.attribute( "bold", "0").toInt( ) );
876 font
.setStyle( QFont::Style(e
.attribute( "style").toInt()) );
878 font
.setUnderline( e
.attribute( "underline", "0").toInt() );
879 font
.setOverline( e
.attribute( "overline", "0").toInt() );
885 * Asigna los valores de los atributos @p atts al tipo de letra @p font.
887 void Serializer::loadFont(QFont
&font
, const QXmlAttributes
&atts
)
889 font
= QFont(atts
.value( "family" ), atts
.value( "point-size", "-1").toInt(), atts
.value( "weight", "-1").toInt(), atts
.value( "italic", "0").toInt());
891 font
.setBold( atts
.value( "bold", "0").toInt( ) );
892 font
.setStyle( QFont::Style(atts
.value( "style").toInt()) );
895 font
.setUnderline( atts
.value( "underline", "0").toInt() );
896 font
.setOverline( atts
.value( "overline", "0").toInt() );
900 * Carga la letra utilizando el documento xml @p properties
904 void Serializer::loadFont(QFont
&font
, const QString
&properties
)
906 QXmlStreamReader
reader(properties
);
908 while( !reader
.atEnd() )
910 if( reader
.readNext() == QXmlStreamReader::StartElement
)
912 if( reader
.name() == "font" )
914 loadFont(font
, &reader
);
920 if( reader
.hasError() )
921 dfDebug
<< reader
.errorString();
925 * Carga la letra utilizando el reader
929 void Serializer::loadFont(QFont
&font
, QXmlStreamReader
*reader
)
931 Q_ASSERT(reader
->name().toString() == "font");
934 foreach(QXmlStreamAttribute att
, reader
->attributes())
936 QString name
= att
.name().toString();
940 font
.setFamily(att
.value().toString());
942 else if(name
== "point-size")
944 font
.setPointSize(att
.value().toString().toInt());
946 else if(name
== "weight")
948 font
.setWeight(att
.value().toString().toInt());
950 else if(name
== "italic")
952 font
.setItalic(att
.value().toString().toInt());
954 else if(name
== "bold")
956 font
.setBold(att
.value().toString().toInt());
958 else if(name
== "style")
960 font
.setStyle(QFont::Style(att
.value().toString().toInt()));
962 else if(name
== "undeline")
964 font
.setUnderline(att
.value().toString().toInt());
966 else if(name
== "overline")
968 font
.setOverline(att
.value().toString().toInt());