@@ -414,6 +414,7 @@ QgsGraduatedSymbolRendererV2Widget::QgsGraduatedSymbolRendererV2Widget( QgsVecto
414
414
connect ( btnGraduatedDelete, SIGNAL ( clicked () ), this , SLOT ( deleteClasses () ) );
415
415
connect ( btnDeleteAllClasses, SIGNAL ( clicked () ), this , SLOT ( deleteAllClasses () ) );
416
416
connect ( btnGraduatedAdd, SIGNAL ( clicked () ), this , SLOT ( addClass () ) );
417
+ connect ( cbxLinkBoundaries, SIGNAL ( toggled ( bool ) ), this , SLOT ( toggleBoundariesLink ( bool ) ) );
417
418
418
419
// initialize from previously set renderer
419
420
updateUiFromRenderer ();
@@ -699,11 +700,57 @@ void QgsGraduatedSymbolRendererV2Widget::changeRange( int rangeIdx )
699
700
{
700
701
double lowerValue = dialog.lowerValue ().toDouble ();
701
702
double upperValue = dialog.upperValue ().toDouble ();
703
+
704
+ QString label = createLabel ( range.lowerValue (), range.upperValue () );
705
+ QString newLabel;
706
+
702
707
mRenderer ->updateRangeUpperValue ( rangeIdx, upperValue );
703
708
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
+ }
704
746
}
705
747
}
706
748
749
+ QString QgsGraduatedSymbolRendererV2Widget::createLabel ( double lowerValue, double upperValue )
750
+ {
751
+ return QString::number ( lowerValue , ' f' , 4 ) + " - " + QString::number ( upperValue, ' f' , 4 );
752
+ }
753
+
707
754
void QgsGraduatedSymbolRendererV2Widget::addClass ()
708
755
{
709
756
mModel ->addClass ( mGraduatedSymbol );
@@ -720,6 +767,20 @@ void QgsGraduatedSymbolRendererV2Widget::deleteAllClasses()
720
767
mModel ->removeAllRows ();
721
768
}
722
769
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
+
723
784
void QgsGraduatedSymbolRendererV2Widget::changeCurrentValue ( QStandardItem * item )
724
785
{
725
786
if ( item->column () == 2 )
0 commit comments