Skip to content

Commit 44ed7bd

Browse files
3nidsnyalldawson
authored andcommittedDec 15, 2017
define default transforms in global options
adds QgsCoordinateTransformContext::readSettings()/writeSettings to read/write from settings
1 parent 8798cf0 commit 44ed7bd

9 files changed

+245
-172
lines changed
 

‎python/core/qgscoordinatetransformcontext.sip

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313

1414

15+
1516
class QgsCoordinateTransformContext
1617
{
1718
%Docstring
@@ -149,6 +150,19 @@ class QgsCoordinateTransformContext
149150
%End
150151

151152

153+
void readSettings();
154+
%Docstring
155+
Reads the context's state from application settings.
156+
.. seealso:: readSettings()
157+
%End
158+
159+
void writeSettings();
160+
%Docstring
161+
Write the context's state to application settings.
162+
.. seealso:: writeSettings()
163+
%End
164+
165+
152166
};
153167

154168

‎src/app/qgsoptions.cpp

Lines changed: 62 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "qgsattributetablefiltermodel.h"
3939
#include "qgsrasterformatsaveoptionswidget.h"
4040
#include "qgsrasterpyramidsoptionswidget.h"
41+
#include "qgsdatumtransformdialog.h"
4142
#include "qgsdialog.h"
4243
#include "qgscomposer.h"
4344
#include "qgscolorschemeregistry.h"
@@ -454,56 +455,21 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WindowFlags fl, const QList<QgsOpti
454455
leProjectGlobalCrs->setCrs( mDefaultCrs );
455456
leProjectGlobalCrs->setOptionVisible( QgsProjectionSelectionWidget::DefaultCrs, false );
456457

457-
//default datum transformations
458-
mSettings->beginGroup( QStringLiteral( "/Projections" ) );
459-
460458
mShowDatumTransformDialogCheckBox->setChecked( mSettings->value( QStringLiteral( "/Projections/showDatumTransformDialog" ), false ).toBool() );
461459

462-
QStringList projectionKeys = mSettings->allKeys();
463-
464-
//collect src and dest entries that belong together
465-
QMap< QPair< QString, QString >, QPair< int, int > > transforms;
466-
QStringList::const_iterator pkeyIt = projectionKeys.constBegin();
467-
for ( ; pkeyIt != projectionKeys.constEnd(); ++pkeyIt )
468-
{
469-
if ( pkeyIt->contains( QLatin1String( "srcTransform" ) ) || pkeyIt->contains( QLatin1String( "destTransform" ) ) )
470-
{
471-
QStringList split = pkeyIt->split( '/' );
472-
QString srcAuthId, destAuthId;
473-
if ( ! split.isEmpty() )
474-
{
475-
srcAuthId = split.at( 0 );
476-
}
477-
if ( split.size() > 1 )
478-
{
479-
destAuthId = split.at( 1 ).split( '_' ).at( 0 );
480-
}
481-
482-
if ( pkeyIt->contains( QLatin1String( "srcTransform" ) ) )
483-
{
484-
transforms[ qMakePair( srcAuthId, destAuthId )].first = mSettings->value( *pkeyIt ).toInt();
485-
}
486-
else if ( pkeyIt->contains( QLatin1String( "destTransform" ) ) )
487-
{
488-
transforms[ qMakePair( srcAuthId, destAuthId )].second = mSettings->value( *pkeyIt ).toInt();
489-
}
490-
}
491-
}
492-
mSettings->endGroup();
460+
// Datum transforms
461+
QgsCoordinateTransformContext context;
462+
context.readSettings();
463+
mDefaultDatumTransformTableModel->setTransformContext( context );
464+
mDefaultDatumTransformTableView->setModel( mDefaultDatumTransformTableModel );
465+
mDefaultDatumTransformTableView->resizeColumnToContents( 0 );
466+
mDefaultDatumTransformTableView->horizontalHeader()->show();
467+
mDefaultDatumTransformTableView->setSelectionMode( QAbstractItemView::SingleSelection );
468+
mDefaultDatumTransformTableView->setSelectionBehavior( QAbstractItemView::SelectRows );
469+
connect( mAddDefaultTransformButton, &QToolButton::clicked, this, &QgsOptions::addDefaultDatumTransform );
470+
connect( mRemoveDefaultTransformButton, &QToolButton::clicked, this, &QgsOptions::removeDefaultDatumTransform );
471+
connect( mEditDefaultTransformButton, &QToolButton::clicked, this, &QgsOptions::editDefaultDatumTransform );
493472

494-
QMap< QPair< QString, QString >, QPair< int, int > >::const_iterator transformIt = transforms.constBegin();
495-
for ( ; transformIt != transforms.constEnd(); ++transformIt )
496-
{
497-
const QPair< int, int > &v = transformIt.value();
498-
QTreeWidgetItem *item = new QTreeWidgetItem();
499-
item->setText( 0, transformIt.key().first );
500-
item->setText( 1, transformIt.key().second );
501-
item->setText( 2, QString::number( v.first ) );
502-
item->setText( 3, QString::number( v.second ) );
503-
mDefaultDatumTransformTreeWidget->addTopLevelItem( item );
504-
}
505-
connect( mAddDefaultTransformButton, &QAbstractButton::clicked, this, &QgsOptions::addDefaultTransformation );
506-
connect( mRemoveDefaultTransformButton, &QAbstractButton::clicked, this, &QgsOptions::removeDefaultTransformation );
507473

