Skip to content

Commit 4285d70

Browse files
committedFeb 18, 2016
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
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,8 @@ QDomElement QgsSingleSymbolRendererV2::save( QDomDocument& doc )
387387
mOrderBy.save( orderBy );
388388
rendererElem.appendChild( orderBy );
389389
}
390+
rendererElem.setAttribute( "enableorderby", ( mOrderByEnabled ? "1" : "0" ) );
391+
390392
return rendererElem;
391393
}
392394

@@ -481,6 +483,7 @@ QgsSingleSymbolRendererV2* QgsSingleSymbolRendererV2::convertFromRenderer( const
481483
if ( r )
482484
{
483485
r->setOrderBy( renderer->orderBy() );
486+
r->setOrderByEnabled( renderer->orderByEnabled() );
484487
}
485488

486489
return r;

‎src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,15 +136,15 @@ QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog( QgsVectorLayer* la
136136
// setup slot rendererChanged()
137137
connect( cboRenderers, SIGNAL( currentIndexChanged( int ) ), this, SLOT( rendererChanged() ) );
138138
//setup order by
139-
if ( mOrderBy.isEmpty() )
139+
if ( mLayer->rendererV2()->orderByEnabled() )
140140
{
141-
btnOrderBy->setEnabled( false );
142-
checkboxEnableOrderBy->setChecked( false );
143-
lineEditOrderBy->setEnabled( false );
141+
checkboxEnableOrderBy->setChecked( true );
144142
}
145143
else
146144
{
147-
checkboxEnableOrderBy->setChecked( true );
145+
btnOrderBy->setEnabled( false );
146+
checkboxEnableOrderBy->setChecked( false );
147+
lineEditOrderBy->setEnabled( false );
148148
}
149149
lineEditOrderBy->setReadOnly( true );
150150
connect( checkboxEnableOrderBy, SIGNAL( toggled( bool ) ), btnOrderBy, SLOT( setEnabled( bool ) ) );
@@ -222,7 +222,7 @@ void QgsRendererV2PropertiesDialog::rendererChanged()
222222
{
223223
if ( mMapCanvas )
224224
mActiveWidget->setMapCanvas( mMapCanvas );
225-
changeOrderBy( mActiveWidget->renderer()->orderBy() );
225+
changeOrderBy( mActiveWidget->renderer()->orderBy(), mActiveWidget->renderer()->orderByEnabled() );
226226
connect( mActiveWidget, SIGNAL( layerVariablesChanged() ), this, SIGNAL( layerVariablesChanged() ) );
227227
}
228228
}
@@ -248,6 +248,7 @@ void QgsRendererV2PropertiesDialog::apply()
248248
renderer->setPaintEffect( mPaintEffect->clone() );
249249
// set the order by
250250
renderer->setOrderBy( mOrderBy );
251+
renderer->setOrderByEnabled( checkboxEnableOrderBy->isChecked() );
251252

252253
mLayer->setRendererV2( renderer->clone() );
253254
}
@@ -278,11 +279,11 @@ void QgsRendererV2PropertiesDialog::showOrderByDialog()
278279
}
279280
}
280281

281-
void QgsRendererV2PropertiesDialog::changeOrderBy( const QgsFeatureRequest::OrderBy& orderBy )
282+
void QgsRendererV2PropertiesDialog::changeOrderBy( const QgsFeatureRequest::OrderBy& orderBy, bool orderByEnabled )
282283
{
283284
mOrderBy = orderBy;
284285
lineEditOrderBy->setText( mOrderBy.dump() );
285-
checkboxEnableOrderBy->setChecked( !orderBy.isEmpty() );
286+
checkboxEnableOrderBy->setChecked( orderByEnabled );
286287
}
287288

288289

‎src/gui/symbology-ng/qgsrendererv2propertiesdialog.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::Qgs
6565
private slots:
6666
void showOrderByDialog();
6767

68-
void changeOrderBy( const QgsFeatureRequest::OrderBy& orderBy );
68+
void changeOrderBy( const QgsFeatureRequest::OrderBy& orderBy, bool orderByEnabled );
6969

7070
protected:
7171

‎tests/src/python/test_qgssinglesymbolrenderer.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,19 @@ def tearDown(self):
8181

8282
def testOrderBy(self):
8383
self.renderer.setOrderBy(QgsFeatureRequest.OrderBy([QgsFeatureRequest.OrderByClause('Value', False)]))
84+
self.renderer.setOrderByEnabled(True)
8485

8586
# Setup rendering check
8687
renderchecker = QgsMultiRenderChecker()
8788
renderchecker.setMapSettings(self.mapsettings)
8889
renderchecker.setControlName('expected_singlesymbol_orderby')
8990
result = renderchecker.runTest('singlesymbol_orderby')
90-
9191
assert result
9292

93+
# disable order by and retest
94+
self.renderer.setOrderByEnabled(False)
95+
result = renderchecker.runTest('single')
96+
97+
9398
if __name__ == '__main__':
9499
unittest.main()

0 commit comments

Comments
 (0)
Failed to load comments.