Skip to content

Commit dc046b5

Browse files
author
wonder
committedJul 20, 2009
show symbols from rendererV2 in legend
git-svn-id: http://svn.osgeo.org/qgis/branches/symbology-ng-branch@11115 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 2b082ed commit dc046b5

File tree

3 files changed

+88
-1
lines changed

3 files changed

+88
-1
lines changed
 

‎src/app/legend/qgslegendlayer.cpp

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@
3636
#include "qgsvectorlayer.h"
3737
#include "qgsvectordataprovider.h"
3838

39+
#include "qgsrendererv2.h"
40+
#include "qgssymbolv2.h"
41+
3942
#include <iostream>
4043
#include <QAction>
4144
#include <QCoreApplication>
@@ -271,7 +274,10 @@ void QgsLegendLayer::refreshSymbology( const QString& key, double widthScale )
271274
if ( theMapLayer->type() == QgsMapLayer::VectorLayer ) // VECTOR
272275
{
273276
QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>( theMapLayer );
274-
vectorLayerSymbology( vlayer, widthScale ); // get and change symbology
277+
if ( vlayer->isUsingRendererV2() )
278+
vectorLayerSymbologyV2( vlayer );
279+
else
280+
vectorLayerSymbology( vlayer, widthScale ); // get and change symbology
275281
}
276282
else // RASTER
277283
{
@@ -388,6 +394,83 @@ void QgsLegendLayer::vectorLayerSymbology( const QgsVectorLayer* layer, double w
388394
changeSymbologySettings( layer, itemList );
389395
}
390396

397+
static QPixmap _symbolPreviewPixmap(QgsSymbolV2* sym, QSize iconSize)
398+
{
399+
QPainter p;
400+
QPixmap pix(iconSize);
401+
pix.fill(Qt::white);
402+
p.begin(&pix);
403+
sym->drawPreviewIcon(&p, iconSize);
404+
p.end();
405+
return pix;
406+
}
407+
408+
void QgsLegendLayer::vectorLayerSymbologyV2( QgsVectorLayer* layer )
409+
{
410+
SymbologyList itemList;
411+
412+
QSize iconSize(16,16);
413+
414+
QSettings settings;
415+
bool showClassifiers = settings.value( "/qgis/showLegendClassifiers", false ).toBool();
416+
417+
QgsFeatureRendererV2* renderer = layer->rendererV2();
418+
switch (renderer->type())
419+
{
420+
case QgsFeatureRendererV2::RendererSingleSymbol:
421+
{
422+
QgsSingleSymbolRendererV2* r = static_cast<QgsSingleSymbolRendererV2*>(renderer);
423+
QPixmap pix = _symbolPreviewPixmap(r->symbol(), iconSize);
424+
425+
itemList.push_back( std::make_pair( "", pix ) );
426+
}
427+
break;
428+
case QgsFeatureRendererV2::RendererCategorizedSymbol:
429+
{
430+
QgsCategorizedSymbolRendererV2* r = static_cast<QgsCategorizedSymbolRendererV2*>(renderer);
431+
if (showClassifiers)
432+
{
433+
const QgsFieldMap& fields = layer->dataProvider()->fields();
434+
QString fieldName = fields[r->attributeIndex()].name();
435+
itemList.push_back( std::make_pair( fieldName, QPixmap() ) );
436+
}
437+
438+
int count = r->categories().count();
439+
for (int i = 0; i < count; i++)
440+
{
441+
const QgsRendererCategoryV2& cat = r->categories()[i];
442+
QPixmap pix = _symbolPreviewPixmap( cat.symbol(), iconSize );
443+
itemList.push_back( std::make_pair( cat.label(), pix ) );
444+
}
445+
}
446+
break;
447+
case QgsFeatureRendererV2::RendererGraduatedSymbol:
448+
{
449+
QgsGraduatedSymbolRendererV2* r = static_cast<QgsGraduatedSymbolRendererV2*>(renderer);
450+
if (showClassifiers)
451+
{
452+
const QgsFieldMap& fields = layer->dataProvider()->fields();
453+
QString fieldName = fields[r->attributeIndex()].name();
454+
itemList.push_back( std::make_pair( fieldName, QPixmap() ) );
455+
}
456+
457+
int count = r->ranges().count();
458+
for (int i = 0; i < count; i++)
459+
{
460+
const QgsRendererRangeV2& range = r->ranges()[i];
461+
QPixmap pix = _symbolPreviewPixmap( range.symbol(), iconSize );
462+
itemList.push_back( std::make_pair( range.label(), pix ) );
463+
}
464+
}
465+
break;
466+
default:
467+
// nothing for unknown renderers
468+
break;
469+
}
470+
471+
changeSymbologySettings( layer, itemList );
472+
}
473+
391474
void QgsLegendLayer::rasterLayerSymbology( QgsRasterLayer* layer )
392475
{
393476
SymbologyList itemList;

‎src/app/legend/qgslegendlayer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ class QgsLegendLayer : public QgsLegendItem
9696
/** Prepare and change symbology for vector layer */
9797
void vectorLayerSymbology( const QgsVectorLayer* mapLayer, double widthScale = 1.0 );
9898

99+
void vectorLayerSymbologyV2( QgsVectorLayer* vlayer );
100+
99101
/** Prepare and change symbology for raster layer */
100102
void rasterLayerSymbology( QgsRasterLayer* mapLayer );
101103

‎src/app/qgisapp.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,6 +1045,8 @@ void QgisApp::toggleRendererV2()
10451045
if (!dlg.exec())
10461046
return;
10471047

1048+
mMapLegend->refreshLayerSymbology( vlayer->getLayerID(), false );
1049+
10481050
refreshMapCanvas();
10491051
}
10501052

0 commit comments

Comments
 (0)
Please sign in to comment.