Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add return type QgsRenderOptions to QgsRendererV2::startRender
This allows to specify additional filter constraints for the feature request to
be specified.
  • Loading branch information
m-kuhn committed Jul 29, 2015
1 parent 9752c46 commit b47b9a5
Show file tree
Hide file tree
Showing 24 changed files with 64 additions and 27 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,4 +1,5 @@
*.*~
*.autosave
*.aux
*.diff
*.log*
Expand Down
Expand Up @@ -49,7 +49,7 @@ class QgsCategorizedSymbolRendererV2 : QgsFeatureRendererV2

virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature );

virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );

virtual void stopRender( QgsRenderContext& context );

Expand Down
2 changes: 1 addition & 1 deletion python/core/symbology-ng/qgsgraduatedsymbolrendererv2.sip
Expand Up @@ -91,7 +91,7 @@ class QgsGraduatedSymbolRendererV2 : QgsFeatureRendererV2

virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature );

virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );

virtual void stopRender( QgsRenderContext& context );

Expand Down
2 changes: 1 addition & 1 deletion python/core/symbology-ng/qgsheatmaprenderer.sip
Expand Up @@ -10,7 +10,7 @@ class QgsHeatmapRenderer : QgsFeatureRendererV2

//reimplemented methods
virtual QgsFeatureRendererV2* clone() const /Factory/;
virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
virtual void stopRender( QgsRenderContext& context );
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
Expand Down
2 changes: 1 addition & 1 deletion python/core/symbology-ng/qgsinvertedpolygonrenderer.sip
Expand Up @@ -14,7 +14,7 @@ class QgsInvertedPolygonRenderer : QgsFeatureRendererV2
/** Used to clone this feature renderer.*/
virtual QgsFeatureRendererV2* clone() const /Factory/;

virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );

/** Renders a given feature.
* This will here collect features. The actual rendering will be postponed to stopRender()
Expand Down
2 changes: 1 addition & 1 deletion python/core/symbology-ng/qgspointdisplacementrenderer.sip
Expand Up @@ -16,7 +16,7 @@ class QgsPointDisplacementRenderer : QgsFeatureRendererV2

QgsSymbolV2* symbolForFeature( QgsFeature& feature );

void startRender( QgsRenderContext& context, const QgsFields& fields );
QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );

void stopRender( QgsRenderContext& context );

Expand Down
12 changes: 11 additions & 1 deletion python/core/symbology-ng/qgsrendererv2.sip
Expand Up @@ -17,6 +17,16 @@ class QgsSymbolV2LevelItem
int layer();
};

class QgsRenderOptions
{
%TypeHeaderCode
#include <qgsrendererv2.h>
%End
public:
void setWhereClause( const QString& whereClause );
QString whereClause();
};

// every level has list of items: symbol + symbol layer num
// typedef QList< QgsSymbolV2LevelItem > QgsSymbolV2Level;

Expand Down Expand Up @@ -74,7 +84,7 @@ class QgsFeatureRendererV2
*/
virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature );

virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) = 0;
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) = 0;

//! @deprecated since 2.4 - not using QgsVectorLayer directly anymore
virtual void startRender( QgsRenderContext& context, const QgsVectorLayer *vlayer ) /Deprecated/;
Expand Down
2 changes: 1 addition & 1 deletion python/core/symbology-ng/qgsrulebasedrendererv2.sip
Expand Up @@ -173,7 +173,7 @@ class QgsRuleBasedRendererV2 : QgsFeatureRendererV2

virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );

virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );

virtual void stopRender( QgsRenderContext& context );

Expand Down
2 changes: 1 addition & 1 deletion python/core/symbology-ng/qgssinglesymbolrendererv2.sip
Expand Up @@ -13,7 +13,7 @@ class QgsSingleSymbolRendererV2 : QgsFeatureRendererV2

virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature );

virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );

virtual void stopRender( QgsRenderContext& context );

Expand Down
3 changes: 2 additions & 1 deletion src/core/symbology-ng/qgscategorizedsymbolrendererv2.cpp
Expand Up @@ -396,7 +396,7 @@ void QgsCategorizedSymbolRendererV2::sortByLabel( Qt::SortOrder order )
}
}

void QgsCategorizedSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
QgsRenderOptions QgsCategorizedSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
{
mCounting = context.rendererScale() == 0.0;

Expand Down Expand Up @@ -425,6 +425,7 @@ void QgsCategorizedSymbolRendererV2::startRender( QgsRenderContext& context, con
mTempSymbols[ it->symbol()] = tempSymbol;
}
}
return QgsRenderOptions();
}

