@@ -39,7 +39,7 @@ QgsRuleBasedRendererV2::Rule::Rule( QgsSymbolV2* symbol, int scaleMinDenom, int
39
39
, mScaleMinDenom( scaleMinDenom ), mScaleMaxDenom( scaleMaxDenom )
40
40
, mFilterExp( filterExp ), mLabel( label ), mDescription( description )
41
41
, mElseRule( elseRule )
42
- , mCheckState ( true )
42
+ , mIsActive ( true )
43
43
, mFilter( NULL )
44
44
{
45
45
mRuleKey = QUuid::createUuid ().toString ();
@@ -239,7 +239,7 @@ bool QgsRuleBasedRendererV2::Rule::isFilterOK( QgsFeature& f, QgsRenderContext*
239
239
return true ;
240
240
241
241
context->expressionContext ().setFeature ( f );
242
- QVariant res = mFilter ->evaluate ( context ? &context->expressionContext () : 0 );
242
+ QVariant res = mFilter ->evaluate ( &context->expressionContext () );
243
243
return res.toInt () != 0 ;
244
244
}
245
245
@@ -260,7 +260,7 @@ QgsRuleBasedRendererV2::Rule* QgsRuleBasedRendererV2::Rule::clone() const
260
260
{
261
261
QgsSymbolV2* sym = mSymbol ? mSymbol ->clone () : NULL ;
262
262
Rule* newrule = new Rule ( sym, mScaleMinDenom , mScaleMaxDenom , mFilterExp , mLabel , mDescription );
263
- newrule->setCheckState ( mCheckState );
263
+ newrule->setCheckState ( mIsActive );
264
264
// clone children
265
265
foreach ( Rule* rule, mChildren )
266
266
newrule->appendChild ( rule->clone () );
@@ -287,7 +287,7 @@ QDomElement QgsRuleBasedRendererV2::Rule::save( QDomDocument& doc, QgsSymbolV2Ma
287
287
ruleElem.setAttribute ( " label" , mLabel );
288
288
if ( !mDescription .isEmpty () )
289
289
ruleElem.setAttribute ( " description" , mDescription );
290
- if ( !mCheckState )
290
+ if ( !mIsActive )
291
291
ruleElem.setAttribute ( " checkstate" , 0 );
292
292
ruleElem.setAttribute ( " key" , mRuleKey );
293
293
@@ -401,7 +401,7 @@ bool QgsRuleBasedRendererV2::Rule::startRender( QgsRenderContext& context, const
401
401
{
402
402
mActiveChildren .clear ();
403
403
404
- if ( ! mCheckState )
404
+ if ( ! mIsActive )
405
405
return false ;
406
406
407
407
// filter out rules which are not compatible with this scale
@@ -505,18 +505,18 @@ void QgsRuleBasedRendererV2::Rule::setNormZLevels( const QMap<int, int>& zLevels
505
505
}
506
506
507
507
508
- bool QgsRuleBasedRendererV2::Rule::renderFeature ( QgsRuleBasedRendererV2::FeatureToRender& featToRender, QgsRenderContext& context, QgsRuleBasedRendererV2::RenderQueue& renderQueue )
508
+ QgsRuleBasedRendererV2::Rule::RenderResult QgsRuleBasedRendererV2::Rule::renderFeature ( QgsRuleBasedRendererV2::FeatureToRender& featToRender, QgsRenderContext& context, QgsRuleBasedRendererV2::RenderQueue& renderQueue )
509
509
{
510
510
if ( !isFilterOK ( featToRender.feat , &context ) )
511
- return false ;
511
+ return Filtered ;
512
512
513
513
bool rendered = false ;
514
514
515
515
// create job for this feature and this symbol, add to list of jobs
516
- if ( mSymbol )
516
+ if ( mSymbol && mIsActive )
517
517
{
518
518
// add job to the queue: each symbol's zLevel must be added
519
- foreach ( int normZLevel, mSymbolNormZLevels )
519
+ Q_FOREACH ( int normZLevel, mSymbolNormZLevels )
520
520
{
521
521
// QgsDebugMsg(QString("add job at level %1").arg(normZLevel));
522
522
renderQueue[normZLevel].jobs .append ( new RenderJob ( featToRender, mSymbol ) );
@@ -527,16 +527,15 @@ bool QgsRuleBasedRendererV2::Rule::renderFeature( QgsRuleBasedRendererV2::Featur
527
527
bool willrendersomething = false ;
528
528
529
529
// process children
530
- for ( QList< Rule*>::iterator it = mActiveChildren . begin (); it != mActiveChildren . end (); ++it )
530
+ Q_FOREACH ( Rule* rule, mChildren )
531
531
{
532
- Rule* rule = *it;
533
- if ( rule->isElse () )
532
+ // Don't process else rules yet
533
+ if ( ! rule->isElse () )
534
534
{
535
- // Don't process else rules yet
536
- continue ;
535
+ RenderResult res = rule->renderFeature ( featToRender, context, renderQueue );
536
+ willrendersomething |= ( res == Rendered );
537
+ rendered |= willrendersomething;
537
538
}
538
- willrendersomething |= rule->renderFeature ( featToRender, context, renderQueue );
539
- rendered |= willrendersomething;
540
539
}
541
540
542
541
// If none of the rules passed then we jump into the else rules and process them.
@@ -547,8 +546,12 @@ bool QgsRuleBasedRendererV2::Rule::renderFeature( QgsRuleBasedRendererV2::Featur
547
546
rendered |= rule->renderFeature ( featToRender, context, renderQueue );
548
547
}
549
548
}
550
-
551
- return rendered;
549
+ if ( !mIsActive )
550
+ return Inactive;
551
+ else if ( rendered )
552
+ return Rendered;
553
+ else
554
+ return Filtered;
552
555
}
553
556
554
557
bool QgsRuleBasedRendererV2::Rule::willRenderFeature ( QgsFeature& feat, QgsRenderContext *context )
0 commit comments