diff --git a/python/gui/auto_generated/qgsmapcanvas.sip.in b/python/gui/auto_generated/qgsmapcanvas.sip.in index 3b302c42ace..46583bbde3b 100644 --- a/python/gui/auto_generated/qgsmapcanvas.sip.in +++ b/python/gui/auto_generated/qgsmapcanvas.sip.in @@ -288,11 +288,13 @@ Centers canvas extent to feature ids Pan to the selected features of current (vector) layer keeping same extent. %End - void panToAllSelected( const QList *layers ); + void panToSelected( const QList &layers ); %Docstring Pan to the combined extent of the selected features of all provided (vector) layers. :param layers: A list of layers + +.. versionadded:: 3.18 %End void flashFeatureIds( QgsVectorLayer *layer, const QgsFeatureIds &ids, @@ -962,11 +964,13 @@ Zoom to the extent of the selected features of provided (vector) layer. :param layer: optionally specify different than current layer %End - void zoomToAllSelected( const QList *layers ); + void zoomToSelected( const QList &layers ); %Docstring Zoom to the combined extent of the selected features of all provided (vector) layers. :param layers: A list of layers + +.. versionadded:: 3.18 %End void setZoomResolutions( const QList &resolutions ); diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 12a784b8f66..5387744a7f8 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -8191,10 +8191,10 @@ void QgisApp::zoomOut() void QgisApp::zoomToSelected() { - QList layers = mLayerTreeView->selectedLayers(); + const QList layers = mLayerTreeView->selectedLayers(); - if ( layers.size() > 1 && !layers.isEmpty() ) - mMapCanvas->zoomToAllSelected( &layers ); + if ( layers.size() > 1 ) + mMapCanvas->zoomToSelected( layers ); else mMapCanvas->zoomToSelected(); @@ -8203,11 +8203,10 @@ void QgisApp::zoomToSelected() void QgisApp::panToSelected() { - QList layers = mLayerTreeView->selectedLayers(); - - if ( layers.size() > 1 && !layers.isEmpty() ) - mMapCanvas->panToAllSelected( &layers ); + const QList layers = mLayerTreeView->selectedLayers(); + if ( layers.size() > 1 ) + mMapCanvas->panToSelected( layers ); else mMapCanvas->panToSelected(); } diff --git a/src/app/qgsapplayertreeviewmenuprovider.cpp b/src/app/qgsapplayertreeviewmenuprovider.cpp index df4d2c7bc80..32fa3acebbf 100644 --- a/src/app/qgsapplayertreeviewmenuprovider.cpp +++ b/src/app/qgsapplayertreeviewmenuprovider.cpp @@ -156,23 +156,19 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu() menu->addAction( zoomToLayers ); if ( vlayer ) { - QList selectedLayers = mView->selectedLayers(); - bool hasSelectedFeature; - for ( int i = 0; i < selectedLayers.size(); ++i ) + const QList selectedLayers = mView->selectedLayers(); + bool hasSelectedFeature = false; + for ( const QgsMapLayer *layer : selectedLayers ) { - QgsMapLayer *layer = selectedLayers.at( i ); - if ( layer->type() == QgsMapLayerType( 0 ) ) + if ( const QgsVectorLayer *vLayer = qobject_cast( layer ) ) { - QgsVectorLayer *vLayer = qobject_cast( layer ); - if ( !vLayer->selectedFeatureIds().isEmpty() ) + if ( vLayer->selectedFeatureCount() > 0 ) { hasSelectedFeature = true; break; } - else - hasSelectedFeature = false; } } diff --git a/src/app/qgsmapcanvasdockwidget.cpp b/src/app/qgsmapcanvasdockwidget.cpp index c8f36b905eb..06c43130bd8 100644 --- a/src/app/qgsmapcanvasdockwidget.cpp +++ b/src/app/qgsmapcanvasdockwidget.cpp @@ -525,9 +525,9 @@ void QgsMapCanvasDockWidget::showLabels( bool show ) void QgsMapCanvasDockWidget::autoZoomToSelection( bool autoZoom ) { if ( autoZoom ) - connect( mMapCanvas, &QgsMapCanvas::selectionChanged, mMapCanvas, &QgsMapCanvas::zoomToSelected ); + connect( mMapCanvas, &QgsMapCanvas::selectionChanged, mMapCanvas, qgis::overload::of( &QgsMapCanvas::zoomToSelected ) ); else - disconnect( mMapCanvas, &QgsMapCanvas::selectionChanged, mMapCanvas, &QgsMapCanvas::zoomToSelected ); + disconnect( mMapCanvas, &QgsMapCanvas::selectionChanged, mMapCanvas, qgis::overload::of( &QgsMapCanvas::zoomToSelected ) ); } QgsMapSettingsAction::QgsMapSettingsAction( QWidget *parent ) diff --git a/src/gui/layertree/qgslayertreeviewdefaultactions.cpp b/src/gui/layertree/qgslayertreeviewdefaultactions.cpp index bb9948034d5..cb01d68a1dc 100644 --- a/src/gui/layertree/qgslayertreeviewdefaultactions.cpp +++ b/src/gui/layertree/qgslayertreeviewdefaultactions.cpp @@ -312,16 +312,12 @@ void QgsLayerTreeViewDefaultActions::zoomToLayers( QgsMapCanvas *canvas ) void QgsLayerTreeViewDefaultActions::zoomToSelection( QgsMapCanvas *canvas ) { - QgsVectorLayer *layer; + QgsVectorLayer *layer = qobject_cast< QgsVectorLayer * >( mView->currentLayer() ); - if ( mView->currentLayer()->type() == QgsMapLayerType( 0 ) ) - layer = qobject_cast( mView->currentLayer() ); - - QList layers = mView->selectedLayers(); - - if ( layers.size() > 1 && !layers.isEmpty() ) - canvas->zoomToAllSelected( &layers ); + const QList layers = mView->selectedLayers(); + if ( layers.size() > 1 ) + canvas->zoomToSelected( layers ); else if ( layers.size() <= 1 && layer ) canvas->zoomToSelected( layer ); diff --git a/src/gui/qgsmapcanvas.cpp b/src/gui/qgsmapcanvas.cpp index dc29ee28c11..736eb647a90 100644 --- a/src/gui/qgsmapcanvas.cpp +++ b/src/gui/qgsmapcanvas.cpp @@ -1349,19 +1349,16 @@ void QgsMapCanvas::zoomToSelected( QgsVectorLayer *layer ) zoomToFeatureExtent( rect ); } -void QgsMapCanvas::zoomToAllSelected( const QList *layers ) +void QgsMapCanvas::zoomToSelected( const QList &layers ) { - QgsVectorLayer *layer; - QgsRectangle rect; rect.setMinimal(); QgsRectangle selectionExtent; selectionExtent.setMinimal(); - for ( int i = 0; i < layers->size(); ++i ) + for ( QgsMapLayer *mapLayer : layers ) { - if ( layers->at( i )->type() == QgsMapLayerType( 0 ) ) - layer = qobject_cast( layers->at( i ) ); + QgsVectorLayer *layer = qobject_cast( mapLayer ); if ( !layer || !layer->isSpatial() || layer->selectedFeatureCount() == 0 ) continue; @@ -1539,19 +1536,16 @@ void QgsMapCanvas::panToSelected( QgsVectorLayer *layer ) refresh(); } -void QgsMapCanvas::panToAllSelected( const QList *layers ) +void QgsMapCanvas::panToSelected( const QList &layers ) { - QgsVectorLayer *layer; - QgsRectangle rect; rect.setMinimal(); QgsRectangle selectionExtent; selectionExtent.setMinimal(); - for ( int i = 0; i < layers->size(); ++i ) + for ( QgsMapLayer *mapLayer : layers ) { - if ( layers->at( i )->type() == QgsMapLayerType( 0 ) ) - layer = qobject_cast( layers->at( i ) ); + QgsVectorLayer *layer = qobject_cast( mapLayer ); if ( !layer || !layer->isSpatial() || layer->selectedFeatureCount() == 0 ) continue; diff --git a/src/gui/qgsmapcanvas.h b/src/gui/qgsmapcanvas.h index 19084050844..be7ddf87418 100644 --- a/src/gui/qgsmapcanvas.h +++ b/src/gui/qgsmapcanvas.h @@ -314,8 +314,9 @@ class GUI_EXPORT QgsMapCanvas : public QGraphicsView /** * Pan to the combined extent of the selected features of all provided (vector) layers. * \param layers A list of layers + * \since QGIS 3.18 */ - void panToAllSelected( const QList *layers ); + void panToSelected( const QList &layers ); /** * Causes a set of features with matching \a ids from a vector \a layer to flash @@ -875,8 +876,9 @@ class GUI_EXPORT QgsMapCanvas : public QGraphicsView /** * Zoom to the combined extent of the selected features of all provided (vector) layers. * \param layers A list of layers + * \since QGIS 3.18 */ - void zoomToAllSelected( const QList *layers ); + void zoomToSelected( const QList &layers ); /** * Set a list of resolutions (map units per pixel) to which to "snap to" when zooming the map