@@ -169,19 +169,24 @@ void QgsRendererRangeV2::toSld( QDomDocument &doc, QDomElement &element, QgsStri
169
169
170
170
// /////////
171
171
172
+ int QgsRendererRangeV2LabelFormat::MaxPrecision=15 ;
173
+ int QgsRendererRangeV2LabelFormat::MinPrecision=-6 ;
174
+
172
175
QgsRendererRangeV2LabelFormat::QgsRendererRangeV2LabelFormat ():
173
176
mFormat( " %1 - %2 " ),
174
- mDecimalPlaces ( 4 ),
177
+ mPrecision ( 4 ),
175
178
mTrimTrailingZeroes( false ),
176
- mReTrailingZeroes( " \\ .?0*$" )
179
+ mNumberScale( 1.0 ),
180
+ mNumberSuffix( " " ),
181
+ mReTrailingZeroes( " [.,]?0*$" )
177
182
{
178
183
}
179
184
180
- QgsRendererRangeV2LabelFormat::QgsRendererRangeV2LabelFormat ( QString format, int decimalPlaces , bool trimTrailingZeroes ):
181
- mReTrailingZeroes( " \\ . ?0*$" )
185
+ QgsRendererRangeV2LabelFormat::QgsRendererRangeV2LabelFormat ( QString format, int precision , bool trimTrailingZeroes ):
186
+ mReTrailingZeroes( " [.,] ?0*$" )
182
187
{
183
188
setFormat ( format );
184
- setDecimalPlaces ( decimalPlaces );
189
+ setPrecision ( precision );
185
190
setTrimTrailingZeroes ( trimTrailingZeroes );
186
191
}
187
192
@@ -190,7 +195,7 @@ bool QgsRendererRangeV2LabelFormat::operator==( const QgsRendererRangeV2LabelFor
190
195
{
191
196
return
192
197
format () == other.format () &&
193
- decimalPlaces () == other.decimalPlaces () &&
198
+ precision () == other.precision () &&
194
199
trimTrailingZeroes () == other.trimTrailingZeroes ();
195
200
}
196
201
@@ -199,31 +204,50 @@ bool QgsRendererRangeV2LabelFormat::operator!=( const QgsRendererRangeV2LabelFor
199
204
return !( *this == other );
200
205
}
201
206
202
- void QgsRendererRangeV2LabelFormat::setDecimalPlaces ( int decimalPlaces )
207
+ void QgsRendererRangeV2LabelFormat::setPrecision ( int precision )
203
208
{
204
209
// Limit the range of decimal places to a reasonable range
205
- if ( decimalPlaces < 0 ) decimalPlaces = 0 ;
206
- if ( decimalPlaces > 15 ) decimalPlaces = 15 ;
207
- mDecimalPlaces = decimalPlaces;
210
+ if ( precision < MinPrecision ) precision = MinPrecision;
211
+ if ( precision > MaxPrecision ) precision = MaxPrecision;
212
+ mPrecision = precision;
213
+ mNumberScale =1.0 ;
214
+ mNumberSuffix =" " ;
215
+ while ( precision < 0 )
216
+ {
217
+ precision++;
218
+ mNumberScale /= 10.0 ;
219
+ mNumberSuffix .append (' 0' );
220
+ }
208
221
}
209
222
210
223
QString QgsRendererRangeV2LabelFormat::labelForRange ( const QgsRendererRangeV2 &range ) const
211
224
{
212
225
return labelForRange ( range.lowerValue (), range.upperValue () );
213
226
}
214
227
215
- QString QgsRendererRangeV2LabelFormat::labelForRange ( double lower, double upper ) const
228
+ QString QgsRendererRangeV2LabelFormat::formatNumber ( double value ) const
216
229
{
217
- QString lowerStr = QString::number ( lower, ' f' , mDecimalPlaces );
218
- QString upperStr = QString::number ( upper, ' f' , mDecimalPlaces );
219
-
220
- if ( mTrimTrailingZeroes )
230
+ if ( mPrecision > 0 )
231
+ {
232
+ QString valueStr=QString::number ( value, ' f' , mPrecision );
233
+ if ( mTrimTrailingZeroes ) valueStr=valueStr.replace (mReTrailingZeroes ," " );
234
+ return valueStr;
235
+ }
236
+ else
221
237
{
222
- if ( lowerStr.contains ( ' .' ) ) lowerStr = lowerStr.replace ( mReTrailingZeroes , " " );
223
- if ( upperStr.contains ( ' .' ) ) upperStr = upperStr.replace ( mReTrailingZeroes , " " );
238
+ QString valueStr=QString::number ( value*mNumberScale , ' f' , 0 );
239
+ if ( valueStr != " 0" ) valueStr=valueStr+mNumberSuffix ;
240
+ return valueStr;
224
241
}
242
+ }
243
+
244
+ QString QgsRendererRangeV2LabelFormat::labelForRange ( double lower, double upper ) const
245
+ {
246
+ QString lowerStr=formatNumber (lower);
247
+ QString upperStr=formatNumber (upper);
225
248
226
- return mFormat .arg ( lowerStr, upperStr );
249
+ QString legend (mFormat );
250
+ return legend.replace ( " %1" ,lowerStr).replace (" %2" ,upperStr );
227
251
}
228
252
229
253
void QgsRendererRangeV2LabelFormat::setFromDomElement ( QDomElement &element )
@@ -233,14 +257,14 @@ void QgsRendererRangeV2LabelFormat::setFromDomElement( QDomElement &element )
233
257
element.attribute ( " separator" , " - " ) + " %2" +
234
258
element.attribute ( " suffix" , " " )
235
259
);
236
- mDecimalPlaces = element.attribute ( " decimalplaces" , " 4" ).toInt ();
260
+ setPrecision ( element.attribute ( " decimalplaces" , " 4" ).toInt () );
237
261
mTrimTrailingZeroes = element.attribute ( " trimtrailingzeroes" , " false" ) == " true" ;
238
262
}
239
263
240
264
void QgsRendererRangeV2LabelFormat::saveToDomElement ( QDomElement &element )
241
265
{
242
266
element.setAttribute ( " format" , mFormat );
243
- element.setAttribute ( " decimalplaces" , mDecimalPlaces );
267
+ element.setAttribute ( " decimalplaces" , mPrecision );
244
268
element.setAttribute ( " trimtrailingzeroes" , mTrimTrailingZeroes ? " true" : " false" );
245
269
}
246
270
@@ -1430,7 +1454,7 @@ void QgsGraduatedSymbolRendererV2::setLabelFormat( const QgsRendererRangeV2Label
1430
1454
}
1431
1455
1432
1456
1433
- void QgsGraduatedSymbolRendererV2::calculateLabelDecimalPlaces ( bool updateRanges )
1457
+ void QgsGraduatedSymbolRendererV2::calculateLabelPrecision ( bool updateRanges )
1434
1458
{
1435
1459
// Find the minimum size of a class
1436
1460
double minClassRange = 0.0 ;
@@ -1452,7 +1476,7 @@ void QgsGraduatedSymbolRendererV2::calculateLabelDecimalPlaces( bool updateRange
1452
1476
ndp--;
1453
1477
nextDpMinRange *= 10.0 ;
1454
1478
}
1455
- mLabelFormat .setDecimalPlaces ( ndp );
1479
+ mLabelFormat .setPrecision ( ndp );
1456
1480
if ( updateRanges ) setLabelFormat ( mLabelFormat , true );
1457
1481
}
1458
1482
0 commit comments