Skip to content

Commit 194d94c

Browse files
committed
Using QgsProject settings instead, not fully tested
1 parent 47aed17 commit 194d94c

15 files changed

+75
-31
lines changed

python/gui/qgsexpressionbuilderdialog.sip

+5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ class QgsExpressionBuilderDialog : QDialog
1717

1818
QString expressionText();
1919

20+
/** Sets geometry calculator used in distance/area calculations.
21+
* @note added in version 2.0
22+
*/
23+
void setGeomCalculator( const QgsDistanceArea & da );
24+
2025
protected:
2126
/**
2227
* Handle closing of the window

python/gui/qgsexpressionbuilderwidget.sip

+5
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ class QgsExpressionBuilderWidget : QWidget
8484

8585
void loadFieldNames( QMap<int, QgsField> fields );
8686

87+
/** Sets geometry calculator used in distance/area calculations.
88+
* @note added in version 2.0
89+
*/
90+
void setGeomCalculator( const QgsDistanceArea & da );
91+
8792
/** Gets the expression string that has been set in the expression area.
8893
* @returns The expression as a string. */
8994
QString expressionText();

src/app/qgsattributeactiondialog.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ back to QgsVectorLayer.
2323
#include "qgsattributeactiondialog.h"
2424
#include "qgsattributeaction.h"
2525
#include "qgsexpressionbuilderdialog.h"
26+
#include "qgisapp.h"
27+
#include "qgsproject.h"
28+
#include "qgsmapcanvas.h"
2629

