diff --git a/python/gui/qgsmapoverviewcanvas.sip b/python/gui/qgsmapoverviewcanvas.sip index 52facc0677b..82b8831725d 100644 --- a/python/gui/qgsmapoverviewcanvas.sip +++ b/python/gui/qgsmapoverviewcanvas.sip @@ -26,7 +26,7 @@ class QgsMapOverviewCanvas : QWidget void enableAntiAliasing( bool flag ); - void updateFullExtent( const QgsRectangle& rect ); + void updateFullExtent(); public slots: diff --git a/src/gui/qgsmapcanvas.cpp b/src/gui/qgsmapcanvas.cpp index 43cfea6bc2b..3c46302ec5e 100644 --- a/src/gui/qgsmapcanvas.cpp +++ b/src/gui/qgsmapcanvas.cpp @@ -265,45 +265,48 @@ void QgsMapCanvas::setLayerSet( QList &layers ) bool layerSetChanged = layerSetOld != layerSet; // update only if needed - if ( !layerSetChanged ) - return; - - QgsDebugMsg( "Layer changed to: " + layerSet.join( ", " ) ); - - for ( i = 0; i < layerCount(); i++ ) + if ( layerSetChanged ) { - // Add check if vector layer when disconnecting from selectionChanged slot - // Ticket #811 - racicot - QgsMapLayer *currentLayer = layer( i ); - disconnect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) ); - disconnect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) ); - QgsVectorLayer *isVectLyr = qobject_cast( currentLayer ); - if ( isVectLyr ) - { - disconnect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) ); - } - } + QgsDebugMsg( "Layers changed to: " + layerSet.join( ", " ) ); - mMapRenderer->setLayerSet( layerSet ); - - for ( i = 0; i < layerCount(); i++ ) - { - // Add check if vector layer when connecting to selectionChanged slot - // Ticket #811 - racicot - QgsMapLayer *currentLayer = layer( i ); - connect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) ); - connect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) ); - QgsVectorLayer *isVectLyr = qobject_cast( currentLayer ); - if ( isVectLyr ) + for ( i = 0; i < layerCount(); i++ ) { - connect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) ); + // Add check if vector layer when disconnecting from selectionChanged slot + // Ticket #811 - racicot + QgsMapLayer *currentLayer = layer( i ); + disconnect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) ); + disconnect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) ); + QgsVectorLayer *isVectLyr = qobject_cast( currentLayer ); + if ( isVectLyr ) + { + disconnect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) ); + } } + + mMapRenderer->setLayerSet( layerSet ); + + for ( i = 0; i < layerCount(); i++ ) + { + // Add check if vector layer when connecting to selectionChanged slot + // Ticket #811 - racicot + QgsMapLayer *currentLayer = layer( i ); + connect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) ); + connect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) ); + QgsVectorLayer *isVectLyr = qobject_cast( currentLayer ); + if ( isVectLyr ) + { + connect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) ); + } + } + + QgsDebugMsg( "Layers have changed, refreshing" ); + emit layersChanged(); + + refresh(); } if ( mMapOverview ) { - mMapOverview->updateFullExtent( fullExtent() ); - QStringList& layerSetOvOld = mMapOverview->layerSet(); if ( layerSetOvOld != layerSetOverview ) { @@ -314,12 +317,6 @@ void QgsMapCanvas::setLayerSet( QList &layers ) // because full extent might have changed updateOverview(); } - - QgsDebugMsg( "Layers have changed, refreshing" ); - emit layersChanged(); - - refresh(); - } // setLayerSet void QgsMapCanvas::enableOverviewMode( QgsMapOverviewCanvas* overview ) @@ -514,11 +511,6 @@ void QgsMapCanvas::updateFullExtent() QgsDebugMsg( "updating full extent" ); mMapRenderer->updateFullExtent(); - if ( mMapOverview ) - { - mMapOverview->updateFullExtent( fullExtent() ); - updateOverview(); - } refresh(); } diff --git a/src/gui/qgsmapoverviewcanvas.cpp b/src/gui/qgsmapoverviewcanvas.cpp index 338b2700e04..773a717b402 100644 --- a/src/gui/qgsmapoverviewcanvas.cpp +++ b/src/gui/qgsmapoverviewcanvas.cpp @@ -95,6 +95,7 @@ void QgsMapOverviewCanvas::paintEvent( QPaintEvent* pe ) { mPixmap = QPixmap( mNewSize ); mMapRenderer->setOutputSize( mNewSize, mPixmap.logicalDpiX() ); + updateFullExtent(); mNewSize = QSize(); refresh(); } @@ -106,10 +107,12 @@ void QgsMapOverviewCanvas::paintEvent( QPaintEvent* pe ) void QgsMapOverviewCanvas::drawExtentRect() { + if ( !mMapCanvas || !mMapRenderer ) return; + const QgsRectangle& extent = mMapCanvas->extent(); // show only when valid extent is set - if ( extent.isEmpty() ) + if ( extent.isEmpty() || mMapRenderer->extent().isEmpty() ) { mPanningWidget->hide(); return; @@ -290,11 +293,23 @@ void QgsMapOverviewCanvas::setBackgroundColor( const QColor& color ) void QgsMapOverviewCanvas::setLayerSet( const QStringList& layerSet ) { + QgsDebugMsg( "layerSet: " + layerSet.join( ", " ) ); + if ( !mMapRenderer ) return; mMapRenderer->setLayerSet( layerSet ); + mMapRenderer->updateFullExtent(); + updateFullExtent(); } -void QgsMapOverviewCanvas::updateFullExtent( const QgsRectangle& rect ) +void QgsMapOverviewCanvas::updateFullExtent() { + if ( !mMapRenderer ) return; + QgsRectangle rect; + if ( !mMapRenderer->layerSet().isEmpty() ) + { + rect = mMapRenderer->fullExtent(); + // expand a bit to keep features on margin + rect.scale( 1.1 ); + } mMapRenderer->setExtent( rect ); drawExtentRect(); } diff --git a/src/gui/qgsmapoverviewcanvas.h b/src/gui/qgsmapoverviewcanvas.h index ee3963f167e..5b159fe4f2a 100644 --- a/src/gui/qgsmapoverviewcanvas.h +++ b/src/gui/qgsmapoverviewcanvas.h @@ -59,7 +59,7 @@ class GUI_EXPORT QgsMapOverviewCanvas : public QWidget void enableAntiAliasing( bool flag ) { mAntiAliasing = flag; } - void updateFullExtent( const QgsRectangle& rect ); + void updateFullExtent(); public slots: