zoom_to_group.diff

Proposed patch - Alexander Bruy, 2011-01-26 06:47 AM

Download (2.74 KB)

View differences:

src/app/legend/qgslegend.cpp (working copy)
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 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
      }
1674 1683
    }
1675 1684
  }
1685
  else if ( li->type() == QgsLegendItem::LEGEND_GROUP )
1686
  {
1687
    QgsLegendGroup* currentGroup = dynamic_cast<QgsLegendGroup *>( currentItem() );
1676 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
      }
1715
    }
1716
  }
1717

  
1677 1718
  // Increase bounding box with 5%, so that layer is a bit inside the borders
1678 1719
  extent.scale( 1.05 );
1679 1720