Skip to content

Commit acae80e

Browse files
committedSep 18, 2014
WIP
1 parent ab3ff17 commit acae80e

8 files changed

+209
-107
lines changed
 

‎src/core/symbology-ng/qgscategorizedsymbolrendererv2.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ class CORE_EXPORT QgsCategorizedSymbolRendererV2 : public QgsFeatureRendererV2
142142

143143
QgsSymbolV2* sourceSymbol();
144144
void setSourceSymbol( QgsSymbolV2* sym );
145+
//! @note added in 2.5
146+
void updateSymbols( QgsSymbolV2* sym );
145147

146148
QgsVectorColorRampV2* sourceColorRamp();
147149
void setSourceColorRamp( QgsVectorColorRampV2* ramp );
@@ -150,6 +152,9 @@ class CORE_EXPORT QgsCategorizedSymbolRendererV2 : public QgsFeatureRendererV2
150152
bool invertedColorRamp() { return mInvertedColorRamp; }
151153
void setInvertedColorRamp( bool inverted ) { mInvertedColorRamp = inverted; }
152154

155+
// Update the color ramp used. Also updates all symbols colors.
156+
// @note added in 2.5
157+
void updateColorRamp( QgsVectorColorRampV2* ramp, bool inverted = false );
153158
//! @note added in 1.6
154159
void setRotationField( QString fieldOrExpression );
155160
//! @note added in 1.6

‎src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp

