Skip to content

Commit 3180dee

Browse files
committed
Handling of WMS legend graphic
1 parent 0e79551 commit 3180dee

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

src/app/qgisapp.cpp

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,35 @@ void QgisApp::emitCustomSrsValidation( QgsCoordinateReferenceSystem &srs )
380380

381381
void QgisApp::layerTreeViewDoubleClicked( const QModelIndex& index )
382382
{
383-
Q_UNUSED( index );
383+
// temporary solution for WMS legend
384+
if ( mLayerTreeView->layerTreeModel()->index2symnode( index ) )
385+
{
386+
QModelIndex parent = mLayerTreeView->layerTreeModel()->parent( index );
387+
QgsLayerTreeNode* node = mLayerTreeView->layerTreeModel()->index2node( parent );
388+
if ( QgsLayerTree::isLayer( node ) )
389+
{
390+
QgsMapLayer* layer = QgsLayerTree::toLayer( node )->layer();
391+
QgsRasterLayer* rlayer = qobject_cast<QgsRasterLayer*>( layer );
392+
if ( rlayer && rlayer->providerType() == "wms" )
393+
{
394+
QImage img = rlayer->dataProvider()->getLegendGraphic( mMapCanvas->scale() );
395+
396+
QFrame* popup = new QFrame();
397+
popup->setAttribute( Qt::WA_DeleteOnClose );
398+
popup->setFrameStyle( QFrame::Box | QFrame::Raised );
399+
popup->setLineWidth( 2 );
400+
popup->setAutoFillBackground( true );
401+
QVBoxLayout *layout = new QVBoxLayout;
402+
QLabel *label = new QLabel( popup );
403+
label->setPixmap( QPixmap::fromImage( img ) );
404+
layout->addWidget( label );
405+
popup->setLayout( layout );
406+
popup->move( mLayerTreeView->visualRect( index ).bottomLeft() );
407+
popup->show();
408+
return;
409+
}
410+
}
411+
}
384412

385413
QSettings settings;
386414
switch ( settings.value( "/qgis/legendDoubleClickAction", 0 ).toInt() )

src/core/layertree/qgslayertreelayer.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ QgsLayerTreeLayer* QgsLayerTreeLayer::readXML( QDomElement& element )
8484

8585
QgsLayerTreeLayer* nodeLayer = 0;
8686

87-
// TODO: maybe allow other sources of layers than just registry singleton?
8887
QgsMapLayer* layer = QgsMapLayerRegistry::instance()->mapLayer( layerID );
8988

9089
if ( layer )

src/gui/layertree/qgslayertreemodel.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,13 @@ void QgsLayerTreeModel::addSymbologyToRasterLayer( QgsLayerTreeLayer* nodeL )
534534

535535
QList<QgsLayerTreeModelSymbologyNode*>& lst = mSymbologyNodes[nodeL];
536536

537-
// TODO: WMS
537+
// temporary solution for WMS. Ideally should be done with a delegate.
538+
if ( rlayer->providerType() == "wms" )
539+
{
540+
QImage img = rlayer->dataProvider()->getLegendGraphic( 1000 ); // dummy scale - should not be required!
541+
if ( !img.isNull() )
542+
lst << new QgsLayerTreeModelSymbologyNode( nodeL, tr( "Double-click to view legend" ) );
543+
}
538544

539545
// Paletted raster may have many colors, for example UInt16 may have 65536 colors
540546
// and it is very slow, so we limit max count

0 commit comments

Comments
 (0)