@@ -1190,14 +1190,18 @@ bool QgsComposerMap::writeXml( QDomElement &elem, QDomDocument &doc ) const
1190
1190
1191
1191
// layer set
1192
1192
QDomElement layerSetElem = doc.createElement ( QStringLiteral ( " LayerSet" ) );
1193
- Q_FOREACH ( const QgsWeakMapLayerPointer &layerPtr , mLayers )
1193
+ Q_FOREACH ( const QgsMapLayerRef &layerRef , mLayers )
1194
1194
{
1195
- QgsMapLayer *layer = layerPtr.data ();
1196
- if ( !layer )
1195
+ if ( !layerRef )
1197
1196
continue ;
1198
1197
QDomElement layerElem = doc.createElement ( QStringLiteral ( " Layer" ) );
1199
- QDomText layerIdText = doc.createTextNode ( layer-> id () );
1198
+ QDomText layerIdText = doc.createTextNode ( layerRef. layerId );
1200
1199
layerElem.appendChild ( layerIdText );
1200
+
1201
+ layerElem.setAttribute ( QStringLiteral ( " name" ), layerRef.name );
1202
+ layerElem.setAttribute ( QStringLiteral ( " source" ), layerRef.source );
1203
+ layerElem.setAttribute ( QStringLiteral ( " provider" ), layerRef.provider );
1204
+
1201
1205
layerSetElem.appendChild ( layerElem );
1202
1206
}
1203
1207
composerMapElem.appendChild ( layerSetElem );
@@ -1338,9 +1342,15 @@ bool QgsComposerMap::readXml( const QDomElement &itemElem, const QDomDocument &d
1338
1342
mLayers .reserve ( layerIdNodeList.size () );
1339
1343
for ( int i = 0 ; i < layerIdNodeList.size (); ++i )
1340
1344
{
1341
- QString layerId = layerIdNodeList.at ( i ).toElement ().text ();
1342
- if ( QgsMapLayer *ml = mComposition ->project ()->mapLayer ( layerId ) )
1343
- mLayers << ml;
1345
+ QDomElement layerElem = layerIdNodeList.at ( i ).toElement ();
1346
+ QString layerId = layerElem.text ();
1347
+ QString layerName = layerElem.attribute ( QStringLiteral ( " name" ) );
1348
+ QString layerSource = layerElem.attribute ( QStringLiteral ( " source" ) );
1349
+ QString layerProvider = layerElem.attribute ( QStringLiteral ( " provider" ) );
1350
+
1351
+ QgsMapLayerRef ref ( layerId, layerName, layerSource, layerProvider );
1352
+ ref.resolveWeakly ( mComposition ->project () );
1353
+ mLayers << ref;
1344
1354
}
1345
1355
}
1346
1356
@@ -1498,12 +1508,12 @@ bool QgsComposerMap::readXml( const QDomElement &itemElem, const QDomDocument &d
1498
1508
1499
1509
QList<QgsMapLayer *> QgsComposerMap::layers () const
1500
1510
{
1501
- return _qgis_listQPointerToRaw ( mLayers );
1511
+ return _qgis_listRefToRaw ( mLayers );
1502
1512
}
1503
1513
1504
1514
void QgsComposerMap::setLayers ( const QList<QgsMapLayer *> &layers )
1505
1515
{
1506
- mLayers = _qgis_listRawToQPointer ( layers );
1516
+ mLayers = _qgis_listRawToRef ( layers );
1507
1517
}
1508
1518
1509
1519
@@ -1520,9 +1530,9 @@ void QgsComposerMap::setLayerStyleOverrides( const QMap<QString, QString> &overr
1520
1530
void QgsComposerMap::storeCurrentLayerStyles ()
1521
1531
{
1522
1532
mLayerStyleOverrides .clear ();
1523
- Q_FOREACH ( const QgsWeakMapLayerPointer &layerPtr , mLayers )
1533
+ Q_FOREACH ( const QgsMapLayerRef &layerRef , mLayers )
1524
1534
{
1525
- if ( QgsMapLayer *layer = layerPtr. data () )
1535
+ if ( QgsMapLayer *layer = &layerRef )
1526
1536
{
1527
1537
QgsMapLayerStyle style;
1528
1538
style.readFromLayer ( layer );
@@ -1538,8 +1548,8 @@ void QgsComposerMap::layersAboutToBeRemoved( QList< QgsMapLayer * > layers )
1538
1548
Q_FOREACH ( QgsMapLayer *layer, layers )
1539
1549
{
1540
1550
mLayerStyleOverrides .remove ( layer->id () );
1541
- mLayers .removeAll ( layer );
1542
1551
}
1552
+ _qgis_removeLayers ( mLayers , layers );
1543
1553
}
1544
1554
}
1545
1555
0 commit comments