Skip to content

Commit 096cb4c

Browse files
committedMay 28, 2019
Regenerate distance area calculation on demand in attribute table
Storing the instance in the table means that it does not respond correctly to project ellipsoid changes, resulting in area calculations using an outdated ellipsoid until the attribute table is reopened Fixes #25500
1 parent 4651892 commit 096cb4c

File tree

5 files changed

+8
-19
lines changed

5 files changed

+8
-19
lines changed
 

‎src/app/qgsattributetabledialog.cpp

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,11 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *layer, QgsAttr
148148
// Initialize the window geometry
149149
restoreGeometry( settings.value( QStringLiteral( "Windows/BetterAttributeTable/geometry" ) ).toByteArray() );
150150

151-
myDa = new QgsDistanceArea();
151+
QgsDistanceArea da;
152+
da.setSourceCrs( mLayer->crs(), QgsProject::instance()->transformContext() );
153+
da.setEllipsoid( QgsProject::instance()->ellipsoid() );
154+
mEditorContext.setDistanceArea( da );
152155

153-
myDa->setSourceCrs( mLayer->crs(), QgsProject::instance()->transformContext() );
154-
myDa->setEllipsoid( QgsProject::instance()->ellipsoid() );
155-
156-
mEditorContext.setDistanceArea( *myDa );
157156
mEditorContext.setVectorLayerTools( QgisApp::instance()->vectorLayerTools() );
158157
mEditorContext.setMapCanvas( QgisApp::instance()->mapCanvas() );
159158

@@ -362,11 +361,6 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *layer, QgsAttr
362361
}
363362
}
364363

365-
QgsAttributeTableDialog::~QgsAttributeTableDialog()
366-
{
367-
delete myDa;
368-
}
369-
370364
void QgsAttributeTableDialog::updateTitle()
371365
{
372366
if ( ! mLayer )
@@ -511,7 +505,10 @@ void QgsAttributeTableDialog::runFieldCalculation( QgsVectorLayer *layer, const
511505
QString error;
512506

513507
QgsExpression exp( expression );
514-
exp.setGeomCalculator( myDa );
508+
QgsDistanceArea da;
509+
da.setSourceCrs( mLayer->crs(), QgsProject::instance()->transformContext() );
510+
da.setEllipsoid( QgsProject::instance()->ellipsoid() );
511+
exp.setGeomCalculator( &da );
515512
exp.setDistanceUnits( QgsProject::instance()->distanceUnits() );
516513
exp.setAreaUnits( QgsProject::instance()->areaUnits() );
517514
bool useGeometry = exp.needsGeometry();

‎src/app/qgsattributetabledialog.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ class APP_EXPORT QgsAttributeTableDialog : public QDialog, private Ui::QgsAttrib
5353
*/
5454
QgsAttributeTableDialog( QgsVectorLayer *layer, QgsAttributeTableFilterModel::FilterMode initialMode = QgsAttributeTableFilterModel::ShowAll, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::Window );
5555

56-
~QgsAttributeTableDialog() override;
57-
5856
QgsExpressionContext createExpressionContext() const override;
5957

6058
public slots:
@@ -229,8 +227,6 @@ class APP_EXPORT QgsAttributeTableDialog : public QDialog, private Ui::QgsAttrib
229227

230228
QgsDockWidget *mDock = nullptr;
231229
QDialog *mDialog = nullptr;
232-
QgsDistanceArea *myDa = nullptr;
233-
234230

235231
QMenu *mFilterColumnsMenu = nullptr;
236232
QSignalMapper *mFilterActionMapper = nullptr;

‎src/gui/attributetable/qgsdualview.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
#include "qgsattributeeditorcontext.h"
2525
#include "qgsattributetablefiltermodel.h"
26-
#include "qgsdistancearea.h"
2726
#include "qgsattributeform.h"
2827
#include "qgis_gui.h"
2928

@@ -384,7 +383,6 @@ class GUI_EXPORT QgsDualView : public QStackedWidget, private Ui::QgsDualViewBas
384383
QPointer< QgsVectorLayer > mLayer = nullptr;
385384
QProgressDialog *mProgressDlg = nullptr;
386385
QgsIFeatureSelectionManager *mFeatureSelectionManager = nullptr;
387-
QgsDistanceArea mDistanceArea;
388386
QString mDisplayExpression;
389387
QgsAttributeTableConfig mConfig;
390388
QgsScrollArea *mAttributeEditorScrollArea = nullptr;

‎src/gui/qgsattributedialog.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
#include <QGridLayout>
2929
#include "qgis_gui.h"
3030

31-
class QgsDistanceArea;
3231
class QgsHighlight;
3332

3433
/**

‎src/gui/qgsmaptoolidentify.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ class QgsMapLayer;
3232
class QgsMapCanvas;
3333
class QgsHighlight;
3434
class QgsIdentifyMenu;
35-
class QgsDistanceArea;
3635

3736
/**
3837
* \ingroup gui

0 commit comments

Comments
 (0)
Please sign in to comment.