Skip to content

Commit 53c31cf

Browse files
committedFeb 11, 2012
freeze canvas instead of modifying the render flag when changing legend (fixes #4982)
1 parent d7811a1 commit 53c31cf

File tree

2 files changed

+42
-62
lines changed

2 files changed

+42
-62
lines changed
 

‎src/app/legend/qgslegend.cpp

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,7 @@ void QgsLegend::setLayersVisible( bool visible )
218218
}
219219

220220
// Turn off rendering to improve speed.
221-
bool renderFlagState = mMapCanvas->renderFlag();
222-
if ( renderFlagState )
223-
mMapCanvas->setRenderFlag( false );
221+
mMapCanvas->freeze();
224222

225223
for ( QTreeWidgetItem* theItem = firstItem(); theItem; theItem = nextItem( theItem ) )
226224
{
@@ -233,8 +231,7 @@ void QgsLegend::setLayersVisible( bool visible )
233231
}
234232

235233
// Turn on rendering (if it was on previously)
236-
if ( renderFlagState )
237-
mMapCanvas->setRenderFlag( true );
234+
mMapCanvas->freeze( false );
238235

239236
QgsProject::instance()->dirty( true );
240237
}
@@ -1034,9 +1031,7 @@ void QgsLegend::legendGroupRemove()
10341031
}
10351032

10361033
// Turn off rendering to improve speed.
1037-
bool renderFlagState = mMapCanvas->renderFlag();
1038-
if ( renderFlagState )
1039-
mMapCanvas->setRenderFlag( false );
1034+
mMapCanvas->freeze();
10401035

10411036
QgsLegendGroup* lg = dynamic_cast<QgsLegendGroup *>( currentItem() );
10421037
if ( lg )
@@ -1045,8 +1040,7 @@ void QgsLegend::legendGroupRemove()
10451040
}
10461041

10471042
// Turn on rendering (if it was on previously)
1048-
if ( renderFlagState )
1049-
mMapCanvas->setRenderFlag( true );
1043+
mMapCanvas->freeze( false );
10501044
}
10511045

10521046
void QgsLegend::legendGroupSetCRS()
@@ -1961,15 +1955,12 @@ void QgsLegend::handleItemChange( QTreeWidgetItem* item, int column )
19611955
ll->layer()->setLayerName( ll->text( 0 ) );
19621956
}
19631957

1964-
bool renderFlagState = false;
19651958
bool changing = mChanging;
19661959
mChanging = true;
19671960