Lines changed: 67 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ QgsGraduatedSymbolRendererV2::QgsGraduatedSymbolRendererV2( QString attrName, Qg
163163
mRanges( ranges ),
164164
mMode( Custom ),
165165
mInvertedColorRamp( false ),
166+
mUnits(""),
166167
mScaleMethod( DEFAULT_SCALE_METHOD )
167168
{
168169
// TODO: check ranges for sanity (NULL symbols, invalid ranges)
@@ -331,15 +332,21 @@ bool QgsGraduatedSymbolRendererV2::updateRangeUpperValue( int rangeIndex, double
331332
{
332333
if ( rangeIndex < 0 || rangeIndex >= mRanges.size() )
333334
return false;
334-
mRanges[rangeIndex].setUpperValue( value );
335+
QgsRendererRangeV2 &range=mRanges[rangeIndex];
336+
bool isDefaultLabel= range.label() == defaultRangeLabel(range);
337+
range.setUpperValue( value );
338+
if( isDefaultLabel ) range.setLabel(defaultRangeLabel(range));
335339
return true;
336340
}
337341

338342
bool QgsGraduatedSymbolRendererV2::updateRangeLowerValue( int rangeIndex, double value )
339343
{
340344
if ( rangeIndex < 0 || rangeIndex >= mRanges.size() )
341345
return false;
342-
mRanges[rangeIndex].setLowerValue( value );
346+
QgsRendererRangeV2 &range=mRanges[rangeIndex];
347+
bool isDefaultLabel= range.label() == defaultRangeLabel(range);
348+
range.setLowerValue( value );
349+
if( isDefaultLabel ) range.setLabel(defaultRangeLabel(range));
343350
return true;
344351
}
345352

@@ -351,6 +358,11 @@ bool QgsGraduatedSymbolRendererV2::updateRangeRenderState( int rangeIndex, bool
351358
return true;
352359
}
353360

361+
QString QgsGraduatedSymbolRendererV2::defaultRangeLabel(const QgsRendererRangeV2 & range )
362+
{
363+
return QString::number( range.lowerValue(), 'f', 4 ) + " - " + QString::number( range.upperValue(), 'f', 4 ) + mUnits;
364+
}
365+
354366
QString QgsGraduatedSymbolRendererV2::dump() const
355367
{
356368
QString s = QString( "GRADUATED: attr %1\n" ).arg( mAttrName );
@@ -374,6 +386,7 @@ QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::clone() const
374386
r->setRotationField( rotationField() );
375387
r->setSizeScaleField( sizeScaleField() );
376388
r->setScaleMethod( scaleMethod() );
389+
r->setUnits( units(), false );
377390
return r;
378391
}
379392

@@ -800,7 +813,8 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::createRenderer(
800813
Mode mode,
801814
QgsSymbolV2* symbol,
802815
QgsVectorColorRampV2* ramp,
803-
bool inverted )
816+
bool inverted,
817+
QString units )
804818
{
805819
if ( classes < 1 )
806820
return NULL;
@@ -890,12 +904,30 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::createRenderer(
890904
double lower, upper = minimum;
891905
QString label;
892906

907+
QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( attrName, ranges );
908+
r->setSourceSymbol( symbol->clone() );
909+
r->setSourceColorRamp( ramp->clone() );
910+
r->setInvertedColorRamp( inverted );
911+
r->setMode( mode );
912+
r->setUnits( units );
913+
893914
// "breaks" list contains all values at class breaks plus maximum as last break
894915
int i = 0;
895916
for ( QList<double>::iterator it = breaks.begin(); it != breaks.end(); ++it, ++i )
896917
{
897918
lower = upper; // upper border from last interval
898919
upper = *it;
920+
921+
// Symbol based on range
922+
QgsSymbolV2* newSymbol = symbol->clone();
923+
double colorValue;
924+
if ( inverted ) colorValue = ( breaks.count() > 1 ? ( double )( breaks.count() - i - 1 ) / ( breaks.count() - 1 ) : 0 );
925+
else colorValue = ( breaks.count() > 1 ? ( double ) i / ( breaks.count() - 1 ) : 0 );
926+
newSymbol->setColor( ramp->color( colorValue ) ); // color from (0 / cl-1) to (cl-1 / cl-1)
927+
928+
QgsRendererRangeV2 range = QgsRendererRangeV2( lower, upper, newSymbol, "" );
929+
930+
// Label - either StdDev label or default label for a range
899931
if ( mode == StdDev )
900932
{
901933
if ( i == 0 )
@@ -913,26 +945,18 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::createRenderer(
913945
}
914946
else
915947
{
916-
label = QString::number( lower, 'f', 4 ) + " - " + QString::number( upper, 'f', 4 );
948+
label=r->defaultRangeLabel(range);
917949
}
950+
range.setLabel(label);
918951

919-
QgsSymbolV2* newSymbol = symbol->clone();
920-
double colorValue;
921-
if ( inverted ) colorValue = ( breaks.count() > 1 ? ( double )( breaks.count() - i - 1 ) / ( breaks.count() - 1 ) : 0 );
922-
else colorValue = ( breaks.count() > 1 ? ( double ) i / ( breaks.count() - 1 ) : 0 );
923-
newSymbol->setColor( ramp->color( colorValue ) ); // color from (0 / cl-1) to (cl-1 / cl-1)
924-
925-
ranges.append( QgsRendererRangeV2( lower, upper, newSymbol, label ) );
952+
r->addClass( range );
926953
}
927954

928-
QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( attrName, ranges );
929-
r->setSourceSymbol( symbol->clone() );
930-
r->setSourceColorRamp( ramp->clone() );
931-
r->setInvertedColorRamp( inverted );
932-
r->setMode( mode );
933955
return r;
934956
}
935957

958+
959+
936960
QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::create( QDomElement& element )
937961
{
938962
QDomElement symbolsElem = element.firstChildElement( "symbols" );
@@ -1019,6 +1043,12 @@ QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::create( QDomElement& element
10191043
r->setSizeScaleField( sizeScaleElem.attribute( "field" ) );
10201044
r->setScaleMethod( QgsSymbolLayerV2Utils::decodeScaleMethod( sizeScaleElem.attribute( "scalemethod" ) ) );
10211045

1046+
QDomElement unitsElem = element.firstChildElement( "units" );
1047+
if( ! unitsElem.isNull() )
1048+
{
1049+
QString unitString=unitsElem.attribute("name");
1050+
r->setUnits(unitString, false);
1051+
}
10221052
// TODO: symbol levels
10231053
return r;
10241054
}
@@ -1106,6 +1136,10 @@ QDomElement QgsGraduatedSymbolRendererV2::save( QDomDocument& doc )
11061136
sizeScaleElem.setAttribute( "scalemethod", QgsSymbolLayerV2Utils::encodeScaleMethod( mScaleMethod ) );
11071137
rendererElem.appendChild( sizeScaleElem );
11081138

1139+
QDomElement unitsElem=doc.createElement("units");
1140+
unitsElem.setAttribute("name",mUnits);
1141+
rendererElem.appendChild( unitsElem );
1142+
11091143
return rendererElem;
11101144
}
11111145

@@ -1244,7 +1278,6 @@ void QgsGraduatedSymbolRendererV2::addClass( QgsSymbolV2* symbol )
12441278
QgsSymbolV2* newSymbol = symbol->clone();
12451279
QString label = "0.0 - 0.0";
12461280
mRanges.insert( 0, QgsRendererRangeV2( 0.0, 0.0, newSymbol, label ) );
1247-
12481281
}
12491282

12501283
void QgsGraduatedSymbolRendererV2::addClass( QgsRendererRangeV2 range )
@@ -1262,6 +1295,23 @@ void QgsGraduatedSymbolRendererV2::deleteAllClasses()
12621295
mRanges.clear();
12631296
}
12641297

1298+
void QgsGraduatedSymbolRendererV2::setUnits( QString units, bool updateRanges )
1299+
{
1300+
if( updateRanges )
1301+
{
1302+
for ( QgsRangeList::iterator it = mRanges.begin(); it != mRanges.end(); ++it )
1303+
{
1304+
QString label=it->label();
1305+
if( label.endsWith(mUnits))
1306+
{
1307+
label=label.left(label.length()-mUnits.length())+units;
1308+
it->setLabel(label);
1309+
}
1310+
}
1311+
}
1312+
mUnits=units;
1313+
}
1314+
12651315
void QgsGraduatedSymbolRendererV2::moveClass( int from, int to )
12661316
{
12671317
if ( from < 0 || from >= mRanges.size() || to < 0 || to >= mRanges.size() ) return;

‎src/core/symbology-ng/qgsgraduatedsymbolrendererv2.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ class CORE_EXPORT QgsGraduatedSymbolRendererV2 : public QgsFeatureRendererV2
104104
bool updateRangeLowerValue( int rangeIndex, double value );
105105
//! @note added in 2.5
106106
bool updateRangeRenderState( int rangeIndex, bool render );
107+
QString defaultRangeLabel( const QgsRendererRangeV2 &range );
107108

108109

109110
void addClass( QgsSymbolV2* symbol );
@@ -131,14 +132,18 @@ class CORE_EXPORT QgsGraduatedSymbolRendererV2 : public QgsFeatureRendererV2
131132
Mode mode() const { return mMode; }
132133
void setMode( Mode mode ) { mMode = mode; }
133134

135+
QString units() const { return mUnits; }
136+
void setUnits( QString units, bool updateRanges=true );
137+
134138
static QgsGraduatedSymbolRendererV2* createRenderer(
135139
QgsVectorLayer* vlayer,
136140
QString attrName,
137141
int classes,
138142
Mode mode,
139143
QgsSymbolV2* symbol,
140144
QgsVectorColorRampV2* ramp,
141-
bool inverted = false );
145+
bool inverted = false,
146+
QString units = "");
142147

143148
//! create renderer from XML element
144149
static QgsFeatureRendererV2* create( QDomElement& element );
@@ -209,6 +214,7 @@ class CORE_EXPORT QgsGraduatedSymbolRendererV2 : public QgsFeatureRendererV2
209214

210215
protected:
211216
QString mAttrName;
217+
QString mUnits;
212218
QgsRangeList mRanges;
213219
Mode mMode;
214220
QScopedPointer<QgsSymbolV2> mSourceSymbol;

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

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,11 @@ void QgsCategorizedSymbolRendererV2Model::sort( int column, Qt::SortOrder order
338338
QgsDebugMsg( "Done" );
339339
}
340340

341+
void QgsCategorizedSymbolRendererV2Model::updateSymbology()
342+
{
343+
emit dataChanged( createIndex( 0, 0, 0 ), createIndex( mRenderer->categories().size(), 0 ) );
344+
}
345+
341346
// ------------------------------ View style --------------------------------
342347
QgsCategorizedSymbolRendererV2ViewStyle::QgsCategorizedSymbolRendererV2ViewStyle( QStyle* style )
343348
: QProxyStyle( style )
@@ -428,6 +433,8 @@ QgsCategorizedSymbolRendererV2Widget::QgsCategorizedSymbolRendererV2Widget( QgsV
428433
connect( btnDeleteCategories, SIGNAL( clicked() ), this, SLOT( deleteCategories() ) );
429434
connect( btnDeleteAllCategories, SIGNAL( clicked() ), this, SLOT( deleteAllCategories() ) );
430435
connect( btnAddCategory, SIGNAL( clicked() ), this, SLOT( addCategory() ) );
436+
connect( cbxInvertedColorRamp, SIGNAL( toggled(bool)), this, SLOT( applyColorRamp()));
437+
connect( cboCategorizedColorRamp, SIGNAL(currentIndexChanged(int)), this, SLOT( applyColorRamp()));
431438

432439
// update GUI from renderer
433440
updateUiFromRenderer();
@@ -585,7 +592,7 @@ void QgsCategorizedSymbolRendererV2Widget::changeCategorySymbol()
585592
mRenderer->updateCategorySymbol( catIdx, symbol );
586593
}
587594

588-
static void _createCategories( QgsCategoryList& cats, QList<QVariant>& values, QgsSymbolV2* symbol, QgsVectorColorRampV2* ramp, bool invert )
595+
static void _createCategories( QgsCategoryList& cats, QList<QVariant>& values, QgsSymbolV2* symbol )
589596
{
590597
// sort the categories first
591598
QgsSymbolLayerV2Utils::sortVariantList( values, Qt::AscendingOrder );
@@ -601,9 +608,7 @@ static void _createCategories( QgsCategoryList& cats, QList<QVariant>& values, Q
601608
{
602609
hasNull = true;
603610
}
604-
double x = ( invert ? num - i : i ) / ( double ) num;
605611
QgsSymbolV2* newSymbol = symbol->clone();
606-
newSymbol->setColor( ramp->color( x ) );
607612

608613
cats.append( QgsRendererCategoryV2( value, newSymbol, value.toString(), true ) );
609614
}
@@ -612,11 +617,34 @@ static void _createCategories( QgsCategoryList& cats, QList<QVariant>& values, Q
612617
if ( !hasNull )
613618
{
614619
QgsSymbolV2* newSymbol = symbol->clone();
615-
newSymbol->setColor( ramp->color( invert ? 0 : 1 ) );
616620
cats.append( QgsRendererCategoryV2( QVariant( "" ), newSymbol, QString(), true ) );
617621
}
618622
}
619623

624+
void QgsCategorizedSymbolRendererV2Widget::applyColorRampToCategories(const QgsCategoryList& cats )
625+
{
626+
627+
QgsVectorColorRampV2* ramp = cboCategorizedColorRamp->currentColorRamp();
628+
bool invert = cbxInvertedColorRamp->isChecked();
629+
630+
if ( ramp == NULL )
631+
{
632+
if ( cboCategorizedColorRamp->count() == 0 )
633+
QMessageBox::critical( this, tr( "Error" ), tr( "There are no available color ramps. You can add them in Style Manager." ) );
634+
else
635+
QMessageBox::critical( this, tr( "Error" ), tr( "The selected color ramp is not available." ) );
636+
return;
637+
}
638+
639+
int num=cats.length()-1;
640+
for( int i=0; i <= num; i++ )
641+
{
642+
double x = ( invert ? num - i : i ) / ( double ) num;
643+
cats.at(i).symbol()->setColor(ramp->color( x ) );
644+
}
645+
646+
}
647+
620648
void QgsCategorizedSymbolRendererV2Widget::addCategories()
621649
{
622650
QString attrName = mExpressionWidget->currentField();
@@ -661,20 +689,8 @@ void QgsCategorizedSymbolRendererV2Widget::addCategories()
661689
return;
662690
#endif
663691

664-
QgsVectorColorRampV2* ramp = cboCategorizedColorRamp->currentColorRamp();
665-
666-
if ( ramp == NULL )
667-
{
668-
if ( cboCategorizedColorRamp->count() == 0 )
669-
QMessageBox::critical( this, tr( "Error" ), tr( "There are no available color ramps. You can add them in Style Manager." ) );
670-
else
671-
QMessageBox::critical( this, tr( "Error" ), tr( "The selected color ramp is not available." ) );
672-
return;
673-
}
674-
675692
QgsCategoryList cats;
676-
_createCategories( cats, unique_vals, mCategorizedSymbol, ramp, cbxInvertedColorRamp->isChecked() );
677-
693+
_createCategories( cats, unique_vals, mCategorizedSymbol );
678694
bool deleteExisting = false;
679695

680696
if ( !mOldClassificationAttribute.isEmpty() &&
@@ -736,7 +752,9 @@ void QgsCategorizedSymbolRendererV2Widget::addCategories()
736752
// recreate renderer
737753
QgsCategorizedSymbolRendererV2 *r = new QgsCategorizedSymbolRendererV2( attrName, cats );
738754
r->setSourceSymbol( mCategorizedSymbol->clone() );
739-
r->setSourceColorRamp( ramp->clone() );
755+
QgsVectorColorRampV2* ramp = cboCategorizedColorRamp->currentColorRamp();
756+
if( ramp ) r->setSourceColorRamp( ramp->clone() );
757+
r->setInvertedColorRamp( cbxInvertedColorRamp->isChecked() );
740758
r->setScaleMethod( mRenderer->scaleMethod() );
741759
r->setSizeScaleField( mRenderer->sizeScaleField() );
742760
r->setRotationField( mRenderer->rotationField() );
@@ -750,6 +768,16 @@ void QgsCategorizedSymbolRendererV2Widget::addCategories()
750768
mRenderer = r;
751769
}
752770

771+
void QgsCategorizedSymbolRendererV2Widget::applyColorRamp()
772+
{
773+
const QgsCategoryList& categories=mRenderer->categories();
774+
if( categories.length() > 0 )
775+
{
776+
applyColorRampToCategories( categories );
777+
mModel->updateSymbology();
778+
}
779+
}
780+
753781
int QgsCategorizedSymbolRendererV2Widget::currentCategoryRow()
754782
{
755783
QModelIndex idx = viewCategories->selectionModel()->currentIndex();

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class GUI_EXPORT QgsCategorizedSymbolRendererV2Model : public QAbstractItemModel
5050
void deleteRows( QList<int> rows );
5151
void removeAllRows( );
5252
void sort( int column, Qt::SortOrder order = Qt::AscendingOrder );
53+
void updateSymbology();
5354

5455
signals:
5556
void rowsMoved();
@@ -85,6 +86,7 @@ class GUI_EXPORT QgsCategorizedSymbolRendererV2Widget : public QgsRendererV2Widg
8586
void categoriesDoubleClicked( const QModelIndex & idx );
8687
void addCategory();
8788
void addCategories();
89+
void applyColorRamp();
8890
void deleteCategories();
8991
void deleteAllCategories();
9092

@@ -116,6 +118,8 @@ class GUI_EXPORT QgsCategorizedSymbolRendererV2Widget : public QgsRendererV2Widg
116118

117119
void changeCategorySymbol();
118120

121+
void applyColorRampToCategories( const QgsCategoryList& cats );
122+
119123
QList<QgsSymbolV2*> selectedSymbols();
120124
QgsCategoryList selectedCategoryList();
121125
void refreshSymbolView() { populateCategories(); }

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

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,16 @@ void QgsGraduatedSymbolRendererV2Model::sort( int column, Qt::SortOrder order )
330330
QgsDebugMsg( "Done" );
331331
}
332332

333+
void QgsGraduatedSymbolRendererV2Model::updateSymbology()
334+
{
335+
emit dataChanged( createIndex( 0, 0, 0 ), createIndex( mRenderer->ranges().size(), 0 ) );
336+
}
337+
338+
void QgsGraduatedSymbolRendererV2Model::updateLabels()
339+
{
340+
emit dataChanged( createIndex( 0, 2 ), createIndex( mRenderer->ranges().size(), 2 ) );
341+
}
342+
333343
// ------------------------------ View style --------------------------------
334344
QgsGraduatedSymbolRendererV2ViewStyle::QgsGraduatedSymbolRendererV2ViewStyle( QStyle* style )
335345
: QProxyStyle( style )
@@ -422,6 +432,8 @@ QgsGraduatedSymbolRendererV2Widget::QgsGraduatedSymbolRendererV2Widget( QgsVecto
422432
connect( spinGraduatedClasses, SIGNAL( valueChanged( int ) ) , this, SLOT( classifyGraduated() ) );
423433
connect( cboGraduatedMode, SIGNAL( currentIndexChanged( int ) ) , this, SLOT( classifyGraduated() ) );
424434
connect( cboGraduatedColorRamp, SIGNAL( currentIndexChanged( int ) ) , this, SLOT( reapplyColorRamp() ) );
435+
connect( cbxInvertedColorRamp, SIGNAL( toggled( bool ) ) , this, SLOT( reapplyColorRamp() ) );
436+
connect( txtUnits, SIGNAL( textChanged(QString)), this, SLOT(unitsChanged(QString)));
425437

426438
// menus for data-defined rotation/size
427439
QMenu* advMenu = new QMenu;
@@ -478,6 +490,8 @@ void QgsGraduatedSymbolRendererV2Widget::updateUiFromRenderer()
478490
cboGraduatedColorRamp->setSourceColorRamp( mRenderer->sourceColorRamp() );
479491
cbxInvertedColorRamp->setChecked( mRenderer->invertedColorRamp() );
480492
}
493+
494+
txtUnits->setText( mRenderer->units() );
481495
}
482496

483497
void QgsGraduatedSymbolRendererV2Widget::graduatedColumnChanged( QString field )
@@ -526,7 +540,8 @@ void QgsGraduatedSymbolRendererV2Widget::classifyGraduated()
526540
// create and set new renderer
527541
QApplication::setOverrideCursor( Qt::WaitCursor );
528542
QgsGraduatedSymbolRendererV2* r = QgsGraduatedSymbolRendererV2::createRenderer(
529-
mLayer, attrName, classes, mode, mGraduatedSymbol, ramp, cbxInvertedColorRamp->isChecked() );
543+
mLayer, attrName, classes, mode, mGraduatedSymbol, ramp,
544+
cbxInvertedColorRamp->isChecked(), txtUnits->text() );
530545
QApplication::restoreOverrideCursor();
531546
if ( !r )
532547
{
@@ -700,57 +715,25 @@ void QgsGraduatedSymbolRendererV2Widget::changeRange( int rangeIdx )
700715
{
701716
double lowerValue = dialog.lowerValue().toDouble();
702717
double upperValue = dialog.upperValue().toDouble();
703-
704-
QString label = createLabel( range.lowerValue(), range.upperValue() );
705-
QString newLabel;
706-
707718
mRenderer->updateRangeUpperValue( rangeIdx, upperValue );
708719
mRenderer->updateRangeLowerValue( rangeIdx, lowerValue );
709720

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-
717721
//If the boundaries have to stay linked, we update the ranges above and below, as well as their label if needed
718722
if ( cbxLinkBoundaries->isChecked() )
719723
{
720724
if ( rangeIdx > 0 )
721725
{
722-
const QgsRendererRangeV2& rangeLower = mRenderer->ranges()[rangeIdx - 1];
723-
label = createLabel( rangeLower.lowerValue(), rangeLower.upperValue() );
724726
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-
}
731727
}
732728

733729
if ( rangeIdx < mRenderer->ranges().size() - 1 )
734730
{
735-
const QgsRendererRangeV2& rangeUpper = mRenderer->ranges()[rangeIdx + 1];
736-
label = createLabel( rangeUpper.lowerValue(), rangeUpper.upperValue() );
737731
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-
}
744732
}
745733
}
746734
}
747735
}
748736

