|
38 | 38 | #include "qgsattributetablefiltermodel.h"
|
39 | 39 | #include "qgsrasterformatsaveoptionswidget.h"
|
40 | 40 | #include "qgsrasterpyramidsoptionswidget.h"
|
| 41 | +#include "qgsdatumtransformdialog.h" |
41 | 42 | #include "qgsdialog.h"
|
42 | 43 | #include "qgscomposer.h"
|
43 | 44 | #include "qgscolorschemeregistry.h"
|
@@ -454,56 +455,21 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WindowFlags fl, const QList<QgsOpti
|
454 | 455 | leProjectGlobalCrs->setCrs( mDefaultCrs );
|
455 | 456 | leProjectGlobalCrs->setOptionVisible( QgsProjectionSelectionWidget::DefaultCrs, false );
|
456 | 457 |
|
457 |
| - //default datum transformations |
458 |
| - mSettings->beginGroup( QStringLiteral( "/Projections" ) ); |
459 |
| - |
460 | 458 | mShowDatumTransformDialogCheckBox->setChecked( mSettings->value( QStringLiteral( "/Projections/showDatumTransformDialog" ), false ).toBool() );
|
461 | 459 |
|
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 ); |
493 | 472 |
|
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 ); |
507 | 473 |
|
508 | 474 | // Set the units for measuring
|
509 | 475 | mDistanceUnitsComboBox->addItem( tr( "Meters" ), QgsUnitTypes::DistanceMeters );
|
@@ -1560,7 +1526,7 @@ void QgsOptions::saveOptions()
|
1560 | 1526 | mStyleSheetBuilder->saveToSettings( mStyleSheetNewOpts );
|
1561 | 1527 | }
|
1562 | 1528 |
|
1563 |
| - saveDefaultDatumTransformations(); |
| 1529 | + mDefaultDatumTransformTableModel->transformContext().writeSettings(); |
1564 | 1530 |
|
1565 | 1531 | mLocatorOptionsWidget->commitChanges();
|
1566 | 1532 |
|
@@ -2255,72 +2221,71 @@ void QgsOptions::saveMinMaxLimits( QComboBox *cbox, const QString &name )
|
2255 | 2221 | mSettings->setValue( "/Raster/defaultContrastEnhancementLimits/" + name, value );
|
2256 | 2222 | }
|
2257 | 2223 |
|
2258 |
| -void QgsOptions::removeDefaultTransformation() |
| 2224 | +void QgsOptions::addDefaultDatumTransform() |
2259 | 2225 | {
|
2260 |
| - QList<QTreeWidgetItem *> items = mDefaultDatumTransformTreeWidget->selectedItems(); |
2261 |
| - for ( int i = 0; i < items.size(); ++i ) |
| 2226 | + QgsDatumTransformDialog *dlg = new QgsDatumTransformDialog(); |
| 2227 | + if ( dlg->exec() ) |
2262 | 2228 | {
|
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 ); |
2268 | 2233 | }
|
2269 | 2234 | }
|
2270 | 2235 |
|
2271 |
| -void QgsOptions::addDefaultTransformation() |
| 2236 | +void QgsOptions::removeDefaultDatumTransform() |
2272 | 2237 | {
|
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 ) |
2289 | 2240 | {
|
2290 |
| - if ( groupKeyIt->contains( QLatin1String( "srcTransform" ) ) || groupKeyIt->contains( QLatin1String( "destTransform" ) ) ) |
2291 |
| - { |
2292 |
| - s.remove( *groupKeyIt ); |
2293 |
| - } |
| 2241 | + mDefaultDatumTransformTableModel->removeTransform( selectedIndexes ); |
2294 | 2242 | }
|
| 2243 | +} |
2295 | 2244 |
|
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 ) |
2298 | 2249 | {
|
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 ++ ) |
2310 | 2255 | {
|
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 | + } |
2312 | 2272 | }
|
2313 |
| - int destDatumTransform = item->text( 3 ).toInt( &conversionOk ); |
2314 |
| - if ( conversionOk ) |
| 2273 | + if ( sourceCrs.isValid() && destinationCrs.isValid() && |
| 2274 | + ( sourceTransform != -1 || destinationTransform != -1 ) ) |
2315 | 2275 | {
|
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 | + } |
2317 | 2285 | }
|
2318 | 2286 | }
|
2319 |
| - |
2320 |
| - s.endGroup(); |
2321 | 2287 | }
|
2322 | 2288 |
|
2323 |
| - |
2324 | 2289 | void QgsOptions::addColor()
|
2325 | 2290 | {
|
2326 | 2291 | QColor newColor = QgsColorDialog::getColor( QColor(), this->parentWidget(), tr( "Select color" ), true );
|
|
0 commit comments