2730
#include <QFileDialog>
2831
#include <QHeaderView>
@@ -173,6 +176,13 @@ void QgsAttributeActionDialog::insertExpression()
173176
// display the expression builder
174177
QgsExpressionBuilderDialog dlg( mActions->layer(), selText, this );
175178
dlg.setWindowTitle( tr( "Insert expression" ) );
179+
180+
QgsDistanceArea myDa;
181+
myDa.setSourceCrs( mActions->layer()->crs().srsid() );
182+
myDa.setEllipsoidalMode( QgisApp::instance()->mapCanvas()->mapRenderer()->hasCrsTransformEnabled() );
183+
myDa.setEllipsoid( QgsProject::instance()->readEntry( "Measure", "/Ellipsoid", GEO_NONE ) );
184+
dlg.setGeomCalculator( myDa );
185+
176186
if ( dlg.exec() == QDialog::Accepted )
177187
{
178188
QString expression = dlg.expressionBuilder()->expressionText();

src/app/qgsattributedialog.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "qgsfield.h"
1919
#include "qgslogger.h"
2020
#include "qgsmapcanvas.h"
21+
#include "qgsproject.h"
2122
#include "qgsvectorlayer.h"
2223
#include "qgsvectordataprovider.h"
2324
#include "qgsuniquevaluerenderer.h"
@@ -220,11 +221,10 @@ QgsAttributeDialog::QgsAttributeDialog( QgsVectorLayer *vl, QgsFeature *thepFeat
220221
{
221222

222223
QgsDistanceArea myDa;
223-
QSettings settings;
224224

225225
myDa.setSourceCrs( vl->crs().srsid() );
226226
myDa.setEllipsoidalMode( QgisApp::instance()->mapCanvas()->mapRenderer()->hasCrsTransformEnabled() );
227-
myDa.setEllipsoid( settings.value( "/qgis/measure/ellipsoid", GEO_NONE ).toString() );
227+
myDa.setEllipsoid( QgsProject::instance()->readEntry( "Measure", "/Ellipsoid", GEO_NONE ) );
228228

229229
for ( QgsFieldMap::const_iterator it = theFieldMap.begin(); it != theFieldMap.end(); ++it )
230230
{

src/app/qgsattributetabledialog.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "qgssearchquerybuilder.h"
3333
#include "qgslogger.h"
3434
#include "qgsmapcanvas.h"
35+
#include "qgsproject.h"
3536
#include "qgsfieldcalculator.h"
3637
#include "qgsfeatureaction.h"
3738
#include "qgsattributeaction.h"
@@ -538,11 +539,10 @@ void QgsAttributeTableDialog::doSearch( QString searchString )
538539
{
539540

540541
QgsDistanceArea myDa;
541-
QSettings settings;
542542

543543
myDa.setSourceCrs( mLayer->crs().srsid() );
544544
myDa.setEllipsoidalMode( QgisApp::instance()->mapCanvas()->mapRenderer()->hasCrsTransformEnabled() );
545-
myDa.setEllipsoid( settings.value( "/qgis/measure/ellipsoid", GEO_NONE ).toString() );
545+
myDa.setEllipsoid( QgsProject::instance()->readEntry( "Measure", "/Ellipsoid", GEO_NONE ) );
546546

547547
// parse search string and build parsed tree
548548
QgsExpression search( searchString );

src/app/qgsfieldcalculator.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "qgsdistancearea.h"
1919
#include "qgsexpression.h"
2020
#include "qgsmapcanvas.h"
21+
#include "qgsproject.h"
2122
#include "qgsvectordataprovider.h"
2223
#include "qgsvectorlayer.h"
2324

@@ -85,11 +86,10 @@ void QgsFieldCalculator::accept()
8586

8687
// Set up QgsDistanceArea each time we (re-)calculate
8788
QgsDistanceArea myDa;
88-
QSettings settings;
8989

9090
myDa.setSourceCrs( mVectorLayer->crs().srsid() );
9191
myDa.setEllipsoidalMode( QgisApp::instance()->mapCanvas()->mapRenderer()->hasCrsTransformEnabled() );
92-
myDa.setEllipsoid( settings.value( "/qgis/measure/ellipsoid", GEO_NONE ).toString() );
92+
myDa.setEllipsoid( QgsProject::instance()->readEntry( "Measure", "/Ellipsoid", GEO_NONE ) );
9393

9494

9595
QString calcString = builder->expressionText();

src/app/qgslabelinggui.cpp

+9-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
#include "qgslabelengineconfigdialog.h"
2626
#include "qgsexpressionbuilderdialog.h"
2727
#include "qgsexpression.h"
28-
#include "qgsmapcanvas.h"
28+
#include "qgisapp.h"
29+
#include "qgsproject.h"
2930
#include "qgscharacterselectdialog.h"
3031

3132
#include <QColorDialog>
@@ -894,6 +895,13 @@ void QgsLabelingGui::showExpressionDialog()
894895
{
895896
QgsExpressionBuilderDialog dlg( mLayer, cboFieldName->currentText() , this );
896897
dlg.setWindowTitle( tr( "Expression based label" ) );
898+
899+
QgsDistanceArea myDa;
900+
myDa.setSourceCrs( mLayer->crs().srsid() );
901+
myDa.setEllipsoidalMode( QgisApp::instance()->mapCanvas()->mapRenderer()->hasCrsTransformEnabled() );
902+
myDa.setEllipsoid( QgsProject::instance()->readEntry( "Measure", "/Ellipsoid", GEO_NONE ) );
903+
dlg.setGeomCalculator( myDa );
904+
897905
if ( dlg.exec() == QDialog::Accepted )
898906
{
899907
QString expression = dlg.expressionText();

src/app/qgsmaptoolidentify.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ bool QgsMapToolIdentify::identifyVectorLayer( QgsVectorLayer *layer, int x, int
214214
// load identify radius from settings
215215
QSettings settings;
216216
double identifyValue = settings.value( "/Map/identifyRadius", QGis::DEFAULT_IDENTIFY_RADIUS ).toDouble();
217-
QString ellipsoid = settings.value( "/qgis/measure/ellipsoid", GEO_NONE ).toString();
217+
218+
QString ellipsoid = QgsProject::instance()->readEntry( "Measure", "/Ellipsoid", GEO_NONE );
218219

219220
if ( identifyValue <= 0.0 )
220221
identifyValue = QGis::DEFAULT_IDENTIFY_RADIUS;

src/app/qgsmaptoolmeasureangle.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "qgslogger.h"
2020
#include "qgsmapcanvas.h"
2121
#include "qgsmaptopixel.h"
22+
#include "qgsproject.h"
2223
#include "qgsrubberband.h"
2324
#include <QMouseEvent>
2425
#include <QSettings>
@@ -182,7 +183,7 @@ void QgsMapToolMeasureAngle::updateSettings()
182183
void QgsMapToolMeasureAngle::configureDistanceArea()
183184
{
184185
QSettings settings;
185-
QString ellipsoidId = settings.value( "/qgis/measure/ellipsoid", GEO_NONE ).toString();
186+
QString ellipsoidId = QgsProject::instance()->readEntry( "Measure", "/Ellipsoid", GEO_NONE );
186187
mDa.setSourceCrs( mCanvas->mapRenderer()->destinationCrs().srsid() );
187188
mDa.setEllipsoid( ellipsoidId );
188189
// Only use ellipsoidal calculation when project wide transformation is enabled.

src/app/qgsmeasuredialog.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "qgsdistancearea.h"
2323
#include "qgsmapcanvas.h"
2424
#include "qgsmaprenderer.h"
25+
#include "qgsproject.h"
2526
#include "qgscoordinatereferencesystem.h"
2627

2728
#include <QCloseEvent>
@@ -60,7 +61,7 @@ void QgsMeasureDialog::updateSettings()
6061
mDisplayUnits = QGis::fromLiteral( settings.value( "/qgis/measure/displayunits", QGis::toLiteral( QGis::Meters ) ).toString() );
6162
// Configure QgsDistanceArea
6263
mDa.setSourceCrs( mTool->canvas()->mapRenderer()->destinationCrs().srsid() );
63-
mDa.setEllipsoid( settings.value( "/qgis/measure/ellipsoid", GEO_NONE ).toString() );
64+
mDa.setEllipsoid( QgsProject::instance()->readEntry( "Measure", "/Ellipsoid", GEO_NONE ) );
6465
// Only use ellipsoidal calculation when project wide transformation is enabled.
6566
if ( mTool->canvas()->mapRenderer()->hasCrsTransformEnabled() )
6667
{

src/app/qgsprojectproperties.cpp

+12-4
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ const char * QgsProjectProperties::GEO_NONE_DESC = QT_TRANSLATE_NOOP( "QgsOption
5959
QgsProjectProperties::QgsProjectProperties( QgsMapCanvas* mapCanvas, QWidget *parent, Qt::WFlags fl )
6060
: QDialog( parent, fl )
6161
, mMapCanvas( mapCanvas )
62+
, mEllipsoidList()
63+
, mEllipsoidIndex( 0 )
64+
6265
{
6366
setupUi( this );
6467
connect( buttonBox, SIGNAL( accepted() ), this, SLOT( accept() ) );
@@ -114,7 +117,6 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas* mapCanvas, QWidget *pa
114117

115118
QgsDebugMsg( "Setting upp ellipsoid" );
116119

117-
mEllipsoidIndex = 0;
118120
populateEllipsoidList();
119121

120122
// Reading ellipsoid from setttings
@@ -138,6 +140,7 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas* mapCanvas, QWidget *pa
138140

139141
updateEllipsoidUI( myIndex );
140142

143+
141144
int dp = QgsProject::instance()->readNumEntry( "PositionPrecision", "/DecimalPlaces" );
142145
spinBoxDP->setValue( dp );
143146

@@ -553,12 +556,12 @@ void QgsProjectProperties::apply()
553556
minor = QLocale::system().toDouble( leSemiMinor->text() );
554557
}
555558
QgsProject::instance()->writeEntry( "Measure", "/Ellipsoid", QString( "PARAMETER:%1:%2" )
556-
.arg( major, 0, 'g', 17 )
557-
.arg( minor, 0, 'g', 17 ) );
559+
.arg( major, 0, 'g', 17 )
560+
.arg( minor, 0, 'g', 17 ) );
558561
}
559562
else
560563
{
561-
QgsProject::instance()->writeEntry( "Measure", "/Ellipsoid", mEllipsoidList[ mEllipsoidIndex ].acronym );
564+
QgsProject::instance()->writeEntry( "Measure", "/Ellipsoid", mEllipsoidList[ mEllipsoidIndex ].acronym );
562565
}
563566

564567
//set the color for selections
@@ -1395,6 +1398,11 @@ void QgsProjectProperties::populateEllipsoidList()
13951398

13961399
void QgsProjectProperties::updateEllipsoidUI( int newIndex )
13971400
{
1401+
// Just return if the list isn't populated yet
1402+
if ( mEllipsoidList.isEmpty() )
1403+
{
1404+
return;
1405+
}
13981406
// Called whenever settings change, adjusts the UI accordingly
13991407
// Pre-select current ellipsoid
14001408

src/gui/qgsexpressionbuilderdialog.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,9 @@ void QgsExpressionBuilderDialog::closeEvent( QCloseEvent *event )
5555
QSettings settings;
5656
settings.setValue( "/Windows/ExpressionBuilderDialog/geometry", saveGeometry() );
5757
}
58+
59+
void QgsExpressionBuilderDialog::setGeomCalculator( const QgsDistanceArea & da )
60+
{
61+
// Store in child widget only.
62+
builder->setGeomCalculator( da );
63+
}

src/gui/qgsexpressionbuilderdialog.h

+6
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#define QGSEXPRESSIONBUILDERDIALOG_H
1818

1919
#include <QDialog>
20+
#include "qgsdistancearea.h"
2021
#include "ui_qgsexpressionbuilderdialogbase.h"
2122

2223
/** A generic dialog for building expression strings
@@ -34,6 +35,11 @@ class GUI_EXPORT QgsExpressionBuilderDialog : public QDialog, private Ui::QgsExp
3435

3536
QString expressionText();
3637

38+
/** Sets geometry calculator used in distance/area calculations.
39+
* @note added in version 2.0
40+
*/
41+
void setGeomCalculator( const QgsDistanceArea & da );
42+
3743
protected:
3844
/**
3945
* Handle closing of the window

src/gui/qgsexpressionbuilderwidget.cpp

+7-16
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,7 @@ bool QgsExpressionBuilderWidget::isExpressionValid()
242242

243243
void QgsExpressionBuilderWidget::setGeomCalculator( const QgsDistanceArea & da )
244244
{
245-
Q_UNUSED( da );
246-
// TODO! FIXME!!!
245+
mDa = da;
247246
}
248247

249248
QString QgsExpressionBuilderWidget::expressionText()
@@ -278,16 +277,8 @@ void QgsExpressionBuilderWidget::on_txtExpressionString_textChanged()
278277

279278
if ( mLayer )
280279
{
281-
// Only set ellipsoid if we have layer...
282-
QgsDistanceArea myDa;
283-
QSettings settings;
284-
285-
myDa.setEllipsoid( settings.value( "/qgis/measure/ellipsoid", GEO_NONE ).toString() );
286-
myDa.setSourceCrs( mLayer->crs().srsid() );
287-
// myDa.setEllipsoidalMode(QgisApp::instance()->mapCanvas()->mapRenderer()->hasCrsTransformEnabled() );
288-
myDa.setEllipsoidalMode( false );
289-
290-
exp.setGeomCalculator( myDa );
280+
// Only set calculator if we have layer, else use default.
281+
exp.setGeomCalculator( mDa );
291282

292283
if ( !mFeature.isValid() )
293284
{
@@ -425,12 +416,12 @@ QString QgsExpressionBuilderWidget::loadFunctionHelp( QgsExpressionItem* express
425416
return "";
426417

427418
QString helpContents;
428-
// Return the function help that is set for the function if there is one.
419+
// Return the function help that is set for the function if there is one.
429420
if ( !expressionItem->getHelpText().isEmpty() )
430421
{
431-
QString myStyle = QgsApplication::reportStyleSheet();
432-
helpContents = "<head><style>" + myStyle + "</style></head><body>" + expressionItem->getHelpText() + "</body>";
433-
return helpContents;
422+
QString myStyle = QgsApplication::reportStyleSheet();
423+
helpContents = "<head><style>" + myStyle + "</style></head><body>" + expressionItem->getHelpText() + "</body>";
424+
return helpContents;
434425
}
435426
// set up the path to the help file
436427
QString helpFilesPath = QgsApplication::pkgDataPath() + "/resources/function_help/";

src/gui/qgsexpressionbuilderwidget.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ class GUI_EXPORT QgsExpressionBuilderWidget : public QWidget, private Ui::QgsExp
123123

124124
void loadFieldNames( QgsFieldMap fields );
125125

126-
/** Sets geometry calculator in order to get the measurements correct.
126+
/** Sets geometry calculator used in distance/area calculations.
127+
* @note added in version 2.0
127128
*/
128129
void setGeomCalculator( const QgsDistanceArea & da );
129130

@@ -181,6 +182,7 @@ class GUI_EXPORT QgsExpressionBuilderWidget : public QWidget, private Ui::QgsExp
181182
QgsFeature mFeature;
182183
QgsExpressionHighlighter* highlighter;
183184
bool mExpressionValid;
185+
QgsDistanceArea mDa;
184186
};
185187

186188
#endif // QGSEXPRESSIONBUILDER_H

0 commit comments

Comments
 (0)