@@ -113,6 +113,8 @@ QgsLegend::QgsLegend( QgsMapCanvas *canvas, QWidget * parent, const char *name )
113113
114114 connect ( mMapCanvas , SIGNAL ( layersChanged () ),
115115 this , SLOT ( refreshCheckStates () ) );
116+ connect ( mMapCanvas , SIGNAL ( extentsChanged () ),
117+ this , SLOT ( updateLegendItemSymbologies () ) );
116118
117119 // Initialise the line indicator widget.
118120 mInsertionLine = new QWidget ( viewport () );
@@ -141,6 +143,7 @@ QgsLegend::QgsLegend( QgsMapCanvas *canvas, QWidget * parent, const char *name )
141143QgsLegend::~QgsLegend ()
142144{
143145 delete mInsertionLine ;
146+ delete mGetLegendGraphicPopup ;
144147}
145148
146149#ifdef QGISDEBUG
@@ -395,6 +398,24 @@ void QgsLegend::mousePressEvent( QMouseEvent * e )
395398{
396399 if ( e->button () == Qt::LeftButton )
397400 {
401+ // show WMS legend in case itemAt( e->pos() ) is a wms legend
402+ // if it's not a legend later it return a null pixmap
403+ QImage legend = getWmsLegendPixmap ( itemAt ( e->pos () ) );
404+ if ( !legend.isNull () )
405+ {
406+ mGetLegendGraphicPopup = new QFrame ();
407+ mGetLegendGraphicPopup ->setFrameStyle (QFrame::Box | QFrame::Raised);
408+ mGetLegendGraphicPopup ->setLineWidth (2 );
409+ mGetLegendGraphicPopup ->setAutoFillBackground (true );
410+ QVBoxLayout *layout = new QVBoxLayout;
411+ QLabel *label = new QLabel (mGetLegendGraphicPopup );
412+ label->setPixmap ( QPixmap::fromImage (legend) );
413+ layout->addWidget (label);
414+ mGetLegendGraphicPopup ->setLayout (layout);
415+ mGetLegendGraphicPopup ->move (e->globalX (), e->globalY ());
416+ mGetLegendGraphicPopup ->show ();
417+ }
418+
398419 mMousePressedFlag = true ;
399420 mDropTarget = itemAt ( e->pos () );
400421 if ( !mDropTarget )
@@ -624,6 +645,11 @@ void QgsLegend::updateGroupCheckStates( QTreeWidgetItem *item )
624645
625646void QgsLegend::mouseReleaseEvent ( QMouseEvent * e )
626647{
648+ if (mGetLegendGraphicPopup ) {
649+ delete mGetLegendGraphicPopup ;
650+ mGetLegendGraphicPopup = 0 ;
651+ }
652+
627653 QStringList layersPriorToEvent = layerIDs ();
628654 QTreeWidget::mouseReleaseEvent ( e );
629655 mMousePressedFlag = false ;
@@ -3208,3 +3234,43 @@ void QgsLegend::updateLegendItemSymbologies()
32083234 ll->refreshSymbology ( ll->layer ()->id () );
32093235 }
32103236}
3237+
3238+ QImage QgsLegend::getWmsLegendPixmap ( QTreeWidgetItem *item )
3239+ {
3240+ if ( !item )
3241+ {
3242+ return QImage ();
3243+ }
3244+
3245+ QTreeWidgetItem *parent = item->parent ();
3246+ if ( !parent )
3247+ {
3248+ return QImage ();
3249+ }
3250+
3251+ QgsLegendItem* li = dynamic_cast <QgsLegendItem *>( parent );
3252+ if ( !li )
3253+ {
3254+ return QImage ();
3255+ }
3256+
3257+ if ( li->type () != QgsLegendItem::LEGEND_LAYER )
3258+ {
3259+ return QImage ();
3260+ }
3261+
3262+ QgsLegendLayer *lyr = qobject_cast<QgsLegendLayer*>( li );
3263+ QgsRasterLayer *rasterLayer = dynamic_cast <QgsRasterLayer*>( lyr->layer () );
3264+ if ( !rasterLayer )
3265+ {
3266+ return QImage ();
3267+ }
3268+
3269+ if ( rasterLayer->providerType () != " wms" )
3270+ {
3271+ return QImage ();
3272+ }
3273+
3274+ return rasterLayer->dataProvider ()->getLegendGraphic ( canvas ()->scale () );
3275+ }
3276+
0 commit comments