749-
QString QgsGraduatedSymbolRendererV2Widget::createLabel( double lowerValue, double upperValue )
750-
{
751-
return QString::number( lowerValue , 'f', 4 ) + " - " + QString::number( upperValue, 'f', 4 );
752-
}
753-
754737
void QgsGraduatedSymbolRendererV2Widget::addClass()
755738
{
756739
mModel->addClass( mGraduatedSymbol );
@@ -806,6 +789,12 @@ void QgsGraduatedSymbolRendererV2Widget::scaleMethodChanged( QgsSymbolV2::ScaleM
806789
mRenderer->setScaleMethod( scaleMethod );
807790
}
808791

792+
void QgsGraduatedSymbolRendererV2Widget::unitsChanged(QString units)
793+
{
794+
mRenderer->setUnits(units);
795+
mModel->updateLabels();
796+
}
797+
809798
QList<QgsSymbolV2*> QgsGraduatedSymbolRendererV2Widget::selectedSymbols()
810799
{
811800
QList<QgsSymbolV2*> selectedSymbols;
@@ -851,6 +840,10 @@ QgsSymbolV2* QgsGraduatedSymbolRendererV2Widget::findSymbolForRange( double lowe
851840

852841
void QgsGraduatedSymbolRendererV2Widget::refreshSymbolView()
853842
{
843+
if( mModel )
844+
{
845+
mModel->updateSymbology();
846+
}
854847
}
855848

856849
void QgsGraduatedSymbolRendererV2Widget::showSymbolLevels()

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ class GUI_EXPORT QgsGraduatedSymbolRendererV2Model : public QAbstractItemModel
4949
void deleteRows( QList<int> rows );
5050
void removeAllRows( );
5151
void sort( int column, Qt::SortOrder order = Qt::AscendingOrder );
52+
void updateSymbology();
53+
void updateLabels();
5254

5355
signals:
5456
void rowsMoved();
@@ -100,6 +102,7 @@ class GUI_EXPORT QgsGraduatedSymbolRendererV2Widget : public QgsRendererV2Widget
100102
void rotationFieldChanged( QString fldName );
101103
void sizeScaleFieldChanged( QString fldName );
102104
void scaleMethodChanged( QgsSymbolV2::ScaleMethod scaleMethod );
105+
void unitsChanged( QString units );
103106

104107
void showSymbolLevels();
105108

@@ -117,8 +120,6 @@ class GUI_EXPORT QgsGraduatedSymbolRendererV2Widget : public QgsRendererV2Widget
117120
void changeRangeSymbol( int rangeIdx );
118121
void changeRange( int rangeIdx );
119122

120-
QString createLabel( double lowerValue, double upperValue );
121-
122123
void changeSelectedSymbols();
123124

124125
QList<QgsSymbolV2*> selectedSymbols();

‎src/ui/qgsgraduatedsymbolrendererv2widget.ui

Lines changed: 51 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,20 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>615</width>
9+
<width>637</width>
1010
<height>339</height>
1111
</rect>
1212
</property>
1313
<layout class="QVBoxLayout" name="verticalLayout">
14-
<property name="leftMargin">
15-
<number>0</number>
16-
</property>
17-
<property name="topMargin">
18-
<number>0</number>
19-
</property>
20-
<property name="rightMargin">
21-
<number>0</number>
22-
</property>
23-
<property name="bottomMargin">
14+
<property name="margin">
2415
<number>0</number>
2516
</property>
2617
<item>
2718
<layout class="QGridLayout">
28-
<item row="5" column="0">
29-
<widget class="QLabel" name="label_7">
30-
<property name="text">
31-
<string>Color ramp</string>
32-
</property>
33-
<property name="buddy">
34-
<cstring>cboGraduatedColorRamp</cstring>
35-
</property>
36-
</widget>
37-
</item>
38-
<item row="5" column="2">
19+
<property name="rightMargin">
20+
<number>6</number>
21+
</property>
22+
<item row="6" column="2">
3923
<widget class="QLabel" name="label_8">
4024
<property name="text">
4125
<string>Mode</string>
@@ -48,7 +32,17 @@
4832
</property>
4933
</widget>
5034
</item>
51-
<item row="5" column="3">
35+
<item row="6" column="0">
36+
<widget class="QLabel" name="label_7">
37+
<property name="text">
38+
<string>Color ramp</string>
39+
</property>
40+
<property name="buddy">
41+
<cstring>cboGraduatedColorRamp</cstring>
42+
</property>
43+
</widget>
44+
</item>
45+
<item row="6" column="3">
5246
<widget class="QComboBox" name="cboGraduatedMode">
5347
<item>
5448
<property name="text">
@@ -77,7 +71,7 @@
7771
</item>
7872
</widget>
7973
</item>
80-
<item row="4" column="0">
74+
<item row="5" column="0">
8175
<widget class="QLabel" name="label_6">
8276
<property name="text">
8377
<string>Symbol</string>
@@ -87,7 +81,7 @@
8781
</property>
8882
</widget>
8983
</item>
90-
<item row="4" column="1">
84+
<item row="5" column="1">
9185
<widget class="QPushButton" name="btnChangeGraduatedSymbol">
9286
<property name="sizePolicy">
9387
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -100,7 +94,7 @@
10094
</property>
10195
</widget>
10296
</item>
103-
<item row="4" column="3">
97+
<item row="5" column="3">
10498
<widget class="QSpinBox" name="spinGraduatedClasses">
10599
<property name="sizePolicy">
106100
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -119,7 +113,7 @@
119113
</property>
120114
</widget>
121115
</item>
122-
<item row="4" column="2">
116+
<item row="5" column="2">
123117
<widget class="QLabel" name="label_5">
124118
<property name="text">
125119
<string>Classes</string>
@@ -132,14 +126,7 @@
132126
</property>
133127
</widget>
134128
</item>
135-
<item row="0" column="0">
136-
<widget class="QLabel" name="label_4">
137-
<property name="text">
138-
<string>Column</string>
139-
</property>
140-
</widget>
141-
</item>
142-
<item row="5" column="1">
129+
<item row="6" column="1">
143130
<layout class="QHBoxLayout" name="horizontalLayout_2">
144131
<item>
145132
<widget class="QgsColorRampComboBox" name="cboGraduatedColorRamp"/>
@@ -153,7 +140,23 @@
153140
</item>
154141
</layout>
155142
</item>
156-
<item row="0" column="1" colspan="3">
143+
<item row="2" column="3">
144+
<widget class="QLineEdit" name="txtUnits"/>
145+
</item>
146+
<item row="2" column="2">
147+
<widget class="QLabel" name="label">
148+
<property name="text">
149+
<string>Units</string>
150+
</property>
151+
<property name="alignment">
152+
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
153+
</property>
154+
<property name="buddy">
155+
<cstring>txtUnits</cstring>
156+
</property>
157+
</widget>
158+
</item>
159+
<item row="2" column="1">
157160
<layout class="QHBoxLayout" name="horizontalLayout">
158161
<property name="topMargin">
159162
<number>0</number>
@@ -183,6 +186,13 @@
183186
</item>
184187
</layout>
185188
</item>
189+
<item row="2" column="0">
190+
<widget class="QLabel" name="label_4">
191+
<property name="text">
192+
<string>Column</string>
193+
</property>
194+
</widget>
195+
</item>
186196
</layout>
187197
</item>
188198
<item>
@@ -291,11 +301,16 @@
291301
<tabstop>btnChangeGraduatedSymbol</tabstop>
292302
<tabstop>cboGraduatedColorRamp</tabstop>
293303
<tabstop>cbxInvertedColorRamp</tabstop>
304+
<tabstop>txtUnits</tabstop>
294305
<tabstop>spinGraduatedClasses</tabstop>
295306
<tabstop>cboGraduatedMode</tabstop>
296307
<tabstop>viewGraduated</tabstop>
297308
<tabstop>btnGraduatedClassify</tabstop>
309+
<tabstop>btnGraduatedAdd</tabstop>
298310
<tabstop>btnGraduatedDelete</tabstop>
311+
<tabstop>btnDeleteAllClasses</tabstop>
312+
<tabstop>cbxLinkBoundaries</tabstop>
313+
<tabstop>btnAdvanced</tabstop>
299314
</tabstops>
300315
<resources/>
301316
<connections/>

0 commit comments

Comments
 (0)
Please sign in to comment.