Skip to content

Commit 4285d70

Browse files
committed
Fix "feature rendering order" checkbox is not honored (fix #14323)
1 parent f36214c commit 4285d70

14 files changed

+91
-14
lines changed

python/core/symbology-ng/qgsrendererv2.sip

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,15 +352,36 @@ class QgsFeatureRendererV2
352352
/**
353353
* Get the order in which features shall be processed by this renderer.
354354
* @note added in QGIS 2.14
355+
* @note this property has no effect if orderByEnabled() is false
356+
* @see orderByEnabled()
355357
*/
356358
QgsFeatureRequest::OrderBy orderBy() const;
357359

358360
/**
359361
* Define the order in which features shall be processed by this renderer.
362+
* @note this property has no effect if orderByEnabled() is false
360363
* @note added in QGIS 2.14
364+
* @see setOrderByEnabled()
361365
*/
362366
void setOrderBy( const QgsFeatureRequest::OrderBy& orderBy );
363367

368+
/**
369+
* Returns whether custom ordering will be applied before features are processed by this renderer.
370+
* @note added in QGIS 2.14
371+
* @see orderBy()
372+
* @see setOrderByEnabled()
373+
*/
374+
bool orderByEnabled() const;
375+
376+
/**
377+
* Sets whether custom ordering should be applied before features are processed by this renderer.
378+
* @param enabled set to true to enable custom feature ordering
379+
* @note added in QGIS 2.14
380+
* @see setOrderBy()
381+
* @see orderByEnabled()
382+
*/
383+
void setOrderByEnabled( bool enabled );
384+
364385
protected:
365386
QgsFeatureRendererV2( const QString& type );
366387

src/core/qgsvectorlayerrenderer.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,14 @@ bool QgsVectorLayerRenderer::render()
150150
QgsRectangle requestExtent = mContext.extent();
151151
mRendererV2->modifyRequestExtent( requestExtent, mContext );
152152

153-
QgsFeatureRequest::OrderBy orderBy = mRendererV2->orderBy();
154-
155153
QgsFeatureRequest featureRequest = QgsFeatureRequest()
156154
.setFilterRect( requestExtent )
157155
.setSubsetOfAttributes( mAttrNames, mFields )
158-
.setExpressionContext( mContext.expressionContext() )
159-
.setOrderBy( orderBy );
156+
.setExpressionContext( mContext.expressionContext() );
157+
if ( mRendererV2->orderByEnabled() )
158+
{
159+
featureRequest.setOrderBy( mRendererV2->orderBy() );
160+
}
160161

161162
const QgsFeatureFilterProvider* featureFilterProvider = mContext.featureFilterProvider();
162163
if ( featureFilterProvider )

src/core/symbology-ng/qgscategorizedsymbolrendererv2.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,7 @@ QDomElement QgsCategorizedSymbolRendererV2::save( QDomDocument& doc )
784784
mOrderBy.save( orderBy );
785785
rendererElem.appendChild( orderBy );
786786
}
787+
rendererElem.setAttribute( "enableorderby", ( mOrderByEnabled ? "1" : "0" ) );
787788

788789
return rendererElem;
789790
}
@@ -1052,6 +1053,7 @@ QgsCategorizedSymbolRendererV2* QgsCategorizedSymbolRendererV2::convertFromRende
10521053
}
10531054

10541055
r->setOrderBy( renderer->orderBy() );
1056+
r->setOrderByEnabled( renderer->orderByEnabled() );
10551057

10561058
return r;
10571059
}

src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,6 +1201,7 @@ QDomElement QgsGraduatedSymbolRendererV2::save( QDomDocument& doc )
12011201
mOrderBy.save( orderBy );
12021202
rendererElem.appendChild( orderBy );
12031203
}
1204+
rendererElem.setAttribute( "enableorderby", ( mOrderByEnabled ? "1" : "0" ) );
12041205

12051206
return rendererElem;
12061207
}
@@ -1745,6 +1746,7 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::convertFromRenderer(
17451746
}
17461747

17471748
r->setOrderBy( renderer->orderBy() );
1749+
r->setOrderByEnabled( renderer->orderByEnabled() );
17481750

17491751
return r;
17501752
}

src/core/symbology-ng/qgsheatmaprenderer.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,7 @@ QDomElement QgsHeatmapRenderer::save( QDomDocument& doc )
361361
rendererElem.appendChild( colorRampElem );
362362
}
363363
rendererElem.setAttribute( "invert_ramp", QString::number( mInvertRamp ) );
364+
rendererElem.setAttribute( "forceraster", ( mForceRaster ? "1" : "0" ) );
364365

365366
if ( mPaintEffect && !QgsPaintEffectRegistry::isDefaultStack( mPaintEffect ) )
366367
mPaintEffect->saveProperties( doc, rendererElem );
@@ -371,6 +372,7 @@ QDomElement QgsHeatmapRenderer::save( QDomDocument& doc )
371372
mOrderBy.save( orderBy );
372373
rendererElem.appendChild( orderBy );
373374
}
375+
rendererElem.setAttribute( "enableorderby", ( mOrderByEnabled ? "1" : "0" ) );
374376

375377
return rendererElem;
376378
}

src/core/symbology-ng/qgsinvertedpolygonrenderer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,7 @@ QDomElement QgsInvertedPolygonRenderer::save( QDomDocument& doc )
385385
mOrderBy.save( orderBy );
386386
rendererElem.appendChild( orderBy );
387387
}
388+
rendererElem.setAttribute( "enableorderby", ( mOrderByEnabled ? "1" : "0" ) );
388389

