Skip to content

Commit a715ce6

Browse files
committed
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
1 parent 32a3f5c commit a715ce6

6 files changed

+127
-10
lines changed

python/gui/layertree/qgslayertreemapcanvasbridge.sip

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,17 @@ class QgsLayerTreeMapCanvasBridge : QObject
5757
void hasCustomLayerOrderChanged( bool );
5858
void customLayerOrderChanged( const QStringList& order );
5959

60+
protected:
61+
62+
void defaultLayerOrder( QgsLayerTreeNode* node, QStringList& order ) const;
63+
64+
void setCanvasLayers( QgsLayerTreeNode* node, QList<QgsMapCanvasLayer>& layers );
65+
66+
void deferredSetCanvasLayers();
67+
68+
protected slots:
69+
void nodeAddedChildren( QgsLayerTreeNode* node, int indexFrom, int indexTo );
70+
void nodeRemovedChildren();
71+
void nodeVisibilityChanged();
72+
void nodeCustomPropertyChanged( QgsLayerTreeNode* node, QString key );
6073
};

src/app/qgisapp.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2318,6 +2318,10 @@ void QgisApp::initLayerTreeView()
23182318
connect( QgsProject::instance(), SIGNAL( writeProject( QDomDocument& ) ), mLayerTreeCanvasBridge, SLOT( writeProject( QDomDocument& ) ) );
23192319
connect( QgsProject::instance(), SIGNAL( readProject( QDomDocument ) ), mLayerTreeCanvasBridge, SLOT( readProject( QDomDocument ) ) );
23202320

2321+
bool otfTransformAutoEnable = QSettings().value( "/Projections/otfTransformAutoEnable", true ).toBool();
2322+
mLayerTreeCanvasBridge->setAutoEnableCrsTransform( otfTransformAutoEnable );
2323+
mLayerTreeCanvasBridge->setAutoSetupOnFirstLayer( otfTransformAutoEnable );
2324+
23212325
mMapLayerOrder = new QgsCustomLayerOrderWidget( mLayerTreeCanvasBridge, this );
23222326
mMapLayerOrder->setObjectName( "theMapLayerOrder" );
23232327

@@ -7286,6 +7290,10 @@ void QgisApp::showOptionsDialog( QWidget *parent, QString currentPage )
72867290
qobject_cast<QgsMeasureTool*>( mMapTools.mMeasureDist )->updateSettings();
72877291
qobject_cast<QgsMeasureTool*>( mMapTools.mMeasureArea )->updateSettings();
72887292
qobject_cast<QgsMapToolMeasureAngle*>( mMapTools.mMeasureAngle )->updateSettings();
7293+
7294+
bool otfTransformAutoEnable = mySettings.value( "/Projections/otfTransformAutoEnable", true ).toBool();
7295+
mLayerTreeCanvasBridge->setAutoEnableCrsTransform( otfTransformAutoEnable );
7296+
mLayerTreeCanvasBridge->setAutoSetupOnFirstLayer( otfTransformAutoEnable );
72897297
}
72907298

72917299
delete optionsDialog;
@@ -9601,11 +9609,18 @@ void QgisApp::readProject( const QDomDocument &doc )
96019609
projectChanged( doc );
96029610

96039611
// force update of canvas, without automatic changes to extent and OTF projections
9612+
bool autoEnableCrsTransform = mLayerTreeCanvasBridge->autoEnableCrsTransform();
9613+
bool autoSetupOnFirstLayer = mLayerTreeCanvasBridge->autoSetupOnFirstLayer();
96049614
mLayerTreeCanvasBridge->setAutoEnableCrsTransform( false );
96059615
mLayerTreeCanvasBridge->setAutoSetupOnFirstLayer( false );
9616+
96069617
mLayerTreeCanvasBridge->setCanvasLayers();
9607-
mLayerTreeCanvasBridge->setAutoEnableCrsTransform( true );
9608-
mLayerTreeCanvasBridge->setAutoSetupOnFirstLayer( true );
9618+
9619+
if ( autoEnableCrsTransform )
9620+
mLayerTreeCanvasBridge->setAutoEnableCrsTransform( true );
9621+
9622+
if ( autoSetupOnFirstLayer )
9623+
mLayerTreeCanvasBridge->setAutoSetupOnFirstLayer( true );
96099624
}
96109625

96119626
void QgisApp::showLayerProperties( QgsMapLayer *ml )

src/gui/qgsdatumtransformdialog.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( const QString& layerName, cons
3838
mHideDeprecatedCheckBox->setChecked( settings.value( "/Windows/DatumTransformDialog/hideDeprecated", false ).toBool() );
3939
mRememberSelectionCheckBox->setChecked( settings.value( "/Windows/DatumTransformDialog/rememberSelection", false ).toBool() );
4040

41+
mLabelSrcDescription->setText( "" );
42+
mLabelDstDescription->setText( "" );
43+
4144
for ( int i = 0; i < 2; i++ )
4245
{
4346
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 )
225228
load();
226229
}
227230

231+
void QgsDatumTransformDialog::on_mDatumTransformTreeWidget_currentItemChanged( QTreeWidgetItem *current, QTreeWidgetItem * )
232+
{
233+
mLabelSrcDescription->setText( current->toolTip( 0 ) );
234+
mLabelDstDescription->setText( current->toolTip( 1 ) );
235+
}
236+
228237
void QgsDatumTransformDialog::updateTitle()
229238
{
230-
QString title = tr( "Select datum transformations for layer" ) + " " + mLayerName;
231-
if ( !mSrcCRSauthId.isEmpty() && !mDestCRSauthId.isEmpty() )
232-
title += QString( " (%1 -> %2)" ).arg( mSrcCRSauthId ).arg( mDestCRSauthId );
233-
setWindowTitle( title );
239+
mLabelLayer->setText( mLayerName );
240+
QgsCoordinateReferenceSystem crs;
241+
crs.createFromString( mSrcCRSauthId );
242+
mLabelSrcCrs->setText( QString( "%1 - %2" ).arg( mSrcCRSauthId ).arg( crs.isValid() ? crs.description() : tr( "unknown" ) ) );
243+
crs.createFromString( mDestCRSauthId );
244+
mLabelDstCrs->setText( QString( "%1 - %2" ).arg( mDestCRSauthId ).arg( crs.isValid() ? crs.description() : tr( "unknown" ) ) );
234245
}

