Skip to content

Commit e52c123

Browse files
committedSep 14, 2014
Merge pull request #1576 from leyan/graduatedRenderer
Automatic update of label and neighboring ranges boundaries in graduated renderer. Fix #9312. Fix #9900, Fix #10203
2 parents f214a01 + 340d417 commit e52c123

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed
 

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

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,7 @@ QgsGraduatedSymbolRendererV2Widget::QgsGraduatedSymbolRendererV2Widget( QgsVecto
414414
connect( btnGraduatedDelete, SIGNAL( clicked() ), this, SLOT( deleteClasses() ) );
415415
connect( btnDeleteAllClasses, SIGNAL( clicked() ), this, SLOT( deleteAllClasses() ) );
416416
connect( btnGraduatedAdd, SIGNAL( clicked() ), this, SLOT( addClass() ) );
417+
connect( cbxLinkBoundaries, SIGNAL( toggled( bool ) ), this, SLOT( toggleBoundariesLink( bool ) ) );
417418

418419
// initialize from previously set renderer
419420
updateUiFromRenderer();
@@ -699,11 +700,57 @@ void QgsGraduatedSymbolRendererV2Widget::changeRange( int rangeIdx )
699700
{
700701
double lowerValue = dialog.lowerValue().toDouble();
701702
double upperValue = dialog.upperValue().toDouble();
703+
704+
QString label = createLabel( range.lowerValue(), range.upperValue() );
705+
QString newLabel;
706+
702707
mRenderer->updateRangeUpperValue( rangeIdx, upperValue );
703708
mRenderer->updateRangeLowerValue( rangeIdx, lowerValue );
709+
710+
//If the label was the label automatically generated, we generate a new one for the new range
711+
if ( range.label() == label )
712+
{
713+
newLabel = createLabel( lowerValue, upperValue );
714+
mRenderer->updateRangeLabel( rangeIdx, newLabel );
715+
}
716+
717+
//If the boundaries have to stay linked, we update the ranges above and below, as well as their label if needed
718+
if ( cbxLinkBoundaries->isChecked() )
719+
{
720+
if ( rangeIdx > 0 )
721+
{
722+
const QgsRendererRangeV2& rangeLower = mRenderer->ranges()[rangeIdx - 1];
723+
label = createLabel( rangeLower.lowerValue(), rangeLower.upperValue() );
724+
mRenderer->updateRangeUpperValue( rangeIdx - 1, lowerValue );
725+
726+
if ( label == rangeLower.label() )
727+
{
728+
newLabel = createLabel( rangeLower.lowerValue(), lowerValue );
729+
mRenderer->updateRangeLabel( rangeIdx - 1, newLabel );
730+
}
731+
}
732+
733+
if ( rangeIdx < mRenderer->ranges().size() - 1 )
734+
{
735+
const QgsRendererRangeV2& rangeUpper = mRenderer->ranges()[rangeIdx + 1];
736+
label = createLabel( rangeUpper.lowerValue(), rangeUpper.upperValue() );
737+
mRenderer->updateRangeLowerValue( rangeIdx + 1, upperValue );
738+
739+
if ( label == rangeUpper.label() )
740+
{
741+
newLabel = createLabel( upperValue, rangeUpper.upperValue() );
742+
mRenderer->updateRangeLabel( rangeIdx + 1, newLabel );
743+
}
744+
}
745+
}
704746
}
705747
}
706748

749+
QString QgsGraduatedSymbolRendererV2Widget::createLabel( double lowerValue, double upperValue )
750+
{
751+
return QString::number( lowerValue , 'f', 4 ) + " - " + QString::number( upperValue, 'f', 4 );
752+
}
753+
707754
void QgsGraduatedSymbolRendererV2Widget::addClass()
708755
{
709756
mModel->addClass( mGraduatedSymbol );
@@ -720,6 +767,20 @@ void QgsGraduatedSymbolRendererV2Widget::deleteAllClasses()
720767
mModel->removeAllRows();
721768
}
722769

770+
void QgsGraduatedSymbolRendererV2Widget::toggleBoundariesLink( bool linked )
771+
{
772+
//If the checkbox controlling the link between boundaries was unchecked and we check it, we have to link the boundaries
773+
//This is done by updating all lower ranges to the upper value of the range above
774+
if ( linked )
775+
{
776+
for ( int i = 1;i < mRenderer->ranges().size();++i )
777+
{
778+
mRenderer->updateRangeLowerValue( i, mRenderer->ranges()[i-1].upperValue() );
779+
}
780+
refreshSymbolView();
781+
}
782+
}
783+
723784
void QgsGraduatedSymbolRendererV2Widget::changeCurrentValue( QStandardItem * item )
724785
{
725786
if ( item->column() == 2 )

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ class GUI_EXPORT QgsGraduatedSymbolRendererV2Widget : public QgsRendererV2Widget
9494
void deleteClasses();
9595
/**Removes all classes from the classification*/
9696
void deleteAllClasses();
97+
/**Toggle the link between classes boundaries */
98+
void toggleBoundariesLink( bool linked );
9799

98100
void rotationFieldChanged( QString fldName );
99101
void sizeScaleFieldChanged( QString fldName );
@@ -115,6 +117,8 @@ class GUI_EXPORT QgsGraduatedSymbolRendererV2Widget : public QgsRendererV2Widget
115117
void changeRangeSymbol( int rangeIdx );
116118
void changeRange( int rangeIdx );
117119

120+
QString createLabel( double lowerValue, double upperValue );
121+
118122
void changeSelectedSymbols();
119123

120124
QList<QgsSymbolV2*> selectedSymbols();

‎src/ui/qgsgraduatedsymbolrendererv2widget.ui

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>505</width>
9+
<width>615</width>
1010
<height>339</height>
1111
</rect>
1212
</property>
@@ -240,6 +240,16 @@
240240
</property>
241241
</widget>
242242
</item>
243+
<item>
244+
<widget class="QCheckBox" name="cbxLinkBoundaries">
245+
<property name="text">
246+
<string>Link classes boundaries</string>
247+
</property>
248+
<property name="checked">
249+
<bool>true</bool>
250+
</property>
251+
</widget>
252+
</item>
243253
<item>
244254
<spacer>
245255
<property name="orientation">

0 commit comments

Comments
 (0)
Please sign in to comment.