void QgsCategorizedSymbolRendererV2::stopRender( QgsRenderContext& context )
Expand Down
2 changes: 1 addition & 1 deletion src/core/symbology-ng/qgscategorizedsymbolrendererv2.h
Expand Up @@ -79,7 +79,7 @@ class CORE_EXPORT QgsCategorizedSymbolRendererV2 : public QgsFeatureRendererV2

virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature ) override;

virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;

virtual void stopRender( QgsRenderContext& context ) override;

Expand Down
3 changes: 2 additions & 1 deletion src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp
Expand Up @@ -369,7 +369,7 @@ QgsSymbolV2* QgsGraduatedSymbolRendererV2::originalSymbolForFeature( QgsFeature&
return symbolForValue( value.toDouble() );
}

void QgsGraduatedSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
QgsRenderOptions QgsGraduatedSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
{
mCounting = context.rendererScale() == 0.0;

Expand Down Expand Up @@ -399,6 +399,7 @@ void QgsGraduatedSymbolRendererV2::startRender( QgsRenderContext& context, const
mTempSymbols[ it->symbol()] = tempSymbol;
}
}
return QgsRenderOptions();
}

void QgsGraduatedSymbolRendererV2::stopRender( QgsRenderContext& context )
Expand Down
2 changes: 1 addition & 1 deletion src/core/symbology-ng/qgsgraduatedsymbolrendererv2.h
Expand Up @@ -123,7 +123,7 @@ class CORE_EXPORT QgsGraduatedSymbolRendererV2 : public QgsFeatureRendererV2

virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature ) override;

virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;

virtual void stopRender( QgsRenderContext& context ) override;

Expand Down
5 changes: 3 additions & 2 deletions src/core/symbology-ng/qgsheatmaprenderer.cpp
Expand Up @@ -63,12 +63,12 @@ void QgsHeatmapRenderer::initializeValues( QgsRenderContext& context )
mRadiusSquared = mRadiusPixels * mRadiusPixels;
}

void QgsHeatmapRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
QgsRenderOptions QgsHeatmapRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
{
Q_UNUSED( fields );
if ( !context.painter() )
{
return;
return QgsRenderOptions();
}

// find out classification attribute index from name
Expand All @@ -80,6 +80,7 @@ void QgsHeatmapRenderer::startRender( QgsRenderContext& context, const QgsFields
}

initializeValues( context );
return QgsRenderOptions();
}

QgsMultiPoint QgsHeatmapRenderer::convertToMultipoint( const QgsGeometry* geom )
Expand Down
2 changes: 1 addition & 1 deletion src/core/symbology-ng/qgsheatmaprenderer.h
Expand Up @@ -39,7 +39,7 @@ class CORE_EXPORT QgsHeatmapRenderer : public QgsFeatureRendererV2

//reimplemented methods
virtual QgsFeatureRendererV2* clone() const override;
virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) override;
virtual void stopRender( QgsRenderContext& context ) override;
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature ) override;
Expand Down
8 changes: 5 additions & 3 deletions src/core/symbology-ng/qgsinvertedpolygonrenderer.cpp
Expand Up @@ -63,11 +63,11 @@ const QgsFeatureRendererV2* QgsInvertedPolygonRenderer::embeddedRenderer() const
return mSubRenderer.data();
}

void QgsInvertedPolygonRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
QgsRenderOptions QgsInvertedPolygonRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
{
if ( !mSubRenderer )
{
return;
return QgsRenderOptions();
}

// first call start render on the sub renderer
Expand All @@ -85,7 +85,7 @@ void QgsInvertedPolygonRenderer::startRender( QgsRenderContext& context, const Q

if ( !context.painter() )
{
return;
return QgsRenderOptions();
}

// convert viewport to dest CRS
Expand Down Expand Up @@ -119,6 +119,8 @@ void QgsInvertedPolygonRenderer::startRender( QgsRenderContext& context, const Q

mExtentPolygon.clear();
mExtentPolygon.append( exteriorRing );

return QgsRenderOptions();
}

bool QgsInvertedPolygonRenderer::renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer, bool selected, bool drawVertexMarker )
Expand Down
2 changes: 1 addition & 1 deletion src/core/symbology-ng/qgsinvertedpolygonrenderer.h
Expand Up @@ -50,7 +50,7 @@ class CORE_EXPORT QgsInvertedPolygonRenderer : public QgsFeatureRendererV2
/** Used to clone this feature renderer.*/
virtual QgsFeatureRendererV2* clone() const override;

virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;

/** Renders a given feature.
* This will here collect features. The actual rendering will be postponed to stopRender()
Expand Down
3 changes: 2 additions & 1 deletion src/core/symbology-ng/qgspointdisplacementrenderer.cpp
Expand Up @@ -279,7 +279,7 @@ bool QgsPointDisplacementRenderer::willRenderFeature( QgsFeature& feat )
}


void QgsPointDisplacementRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
QgsRenderOptions QgsPointDisplacementRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
{
mRenderer->startRender( context, fields );

Expand Down Expand Up @@ -310,6 +310,7 @@ void QgsPointDisplacementRenderer::startRender( QgsRenderContext& context, const
{
mCenterSymbol->startRender( context, &fields );
}
return QgsRenderOptions();
}

void QgsPointDisplacementRenderer::stopRender( QgsRenderContext& context )
Expand Down
2 changes: 1 addition & 1 deletion src/core/symbology-ng/qgspointdisplacementrenderer.h
Expand Up @@ -58,7 +58,7 @@ class CORE_EXPORT QgsPointDisplacementRenderer: public QgsFeatureRendererV2
/** Proxy that will call this method on the embedded renderer. */
virtual bool willRenderFeature( QgsFeature& feat ) override;

void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;

void stopRender( QgsRenderContext& context ) override;

Expand Down
18 changes: 17 additions & 1 deletion src/core/symbology-ng/qgsrendererv2.h
Expand Up @@ -61,6 +61,15 @@ class CORE_EXPORT QgsSymbolV2LevelItem
int mLayer;
};

