void QgsMapSettings::readXml( QDomNode &node ) { // set destination CRS QgsCoordinateReferenceSystem srs; QDomNode srsNode = node.namedItem( QStringLiteral( "destinationsrs" ) ); if ( !srsNode.isNull() ) { srs.readXml( srsNode ); } setDestinationCrs( srs ); // set extent QDomNode extentNode = node.namedItem( QStringLiteral( "extent" ) ); QgsRectangle aoi = QgsXmlUtils::readRectangle( extentNode.toElement() ); setExtent( aoi ); // set rotation QDomNode rotationNode = node.namedItem( QStringLiteral( "rotation" ) ); QString rotationVal = rotationNode.toElement().text(); if ( ! rotationVal.isEmpty() ) { double rot = rotationVal.toDouble(); setRotation( rot ); } //render map tile QDomElement renderMapTileElem = node.firstChildElement( QStringLiteral( "rendermaptile" ) ); if ( !renderMapTileElem.isNull() ) { setFlag( QgsMapSettings::RenderMapTile, renderMapTileElem.text() == QLatin1String( "1" ) ); } }
QVariant QgsXmlUtils::readVariant( const QDomElement &element ) { QString type = element.attribute( QStringLiteral( "type" ) ); if ( type == QLatin1String( "invalid" ) ) { return QVariant(); } else if ( type == QLatin1String( "int" ) ) { return element.attribute( QStringLiteral( "value" ) ).toInt(); } else if ( type == QLatin1String( "uint" ) ) { return element.attribute( QStringLiteral( "value" ) ).toUInt(); } else if ( type == QLatin1String( "qlonglong" ) ) { return element.attribute( QStringLiteral( "value" ) ).toLongLong(); } else if ( type == QLatin1String( "qulonglong" ) ) { return element.attribute( QStringLiteral( "value" ) ).toULongLong(); } else if ( type == QLatin1String( "double" ) ) { return element.attribute( QStringLiteral( "value" ) ).toDouble(); } else if ( type == QLatin1String( "QString" ) ) { return element.attribute( QStringLiteral( "value" ) ); } else if ( type == QLatin1String( "bool" ) ) { return element.attribute( QStringLiteral( "value" ) ) == QLatin1String( "true" ); } else if ( type == QLatin1String( "Map" ) ) { QVariantMap map; QDomNodeList options = element.childNodes(); for ( int i = 0; i < options.count(); ++i ) { QDomElement elem = options.at( i ).toElement(); if ( elem.tagName() == QLatin1String( "Option" ) ) map.insert( elem.attribute( QStringLiteral( "name" ) ), readVariant( elem ) ); } return map; } else if ( type == QLatin1String( "List" ) ) { QVariantList list; QDomNodeList values = element.childNodes(); for ( int i = 0; i < values.count(); ++i ) { QDomElement elem = values.at( i ).toElement(); list.append( readVariant( elem ) ); } return list; } else if ( type == QLatin1String( "StringList" ) ) { QStringList list; QDomNodeList values = element.childNodes(); for ( int i = 0; i < values.count(); ++i ) { QDomElement elem = values.at( i ).toElement(); list.append( readVariant( elem ).toString() ); } return list; } else if ( type == QLatin1String( "QgsProperty" ) ) { const QDomNodeList values = element.childNodes(); if ( values.isEmpty() ) return QVariant(); QgsProperty p; if ( p.loadVariant( QgsXmlUtils::readVariant( values.at( 0 ).toElement() ) ) ) return p; return QVariant(); } else if ( type == QLatin1String( "QgsCoordinateReferenceSystem" ) ) { QgsCoordinateReferenceSystem crs; crs.readXml( element ); return crs; } else if ( type == QLatin1String( "QgsGeometry" ) ) { return QgsGeometry::fromWkt( element.attribute( "value" ) ); } else { return QVariant(); } }