@@ -51,6 +51,9 @@ QgsMeasureDialog::QgsMeasureDialog( QgsMeasureTool* tool, Qt::WFlags f )
51
51
52
52
// mTable->setHeaderLabels(QStringList() << tr("Segments (in meters)") << tr("Total") << tr("Azimuth") );
53
53
54
+ QSettings settings;
55
+
56
+
54
57
updateUi ();
55
58
}
56
59
@@ -85,6 +88,9 @@ void QgsMeasureDialog::mousePress( QgsPoint &point )
85
88
86
89
void QgsMeasureDialog::mouseMove ( QgsPoint &point )
87
90
{
91
+ QSettings settings;
92
+ int decimalPlaces = settings.value ( " /qgis/measure/decimalplaces" , " 3" ).toInt ();
93
+
88
94
// show current distance/area while moving the point
89
95
// by creating a temporary copy of point array
90
96
// and adding moving point at the end
@@ -93,29 +99,32 @@ void QgsMeasureDialog::mouseMove( QgsPoint &point )
93
99
QList<QgsPoint> tmpPoints = mTool ->points ();
94
100
tmpPoints.append ( point );
95
101
double area = mTool ->canvas ()->mapRenderer ()->distanceArea ()->measurePolygon ( tmpPoints );
96
- editTotal->setText ( formatArea ( area ) );
102
+ editTotal->setText ( formatArea ( area, decimalPlaces ) );
97
103
}
98
104
else if ( !mMeasureArea && mTool ->points ().size () > 0 )
99
105
{
100
106
QgsPoint p1 ( mTool ->points ().last () ), p2 ( point );
101
107
102
108
double d = mTool ->canvas ()->mapRenderer ()->distanceArea ()->measureLine ( p1, p2 );
103
- editTotal->setText ( formatDistance ( mTotal + d ) );
109
+ editTotal->setText ( formatDistance ( mTotal + d, decimalPlaces ) );
104
110
QGis::UnitType myDisplayUnits;
105
111
// Ignore units
106
112
convertMeasurement ( d, myDisplayUnits, false );
107
113
QTreeWidgetItem *item = mTable ->topLevelItem ( mTable ->topLevelItemCount () - 1 );
108
- item->setText ( 0 , QLocale::system ().toString ( d, ' f' , 2 ) );
114
+ item->setText ( 0 , QLocale::system ().toString ( d, ' f' , decimalPlaces ) );
109
115
}
110
116
}
111
117
112
118
void QgsMeasureDialog::addPoint ( QgsPoint &point )
113
119
{
120
+ QSettings settings;
121
+ int decimalPlaces = settings.value ( " /qgis/measure/decimalplaces" , " 3" ).toInt ();
122
+
114
123
int numPoints = mTool ->points ().size ();
115
124
if ( mMeasureArea && numPoints > 2 )
116
125
{
117
126
double area = mTool ->canvas ()->mapRenderer ()->distanceArea ()->measurePolygon ( mTool ->points () );
118
- editTotal->setText ( formatArea ( area ) );
127
+ editTotal->setText ( formatArea ( area, decimalPlaces ) );
119
128
}
120
129
else if ( !mMeasureArea && numPoints > 1 )
121
130
{
@@ -126,16 +135,16 @@ void QgsMeasureDialog::addPoint( QgsPoint &point )
126
135
double d = mTool ->canvas ()->mapRenderer ()->distanceArea ()->measureLine ( p1, p2 );
127
136
128
137
mTotal += d;
129
- editTotal->setText ( formatDistance ( mTotal ) );
138
+ editTotal->setText ( formatDistance ( mTotal , decimalPlaces ) );
130
139
131
140
QGis::UnitType myDisplayUnits;
132
141
// Ignore units
133
142
convertMeasurement ( d, myDisplayUnits, false );
134
143
135
144
QTreeWidgetItem *item = mTable ->topLevelItem ( mTable ->topLevelItemCount () - 1 );
136
- item->setText ( 0 , QLocale::system ().toString ( d, ' f' , 2 ) );
145
+ item->setText ( 0 , QLocale::system ().toString ( d, ' f' , decimalPlaces ) );
137
146
138
- item = new QTreeWidgetItem ( QStringList ( QLocale::system ().toString ( 0.0 , ' f' , 2 ) ) );
147
+ item = new QTreeWidgetItem ( QStringList ( QLocale::system ().toString ( 0.0 , ' f' , decimalPlaces ) ) );
139
148
item->setTextAlignment ( 0 , Qt::AlignRight );
140
149
mTable ->addTopLevelItem ( item );
141
150
mTable ->scrollToItem ( item );
@@ -175,22 +184,31 @@ void QgsMeasureDialog::saveWindowLocation()
175
184
settings.setValue ( key, height () );
176
185
}
177
186
178
- QString QgsMeasureDialog::formatDistance ( double distance )
187
+ QString QgsMeasureDialog::formatDistance ( double distance, int decimalPlaces )
179
188
{
189
+ QSettings settings;
190
+ bool baseUnit = settings.value ( " /qgis/measure/keepbaseunit" , false ).toBool ();
191
+
180
192
QGis::UnitType myDisplayUnits;
181
193
convertMeasurement ( distance, myDisplayUnits, false );
182
- return QgsDistanceArea::textUnit ( distance, 2 , myDisplayUnits, false );
194
+ return QgsDistanceArea::textUnit ( distance, decimalPlaces , myDisplayUnits, false , baseUnit );
183
195
}
184
196
185
- QString QgsMeasureDialog::formatArea ( double area )
197
+ QString QgsMeasureDialog::formatArea ( double area, int decimalPlaces )
186
198
{
199
+ QSettings settings;
200
+ bool baseUnit = settings.value ( " /qgis/measure/keepbaseunit" , false ).toBool ();
201
+
187
202
QGis::UnitType myDisplayUnits;
188
203
convertMeasurement ( area, myDisplayUnits, true );
189
- return QgsDistanceArea::textUnit ( area, 2 , myDisplayUnits, true );
204
+ return QgsDistanceArea::textUnit ( area, decimalPlaces , myDisplayUnits, true , baseUnit );
190
205
}
191
206
192
207
void QgsMeasureDialog::updateUi ()
193
208
{
209
+ QSettings settings;
210
+ int decimalPlaces = settings.value ( " /qgis/measure/decimalplaces" , " 3" ).toInt ();
211
+
194
212
double dummy = 1.0 ;
195
213
QGis::UnitType myDisplayUnits;
196
214
// The dummy distance is ignored
@@ -216,12 +234,12 @@ void QgsMeasureDialog::updateUi()
216
234
if ( mMeasureArea )
217
235
{
218
236
mTable ->hide ();
219
- editTotal->setText ( formatArea ( 0 ) );
237
+ editTotal->setText ( formatArea ( 0 , decimalPlaces ) );
220
238
}
221
239
else
222
240
{
223
241
mTable ->show ();
224
- editTotal->setText ( formatDistance ( 0 ) );
242
+ editTotal->setText ( formatDistance ( 0 , decimalPlaces ) );
225
243
}
226
244
227
245
}
0 commit comments