Skip to content

Commit 04e8f61

Browse files
author
mhugent
committedJun 30, 2009
Fix for bug #983, numerical ranges in graduated symbol
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@10989 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 70646ab commit 04e8f61

File tree

1 file changed

+51
-25
lines changed

1 file changed

+51
-25
lines changed
 

‎src/app/qgsgraduatedsymboldialog.cpp

Lines changed: 51 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,10 @@ QgsGraduatedSymbolDialog::QgsGraduatedSymbolDialog( QgsVectorLayer * layer ): QD
3636
setOrientation( Qt::Vertical );
3737

3838
//find out the numerical fields of mVectorLayer
39-
QgsVectorDataProvider *provider = mVectorLayer->dataProvider();
40-
if ( provider )
41-
{
42-
const QgsFieldMap & fields = provider->fields();
43-
QString str;
39+
const QgsFieldMap & fields = layer->pendingFields();
40+
QString str;
4441

45-
for ( QgsFieldMap::const_iterator it = fields.begin();
46-
it != fields.end();
47-
++it )
42+
for ( QgsFieldMap::const_iterator it = fields.begin(); it != fields.end(); ++it )
4843
{
4944
QVariant::Type type = ( *it ).type();
5045
if ( type == QVariant::Int || type == QVariant::Double )
@@ -53,12 +48,6 @@ QgsGraduatedSymbolDialog::QgsGraduatedSymbolDialog( QgsVectorLayer * layer ): QD
5348
mFieldMap.insert( std::make_pair( it->name(), it.key() ) );
5449
}
5550
}
56-
}
57-
else
58-
{
59-
QgsDebugMsg( "Warning, data provider is null" );
60-
return;
61-
}
6251

6352
//restore the correct settings
6453
const QgsGraduatedSymbolRenderer* renderer = dynamic_cast < const QgsGraduatedSymbolRenderer * >( layer->renderer() );
@@ -340,6 +329,8 @@ void QgsGraduatedSymbolDialog::adjustClassification()
340329
}
341330

342331
QString listBoxText;
332+
QString lowerString, upperString;
333+
343334
if ( modeComboBox->currentText() == tr( "Quantiles" ) )
344335
{
345336
//test: insert the values into mClassListWidget
@@ -353,13 +344,32 @@ void QgsGraduatedSymbolDialog::adjustClassification()
353344
{
354345
if ( last_it != quantileBorders.end() )
355346
{
356-
listBoxText = QString::number( *last_it, 'f' ) + " - " + QString::number( *it, 'f' );
347+
if(*last_it - floor(*last_it) > 0)
348+
{
349+
lowerString = QString::number(*last_it, 'f');
350+
}
351+
else
352+
{
353+
lowerString = QString::number(*last_it);
354+
}
355+
( *symbol_it )->setLowerValue(lowerString);
356+
357+
if(*it - floor(*it) > 0)
358+
{
359+
upperString = QString::number(*it, 'f');
360+
}
361+
else
362+
{
363+
upperString = QString::number(*it);
364+
}
365+
( *symbol_it )->setUpperValue(upperString);
366+
367+
368+
listBoxText = lowerString + " - " + upperString;
369+
mEntries.insert( std::make_pair( listBoxText, *symbol_it ) );
357370
QListWidgetItem *mypItem = new QListWidgetItem( listBoxText );
358371
mClassListWidget->addItem( mypItem );
359372
updateEntryIcon( *symbol_it, mypItem );
360-
( *symbol_it )->setLowerValue( QString::number( *last_it, 'f' ) );
361-
( *symbol_it )->setUpperValue( QString::number( *it, 'f' ) );
362-
mEntries.insert( std::make_pair( listBoxText, *symbol_it ) );
363373
++symbol_it;
364374
}
365375
last_it = it;
@@ -370,19 +380,35 @@ void QgsGraduatedSymbolDialog::adjustClassification()
370380
std::list<QgsSymbol*>::const_iterator symbol_it = symbolList.begin();
371381
for ( int i = 0;i < numberofclassesspinbox->value();++i )
372382
{
383+
//switch if attribute is int or double
373384
double lower = minimum + ( maximum - minimum ) / numberofclassesspinbox->value() * i;
374385
double upper = minimum + ( maximum - minimum ) / numberofclassesspinbox->value() * ( i + 1 );
375-
if ( i == 0 )//make sure all feature attributes are between minimum and maximum value (round off problem)
386+
387+
QString lowerString;
388+
if(lower - floor(lower) > 0)
389+
{
390+
lowerString = QString::number(lower, 'f');
391+
}
392+
else
376393
{
377-
lower -= 0.001;
394+
lowerString = QString::number(lower);
378395
}
379-
if ( i == numberofclassesspinbox->value() - 1 )
396+
397+
( *symbol_it )->setLowerValue(lowerString);
398+
399+
QString upperString;
400+
if(upper - floor(upper) > 0)
380401
{
381-
upper += 0.001;
402+
upperString = QString::number(upper, 'f');
382403
}
383-
( *symbol_it )->setLowerValue( QString::number( lower, 'f', 3 ) );
384-
( *symbol_it )->setUpperValue( QString::number( upper, 'f', 3 ) );
385-
listBoxText = QString::number( lower, 'f', 3 ) + " - " + QString::number( upper, 'f', 3 );
404+
else
405+
{
406+
upperString = QString::number(upper);
407+
}
408+
409+
( *symbol_it )->setUpperValue(upperString);
410+
listBoxText = lowerString + " - " + upperString;
411+
386412
QListWidgetItem * mypItem = new QListWidgetItem( listBoxText );
387413
updateEntryIcon( *symbol_it, mypItem );
388414
mClassListWidget->addItem( mypItem );

0 commit comments

Comments
 (0)
Please sign in to comment.