@@ -410,6 +410,51 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WFlags fl ) :
410410 // display the crs as friendly text rather than in wkt
411411 leProjectGlobalCrs->setText ( mDefaultCrs .authid () + " - " + mDefaultCrs .description () );
412412
413+ // default datum transformations
414+ settings.beginGroup ( " /Projections" );
415+ QStringList projectionKeys = settings.allKeys ();
416+
417+ // collect src and dest entries that belong together
418+ QMap< QPair< QString, QString >, QPair< int , int > > transforms;
419+ QStringList::const_iterator pkeyIt = projectionKeys.constBegin ();
420+ for ( ; pkeyIt != projectionKeys.constEnd (); ++pkeyIt )
421+ {
422+ if ( pkeyIt->contains ( " srcTransform" ) || pkeyIt->contains ( " destTransform" ) )
423+ {
424+ QStringList split = pkeyIt->split ( " /" );
425+ QString srcAuthId, destAuthId;
426+ if ( split.size () > 0 )
427+ {
428+ srcAuthId = split.at ( 0 );
429+ }
430+ if ( split.size () > 1 )
431+ {
432+ destAuthId = split.at ( 1 ).split ( " _" ).at ( 0 );
433+ }
434+
435+ if ( pkeyIt->contains ( " srcTransform" ) )
436+ {
437+ transforms[ qMakePair ( srcAuthId, destAuthId )].first = settings.value ( *pkeyIt ).toInt ();
438+ }
439+ else if ( pkeyIt->contains ( " destTransform" ) )
440+ {
441+ transforms[ qMakePair ( srcAuthId, destAuthId )].second = settings.value ( *pkeyIt ).toInt ();
442+ }
443+ }
444+ }
445+ settings.endGroup ();
446+
447+ QMap< QPair< QString, QString >, QPair< int , int > >::const_iterator transformIt = transforms.constBegin ();
448+ for ( ; transformIt != transforms.constEnd (); ++transformIt )
449+ {
450+ const QPair< int , int >& v = transformIt.value ();
451+ QTreeWidgetItem* item = new QTreeWidgetItem ();
452+ item->setText ( 0 , transformIt.key ().first );
453+ item->setText ( 1 , transformIt.key ().second );
454+ item->setText ( 2 , QString::number ( v.first ) );
455+ item->setText ( 3 , QString::number ( v.second ) );
456+ mDefaultDatumTransformTreeWidget ->addTopLevelItem ( item );
457+ }
413458
414459 // Set the units for measuring
415460 QGis::UnitType myDisplayUnits = QGis::fromLiteral ( settings.value ( " /qgis/measure/displayunits" , QGis::toLiteral ( QGis::Meters ) ).toString () );
@@ -1196,6 +1241,8 @@ void QgsOptions::saveOptions()
11961241 {
11971242 mStyleSheetBuilder ->saveToSettings ( mStyleSheetNewOpts );
11981243 }
1244+
1245+ saveDefaultDatumTransformations ();
11991246}
12001247
12011248void QgsOptions::rejectOptions ()
@@ -1850,3 +1897,68 @@ void QgsOptions::saveContrastEnhancement( QComboBox *cbox, QString name )
18501897 settings.setValue ( " /Raster/defaultContrastEnhancementAlgorithm/" + name, value );
18511898}
18521899
1900+ void QgsOptions::on_mRemoveDefaultTransformButton_clicked ()
1901+ {
1902+ QList<QTreeWidgetItem*> items = mDefaultDatumTransformTreeWidget ->selectedItems ();
1903+ for ( int i = 0 ; i < items.size (); ++i )
1904+ {
1905+ int idx = mDefaultDatumTransformTreeWidget ->indexOfTopLevelItem ( items.at ( i ) );
1906+ if ( idx >= 0 )
1907+ {
1908+ delete mDefaultDatumTransformTreeWidget ->takeTopLevelItem ( idx );
1909+ }
1910+ }
1911+ }
1912+
1913+ void QgsOptions::on_mAddDefaultTransformButton_clicked ()
1914+ {
1915+ QTreeWidgetItem* item = new QTreeWidgetItem ();
1916+ item->setText ( 0 , " " );
1917+ item->setText ( 1 , " " );
1918+ item->setText ( 2 , " " );
1919+ item->setText ( 3 , " " );
1920+ item->setFlags ( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
1921+ mDefaultDatumTransformTreeWidget ->addTopLevelItem ( item );
1922+ }
1923+
1924+ void QgsOptions::saveDefaultDatumTransformations ()
1925+ {
1926+ QSettings s;
1927+ s.beginGroup ( " /Projections" );
1928+ QStringList groupKeys = s.allKeys ();
1929+ QStringList::const_iterator groupKeyIt = groupKeys.constBegin ();
1930+ for ( ; groupKeyIt != groupKeys.constEnd (); ++groupKeyIt )
1931+ {
1932+ if ( groupKeyIt->contains ( " srcTransform" ) || groupKeyIt->contains ( " destTransform" ) )
1933+ {
1934+ s.remove ( *groupKeyIt );
1935+ }
1936+ }
1937+
1938+ int nDefaultTransforms = mDefaultDatumTransformTreeWidget ->topLevelItemCount ();
1939+ for ( int i = 0 ; i < nDefaultTransforms; ++i )
1940+ {
1941+ QTreeWidgetItem* item = mDefaultDatumTransformTreeWidget ->topLevelItem ( i );
1942+ QString srcAuthId = item->text ( 0 );
1943+ QString destAuthId = item->text ( 1 );
1944+ if ( srcAuthId.isEmpty () || destAuthId.isEmpty () )
1945+ {
1946+ continue ;
1947+ }
1948+
1949+ bool conversionOk;
1950+ int srcDatumTransform = item->text ( 2 ).toInt ( &conversionOk );
1951+ if ( conversionOk )
1952+ {
1953+ s.setValue ( srcAuthId + " //" + destAuthId + " _srcTransform" , srcDatumTransform );
1954+ }
1955+ int destDatumTransform = item->text ( 3 ).toInt ( &conversionOk );
1956+ if ( conversionOk )
1957+ {
1958+ s.setValue ( srcAuthId + " //" + destAuthId + " _destTransform" , destDatumTransform );
1959+ }
1960+ }
1961+
1962+ s.endGroup ();
1963+ }
1964+
0 commit comments