19681961
if ( !changing )
19691962
{
1970-
renderFlagState = mMapCanvas->renderFlag();
1971-
if ( renderFlagState )
1972-
mMapCanvas->setRenderFlag( false );
1963+
mMapCanvas->freeze();
19731964

19741965
if ( item->isSelected() )
19751966
{
@@ -2018,13 +2009,12 @@ void QgsLegend::handleItemChange( QTreeWidgetItem* item, int column )
20182009

20192010
if ( !changing )
20202011
{
2021-
// update layer set
2022-
updateMapCanvasLayerSet();
2023-
20242012
// If it was on, turn it back on, otherwise leave it
20252013
// off, as turning it on causes a refresh.
2026-
if ( renderFlagState )
2027-
mMapCanvas->setRenderFlag( true );
2014+
mMapCanvas->freeze( false );
2015+
2016+
// update layer set
2017+
updateMapCanvasLayerSet();
20282018
}
20292019

20302020
mChanging = changing;
@@ -2302,9 +2292,7 @@ void QgsLegend::refreshCheckStates()
23022292
void QgsLegend::removeSelectedLayers()
23032293
{
23042294
// Turn off rendering to improve speed.
2305-
bool renderFlagState = mMapCanvas->renderFlag();
2306-
if ( renderFlagState )
2307-
mMapCanvas->setRenderFlag( false );
2295+
mMapCanvas->freeze();
23082296

23092297
foreach( QTreeWidgetItem * item, selectedItems() )
23102298
{
@@ -2324,16 +2312,13 @@ void QgsLegend::removeSelectedLayers()
23242312
}
23252313

23262314
// Turn on rendering (if it was on previously)
2327-
if ( renderFlagState )
2328-
mMapCanvas->setRenderFlag( true );
2315+
mMapCanvas->freeze( false );
23292316
}
23302317

23312318
void QgsLegend::setCRSForSelectedLayers( const QgsCoordinateReferenceSystem &crs )
23322319
{
23332320
// Turn off rendering to improve speed.
2334-
bool renderFlagState = mMapCanvas->renderFlag();
2335-
if ( renderFlagState )
2336-
mMapCanvas->setRenderFlag( false );
2321+
mMapCanvas->freeze();
23372322

23382323
foreach( QTreeWidgetItem * item, selectedItems() )
23392324
{
@@ -2353,8 +2338,7 @@ void QgsLegend::setCRSForSelectedLayers( const QgsCoordinateReferenceSystem &crs
23532338
}
23542339

23552340
// Turn on rendering (if it was on previously)
2356-
if ( renderFlagState )
2357-
mMapCanvas->setRenderFlag( true );
2341+
mMapCanvas->freeze( false );
23582342
}
23592343

23602344
bool QgsLegend::parentGroupEmbedded( QTreeWidgetItem* item ) const

‎src/gui/qgsmapcanvas.cpp

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -272,42 +272,41 @@ void QgsMapCanvas::setLayerSet( QList<QgsMapCanvasLayer> &layers )
272272
bool layerSetChanged = layerSetOld != layerSet;
273273

274274
// update only if needed
275-
if ( layerSetChanged )
276-
{
277-
QgsDebugMsg( "Layer changed to: " + layerSet.join( ", " ) );
275+
if ( !layerSetChanged )
276+
return;
278277

279-
for ( i = 0; i < layerCount(); i++ )
278+
QgsDebugMsg( "Layer changed to: " + layerSet.join( ", " ) );
279+
280+
for ( i = 0; i < layerCount(); i++ )
281+
{
282+
// Add check if vector layer when disconnecting from selectionChanged slot
283+
// Ticket #811 - racicot
284+
QgsMapLayer *currentLayer = layer( i );
285+
disconnect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
286+
disconnect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) );
287+
QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
288+
if ( isVectLyr )
280289
{
281-
// Add check if vector layer when disconnecting from selectionChanged slot
282-
// Ticket #811 - racicot
283-
QgsMapLayer *currentLayer = layer( i );
284-
disconnect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
285-
disconnect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) );
286-
QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
287-
if ( isVectLyr )
288-
{
289-
disconnect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) );
290-
}
290+
disconnect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) );
291291
}
292+
}
292293

293-
mMapRenderer->setLayerSet( layerSet );
294+
mMapRenderer->setLayerSet( layerSet );
294295

295-
for ( i = 0; i < layerCount(); i++ )
296+
for ( i = 0; i < layerCount(); i++ )
297+
{
298+
// Add check if vector layer when connecting to selectionChanged slot
299+
// Ticket #811 - racicot
300+
QgsMapLayer *currentLayer = layer( i );
301+
connect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
302+
connect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) );
303+
QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
304+
if ( isVectLyr )
296305
{
297-
// Add check if vector layer when connecting to selectionChanged slot
298-
// Ticket #811 - racicot
299-
QgsMapLayer *currentLayer = layer( i );
300-
connect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
301-
connect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) );
302-
QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
303-
if ( isVectLyr )
304-
{
305-
connect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) );
306-
}
306+
connect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) );
307307
}
308308
}
309309

310-
311310
if ( mMapOverview )
312311
{
313312
mMapOverview->updateFullExtent( fullExtent() );
@@ -323,13 +322,10 @@ void QgsMapCanvas::setLayerSet( QList<QgsMapCanvasLayer> &layers )
323322
updateOverview();
324323
}
325324

326-
if ( layerSetChanged )
327-
{
328-
QgsDebugMsg( "Layers have changed, refreshing" );
329-
emit layersChanged();
325+
QgsDebugMsg( "Layers have changed, refreshing" );
326+
emit layersChanged();
330327

331-
refresh();
332-
}
328+
refresh();
333329

334330
} // setLayerSet
335331

0 commit comments

Comments
 (0)
Please sign in to comment.