From 58b3e2005444898aa02070ac4ebebe15d79b18a1 Mon Sep 17 00:00:00 2001 From: Blottiere Paul Date: Tue, 27 Mar 2018 14:09:20 +0100 Subject: [PATCH] Fixes #13999: feature count on rule based renderer is valid for ELSE statement --- src/core/symbology/qgsrulebasedrenderer.cpp | 23 ++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/core/symbology/qgsrulebasedrenderer.cpp b/src/core/symbology/qgsrulebasedrenderer.cpp index 50210e2f0ab..31c52072cf2 100644 --- a/src/core/symbology/qgsrulebasedrenderer.cpp +++ b/src/core/symbology/qgsrulebasedrenderer.cpp @@ -553,7 +553,9 @@ bool QgsRuleBasedRenderer::Rule::willRenderFeature( QgsFeature &feat, QgsRenderC lst.removeOne( rule ); if ( lst.empty() ) + { return true; + } } else if ( !rule->isElse( ) && rule->willRenderFeature( feat, context ) ) { @@ -587,7 +589,26 @@ QSet QgsRuleBasedRenderer::Rule::legendKeysForFeature( QgsFeature &feat Q_FOREACH ( Rule *rule, mActiveChildren ) { - lst.unite( rule->legendKeysForFeature( feat, context ) ); + bool validKey = false; + if ( rule->isElse() ) + { + RuleList lst = rulesForFeature( feat, context, false ); + lst.removeOne( rule ); + + if ( lst.empty() ) + { + validKey = true; + } + } + else if ( !rule->isElse( ) && rule->willRenderFeature( feat, context ) ) + { + validKey = true; + } + + if ( validKey ) + { + lst.unite( rule->legendKeysForFeature( feat, context ) ); + } } return lst; }