Skip to content

Commit 5c1302f

Browse files
author
wonder
committed
[FEATURE] zoom to group of layers. Contributed by Alex Bruy - thanks! (#2783)
git-svn-id: http://svn.osgeo.org/qgis/trunk@15220 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 1407ba5 commit 5c1302f

File tree

1 file changed

+52
-11
lines changed

1 file changed

+52
-11
lines changed

src/app/legend/qgslegend.cpp

Lines changed: 52 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,9 @@ void QgsLegend::handleRightClickEvent( QTreeWidgetItem* item, const QPoint& posi
549549
}
550550
else if ( li->type() == QgsLegendItem::LEGEND_GROUP )
551551
{
552+
theMenu.addAction( QgisApp::getThemeIcon( "/mActionZoomToLayer.png" ),
553+
tr( "Zoom to group" ), this, SLOT( legendLayerZoom() ) );
554+
552555
theMenu.addAction( QgisApp::getThemeIcon( "/mActionRemoveLayer.png" ),
553556
tr( "&Remove" ), this, SLOT( legendGroupRemove() ) );
554557
}
@@ -1656,21 +1659,59 @@ void QgsLegend::legendLayerZoom()
16561659
return;
16571660
}
16581661

1659-
//find current Layer
1660-
QgsLegendLayer* currentLayer = dynamic_cast<QgsLegendLayer *>( currentItem() );
1661-
if ( !currentLayer )
1662-
return;
1662+
QgsRectangle extent;
16631663

1664-
QgsMapLayer* theLayer = currentLayer->layer();
1665-
QgsRectangle extent = theLayer->extent();
1664+
QgsLegendItem* li = dynamic_cast<QgsLegendItem *>( currentItem() );
16661665

1667-
//transform extent if otf-projection is on
1668-
if ( mMapCanvas->hasCrsTransformEnabled() )
1666+
if ( li->type() == QgsLegendItem::LEGEND_LAYER )
16691667
{
1670-
QgsMapRenderer* renderer = mMapCanvas->mapRenderer();
1671-
if ( renderer )
1668+
QgsLegendLayer* currentLayer = dynamic_cast<QgsLegendLayer *>( currentItem() );
1669+
if ( !currentLayer )
1670+
return;
1671+
1672+
QgsMapLayer* theLayer = currentLayer->layer();
1673+
extent = theLayer->extent();
1674+
1675+
//transform extent if otf-projection is on
1676+
if ( mMapCanvas->hasCrsTransformEnabled() )
16721677
{
1673-
extent = renderer->layerExtentToOutputExtent( theLayer, extent );
1678+
QgsMapRenderer* renderer = mMapCanvas->mapRenderer();
1679+
if ( renderer )
1680+
{
1681+
extent = renderer->layerExtentToOutputExtent( theLayer, extent );
1682+
}
1683+
}
1684+
}
1685+
else if ( li->type() == QgsLegendItem::LEGEND_GROUP )
1686+
{
1687+
QgsLegendGroup* currentGroup = dynamic_cast<QgsLegendGroup *>( currentItem() );
1688+
1689+
QgsRectangle layerExtent;
1690+
1691+
QList<QgsLegendLayer*> layers = currentGroup->legendLayers();
1692+
for ( int i = 0; i < layers.size(); ++i )
1693+
{
1694+
QgsMapLayer* theLayer = layers.at( i )->layer();
1695+
layerExtent = theLayer->extent();
1696+
1697+
//transform extent if otf-projection is on
1698+
if ( mMapCanvas->hasCrsTransformEnabled() )
1699+
{
1700+
QgsMapRenderer* renderer = mMapCanvas->mapRenderer();
1701+
if ( renderer )
1702+
{
1703+
layerExtent = renderer->layerExtentToOutputExtent( theLayer, layerExtent );
1704+
}
1705+
}
1706+
1707+
if ( i == 0 )
1708+
{
1709+
extent = layerExtent;
1710+
}
1711+
else
1712+
{
1713+
extent.combineExtentWith( &layerExtent );
1714+
}
16741715
}
16751716
}
16761717

0 commit comments

Comments
 (0)