Skip to content

Commit

Permalink
Highlight selected features
Browse files Browse the repository at this point in the history
git-svn-id: http://svn.osgeo.org/qgis/branches/symbology-ng-branch@11936 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
wonder committed Nov 6, 2009
1 parent 2bd06b4 commit 97a84db
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 3 deletions.
2 changes: 2 additions & 0 deletions python/core/qgsrenderer.sip
Expand Up @@ -52,6 +52,8 @@ class QgsRenderer
virtual QgsRenderer* clone() const=0; virtual QgsRenderer* clone() const=0;
/** Change selection color */ /** Change selection color */
static void setSelectionColor(QColor color); static void setSelectionColor(QColor color);
/** Get selection color */
static QColor selectionColor();
/**Returns true if this renderer returns a pixmap in the render method (e.g. for point data or diagrams)*/ /**Returns true if this renderer returns a pixmap in the render method (e.g. for point data or diagrams)*/
virtual bool containsPixmap() const; virtual bool containsPixmap() const;
/**Returns true if this renderer uses its own transparency settings, e.g. differentiated by classification. /**Returns true if this renderer uses its own transparency settings, e.g. differentiated by classification.
Expand Down
42 changes: 39 additions & 3 deletions src/core/qgsvectorlayer.cpp
Expand Up @@ -76,7 +76,7 @@
#include "qgsrendererv2.h" #include "qgsrendererv2.h"
#include "qgssymbolv2.h" #include "qgssymbolv2.h"
#include "qgssymbollayerv2.h" #include "qgssymbollayerv2.h"

#include "qgssinglesymbolrendererv2.h"


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


QgsSingleSymbolRendererV2* selRenderer = NULL;
if (!mSelectedFeatureIds.isEmpty())
{
selRenderer = new QgsSingleSymbolRendererV2( QgsSymbolV2::defaultSymbol(geometryType()) );
selRenderer->symbol()->setColor( QgsRenderer::selectionColor() );
selRenderer->startRender(rendererContext, pendingFields());
}

QgsFeature fet; QgsFeature fet;
while ( nextFeature( fet ) ) while ( nextFeature( fet ) )
{ {
mRendererV2->renderFeature(fet, rendererContext); if (mSelectedFeatureIds.contains( fet.id() ))
selRenderer->renderFeature(fet, rendererContext);
else
mRendererV2->renderFeature(fet, rendererContext);


if ( labeling ) if ( labeling )
mLabelingEngine->registerFeature(this, fet); mLabelingEngine->registerFeature(this, fet);
} }


mRendererV2->stopRender(rendererContext); mRendererV2->stopRender(rendererContext);

if (selRenderer)
{
selRenderer->stopRender(rendererContext);
delete selRenderer;
}
} }


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


QgsSingleSymbolRendererV2* selRenderer = NULL;
if (!mSelectedFeatureIds.isEmpty())
{
selRenderer = new QgsSingleSymbolRendererV2( QgsSymbolV2::defaultSymbol(geometryType()) );
selRenderer->symbol()->setColor( QgsRenderer::selectionColor() );
selRenderer->startRender(rendererContext, pendingFields());
}

// 1. fetch features // 1. fetch features
QgsFeature fet; QgsFeature fet;
while ( nextFeature(fet) ) while ( nextFeature(fet) )
Expand Down Expand Up @@ -734,11 +759,22 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
QList<QgsFeature>& lst = features[item.symbol()]; QList<QgsFeature>& lst = features[item.symbol()];
QList<QgsFeature>::iterator fit; QList<QgsFeature>::iterator fit;
for ( fit = lst.begin(); fit != lst.end(); ++fit ) for ( fit = lst.begin(); fit != lst.end(); ++fit )
mRendererV2->renderFeature(*fit, rendererContext, layer); {
if (mSelectedFeatureIds.contains( fit->id() ))
selRenderer->renderFeature(*fit, rendererContext);
else
mRendererV2->renderFeature(*fit, rendererContext, layer);
}
} }
} }


mRendererV2->stopRender(rendererContext); mRendererV2->stopRender(rendererContext);

if (selRenderer)
{
selRenderer->stopRender(rendererContext);
delete selRenderer;
}
} }


bool QgsVectorLayer::draw( QgsRenderContext& rendererContext ) bool QgsVectorLayer::draw( QgsRenderContext& rendererContext )
Expand Down
5 changes: 5 additions & 0 deletions src/core/renderer/qgsrenderer.cpp
Expand Up @@ -39,6 +39,11 @@ void QgsRenderer::setSelectionColor( QColor color )
mSelectionColor = color; mSelectionColor = color;
} }


QColor QgsRenderer::selectionColor()
{
return mSelectionColor;
}

bool QgsRenderer::containsPixmap() const bool QgsRenderer::containsPixmap() const
{ {
//default implementation returns true only for points //default implementation returns true only for points
Expand Down
2 changes: 2 additions & 0 deletions src/core/renderer/qgsrenderer.h
Expand Up @@ -101,6 +101,8 @@ class CORE_EXPORT QgsRenderer
virtual QgsRenderer* clone() const = 0; virtual QgsRenderer* clone() const = 0;
/** Change selection color */ /** Change selection color */
static void setSelectionColor( QColor color ); static void setSelectionColor( QColor color );
/** Get selection color */
static QColor selectionColor();
/**Returns true if this renderer returns a pixmap in the render method (e.g. for point data or diagrams)*/ /**Returns true if this renderer returns a pixmap in the render method (e.g. for point data or diagrams)*/
virtual bool containsPixmap() const; virtual bool containsPixmap() const;
/**Returns true if this renderer uses its own transparency settings, e.g. differentiated by classification. /**Returns true if this renderer uses its own transparency settings, e.g. differentiated by classification.
Expand Down

0 comments on commit 97a84db

Please sign in to comment.