Skip to content

Commit 340d417

Browse files
committed
Automatic update of label and neighboring ranges boundaries
1 parent 5c5deec commit 340d417

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed

src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp

+61
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,7 @@ QgsGraduatedSymbolRendererV2Widget::QgsGraduatedSymbolRendererV2Widget( QgsVecto
417417
connect( btnGraduatedDelete, SIGNAL( clicked() ), this, SLOT( deleteClasses() ) );
418418
connect( btnDeleteAllClasses, SIGNAL( clicked() ), this, SLOT( deleteAllClasses() ) );
419419
connect( btnGraduatedAdd, SIGNAL( clicked() ), this, SLOT( addClass() ) );
420+
connect( cbxLinkBoundaries, SIGNAL( toggled( bool ) ), this, SLOT( toggleBoundariesLink( bool ) ) );
420421

421422
// initialize from previously set renderer
422423
updateUiFromRenderer();
@@ -702,11 +703,57 @@ void QgsGraduatedSymbolRendererV2Widget::changeRange( int rangeIdx )
702703
{
703704
double lowerValue = dialog.lowerValue().toDouble();
704705
double upperValue = dialog.upperValue().toDouble();
706+
707+
QString label = createLabel( range.lowerValue(), range.upperValue() );
708+
QString newLabel;
709+
705710
mRenderer->updateRangeUpperValue( rangeIdx, upperValue );
706711
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+
}
707749
}
708750
}
709751

752+
QString QgsGraduatedSymbolRendererV2Widget::createLabel( double lowerValue, double upperValue )
753+
{
754+
return QString::number( lowerValue , 'f', 4 ) + " - " + QString::number( upperValue, 'f', 4 );
755+
}
756+
710757
void QgsGraduatedSymbolRendererV2Widget::addClass()
711758
{
712759
mModel->addClass( mGraduatedSymbol );
@@ -723,6 +770,20 @@ void QgsGraduatedSymbolRendererV2Widget::deleteAllClasses()
723770
mModel->removeAllRows();
724771
}
725772

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+
726787
void QgsGraduatedSymbolRendererV2Widget::changeCurrentValue( QStandardItem * item )
727788
{
728789
if ( item->column() == 2 )

src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.h

+4
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

+11-1
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)