[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