[QGIS Commit] r11936 - in branches/symbology-ng-branch: python/core src/core src/core/renderer

svn_qgis at osgeo.org svn_qgis at osgeo.org
Fri Nov 6 08:54:38 EST 2009


Author: wonder
Date: 2009-11-06 08:54:37 -0500 (Fri, 06 Nov 2009)
New Revision: 11936

Modified:
   branches/symbology-ng-branch/python/core/qgsrenderer.sip
   branches/symbology-ng-branch/src/core/qgsvectorlayer.cpp
   branches/symbology-ng-branch/src/core/renderer/qgsrenderer.cpp
   branches/symbology-ng-branch/src/core/renderer/qgsrenderer.h
Log:
Highlight selected features


Modified: branches/symbology-ng-branch/python/core/qgsrenderer.sip
===================================================================
--- branches/symbology-ng-branch/python/core/qgsrenderer.sip	2009-11-06 13:45:13 UTC (rev 11935)
+++ branches/symbology-ng-branch/python/core/qgsrenderer.sip	2009-11-06 13:54:37 UTC (rev 11936)
@@ -52,6 +52,8 @@
     virtual QgsRenderer* clone() const=0;
     /** Change selection 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)*/
     virtual bool containsPixmap() const;
     /**Returns true if this renderer uses its own transparency settings, e.g. differentiated by classification.

Modified: branches/symbology-ng-branch/src/core/qgsvectorlayer.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/qgsvectorlayer.cpp	2009-11-06 13:45:13 UTC (rev 11935)
+++ branches/symbology-ng-branch/src/core/qgsvectorlayer.cpp	2009-11-06 13:54:37 UTC (rev 11936)
@@ -76,8 +76,8 @@
 #include "qgsrendererv2.h"
 #include "qgssymbolv2.h"
 #include "qgssymbollayerv2.h"
+#include "qgssinglesymbolrendererv2.h"
 
-
 #ifdef TESTPROVIDERLIB
 #include <dlfcn.h>
 #endif
@@ -668,16 +668,33 @@
 {
   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;
   while ( nextFeature( fet ) )
   {
-    mRendererV2->renderFeature(fet, rendererContext);
+    if (mSelectedFeatureIds.contains( fet.id() ))
+      selRenderer->renderFeature(fet, rendererContext);
+    else
+      mRendererV2->renderFeature(fet, rendererContext);
 
     if ( labeling )
       mLabelingEngine->registerFeature(this, fet);
   }
 
   mRendererV2->stopRender(rendererContext);
+
+  if (selRenderer)
+  {
+    selRenderer->stopRender(rendererContext);
+    delete selRenderer;
+  }
 }
 
 void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bool labeling )
@@ -687,6 +704,14 @@
   // startRender must be called before symbolForFeature() calls to make sure renderer is ready
   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
   QgsFeature fet;
   while ( nextFeature(fet) )
@@ -734,11 +759,22 @@
       QList<QgsFeature>& lst = features[item.symbol()];
       QList<QgsFeature>::iterator 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);
+
+  if (selRenderer)
+  {
+    selRenderer->stopRender(rendererContext);
+    delete selRenderer;
+  }
 }
 
 bool QgsVectorLayer::draw( QgsRenderContext& rendererContext )

Modified: branches/symbology-ng-branch/src/core/renderer/qgsrenderer.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/renderer/qgsrenderer.cpp	2009-11-06 13:45:13 UTC (rev 11935)
+++ branches/symbology-ng-branch/src/core/renderer/qgsrenderer.cpp	2009-11-06 13:54:37 UTC (rev 11936)
@@ -39,6 +39,11 @@
   mSelectionColor = color;
 }
 
+QColor QgsRenderer::selectionColor()
+{
+  return mSelectionColor;
+}
+
 bool QgsRenderer::containsPixmap() const
 {
   //default implementation returns true only for points

Modified: branches/symbology-ng-branch/src/core/renderer/qgsrenderer.h
===================================================================
--- branches/symbology-ng-branch/src/core/renderer/qgsrenderer.h	2009-11-06 13:45:13 UTC (rev 11935)
+++ branches/symbology-ng-branch/src/core/renderer/qgsrenderer.h	2009-11-06 13:54:37 UTC (rev 11936)
@@ -101,6 +101,8 @@
     virtual QgsRenderer* clone() const = 0;
     /** Change selection 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)*/
     virtual bool containsPixmap() const;
     /**Returns true if this renderer uses its own transparency settings, e.g. differentiated by classification.



More information about the QGIS-commit mailing list