diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 698eea14267..ae2955ba226 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -7938,6 +7938,31 @@ void QgisApp::setLayerScaleVisibility() delete dlg; } +void QgisApp::zoomToLayerScale() +{ + if ( !mLayerTreeView ) + return; + + QList layers = mLayerTreeView->selectedLayers(); + + if ( layers.length() < 1 ) + return; + + QgsMapLayer* layer = mLayerTreeView->currentLayer(); + if ( layer && layer->hasScaleBasedVisibility() ) + { + const double scale = mMapCanvas->scale(); + if ( scale > layer->maximumScale() ) + { + mMapCanvas->zoomScale( layer->maximumScale() * QGis::SCALE_PRECISION ); + } + else if ( scale <= layer->minimumScale() ) + { + mMapCanvas->zoomScale( layer->minimumScale() ); + } + } +} + void QgisApp::setLayerCRS() { if ( !( mLayerTreeView && mLayerTreeView->currentLayer() ) ) diff --git a/src/app/qgisapp.h b/src/app/qgisapp.h index f45e412ef3f..45a2474e3a9 100644 --- a/src/app/qgisapp.h +++ b/src/app/qgisapp.h @@ -744,6 +744,7 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow void duplicateLayers( const QList& lyrList = QList() ); //! Set Scale visibility of selected layers void setLayerScaleVisibility(); + void zoomToLayerScale(); //! Set CRS of a layer void setLayerCRS(); //! Assign layer CRS to project diff --git a/src/app/qgsapplayertreeviewmenuprovider.cpp b/src/app/qgsapplayertreeviewmenuprovider.cpp index f556b9bf482..825201b3912 100644 --- a/src/app/qgsapplayertreeviewmenuprovider.cpp +++ b/src/app/qgsapplayertreeviewmenuprovider.cpp @@ -11,6 +11,7 @@ #include "qgslayertreemodel.h" #include "qgslayertreemodellegendnode.h" #include "qgslayertreeviewdefaultactions.h" +#include "qgsmapcanvas.h" #include "qgsmaplayerstyleguiutils.h" #include "qgsmaplayerregistry.h" #include "qgsproject.h" @@ -105,6 +106,9 @@ QMenu* QgsAppLayerTreeViewMenuProvider::createContextMenu() // set layer scale visibility menu->addAction( tr( "&Set Layer Scale Visibility" ), QgisApp::instance(), SLOT( setLayerScaleVisibility() ) ); + if ( !vlayer->isInScaleRange( mCanvas->scale() ) ) + menu->addAction( tr( "&Zoom to Layer Scale" ), QgisApp::instance(), SLOT( zoomToLayerScale() ) ); + // set layer crs menu->addAction( QgsApplication::getThemeIcon( "/mActionSetCRS.png" ), tr( "&Set Layer CRS" ), QgisApp::instance(), SLOT( setLayerCRS() ) );