508474
// Set the units for measuring
509475
mDistanceUnitsComboBox->addItem( tr( "Meters" ), QgsUnitTypes::DistanceMeters );
@@ -1560,7 +1526,7 @@ void QgsOptions::saveOptions()
15601526
mStyleSheetBuilder->saveToSettings( mStyleSheetNewOpts );
15611527
}
15621528

1563-
saveDefaultDatumTransformations();
1529+
mDefaultDatumTransformTableModel->transformContext().writeSettings();
15641530

15651531
mLocatorOptionsWidget->commitChanges();
15661532

@@ -2255,72 +2221,71 @@ void QgsOptions::saveMinMaxLimits( QComboBox *cbox, const QString &name )
22552221
mSettings->setValue( "/Raster/defaultContrastEnhancementLimits/" + name, value );
22562222
}
22572223

2258-
void QgsOptions::removeDefaultTransformation()
2224+
void QgsOptions::addDefaultDatumTransform()
22592225
{
2260-
QList<QTreeWidgetItem *> items = mDefaultDatumTransformTreeWidget->selectedItems();
2261-
for ( int i = 0; i < items.size(); ++i )
2226+
QgsDatumTransformDialog *dlg = new QgsDatumTransformDialog();
2227+
if ( dlg->exec() )
22622228
{
2263-
int idx = mDefaultDatumTransformTreeWidget->indexOfTopLevelItem( items.at( i ) );
2264-
if ( idx >= 0 )
2265-
{
2266-
delete mDefaultDatumTransformTreeWidget->takeTopLevelItem( idx );
2267-
}
2229+
QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > dt = dlg->selectedDatumTransforms();
2230+
QgsCoordinateTransformContext context = mDefaultDatumTransformTableModel->transformContext();
2231+
context.addSourceDestinationDatumTransform( dt.first.first, dt.second.first, dt.first.second, dt.second.second );
2232+
mDefaultDatumTransformTableModel->setTransformContext( context );
22682233
}
22692234
}
22702235

2271-
void QgsOptions::addDefaultTransformation()
2236+
void QgsOptions::removeDefaultDatumTransform()
22722237
{
2273-
QTreeWidgetItem *item = new QTreeWidgetItem();
2274-
item->setText( 0, QLatin1String( "" ) );
2275-
item->setText( 1, QLatin1String( "" ) );
2276-
item->setText( 2, QLatin1String( "" ) );
2277-
item->setText( 3, QLatin1String( "" ) );
2278-
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
2279-
mDefaultDatumTransformTreeWidget->addTopLevelItem( item );
2280-
}
2281-
2282-
void QgsOptions::saveDefaultDatumTransformations()
2283-
{
2284-
QgsSettings s;
2285-
s.beginGroup( QStringLiteral( "/Projections" ) );
2286-
QStringList groupKeys = s.allKeys();
2287-
QStringList::const_iterator groupKeyIt = groupKeys.constBegin();
2288-
for ( ; groupKeyIt != groupKeys.constEnd(); ++groupKeyIt )
2238+
QModelIndexList selectedIndexes = mDefaultDatumTransformTableView->selectionModel()->selectedIndexes();
2239+
if ( selectedIndexes.count() > 0 )
22892240
{
2290-
if ( groupKeyIt->contains( QLatin1String( "srcTransform" ) ) || groupKeyIt->contains( QLatin1String( "destTransform" ) ) )
2291-
{
2292-
s.remove( *groupKeyIt );
2293-
}
2241+
mDefaultDatumTransformTableModel->removeTransform( selectedIndexes );
22942242
}
2243+
}
22952244

