Skip to content

Commit 40c5ae4

Browse files
committedNov 13, 2014
[FIXED] #11572 Filter Legend By Map Content doesn't maintain point displacement legend
The fix from #1673 has to be enhance to have something more generic. This fix add methods to QgsPointDisplacementRenderer: * capabilities * symbolForFeature * originalSymbolForFeature * symbolsForFeature * originalSymbolsForFeature * willRenderFeature
1 parent cbf1d33 commit 40c5ae4

File tree

3 files changed

+86
-38
lines changed

3 files changed

+86
-38
lines changed
 

‎src/core/qgsmaphittest.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,6 @@ void QgsMapHitTest::run()
5353
void QgsMapHitTest::runHitTestLayer( QgsVectorLayer* vl, SymbolV2Set& usedSymbols, QgsRenderContext& context )
5454
{
5555
QgsFeatureRendererV2* r = vl->rendererV2();
56-
57-
// Point displacement case
58-
QgsPointDisplacementRenderer* pdr = dynamic_cast<QgsPointDisplacementRenderer*>( r );
59-
if ( pdr )
60-
r = pdr->embeddedRenderer();
61-
6256
bool moreSymbolsPerFeature = r->capabilities() & QgsFeatureRendererV2::MoreSymbolsPerFeature;
6357
r->startRender( context, vl->pendingFields() );
6458
QgsFeature f;

‎src/core/symbology-ng/qgspointdisplacementrenderer.cpp

Lines changed: 70 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -196,12 +196,80 @@ void QgsPointDisplacementRenderer::setEmbeddedRenderer( QgsFeatureRendererV2* r
196196
mRenderer = r;
197197
}
198198

199+
QList<QString> QgsPointDisplacementRenderer::usedAttributes()
200+
{
201+
QList<QString> attributeList;
202+
if ( !mLabelAttributeName.isEmpty() )
203+
{
204+
attributeList.push_back( mLabelAttributeName );
205+
}
206+
if ( mRenderer )
207+
{
208+
attributeList += mRenderer->usedAttributes();
209+
}
210+
return attributeList;
211+
}
212+
213+
int QgsPointDisplacementRenderer::capabilities()
214+
{
215+
if ( !mRenderer )
216+
{
217+
return 0;
218+
}
219+
return mRenderer->capabilities();
220+
}
221+
222+
QgsSymbolV2List QgsPointDisplacementRenderer::symbols()
223+
{
224+
if ( !mRenderer )
225+
{
226+
return QgsSymbolV2List();
227+
}
228+
return mRenderer->symbols();
229+
}
230+
199231
QgsSymbolV2* QgsPointDisplacementRenderer::symbolForFeature( QgsFeature& feature )
200232
{
201-
Q_UNUSED( feature );
202-
return 0; //not used any more
233+
if ( !mRenderer )
234+
{
235+
return 0;
236+
}
237+
return mRenderer->symbolForFeature( feature );
238+
}
239+
240+
QgsSymbolV2* QgsPointDisplacementRenderer::originalSymbolForFeature( QgsFeature& feat )
241+
{
242+
if ( !mRenderer )
243+
return 0;
244+
return mRenderer->originalSymbolForFeature( feat );
245+
}
246+
247+
QgsSymbolV2List QgsPointDisplacementRenderer::symbolsForFeature( QgsFeature& feature )
248+
{
249+
if ( !mRenderer )
250+
{
251+
return QgsSymbolV2List();
252+
}
253+
return mRenderer->symbolsForFeature( feature );
254+
}
255+
256+
QgsSymbolV2List QgsPointDisplacementRenderer::originalSymbolsForFeature( QgsFeature& feat )
257+
{
258+
if ( !mRenderer )
259+
return QgsSymbolV2List();
260+
return mRenderer->originalSymbolsForFeature( feat );
203261
}
204262

263+
bool QgsPointDisplacementRenderer::willRenderFeature( QgsFeature& feat )
264+
{
265+
if ( !mRenderer )
266+
{
267+
return false;
268+
}
269+
return mRenderer->willRenderFeature( feat );
270+
}
271+
272+
205273
void QgsPointDisplacementRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
206274
{
207275
mRenderer->startRender( context, fields );
@@ -257,32 +325,6 @@ void QgsPointDisplacementRenderer::stopRender( QgsRenderContext& context )
257325
}
258326
}
259327

260-
QList<QString> QgsPointDisplacementRenderer::usedAttributes()
261-
{
262-
QList<QString> attributeList;
263-
if ( !mLabelAttributeName.isEmpty() )
264-
{
265-
attributeList.push_back( mLabelAttributeName );
266-
}
267-
if ( mRenderer )
268-
{
269-
attributeList += mRenderer->usedAttributes();
270-
}
271-
return attributeList;
272-
}
273-
274-
QgsSymbolV2List QgsPointDisplacementRenderer::symbols()
275-
{
276-
if ( mRenderer )
277-
{
278-
return mRenderer->symbols();
279-
}
280-
else
281-
{
282-
return QgsSymbolV2List();
283-
}
284-
}
285-
286328
QgsFeatureRendererV2* QgsPointDisplacementRenderer::create( QDomElement& symbologyElem )
287329
{
288330
QgsPointDisplacementRenderer* r = new QgsPointDisplacementRenderer();

‎src/core/symbology-ng/qgspointdisplacementrenderer.h

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,27 @@ class CORE_EXPORT QgsPointDisplacementRenderer: public QgsFeatureRendererV2
4141
/**Reimplemented from QgsFeatureRendererV2*/
4242
bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
4343

44-
QgsSymbolV2* symbolForFeature( QgsFeature& feature );
44+
/** Partial proxy that will call this method on the embedded renderer. */
45+
virtual QList<QString> usedAttributes();
46+
/** Proxy that will call this method on the embedded renderer. */
47+
virtual int capabilities();
48+
/** Proxy that will call this method on the embedded renderer. */
49+
virtual QgsSymbolV2List symbols();
50+
/** Proxy that will call this method on the embedded renderer. */
51+
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
52+
/** Proxy that will call this method on the embedded renderer. */
53+
virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feat );
54+
/** Proxy that will call this method on the embedded renderer. */
55+
virtual QgsSymbolV2List symbolsForFeature( QgsFeature& feat );
56+
/** Proxy that will call this method on the embedded renderer. */
57+
virtual QgsSymbolV2List originalSymbolsForFeature( QgsFeature& feat );
58+
/** Proxy that will call this method on the embedded renderer. */
59+
virtual bool willRenderFeature( QgsFeature& feat );
4560

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

4863
void stopRender( QgsRenderContext& context );
4964

50-
QList<QString> usedAttributes();
51-
QgsSymbolV2List symbols();
52-
5365
//! create a renderer from XML element
5466
static QgsFeatureRendererV2* create( QDomElement& symbologyElem );
5567
QDomElement save( QDomDocument& doc );

0 commit comments

Comments
 (0)