Skip to content

Commit 0c5e591

Browse files
committed
Drag'n'drop for rules, rule does not need a symbol
1 parent 245e76d commit 0c5e591

File tree

6 files changed

+273
-142
lines changed

6 files changed

+273
-142
lines changed

src/core/symbology-ng/qgsrulebasedrendererv2.cpp

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@ QgsSymbolV2List QgsRuleBasedRendererV2::Rule::symbols()
106106
return lst;
107107
}
108108

109+
void QgsRuleBasedRendererV2::Rule::setSymbol( QgsSymbolV2* sym )
110+
{
111+
delete mSymbol;
112+
mSymbol = sym;
113+
}
114+
109115
QgsLegendSymbolList QgsRuleBasedRendererV2::Rule::legendSymbolItems()
110116
{
111117
QgsLegendSymbolList lst;
@@ -534,34 +540,21 @@ QgsFeatureRendererV2* QgsRuleBasedRendererV2::create( QDomElement& element )
534540

535541
void QgsRuleBasedRendererV2::refineRuleCategories( QgsRuleBasedRendererV2::Rule* initialRule, QgsCategorizedSymbolRendererV2* r )
536542
{
537-
RuleList rules;
538543
foreach( const QgsRendererCategoryV2& cat, r->categories() )
539544
{
540-
QString newfilter = QString( "%1 = '%2'" ).arg( r->classAttribute() ).arg( cat.value().toString() );
541-
QString filter = initialRule->filterExpression();
542-
QString label = initialRule->label();
543-
QString description = initialRule->description();
544-
if ( filter.isEmpty() )
545-
filter = newfilter;
546-
else
547-
filter = QString( "(%1) AND (%2)" ).arg( filter ).arg( newfilter );
548-
initialRule->appendChild( new Rule( cat.symbol()->clone(), initialRule->scaleMinDenom(), initialRule->scaleMaxDenom(), filter, label, description ) );
545+
QString filter = QString( "%1 = '%2'" ).arg( r->classAttribute() ).arg( cat.value().toString() );
546+
QString label = filter;
547+
initialRule->appendChild( new Rule( cat.symbol()->clone(), 0, 0, filter, label ) );
549548
}
550549
}
551550

552551
void QgsRuleBasedRendererV2::refineRuleRanges( QgsRuleBasedRendererV2::Rule* initialRule, QgsGraduatedSymbolRendererV2* r )
553552
{
554553
foreach( const QgsRendererRangeV2& rng, r->ranges() )
555554
{
556-
QString newfilter = QString( "%1 >= '%2' AND %1 <= '%3'" ).arg( r->classAttribute() ).arg( rng.lowerValue() ).arg( rng.upperValue() );
557-
QString filter = initialRule->filterExpression();
558-
QString label = initialRule->label();
559-
QString description = initialRule->description();
560-
if ( filter.isEmpty() )
561-
filter = newfilter;
562-
else
563-
filter = QString( "(%1) AND (%2)" ).arg( filter ).arg( newfilter );
564-
initialRule->appendChild( new Rule( rng.symbol()->clone(), initialRule->scaleMinDenom(), initialRule->scaleMaxDenom(), filter, label, description ) );
555+
QString filter = QString( "%1 >= '%2' AND %1 <= '%3'" ).arg( r->classAttribute() ).arg( rng.lowerValue() ).arg( rng.upperValue() );
556+
QString label = filter;
557+
initialRule->appendChild( new Rule( rng.symbol()->clone(), 0, 0, filter, label ) );
565558
}
566559
}
567560

@@ -570,21 +563,18 @@ void QgsRuleBasedRendererV2::refineRuleScales( QgsRuleBasedRendererV2::Rule* ini
570563
qSort( scales ); // make sure the scales are in ascending order
571564
int oldScale = initialRule->scaleMinDenom();
572565
int maxDenom = initialRule->scaleMaxDenom();
573-
QString filter = initialRule->filterExpression();
574-
QString label = initialRule->label();
575-
QString description = initialRule->description();
576566
QgsSymbolV2* symbol = initialRule->symbol();
577567
foreach( int scale, scales )
578568
{
579569
if ( initialRule->scaleMinDenom() >= scale )
580570
continue; // jump over the first scales out of the interval
581571
if ( maxDenom != 0 && maxDenom <= scale )
582572
break; // ignore the latter scales out of the interval
583-
initialRule->appendChild( new Rule( symbol->clone(), oldScale, scale, filter, label, description ) );
573+
initialRule->appendChild( new Rule( symbol->clone(), oldScale, scale, QString(), QString( "%1 - %2" ).arg( oldScale ).arg( scale ) ) );
584574
oldScale = scale;
585575
}
586576
// last rule
587-
initialRule->appendChild( new Rule( symbol->clone(), oldScale, maxDenom, filter, label, description ) );
577+
initialRule->appendChild( new Rule( symbol->clone(), oldScale, maxDenom, QString(), QString( "%1 - %2" ).arg( oldScale ).arg( maxDenom ) ) );
588578
}
589579

590580
QString QgsRuleBasedRendererV2::dump()

src/core/symbology-ng/qgsrulebasedrendererv2.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ class CORE_EXPORT QgsRuleBasedRendererV2 : public QgsFeatureRendererV2
9393
QString filterExpression() const { return mFilterExp; }
9494
QString description() const { return mDescription; }
9595

96+
//! set a new symbol (or NULL). Deletes old symbol.
97+
void setSymbol( QgsSymbolV2* sym );
9698
void setLabel( QString label ) { mLabel = label; }
9799
void setScaleMinDenom( int scaleMinDenom ) { mScaleMinDenom = scaleMinDenom; }
98100
void setScaleMaxDenom( int scaleMaxDenom ) { mScaleMaxDenom = scaleMaxDenom; }

0 commit comments

Comments
 (0)