class CORE_EXPORT QgsRenderOptions
{
public:
void setWhereClause( const QString& whereClause ) { mWhereClause = whereClause; }
QString whereClause() { return mWhereClause; }
private:
QString mWhereClause;
};

// every level has list of items: symbol + symbol layer num
typedef QList< QgsSymbolV2LevelItem > QgsSymbolV2Level;

Expand Down Expand Up @@ -95,7 +104,14 @@ class CORE_EXPORT QgsFeatureRendererV2
*/
virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature ) { return symbolForFeature( feature ); }

virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) = 0;
/**
* Needs to be called when a new render cycle is started
*
* @param context Additional information passed to the renderer about the job which will be rendered
* @param fields The fields available for rendering
* @return Information passed back from the renderer that can e.g. be used to reduce the amount of requested features
*/
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) = 0;

//! @deprecated since 2.4 - not using QgsVectorLayer directly anymore
Q_DECL_DEPRECATED virtual void startRender( QgsRenderContext& context, const QgsVectorLayer* vlayer );
Expand Down
3 changes: 2 additions & 1 deletion src/core/symbology-ng/qgsrulebasedrendererv2.cpp
Expand Up @@ -779,7 +779,7 @@ bool QgsRuleBasedRendererV2::renderFeature( QgsFeature& feature,
}


void QgsRuleBasedRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
QgsRenderOptions QgsRuleBasedRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
{
// prepare active children
mRootRule->startRender( context, fields );
Expand All @@ -800,6 +800,7 @@ void QgsRuleBasedRendererV2::startRender( QgsRenderContext& context, const QgsFi
}

mRootRule->setNormZLevels( zLevelsToNormLevels );
return QgsRenderOptions();
}

void QgsRuleBasedRendererV2::stopRender( QgsRenderContext& context )
Expand Down
2 changes: 1 addition & 1 deletion src/core/symbology-ng/qgsrulebasedrendererv2.h
Expand Up @@ -220,7 +220,7 @@ class CORE_EXPORT QgsRuleBasedRendererV2 : public QgsFeatureRendererV2

virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) override;

virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;

virtual void stopRender( QgsRenderContext& context ) override;

Expand Down
7 changes: 5 additions & 2 deletions src/core/symbology-ng/qgssinglesymbolrendererv2.cpp
Expand Up @@ -79,9 +79,10 @@ QgsSymbolV2* QgsSingleSymbolRendererV2::originalSymbolForFeature( QgsFeature& fe
return mSymbol.data();
}

void QgsSingleSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
QgsRenderOptions QgsSingleSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
{
if ( !mSymbol.data() ) return;
if ( !mSymbol.data() )
return QgsRenderOptions();

mSymbol->startRender( context, &fields );

Expand Down Expand Up @@ -112,6 +113,8 @@ void QgsSingleSymbolRendererV2::startRender( QgsRenderContext& context, const Qg
mOrigSize = 0;
}
}

return QgsRenderOptions();
}

void QgsSingleSymbolRendererV2::stopRender( QgsRenderContext& context )
Expand Down
2 changes: 1 addition & 1 deletion src/core/symbology-ng/qgssinglesymbolrendererv2.h
Expand Up @@ -33,7 +33,7 @@ class CORE_EXPORT QgsSingleSymbolRendererV2 : public QgsFeatureRendererV2

virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature ) override;

virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;

virtual void stopRender( QgsRenderContext& context ) override;

Expand Down

0 comments on commit b47b9a5

Please sign in to comment.