From a715ce6d88a17986068d60ca9d6bf37fd2d21e8a Mon Sep 17 00:00:00 2001 From: "Juergen E. Fischer" Date: Mon, 9 Jun 2014 19:09:15 +0200 Subject: [PATCH] datum transformation selection: * respect the 'auto enable otf' setting * don't ask if otf is off or for layers without geometry * ask when otf was switched on * show more information in selection dialog --- .../layertree/qgslayertreemapcanvasbridge.sip | 13 ++++ src/app/qgisapp.cpp | 19 ++++- src/gui/qgsdatumtransformdialog.cpp | 19 ++++- src/gui/qgsdatumtransformdialog.h | 1 + src/gui/qgsmapcanvas.cpp | 9 +++ src/ui/qgsdatumtransformdialogbase.ui | 76 ++++++++++++++++++- 6 files changed, 127 insertions(+), 10 deletions(-) diff --git a/python/gui/layertree/qgslayertreemapcanvasbridge.sip b/python/gui/layertree/qgslayertreemapcanvasbridge.sip index 87298cf20de..4fc9dcd15ca 100644 --- a/python/gui/layertree/qgslayertreemapcanvasbridge.sip +++ b/python/gui/layertree/qgslayertreemapcanvasbridge.sip @@ -57,4 +57,17 @@ class QgsLayerTreeMapCanvasBridge : QObject void hasCustomLayerOrderChanged( bool ); void customLayerOrderChanged( const QStringList& order ); + protected: + + void defaultLayerOrder( QgsLayerTreeNode* node, QStringList& order ) const; + + void setCanvasLayers( QgsLayerTreeNode* node, QList& layers ); + + void deferredSetCanvasLayers(); + + protected slots: + void nodeAddedChildren( QgsLayerTreeNode* node, int indexFrom, int indexTo ); + void nodeRemovedChildren(); + void nodeVisibilityChanged(); + void nodeCustomPropertyChanged( QgsLayerTreeNode* node, QString key ); }; diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 6be9aa7f4ca..76e0dfe0df6 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -2318,6 +2318,10 @@ void QgisApp::initLayerTreeView() connect( QgsProject::instance(), SIGNAL( writeProject( QDomDocument& ) ), mLayerTreeCanvasBridge, SLOT( writeProject( QDomDocument& ) ) ); connect( QgsProject::instance(), SIGNAL( readProject( QDomDocument ) ), mLayerTreeCanvasBridge, SLOT( readProject( QDomDocument ) ) ); + bool otfTransformAutoEnable = QSettings().value( "/Projections/otfTransformAutoEnable", true ).toBool(); + mLayerTreeCanvasBridge->setAutoEnableCrsTransform( otfTransformAutoEnable ); + mLayerTreeCanvasBridge->setAutoSetupOnFirstLayer( otfTransformAutoEnable ); + mMapLayerOrder = new QgsCustomLayerOrderWidget( mLayerTreeCanvasBridge, this ); mMapLayerOrder->setObjectName( "theMapLayerOrder" ); @@ -7286,6 +7290,10 @@ void QgisApp::showOptionsDialog( QWidget *parent, QString currentPage ) qobject_cast( mMapTools.mMeasureDist )->updateSettings(); qobject_cast( mMapTools.mMeasureArea )->updateSettings(); qobject_cast( mMapTools.mMeasureAngle )->updateSettings(); + + bool otfTransformAutoEnable = mySettings.value( "/Projections/otfTransformAutoEnable", true ).toBool(); + mLayerTreeCanvasBridge->setAutoEnableCrsTransform( otfTransformAutoEnable ); + mLayerTreeCanvasBridge->setAutoSetupOnFirstLayer( otfTransformAutoEnable ); } delete optionsDialog; @@ -9601,11 +9609,18 @@ void QgisApp::readProject( const QDomDocument &doc ) projectChanged( doc ); // force update of canvas, without automatic changes to extent and OTF projections + bool autoEnableCrsTransform = mLayerTreeCanvasBridge->autoEnableCrsTransform(); + bool autoSetupOnFirstLayer = mLayerTreeCanvasBridge->autoSetupOnFirstLayer(); mLayerTreeCanvasBridge->setAutoEnableCrsTransform( false ); mLayerTreeCanvasBridge->setAutoSetupOnFirstLayer( false ); + mLayerTreeCanvasBridge->setCanvasLayers(); - mLayerTreeCanvasBridge->setAutoEnableCrsTransform( true ); - mLayerTreeCanvasBridge->setAutoSetupOnFirstLayer( true ); + + if ( autoEnableCrsTransform ) + mLayerTreeCanvasBridge->setAutoEnableCrsTransform( true ); + + if ( autoSetupOnFirstLayer ) + mLayerTreeCanvasBridge->setAutoSetupOnFirstLayer( true ); } void QgisApp::showLayerProperties( QgsMapLayer *ml ) diff --git a/src/gui/qgsdatumtransformdialog.cpp b/src/gui/qgsdatumtransformdialog.cpp index 5c08895f47d..f60adbdcc72 100644 --- a/src/gui/qgsdatumtransformdialog.cpp +++ b/src/gui/qgsdatumtransformdialog.cpp @@ -38,6 +38,9 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QString& layerName, cons mHideDeprecatedCheckBox->setChecked( settings.value( "/Windows/DatumTransformDialog/hideDeprecated", false ).toBool() ); mRememberSelectionCheckBox->setChecked( settings.value( "/Windows/DatumTransformDialog/rememberSelection", false ).toBool() ); + mLabelSrcDescription->setText( "" ); + mLabelDstDescription->setText( "" ); + for ( int i = 0; i < 2; i++ ) { mDatumTransformTreeWidget->setColumnWidth( i, settings.value( QString( "/Windows/DatumTransformDialog/columnWidths/%1" ).arg( i ), mDatumTransformTreeWidget->columnWidth( i ) ).toInt() ); @@ -225,10 +228,18 @@ void QgsDatumTransformDialog::on_mHideDeprecatedCheckBox_stateChanged( int ) load(); } +void QgsDatumTransformDialog::on_mDatumTransformTreeWidget_currentItemChanged( QTreeWidgetItem *current, QTreeWidgetItem * ) +{ + mLabelSrcDescription->setText( current->toolTip( 0 ) ); + mLabelDstDescription->setText( current->toolTip( 1 ) ); +} + void QgsDatumTransformDialog::updateTitle() { - QString title = tr( "Select datum transformations for layer" ) + " " + mLayerName; - if ( !mSrcCRSauthId.isEmpty() && !mDestCRSauthId.isEmpty() ) - title += QString( " (%1 -> %2)" ).arg( mSrcCRSauthId ).arg( mDestCRSauthId ); - setWindowTitle( title ); + mLabelLayer->setText( mLayerName ); + QgsCoordinateReferenceSystem crs; + crs.createFromString( mSrcCRSauthId ); + mLabelSrcCrs->setText( QString( "%1 - %2" ).arg( mSrcCRSauthId ).arg( crs.isValid() ? crs.description() : tr( "unknown" ) ) ); + crs.createFromString( mDestCRSauthId ); + mLabelDstCrs->setText( QString( "%1 - %2" ).arg( mDestCRSauthId ).arg( crs.isValid() ? crs.description() : tr( "unknown" ) ) ); } diff --git a/src/gui/qgsdatumtransformdialog.h b/src/gui/qgsdatumtransformdialog.h index 20f96abfb9b..d722b850f2c 100644 --- a/src/gui/qgsdatumtransformdialog.h +++ b/src/gui/qgsdatumtransformdialog.h @@ -36,6 +36,7 @@ class GUI_EXPORT QgsDatumTransformDialog: public QDialog, private Ui::QgsDatumTr public slots: void on_mHideDeprecatedCheckBox_stateChanged( int state ); + void on_mDatumTransformTreeWidget_currentItemChanged( QTreeWidgetItem *, QTreeWidgetItem * ); private: QgsDatumTransformDialog(); diff --git a/src/gui/qgsmapcanvas.cpp b/src/gui/qgsmapcanvas.cpp index cd5182aa8cb..d900bf6dd01 100644 --- a/src/gui/qgsmapcanvas.cpp +++ b/src/gui/qgsmapcanvas.cpp @@ -480,6 +480,8 @@ void QgsMapCanvas::setCrsTransformEnabled( bool enabled ) mSettings.setCrsTransformEnabled( enabled ); + updateDatumTransformEntries(); + refresh(); emit hasCrsTransformEnabledChanged( enabled ); @@ -1555,6 +1557,9 @@ void QgsMapCanvas::connectNotify( const char * signal ) void QgsMapCanvas::updateDatumTransformEntries() { + if ( !mSettings.hasCrsTransformEnabled() ) + return; + QString destAuthId = mSettings.destinationCrs().authid(); foreach ( QString layerID, mSettings.layers() ) { @@ -1562,6 +1567,10 @@ void QgsMapCanvas::updateDatumTransformEntries() if ( !layer ) continue; + QgsVectorLayer *vl = qobject_cast( layer ); + if ( vl && vl->geometryType() == QGis::NoGeometry ) + continue; + // if there are more options, ask the user which datum transform to use if ( !mSettings.datumTransformStore().hasEntryForLayer( layer ) ) getDatumTransformInfo( layer, layer->crs().authid(), destAuthId ); diff --git a/src/ui/qgsdatumtransformdialogbase.ui b/src/ui/qgsdatumtransformdialogbase.ui index 76fa63d32d8..35f5cd8c8bd 100644 --- a/src/ui/qgsdatumtransformdialogbase.ui +++ b/src/ui/qgsdatumtransformdialogbase.ui @@ -6,15 +6,15 @@ 0 0 - 569 - 237 + 547 + 285 Select datum transformations - + @@ -33,7 +33,7 @@ - + @@ -65,6 +65,34 @@ + + + Destination CRS + + + + + + + Source CRS + + + + + + + Destination CRS + + + + + + + Source CRS + + + + Qt::Horizontal @@ -74,6 +102,46 @@ + + + + Layer + + + + + + + layer name + + + + + + + Description + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + Description + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + +