[QGIS Commit] r15220 - trunk/qgis/src/app/legend

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sun Feb 20 11:33:08 EST 2011


Author: wonder
Date: 2011-02-20 08:33:08 -0800 (Sun, 20 Feb 2011)
New Revision: 15220

Modified:
   trunk/qgis/src/app/legend/qgslegend.cpp
Log:
[FEATURE] zoom to group of layers. Contributed by Alex Bruy - thanks! (#2783)


Modified: trunk/qgis/src/app/legend/qgslegend.cpp
===================================================================
--- trunk/qgis/src/app/legend/qgslegend.cpp	2011-02-20 15:58:26 UTC (rev 15219)
+++ trunk/qgis/src/app/legend/qgslegend.cpp	2011-02-20 16:33:08 UTC (rev 15220)
@@ -549,6 +549,9 @@
     }
     else if ( li->type() == QgsLegendItem::LEGEND_GROUP )
     {
+      theMenu.addAction( QgisApp::getThemeIcon( "/mActionZoomToLayer.png" ),
+                         tr( "Zoom to group" ), this, SLOT( legendLayerZoom() ) );
+
       theMenu.addAction( QgisApp::getThemeIcon( "/mActionRemoveLayer.png" ),
                          tr( "&Remove" ), this, SLOT( legendGroupRemove() ) );
     }
@@ -1656,24 +1659,62 @@
     return;
   }
 
-  //find current Layer
-  QgsLegendLayer* currentLayer = dynamic_cast<QgsLegendLayer *>( currentItem() );
-  if ( !currentLayer )
-    return;
+  QgsRectangle extent;
 
-  QgsMapLayer* theLayer = currentLayer->layer();
-  QgsRectangle extent = theLayer->extent();
+  QgsLegendItem* li = dynamic_cast<QgsLegendItem *>( currentItem() );
 
-  //transform extent if otf-projection is on
-  if ( mMapCanvas->hasCrsTransformEnabled() )
+  if ( li->type() == QgsLegendItem::LEGEND_LAYER )
   {
-    QgsMapRenderer* renderer = mMapCanvas->mapRenderer();
-    if ( renderer )
+    QgsLegendLayer* currentLayer = dynamic_cast<QgsLegendLayer *>( currentItem() );
+    if ( !currentLayer )
+      return;
+
+    QgsMapLayer* theLayer = currentLayer->layer();
+    extent = theLayer->extent();
+
+    //transform extent if otf-projection is on
+    if ( mMapCanvas->hasCrsTransformEnabled() )
     {
-      extent = renderer->layerExtentToOutputExtent( theLayer, extent );
+      QgsMapRenderer* renderer = mMapCanvas->mapRenderer();
+      if ( renderer )
+      {
+        extent = renderer->layerExtentToOutputExtent( theLayer, extent );
+      }
     }
   }
+  else if ( li->type() == QgsLegendItem::LEGEND_GROUP )
+  {
+    QgsLegendGroup* currentGroup = dynamic_cast<QgsLegendGroup *>( currentItem() );
 
+    QgsRectangle layerExtent;
+
+    QList<QgsLegendLayer*> layers = currentGroup->legendLayers();
+    for ( int i = 0; i < layers.size(); ++i )
+    {
+      QgsMapLayer* theLayer = layers.at( i )->layer();
+      layerExtent = theLayer->extent();
+
+      //transform extent if otf-projection is on
+      if ( mMapCanvas->hasCrsTransformEnabled() )
+      {
+        QgsMapRenderer* renderer = mMapCanvas->mapRenderer();
+        if ( renderer )
+        {
+          layerExtent = renderer->layerExtentToOutputExtent( theLayer, layerExtent );
+        }
+      }
+
+      if ( i == 0 )
+      {
+        extent = layerExtent;
+      }
+      else
+      {
+        extent.combineExtentWith( &layerExtent );
+      }
+    }
+  }
+
   // Increase bounding box with 5%, so that layer is a bit inside the borders
   extent.scale( 1.05 );
 



More information about the QGIS-commit mailing list