From 2183887759571fc173153051d97d8256c043e2f8 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Wed, 18 Jan 2017 14:31:33 +1000 Subject: [PATCH] Don't use canvas mapSettings when composer maps respond to layer changes --- doc/api_break.dox | 1 + python/core/composer/qgscomposermap.sip | 8 ----- src/core/composer/qgscomposermap.cpp | 45 +++++++------------------ src/core/composer/qgscomposermap.h | 9 ++--- 4 files changed, 15 insertions(+), 48 deletions(-) diff --git a/doc/api_break.dox b/doc/api_break.dox index 2bd25c0f1ea..35cd102080e 100644 --- a/doc/api_break.dox +++ b/doc/api_break.dox @@ -570,6 +570,7 @@ instead. - atlasFixedScale() and setAtlasFixedScale() were removed. Use atlasScalingMode() and setAtlasScalingMode() instead. - storeCurrentLayerSet() was removed. Use setLayers() instead. +- The layersChanged() slot was removed. QgsComposerMapGrid {#qgis_api_break_3_0_QgsComposerMapGrid} ------------------ diff --git a/python/core/composer/qgscomposermap.sip b/python/core/composer/qgscomposermap.sip index 0555feb8238..94c1115be0f 100644 --- a/python/core/composer/qgscomposermap.sip +++ b/python/core/composer/qgscomposermap.sip @@ -387,12 +387,4 @@ class QgsComposerMap : QgsComposerItem virtual void refreshDataDefinedProperty( const QgsComposerObject::DataDefinedProperty property = QgsComposerObject::AllProperties, const QgsExpressionContext* context = 0 ); - protected slots: - - /** Called when layers are added or removed from the layer registry. Updates the maps - * layer set and redraws the map if required. - * @note added in QGIS 2.9 - */ - void layersChanged(); - }; diff --git a/src/core/composer/qgscomposermap.cpp b/src/core/composer/qgscomposermap.cpp index 42c5ae78854..b40d5419c8e 100644 --- a/src/core/composer/qgscomposermap.cpp +++ b/src/core/composer/qgscomposermap.cpp @@ -501,7 +501,7 @@ void QgsComposerMap::updateCachedImage() { mCacheUpdated = false; cache(); - QGraphicsRectItem::update(); + update(); } void QgsComposerMap::renderModeUpdateCachedImage() @@ -512,12 +512,6 @@ void QgsComposerMap::renderModeUpdateCachedImage() } } -void QgsComposerMap::layersChanged() -{ - syncLayerSet(); - renderModeUpdateCachedImage(); -} - void QgsComposerMap::setCacheUpdated( bool u ) { mCacheUpdated = u; @@ -1220,8 +1214,12 @@ void QgsComposerMap::connectUpdateSlot() QgsProject* project = mComposition->project(); if ( project ) { - connect( project, SIGNAL( layerWillBeRemoved( QString ) ), this, SLOT( layersChanged() ) ); - connect( project, SIGNAL( layerWasAdded( QgsMapLayer* ) ), this, SLOT( layersChanged() ) ); + // handles updating the stored layer state BEFORE the layers are removed + connect( project, static_cast < void ( QgsProject::* )( const QList& layers ) > ( &QgsProject::layersWillBeRemoved ), + this, &QgsComposerMap::layersAboutToBeRemoved ); + // redraws the map AFTER layers are removed + connect( project, &QgsProject::layersRemoved, this, &QgsComposerMap::renderModeUpdateCachedImage ); + connect( project, &QgsProject::legendLayersAdded, this, &QgsComposerMap::renderModeUpdateCachedImage ); } } @@ -1628,33 +1626,14 @@ void QgsComposerMap::storeCurrentLayerStyles() } } -void QgsComposerMap::syncLayerSet() +void QgsComposerMap::layersAboutToBeRemoved( QList< QgsMapLayer* > layers ) { - if ( mLayers.size() < 1 ) + if ( !mLayers.isEmpty() || mLayerStyleOverrides.isEmpty() ) { - return; - } - - //if layer set is fixed, do a lookup in the layer registry to also find the non-visible layers - QList currentLayers; - if ( mKeepLayerSet ) - { - currentLayers = mComposition->project()->mapLayers().values(); - } - else //only consider layers visible in the map - { - currentLayers = mComposition->mapSettings().layers(); - } - - for ( int i = mLayers.size() - 1; i >= 0; --i ) - { - if ( QgsMapLayer* layer = mLayers.at( i ).data() ) + Q_FOREACH ( QgsMapLayer* layer, layers ) { - if ( !currentLayers.contains( layer ) ) - { - mLayerStyleOverrides.remove( layer->id() ); - mLayers.removeAt( i ); - } + mLayerStyleOverrides.remove( layer->id() ); + mLayers.removeAll( layer ); } } } diff --git a/src/core/composer/qgscomposermap.h b/src/core/composer/qgscomposermap.h index 30cabce7ed1..1e651599e67 100644 --- a/src/core/composer/qgscomposermap.h +++ b/src/core/composer/qgscomposermap.h @@ -458,13 +458,8 @@ class CORE_EXPORT QgsComposerMap : public QgsComposerItem virtual void refreshDataDefinedProperty( const QgsComposerObject::DataDefinedProperty property = QgsComposerObject::AllProperties, const QgsExpressionContext* context = nullptr ) override; - protected slots: - - /** Called when layers are added or removed from the layer registry. Updates the maps - * layer set and redraws the map if required. - * @note added in QGIS 2.9 - */ - void layersChanged(); + private slots: + void layersAboutToBeRemoved( QList layers ); private: