Skip to content

Commit b47b9a5

Browse files
committed
Add return type QgsRenderOptions to QgsRendererV2::startRender
This allows to specify additional filter constraints for the feature request to be specified.
1 parent 9752c46 commit b47b9a5

24 files changed

+64
-27
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
*.*~
2+
*.autosave
23
*.aux
34
*.diff
45
*.log*

python/core/symbology-ng/qgscategorizedsymbolrendererv2.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class QgsCategorizedSymbolRendererV2 : QgsFeatureRendererV2
4949

5050
virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature );
5151

52-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
52+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );
5353

5454
virtual void stopRender( QgsRenderContext& context );
5555

python/core/symbology-ng/qgsgraduatedsymbolrendererv2.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class QgsGraduatedSymbolRendererV2 : QgsFeatureRendererV2
9191

9292
virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature );
9393

94-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
94+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );
9595

9696
virtual void stopRender( QgsRenderContext& context );
9797

python/core/symbology-ng/qgsheatmaprenderer.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class QgsHeatmapRenderer : QgsFeatureRendererV2
1010

1111
//reimplemented methods
1212
virtual QgsFeatureRendererV2* clone() const /Factory/;
13-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
13+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );
1414
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
1515
virtual void stopRender( QgsRenderContext& context );
1616
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );

python/core/symbology-ng/qgsinvertedpolygonrenderer.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class QgsInvertedPolygonRenderer : QgsFeatureRendererV2
1414
/** Used to clone this feature renderer.*/
1515
virtual QgsFeatureRendererV2* clone() const /Factory/;
1616

17-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
17+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );
1818

1919
/** Renders a given feature.
2020
* This will here collect features. The actual rendering will be postponed to stopRender()

python/core/symbology-ng/qgspointdisplacementrenderer.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class QgsPointDisplacementRenderer : QgsFeatureRendererV2
1616

1717
QgsSymbolV2* symbolForFeature( QgsFeature& feature );
1818

19-
void startRender( QgsRenderContext& context, const QgsFields& fields );
19+
QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );
2020

2121
void stopRender( QgsRenderContext& context );
2222

python/core/symbology-ng/qgsrendererv2.sip

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@ class QgsSymbolV2LevelItem
1717
int layer();
1818
};
1919

20+
class QgsRenderOptions
21+
{
22+
%TypeHeaderCode
23+
#include <qgsrendererv2.h>
24+
%End
25+
public:
26+
void setWhereClause( const QString& whereClause );
27+
QString whereClause();
28+
};
29+
2030
// every level has list of items: symbol + symbol layer num
2131
// typedef QList< QgsSymbolV2LevelItem > QgsSymbolV2Level;
2232

@@ -74,7 +84,7 @@ class QgsFeatureRendererV2
7484
*/
7585
virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature );
7686

77-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) = 0;
87+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) = 0;
7888

7989
//! @deprecated since 2.4 - not using QgsVectorLayer directly anymore
8090
virtual void startRender( QgsRenderContext& context, const QgsVectorLayer *vlayer ) /Deprecated/;

python/core/symbology-ng/qgsrulebasedrendererv2.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ class QgsRuleBasedRendererV2 : QgsFeatureRendererV2
173173

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

176-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
176+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );
177177

178178
virtual void stopRender( QgsRenderContext& context );
179179

python/core/symbology-ng/qgssinglesymbolrendererv2.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class QgsSingleSymbolRendererV2 : QgsFeatureRendererV2
1313

1414
virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature );
1515

16-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
16+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields );
1717

1818
virtual void stopRender( QgsRenderContext& context );
1919

src/core/symbology-ng/qgscategorizedsymbolrendererv2.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ void QgsCategorizedSymbolRendererV2::sortByLabel( Qt::SortOrder order )
396396
}
397397
}
398398

399-
void QgsCategorizedSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
399+
QgsRenderOptions QgsCategorizedSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
400400
{
401401
mCounting = context.rendererScale() == 0.0;
402402

@@ -425,6 +425,7 @@ void QgsCategorizedSymbolRendererV2::startRender( QgsRenderContext& context, con
425425
mTempSymbols[ it->symbol()] = tempSymbol;
426426
}
427427
}
428+
return QgsRenderOptions();
428429
}
429430

430431
void QgsCategorizedSymbolRendererV2::stopRender( QgsRenderContext& context )

src/core/symbology-ng/qgscategorizedsymbolrendererv2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class CORE_EXPORT QgsCategorizedSymbolRendererV2 : public QgsFeatureRendererV2
7979

8080
virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature ) override;
8181

82-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
82+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;
8383

8484
virtual void stopRender( QgsRenderContext& context ) override;
8585

src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ QgsSymbolV2* QgsGraduatedSymbolRendererV2::originalSymbolForFeature( QgsFeature&
369369
return symbolForValue( value.toDouble() );
370370
}
371371

372-
void QgsGraduatedSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
372+
QgsRenderOptions QgsGraduatedSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
373373
{
374374
mCounting = context.rendererScale() == 0.0;
375375

@@ -399,6 +399,7 @@ void QgsGraduatedSymbolRendererV2::startRender( QgsRenderContext& context, const
399399
mTempSymbols[ it->symbol()] = tempSymbol;
400400
}
401401
}
402+
return QgsRenderOptions();
402403
}
403404

404405
void QgsGraduatedSymbolRendererV2::stopRender( QgsRenderContext& context )

src/core/symbology-ng/qgsgraduatedsymbolrendererv2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ class CORE_EXPORT QgsGraduatedSymbolRendererV2 : public QgsFeatureRendererV2
123123

124124
virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature ) override;
125125

126-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
126+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;
127127

128128
virtual void stopRender( QgsRenderContext& context ) override;
129129

src/core/symbology-ng/qgsheatmaprenderer.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,12 @@ void QgsHeatmapRenderer::initializeValues( QgsRenderContext& context )
6363
mRadiusSquared = mRadiusPixels * mRadiusPixels;
6464
}
6565

66-
void QgsHeatmapRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
66+
QgsRenderOptions QgsHeatmapRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
6767
{
6868
Q_UNUSED( fields );
6969
if ( !context.painter() )
7070
{
71-
return;
71+
return QgsRenderOptions();
7272
}
7373

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

8282
initializeValues( context );
83+
return QgsRenderOptions();
8384
}
8485

8586
QgsMultiPoint QgsHeatmapRenderer::convertToMultipoint( const QgsGeometry* geom )

src/core/symbology-ng/qgsheatmaprenderer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class CORE_EXPORT QgsHeatmapRenderer : public QgsFeatureRendererV2
3939

4040
//reimplemented methods
4141
virtual QgsFeatureRendererV2* clone() const override;
42-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
42+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;
4343
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) override;
4444
virtual void stopRender( QgsRenderContext& context ) override;
4545
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature ) override;

src/core/symbology-ng/qgsinvertedpolygonrenderer.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ const QgsFeatureRendererV2* QgsInvertedPolygonRenderer::embeddedRenderer() const
6363
return mSubRenderer.data();
6464
}
6565

66-
void QgsInvertedPolygonRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
66+
QgsRenderOptions QgsInvertedPolygonRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
6767
{
6868
if ( !mSubRenderer )
6969
{
70-
return;
70+
return QgsRenderOptions();
7171
}
7272

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

8686
if ( !context.painter() )
8787
{
88-
return;
88+
return QgsRenderOptions();
8989
}
9090

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

120120
mExtentPolygon.clear();
121121
mExtentPolygon.append( exteriorRing );
122+
123+
return QgsRenderOptions();
122124
}
123125

124126
bool QgsInvertedPolygonRenderer::renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer, bool selected, bool drawVertexMarker )

src/core/symbology-ng/qgsinvertedpolygonrenderer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class CORE_EXPORT QgsInvertedPolygonRenderer : public QgsFeatureRendererV2
5050
/** Used to clone this feature renderer.*/
5151
virtual QgsFeatureRendererV2* clone() const override;
5252

53-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
53+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;
5454

5555
/** Renders a given feature.
5656
* This will here collect features. The actual rendering will be postponed to stopRender()

src/core/symbology-ng/qgspointdisplacementrenderer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ bool QgsPointDisplacementRenderer::willRenderFeature( QgsFeature& feat )
279279
}
280280

281281

282-
void QgsPointDisplacementRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
282+
QgsRenderOptions QgsPointDisplacementRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
283283
{
284284
mRenderer->startRender( context, fields );
285285

@@ -310,6 +310,7 @@ void QgsPointDisplacementRenderer::startRender( QgsRenderContext& context, const
310310
{
311311
mCenterSymbol->startRender( context, &fields );
312312
}
313+
return QgsRenderOptions();
313314
}
314315

315316
void QgsPointDisplacementRenderer::stopRender( QgsRenderContext& context )

src/core/symbology-ng/qgspointdisplacementrenderer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class CORE_EXPORT QgsPointDisplacementRenderer: public QgsFeatureRendererV2
5858
/** Proxy that will call this method on the embedded renderer. */
5959
virtual bool willRenderFeature( QgsFeature& feat ) override;
6060

61-
void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
61+
QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;
6262

6363
void stopRender( QgsRenderContext& context ) override;
6464

src/core/symbology-ng/qgsrendererv2.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,15 @@ class CORE_EXPORT QgsSymbolV2LevelItem
6161
int mLayer;
6262
};
6363

64+
class CORE_EXPORT QgsRenderOptions
65+
{
66+
public:
67+
void setWhereClause( const QString& whereClause ) { mWhereClause = whereClause; }
68+
QString whereClause() { return mWhereClause; }
69+
private:
70+
QString mWhereClause;
71+
};
72+
6473
// every level has list of items: symbol + symbol layer num
6574
typedef QList< QgsSymbolV2LevelItem > QgsSymbolV2Level;
6675

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

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

100116
//! @deprecated since 2.4 - not using QgsVectorLayer directly anymore
101117
Q_DECL_DEPRECATED virtual void startRender( QgsRenderContext& context, const QgsVectorLayer* vlayer );

src/core/symbology-ng/qgsrulebasedrendererv2.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ bool QgsRuleBasedRendererV2::renderFeature( QgsFeature& feature,
779779
}
780780

781781

782-
void QgsRuleBasedRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
782+
QgsRenderOptions QgsRuleBasedRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
783783
{
784784
// prepare active children
785785
mRootRule->startRender( context, fields );
@@ -800,6 +800,7 @@ void QgsRuleBasedRendererV2::startRender( QgsRenderContext& context, const QgsFi
800800
}
801801

802802
mRootRule->setNormZLevels( zLevelsToNormLevels );
803+
return QgsRenderOptions();
803804
}
804805

805806
void QgsRuleBasedRendererV2::stopRender( QgsRenderContext& context )

src/core/symbology-ng/qgsrulebasedrendererv2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ class CORE_EXPORT QgsRuleBasedRendererV2 : public QgsFeatureRendererV2
220220

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

223-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
223+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;
224224

225225
virtual void stopRender( QgsRenderContext& context ) override;
226226

src/core/symbology-ng/qgssinglesymbolrendererv2.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,10 @@ QgsSymbolV2* QgsSingleSymbolRendererV2::originalSymbolForFeature( QgsFeature& fe
7979
return mSymbol.data();
8080
}
8181

82-
void QgsSingleSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
82+
QgsRenderOptions QgsSingleSymbolRendererV2::startRender( QgsRenderContext& context, const QgsFields& fields )
8383
{
84-
if ( !mSymbol.data() ) return;
84+
if ( !mSymbol.data() )
85+
return QgsRenderOptions();
8586

8687
mSymbol->startRender( context, &fields );
8788

@@ -112,6 +113,8 @@ void QgsSingleSymbolRendererV2::startRender( QgsRenderContext& context, const Qg
112113
mOrigSize = 0;
113114
}
114115
}
116+
117+
return QgsRenderOptions();
115118
}
116119

117120
void QgsSingleSymbolRendererV2::stopRender( QgsRenderContext& context )

src/core/symbology-ng/qgssinglesymbolrendererv2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class CORE_EXPORT QgsSingleSymbolRendererV2 : public QgsFeatureRendererV2
3333

3434
virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feature ) override;
3535

36-
virtual void startRender( QgsRenderContext& context, const QgsFields& fields ) override;
36+
virtual QgsRenderOptions startRender( QgsRenderContext& context, const QgsFields& fields ) override;
3737

3838
virtual void stopRender( QgsRenderContext& context ) override;
3939

0 commit comments

Comments
 (0)