src/gui/qgsdatumtransformdialog.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class GUI_EXPORT QgsDatumTransformDialog: public QDialog, private Ui::QgsDatumTr
3636

3737
public slots:
3838
void on_mHideDeprecatedCheckBox_stateChanged( int state );
39+
void on_mDatumTransformTreeWidget_currentItemChanged( QTreeWidgetItem *, QTreeWidgetItem * );
3940

4041
private:
4142
QgsDatumTransformDialog();

src/gui/qgsmapcanvas.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,8 @@ void QgsMapCanvas::setCrsTransformEnabled( bool enabled )
480480

481481
mSettings.setCrsTransformEnabled( enabled );
482482

483+
updateDatumTransformEntries();
484+
483485
refresh();
484486

485487
emit hasCrsTransformEnabledChanged( enabled );
@@ -1555,13 +1557,20 @@ void QgsMapCanvas::connectNotify( const char * signal )
15551557

15561558
void QgsMapCanvas::updateDatumTransformEntries()
15571559
{
1560+
if ( !mSettings.hasCrsTransformEnabled() )
1561+
return;
1562+
15581563
QString destAuthId = mSettings.destinationCrs().authid();
15591564
foreach ( QString layerID, mSettings.layers() )
15601565
{
15611566
QgsMapLayer* layer = QgsMapLayerRegistry::instance()->mapLayer( layerID );
15621567
if ( !layer )
15631568
continue;
15641569

1570+
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( layer );
1571+
if ( vl && vl->geometryType() == QGis::NoGeometry )
1572+
continue;
1573+
15651574
// if there are more options, ask the user which datum transform to use
15661575
if ( !mSettings.datumTransformStore().hasEntryForLayer( layer ) )
15671576
getDatumTransformInfo( layer, layer->crs().authid(), destAuthId );

src/ui/qgsdatumtransformdialogbase.ui

Lines changed: 72 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>569</width>
10-
<height>237</height>
9+
<width>547</width>
10+
<height>285</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
1414
<string>Select datum transformations</string>
1515
</property>
1616
<layout class="QGridLayout" name="gridLayout">
17-
<item row="0" column="0">
17+
<item row="3" column="0" colspan="2">
1818
<widget class="QTreeWidget" name="mDatumTransformTreeWidget">
1919
<column>
2020
<property name="text">
@@ -33,7 +33,7 @@
3333
</column>
3434
</widget>
3535
</item>
36-
<item row="1" column="0">
36+
<item row="6" column="0" colspan="2">
3737
<layout class="QHBoxLayout" name="horizontalLayout">
3838
<item>
3939
<widget class="QCheckBox" name="mRememberSelectionCheckBox">
@@ -65,6 +65,34 @@
6565
</layout>
6666
</item>
6767
<item row="2" column="0">
68+
<widget class="QLabel" name="label_2">
69+
<property name="text">
70+
<string>Destination CRS</string>
71+
</property>
72+
</widget>
73+
</item>
74+
<item row="1" column="1">
75+
<widget class="QLabel" name="mLabelSrcCrs">
76+
<property name="text">
77+
<string notr="true">Source CRS</string>
78+
</property>
79+
</widget>
80+
</item>
81+
<item row="2" column="1">
82+
<widget class="QLabel" name="mLabelDstCrs">
83+
<property name="text">
84+
<string notr="true">Destination CRS</string>
85+
</property>
86+
</widget>
87+
</item>
88+
<item row="1" column="0">
89+
<widget class="QLabel" name="label">
90+
<property name="text">
91+
<string>Source CRS</string>
92+
</property>
93+
</widget>
94+
</item>
95+
<item row="7" column="0" colspan="2">
6896
<widget class="QDialogButtonBox" name="buttonBox">
6997
<property name="orientation">
7098
<enum>Qt::Horizontal</enum>
@@ -74,6 +102,46 @@
74102
</property>
75103
</widget>
76104
</item>
105+
<item row="0" column="0">
106+
<widget class="QLabel" name="label_3">
107+
<property name="text">
108+
<string>Layer</string>
109+
</property>
110+
</widget>
111+
</item>
112+
<item row="0" column="1">
113+
<widget class="QLabel" name="mLabelLayer">
114+
<property name="text">
115+
<string notr="true">layer name</string>
116+
</property>
117+
</widget>
118+
</item>
119+
<item row="4" column="1">
120+
<widget class="QLabel" name="mLabelDstDescription">
121+
<property name="text">
122+
<string notr="true">Description</string>
123+
</property>
124+
<property name="alignment">
125+
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
126+
</property>
127+
<property name="wordWrap">
128+
<bool>true</bool>
129+
</property>
130+
</widget>
131+
</item>
132+
<item row="4" column="0">
133+
<widget class="QLabel" name="mLabelSrcDescription">
134+
<property name="text">
135+
<string notr="true">Description</string>
136+
</property>
137+
<property name="alignment">
138+
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
139+
</property>
140+
<property name="wordWrap">
141+
<bool>true</bool>
142+
</property>
143+
</widget>
144+
</item>
77145
</layout>
78146
</widget>
79147
<resources/>

0 commit comments

Comments
 (0)