2296-
int nDefaultTransforms = mDefaultDatumTransformTreeWidget->topLevelItemCount();
2297-
for ( int i = 0; i < nDefaultTransforms; ++i )
2245+
void QgsOptions::editDefaultDatumTransform()
2246+
{
2247+
QModelIndexList selectedIndexes = mDefaultDatumTransformTableView->selectionModel()->selectedIndexes();
2248+
if ( selectedIndexes.count() > 0 )
22982249
{
2299-
QTreeWidgetItem *item = mDefaultDatumTransformTreeWidget->topLevelItem( i );
2300-
QString srcAuthId = item->text( 0 );
2301-
QString destAuthId = item->text( 1 );
2302-
if ( srcAuthId.isEmpty() || destAuthId.isEmpty() )
2303-
{
2304-
continue;
2305-
}
2306-
2307-
bool conversionOk;
2308-
int srcDatumTransform = item->text( 2 ).toInt( &conversionOk );
2309-
if ( conversionOk )
2250+
QgsCoordinateReferenceSystem sourceCrs;
2251+
QgsCoordinateReferenceSystem destinationCrs;
2252+
int sourceTransform = -1;
2253+
int destinationTransform = -1;
2254+
for ( QModelIndexList::const_iterator it = selectedIndexes.constBegin(); it != selectedIndexes.constEnd(); it ++ )
23102255
{
2311-
s.setValue( srcAuthId + "//" + destAuthId + "_srcTransform", srcDatumTransform );
2256+
if ( it->column() == QgsDatumTransformTableModel::SourceCrsColumn )
2257+
{
2258+
sourceCrs = QgsCoordinateReferenceSystem( mDefaultDatumTransformTableModel->data( *it, Qt::DisplayRole ).toString() );
2259+
}
2260+
if ( it->column() == QgsDatumTransformTableModel::DestinationCrsColumn )
2261+
{
2262+
destinationCrs = QgsCoordinateReferenceSystem( mDefaultDatumTransformTableModel->data( *it, Qt::DisplayRole ).toString() );
2263+
}
2264+
if ( it->column() == QgsDatumTransformTableModel::SourceTransformColumn )
2265+
{
2266+
sourceTransform = mDefaultDatumTransformTableModel->data( *it, Qt::UserRole ).toInt();
2267+
}
2268+
if ( it->column() == QgsDatumTransformTableModel::DestinationTransformColumn )
2269+
{
2270+
destinationTransform = mDefaultDatumTransformTableModel->data( *it, Qt::UserRole ).toInt();
2271+
}
23122272
}
2313-
int destDatumTransform = item->text( 3 ).toInt( &conversionOk );
2314-
if ( conversionOk )
2273+
if ( sourceCrs.isValid() && destinationCrs.isValid() &&
2274+
( sourceTransform != -1 || destinationTransform != -1 ) )
23152275
{
2316-
s.setValue( srcAuthId + "//" + destAuthId + "_destTransform", destDatumTransform );
2276+
QgsDatumTransformDialog *dlg = new QgsDatumTransformDialog( sourceCrs, destinationCrs, qMakePair( sourceTransform, destinationTransform ) );
2277+
if ( dlg->exec() )
2278+
{
2279+
QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > dt = dlg->selectedDatumTransforms();
2280+
QgsCoordinateTransformContext context = mDefaultDatumTransformTableModel->transformContext();
2281+
// QMap::insert takes care of replacing existing value
2282+
context.addSourceDestinationDatumTransform( sourceCrs, destinationCrs, dt.first.second, dt.second.second );
2283+
mDefaultDatumTransformTableModel->setTransformContext( context );
2284+
}
23172285
}
23182286
}
2319-
2320-
s.endGroup();
23212287
}
23222288

2323-
23242289
void QgsOptions::addColor()
23252290
{
23262291
QColor newColor = QgsColorDialog::getColor( QColor(), this->parentWidget(), tr( "Select color" ), true );

‎src/app/qgsoptions.h

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "qgshelp.h"
2626

2727
#include "qgscoordinatereferencesystem.h"
28+
#include "qgsdatumtransformtablemodel.h"
2829

2930
#include <QList>
3031
#include "qgis_app.h"
@@ -227,11 +228,17 @@ class APP_EXPORT QgsOptions : public QgsOptionsDialogBase, private Ui::QgsOption
227228
/* Save the list of which gdal drivers should be used. */
228229
void saveGdalDriverList();
229230

230-
void removeDefaultTransformation();
231-
void addDefaultTransformation();
232-
233231
void addColor();
234232

233+
//! add a new datum transform
234+
void addDefaultDatumTransform();
235+
236+
//! remove currently selected datum transform
237+
void removeDefaultDatumTransform();
238+
239+
//! edit currently selected datum transform
240+
void editDefaultDatumTransform();
241+
235242
private:
236243
QgsSettings *mSettings = nullptr;
237244
QStringList i18nList();
@@ -248,8 +255,6 @@ class APP_EXPORT QgsOptions : public QgsOptionsDialogBase, private Ui::QgsOption
248255
//! Generate table row for custom environment variables
249256
void addCustomEnvVarRow( const QString &varName, const QString &varVal, const QString &varApply = QString() );
250257

251-
void saveDefaultDatumTransformations();
252-
253258
void showHelp();
254259

255260
QListWidgetItem *addScaleToScaleList( const QString &newScale );
@@ -267,7 +272,7 @@ class APP_EXPORT QgsOptions : public QgsOptionsDialogBase, private Ui::QgsOption
267272

268273
QList< QgsOptionsPageWidget * > mAdditionalOptionWidgets;
269274
QgsLocatorOptionsWidget *mLocatorOptionsWidget = nullptr;
270-
275+
QgsDatumTransformTableModel *mDefaultDatumTransformTableModel = new QgsDatumTransformTableModel( this );
271276
};
272277

273278
#endif // #ifndef QGSOPTIONS_H

‎src/app/qgsprojectproperties.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1297,7 +1297,6 @@ void QgsProjectProperties::editDatumTransform()
12971297
}
12981298
}
12991299
}
1300-
13011300
}
13021301

13031302
void QgsProjectProperties::cbxWFSPubliedStateChanged( int aIdx )

0 commit comments

Comments
 (0)
Please sign in to comment.