@@ -549,6 +549,9 @@ void QgsLegend::handleRightClickEvent( QTreeWidgetItem* item, const QPoint& posi
549
549
}
550
550
else if ( li->type () == QgsLegendItem::LEGEND_GROUP )
551
551
{
552
+ theMenu.addAction ( QgisApp::getThemeIcon ( " /mActionZoomToLayer.png" ),
553
+ tr ( " Zoom to group" ), this , SLOT ( legendLayerZoom () ) );
554
+
552
555
theMenu.addAction ( QgisApp::getThemeIcon ( " /mActionRemoveLayer.png" ),
553
556
tr ( " &Remove" ), this , SLOT ( legendGroupRemove () ) );
554
557
}
@@ -1656,21 +1659,59 @@ void QgsLegend::legendLayerZoom()
1656
1659
return ;
1657
1660
}
1658
1661
1659
- // find current Layer
1660
- QgsLegendLayer* currentLayer = dynamic_cast <QgsLegendLayer *>( currentItem () );
1661
- if ( !currentLayer )
1662
- return ;
1662
+ QgsRectangle extent;
1663
1663
1664
- QgsMapLayer* theLayer = currentLayer->layer ();
1665
- QgsRectangle extent = theLayer->extent ();
1664
+ QgsLegendItem* li = dynamic_cast <QgsLegendItem *>( currentItem () );
1666
1665
1667
- // transform extent if otf-projection is on
1668
- if ( mMapCanvas ->hasCrsTransformEnabled () )
1666
+ if ( li->type () == QgsLegendItem::LEGEND_LAYER )
1669
1667
{
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 () )
1672
1677
{
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
+ }
1674
1715
}
1675
1716
}
1676
1717
0 commit comments