@@ -417,6 +417,7 @@ QgsGraduatedSymbolRendererV2Widget::QgsGraduatedSymbolRendererV2Widget( QgsVecto
417
417
connect ( btnGraduatedDelete, SIGNAL ( clicked () ), this , SLOT ( deleteClasses () ) );
418
418
connect ( btnDeleteAllClasses, SIGNAL ( clicked () ), this , SLOT ( deleteAllClasses () ) );
419
419
connect ( btnGraduatedAdd, SIGNAL ( clicked () ), this , SLOT ( addClass () ) );
420
+ connect ( cbxLinkBoundaries, SIGNAL ( toggled ( bool ) ), this , SLOT ( toggleBoundariesLink ( bool ) ) );
420
421
421
422
// initialize from previously set renderer
422
423
updateUiFromRenderer ();
@@ -702,11 +703,57 @@ void QgsGraduatedSymbolRendererV2Widget::changeRange( int rangeIdx )
702
703
{
703
704
double lowerValue = dialog.lowerValue ().toDouble ();
704
705
double upperValue = dialog.upperValue ().toDouble ();
706
+
707
+ QString label = createLabel ( range.lowerValue (), range.upperValue () );
708
+ QString newLabel;
709
+
705
710
mRenderer ->updateRangeUpperValue ( rangeIdx, upperValue );
706
711
mRenderer ->updateRangeLowerValue ( rangeIdx, lowerValue );
712
+
713
+ // If the label was the label automatically generated, we generate a new one for the new range
714
+ if ( range.label () == label )
715
+ {
716
+ newLabel = createLabel ( lowerValue, upperValue );
717
+ mRenderer ->updateRangeLabel ( rangeIdx, newLabel );
718
+ }
719
+
720
+ // If the boundaries have to stay linked, we update the ranges above and below, as well as their label if needed
721
+ if ( cbxLinkBoundaries->isChecked () )
722
+ {
723
+ if ( rangeIdx > 0 )
724
+ {
725
+ const QgsRendererRangeV2& rangeLower = mRenderer ->ranges ()[rangeIdx - 1 ];
726
+ label = createLabel ( rangeLower.lowerValue (), rangeLower.upperValue () );
727
+ mRenderer ->updateRangeUpperValue ( rangeIdx - 1 , lowerValue );
728
+
729
+ if ( label == rangeLower.label () )
730
+ {
731
+ newLabel = createLabel ( rangeLower.lowerValue (), lowerValue );
732
+ mRenderer ->updateRangeLabel ( rangeIdx - 1 , newLabel );
733
+ }
734
+ }
735
+
736
+ if ( rangeIdx < mRenderer ->ranges ().size () - 1 )
737
+ {
738
+ const QgsRendererRangeV2& rangeUpper = mRenderer ->ranges ()[rangeIdx + 1 ];
739
+ label = createLabel ( rangeUpper.lowerValue (), rangeUpper.upperValue () );
740
+ mRenderer ->updateRangeLowerValue ( rangeIdx + 1 , upperValue );
741
+
742
+ if ( label == rangeUpper.label () )
743
+ {
744
+ newLabel = createLabel ( upperValue, rangeUpper.upperValue () );
745
+ mRenderer ->updateRangeLabel ( rangeIdx + 1 , newLabel );
746
+ }
747
+ }
748
+ }
707
749
}
708
750
}
709
751
752
+ QString QgsGraduatedSymbolRendererV2Widget::createLabel ( double lowerValue, double upperValue )
753
+ {
754
+ return QString::number ( lowerValue , ' f' , 4 ) + " - " + QString::number ( upperValue, ' f' , 4 );
755
+ }
756
+
710
757
void QgsGraduatedSymbolRendererV2Widget::addClass ()
711
758
{
712
759
mModel ->addClass ( mGraduatedSymbol );
@@ -723,6 +770,20 @@ void QgsGraduatedSymbolRendererV2Widget::deleteAllClasses()
723
770
mModel ->removeAllRows ();
724
771
}
725
772
773
+ void QgsGraduatedSymbolRendererV2Widget::toggleBoundariesLink ( bool linked )
774
+ {
775
+ // If the checkbox controlling the link between boundaries was unchecked and we check it, we have to link the boundaries
776
+ // This is done by updating all lower ranges to the upper value of the range above
777
+ if ( linked )
778
+ {
779
+ for ( int i = 1 ;i < mRenderer ->ranges ().size ();++i )
780
+ {
781
+ mRenderer ->updateRangeLowerValue ( i, mRenderer ->ranges ()[i-1 ].upperValue () );
782
+ }
783
+ refreshSymbolView ();
784
+ }
785
+ }
786
+
726
787
void QgsGraduatedSymbolRendererV2Widget::changeCurrentValue ( QStandardItem * item )
727
788
{
728
789
if ( item->column () == 2 )
0 commit comments