389390
return rendererElem;
390391
}

src/core/symbology-ng/qgspointdisplacementrenderer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@ QDomElement QgsPointDisplacementRenderer::save( QDomDocument& doc )
426426
mOrderBy.save( orderBy );
427427
rendererElement.appendChild( orderBy );
428428
}
429+
rendererElement.setAttribute( "enableorderby", ( mOrderByEnabled ? "1" : "0" ) );
429430

430431
return rendererElement;
431432
}

src/core/symbology-ng/qgsrendererv2.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ void QgsFeatureRendererV2::copyRendererData( QgsFeatureRendererV2* destRenderer
195195

196196
destRenderer->setPaintEffect( mPaintEffect->clone() );
197197
destRenderer->mOrderBy = mOrderBy;
198+
destRenderer->mOrderByEnabled = mOrderByEnabled;
198199
}
199200

200201
void QgsFeatureRendererV2::copyPaintEffect( QgsFeatureRendererV2 *destRenderer ) const
@@ -212,6 +213,7 @@ QgsFeatureRendererV2::QgsFeatureRendererV2( const QString& type )
212213
, mCurrentVertexMarkerSize( 3 )
213214
, mPaintEffect( nullptr )
214215
, mForceRaster( false )
216+
, mOrderByEnabled( false )
215217
{
216218
mPaintEffect = QgsPaintEffectRegistry::defaultStack();
217219
mPaintEffect->setEnabled( false );
@@ -334,6 +336,7 @@ QgsFeatureRendererV2* QgsFeatureRendererV2::load( QDomElement& element )
334336
// restore order by
335337
QDomElement orderByElem = element.firstChildElement( "orderby" );
336338
r->mOrderBy.load( orderByElem );
339+
r->setOrderByEnabled( element.attribute( "enableorderby", "0" ).toInt() );
337340
}
338341
return r;
339342
}
@@ -353,6 +356,7 @@ QDomElement QgsFeatureRendererV2::save( QDomDocument& doc )
353356
mOrderBy.save( orderBy );
354357
rendererElem.appendChild( orderBy );
355358
}
359+
rendererElem.setAttribute( "enableorderby", ( mOrderByEnabled ? "1" : "0" ) );
356360
return rendererElem;
357361
}
358362

@@ -617,6 +621,16 @@ void QgsFeatureRendererV2::setOrderBy( const QgsFeatureRequest::OrderBy& orderBy
617621
mOrderBy = orderBy;
618622
}
619623

624+
bool QgsFeatureRendererV2::orderByEnabled() const
625+
{
626+
return mOrderByEnabled;
627+
}
628+
629+
void QgsFeatureRendererV2::setOrderByEnabled( bool enabled )
630+
{
631+
mOrderByEnabled = enabled;
632+
}
633+
620634
void QgsFeatureRendererV2::convertSymbolSizeScale( QgsSymbolV2 * symbol, QgsSymbolV2::ScaleMethod method, const QString & field )
621635
{
622636
if ( symbol->type() == QgsSymbolV2::Marker )

src/core/symbology-ng/qgsrendererv2.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,15 +375,36 @@ class CORE_EXPORT QgsFeatureRendererV2
375375
/**
376376
* Get the order in which features shall be processed by this renderer.
377377
* @note added in QGIS 2.14
378+
* @note this property has no effect if orderByEnabled() is false
379+
* @see orderByEnabled()
378380
*/
379381
QgsFeatureRequest::OrderBy orderBy() const;
380382

381383
/**
382384
* Define the order in which features shall be processed by this renderer.
385+
* @note this property has no effect if orderByEnabled() is false
383386
* @note added in QGIS 2.14
387+
* @see setOrderByEnabled()
384388
*/
385389
void setOrderBy( const QgsFeatureRequest::OrderBy& orderBy );
386390

391+
/**
392+
* Returns whether custom ordering will be applied before features are processed by this renderer.
393+
* @note added in QGIS 2.14
394+
* @see orderBy()
395+
* @see setOrderByEnabled()
396+
*/
397+
bool orderByEnabled() const;
398+
399+
/**
400+
* Sets whether custom ordering should be applied before features are processed by this renderer.
401+
* @param enabled set to true to enable custom feature ordering
402+
* @note added in QGIS 2.14
403+
* @see setOrderBy()
404+
* @see orderByEnabled()
405+
*/
406+
void setOrderByEnabled( bool enabled );
407+
387408
protected:
388409
QgsFeatureRendererV2( const QString& type );
389410

@@ -447,6 +468,8 @@ class CORE_EXPORT QgsFeatureRendererV2
447468

448469
QgsFeatureRequest::OrderBy mOrderBy;
449470

471+
bool mOrderByEnabled;
472+
450473
private:
451474
Q_DISABLE_COPY( QgsFeatureRendererV2 )
452475
};

src/core/symbology-ng/qgsrulebasedrendererv2.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,7 @@ QDomElement QgsRuleBasedRendererV2::save( QDomDocument& doc )
993993
mOrderBy.save( orderBy );
994994
rendererElem.appendChild( orderBy );
995995
}
996+
rendererElem.setAttribute( "enableorderby", ( mOrderByEnabled ? "1" : "0" ) );
996997

997998
return rendererElem;
998999
}

0 commit comments

Comments
 (0)