@@ -596,61 +596,69 @@ bool QgsMapLayer::writeLayerXML( QDomElement& layerElement, QDomDocument& docume
596
596
597
597
} // bool QgsMapLayer::writeXML
598
598
599
- QDomDocument QgsMapLayer::asLayerDefinition ()
599
+ QDomDocument QgsMapLayer::asLayerDefinition ( QList<QgsMapLayer *> layers )
600
600
{
601
601
QDomDocument doc ( " qgis-layer-definition" );
602
- QDomElement maplayer = doc.createElement ( " maplayer" );
603
- this ->writeLayerXML ( maplayer, doc );
604
- maplayer.removeChild ( maplayer.firstChildElement ( " id" ) );
605
- doc.appendChild ( maplayer );
602
+ QDomElement layerselm = doc.createElement ( " maplayers" );
603
+ foreach ( QgsMapLayer* layer, layers)
604
+ {
605
+ QDomElement layerelm = doc.createElement ( " maplayer" );
606
+ layer->writeLayerXML ( layerelm, doc );
607
+ layerelm.removeChild ( layerelm.firstChildElement ( " id" ) );
608
+ layerselm.appendChild ( layerelm );
609
+ }
610
+ doc.appendChild ( layerselm );
606
611
return doc;
607
612
}
608
613
609
- QgsMapLayer* QgsMapLayer::fromLayerDefinition ( QDomDocument& document )
614
+ QList< QgsMapLayer*> QgsMapLayer::fromLayerDefinition ( QDomDocument& document )
610
615
{
611
- QDomNode layernode = document.elementsByTagName ( " maplayer" ).at ( 0 );
612
- QDomElement layerElem = layernode.toElement ();
613
-
614
- QString type = layerElem.attribute ( " type" );
615
- QgsDebugMsg ( type );
616
- QgsMapLayer *layer = NULL ;
617
-
618
- if ( type == " vector" )
616
+ QList<QgsMapLayer*> layers;
617
+ QDomNodeList layernodes = document.elementsByTagName ( " maplayer" );
618
+ for ( int i = 0 ; i < layernodes.size (); ++i )
619
619
{
620
- layer = new QgsVectorLayer;
621
- }
622
- else if ( type == " raster" )
623
- {
624
- layer = new QgsRasterLayer;
625
- }
626
- else if ( type == " plugin" )
627
- {
628
- QString typeName = layerElem.attribute ( " name" );
629
- layer = QgsPluginLayerRegistry::instance ()->createLayer ( typeName );
630
- }
620
+ QDomNode layernode = layernodes.at (i);
621
+ QDomElement layerElem = layernode.toElement ();
631
622
632
- bool ok = layer-> readLayerXML ( layerElem );
633
- if ( ok )
634
- return layer;
623
+ QString type = layerElem. attribute ( " type " );
624
+ QgsDebugMsg ( type );
625
+ QgsMapLayer * layer = NULL ;
635
626
636
- delete layer;
637
- return 0 ;
627
+ if ( type == " vector" )
628
+ {
629
+ layer = new QgsVectorLayer;
630
+ }
631
+ else if ( type == " raster" )
632
+ {
633
+ layer = new QgsRasterLayer;
634
+ }
635
+ else if ( type == " plugin" )
636
+ {
637
+ QString typeName = layerElem.attribute ( " name" );
638
+ layer = QgsPluginLayerRegistry::instance ()->createLayer ( typeName );
639
+ }
640
+
641
+ bool ok = layer->readLayerXML ( layerElem );
642
+ if ( ok )
643
+ layers << layer;
644
+ }
645
+ return layers;
638
646
}
639
647
640
- QgsMapLayer* QgsMapLayer::fromLayerDefinitionFile ( const QString qlrfile )
648
+ QList< QgsMapLayer *> QgsMapLayer::fromLayerDefinitionFile ( const QString qlrfile )
641
649
{
642
650
QFile file ( qlrfile );
643
651
if ( !file.open ( QIODevice::ReadOnly ) )
644
652
{
645
653
QgsDebugMsg ( " Can't open file" );
646
- return 0 ;
654
+ return QList<QgsMapLayer*>() ;
647
655
}
648
656
649
657
QDomDocument doc;
650
658
if ( !doc.setContent ( &file ) )
651
659
{
652
660
QgsDebugMsg ( " Can't set content" );
653
- return 0 ;
661
+ return QList<QgsMapLayer*>() ;
654
662
}
655
663
656
664
return QgsMapLayer::fromLayerDefinition ( doc );
0 commit comments