Skip to content

Commit 97a84db

Browse files
author
wonder
committed
Highlight selected features
git-svn-id: http://svn.osgeo.org/qgis/branches/symbology-ng-branch@11936 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 2bd06b4 commit 97a84db

4 files changed

Lines changed: 48 additions & 3 deletions

File tree

‎python/core/qgsrenderer.sip‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ class QgsRenderer
5252
virtual QgsRenderer* clone() const=0;
5353
/** Change selection color */
5454
static void setSelectionColor(QColor color);
55+
/** Get selection color */
56+
static QColor selectionColor();
5557
/**Returns true if this renderer returns a pixmap in the render method (e.g. for point data or diagrams)*/
5658
virtual bool containsPixmap() const;
5759
/**Returns true if this renderer uses its own transparency settings, e.g. differentiated by classification.

‎src/core/qgsvectorlayer.cpp‎

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
#include "qgsrendererv2.h"
7777
#include "qgssymbolv2.h"
7878
#include "qgssymbollayerv2.h"
79-
79+
#include "qgssinglesymbolrendererv2.h"
8080

8181
#ifdef TESTPROVIDERLIB
8282
#include <dlfcn.h>
@@ -668,16 +668,33 @@ void QgsVectorLayer::drawRendererV2( QgsRenderContext& rendererContext, bool lab
668668
{
669669
mRendererV2->startRender(rendererContext, pendingFields());
670670

671+
QgsSingleSymbolRendererV2* selRenderer = NULL;
672+
if (!mSelectedFeatureIds.isEmpty())
673+
{
674+
selRenderer = new QgsSingleSymbolRendererV2( QgsSymbolV2::defaultSymbol(geometryType()) );
675+
selRenderer->symbol()->setColor( QgsRenderer::selectionColor() );
676+
selRenderer->startRender(rendererContext, pendingFields());
677+
}
678+
671679
QgsFeature fet;
672680
while ( nextFeature( fet ) )
673681
{
674-
mRendererV2->renderFeature(fet, rendererContext);
682+
if (mSelectedFeatureIds.contains( fet.id() ))
683+
selRenderer->renderFeature(fet, rendererContext);
684+
else
685+
mRendererV2->renderFeature(fet, rendererContext);
675686

676687
if ( labeling )
677688
mLabelingEngine->registerFeature(this, fet);
678689
}
679690

680691
mRendererV2->stopRender(rendererContext);
692+
693+
if (selRenderer)
694+
{
695+
selRenderer->stopRender(rendererContext);
696+
delete selRenderer;
697+
}
681698
}
682699

683700
void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bool labeling )
@@ -687,6 +704,14 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
687704
// startRender must be called before symbolForFeature() calls to make sure renderer is ready
688705
mRendererV2->startRender(rendererContext, pendingFields());
689706

707+
QgsSingleSymbolRendererV2* selRenderer = NULL;
708+
if (!mSelectedFeatureIds.isEmpty())
709+
{
710+
selRenderer = new QgsSingleSymbolRendererV2( QgsSymbolV2::defaultSymbol(geometryType()) );
711+
selRenderer->symbol()->setColor( QgsRenderer::selectionColor() );
712+
selRenderer->startRender(rendererContext, pendingFields());
713+
}
714+
690715
// 1. fetch features
691716
QgsFeature fet;
692717
while ( nextFeature(fet) )
@@ -734,11 +759,22 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
734759
QList<QgsFeature>& lst = features[item.symbol()];
735760
QList<QgsFeature>::iterator fit;
736761
for ( fit = lst.begin(); fit != lst.end(); ++fit )
737-
mRendererV2->renderFeature(*fit, rendererContext, layer);
762+
{
763+
if (mSelectedFeatureIds.contains( fit->id() ))
764+
selRenderer->renderFeature(*fit, rendererContext);
765+
else
766+
mRendererV2->renderFeature(*fit, rendererContext, layer);
767+
}
738768
}
739769
}
740770

741771
mRendererV2->stopRender(rendererContext);
772+
773+
if (selRenderer)
774+
{
775+
selRenderer->stopRender(rendererContext);
776+
delete selRenderer;
777+
}
742778
}
743779

744780
bool QgsVectorLayer::draw( QgsRenderContext& rendererContext )

‎src/core/renderer/qgsrenderer.cpp‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ void QgsRenderer::setSelectionColor( QColor color )
3939
mSelectionColor = color;
4040
}
4141

42+
QColor QgsRenderer::selectionColor()
43+
{
44+
return mSelectionColor;
45+
}
46+
4247
bool QgsRenderer::containsPixmap() const
4348
{
4449
//default implementation returns true only for points

‎src/core/renderer/qgsrenderer.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ class CORE_EXPORT QgsRenderer
101101
virtual QgsRenderer* clone() const = 0;
102102
/** Change selection color */
103103
static void setSelectionColor( QColor color );
104+
/** Get selection color */
105+
static QColor selectionColor();
104106
/**Returns true if this renderer returns a pixmap in the render method (e.g. for point data or diagrams)*/
105107
virtual bool containsPixmap() const;
106108
/**Returns true if this renderer uses its own transparency settings, e.g. differentiated by classification.

0 commit comments

Comments
 (0)