Skip to content

Commit 3e356be

Browse files
committedOct 2, 2018
Safer projection handling overriding in browser
1 parent 82c6281 commit 3e356be

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed
 

‎src/gui/qgsbrowserdockwidget_p.cpp

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,28 @@ QgsBrowserLayerProperties::QgsBrowserLayerProperties( QWidget *parent )
117117
mHeaderGridLayout->addItem( new QWidgetItem( mUriLabel ), 1, 1 );
118118
}
119119

120+
///@cond PRIVATE
121+
class ProjectionSettingRestorer
122+
{
123+
public:
124+
125+
ProjectionSettingRestorer()
126+
{
127+
QgsSettings settings;
128+
previousSetting = settings.value( QStringLiteral( "/Projections/defaultBehavior" ) ).toString();
129+
settings.setValue( QStringLiteral( "/Projections/defaultBehavior" ), QStringLiteral( "useProject" ) );
130+
}
131+
132+
~ProjectionSettingRestorer()
133+
{
134+
QgsSettings settings;
135+
settings.setValue( QStringLiteral( "/Projections/defaultBehavior" ), previousSetting );
136+
}
137+
138+
QString previousSetting;
139+
};
140+
///@endcond PRIVATE
141+
120142
void QgsBrowserLayerProperties::setItem( QgsDataItem *item )
121143
{
122144
QgsLayerItem *layerItem = qobject_cast<QgsLayerItem *>( item );
@@ -129,13 +151,11 @@ void QgsBrowserLayerProperties::setItem( QgsDataItem *item )
129151
QString layerMetadata = tr( "Error" );
130152
QgsCoordinateReferenceSystem layerCrs;
131153

154+
QString defaultProjectionOption = QgsSettings().value( QStringLiteral( "Projections/defaultBehavior" ), "prompt" ).toString();
132155
// temporarily override /Projections/defaultBehavior to avoid dialog prompt
133-
QgsSettings settings;
134-
QString defaultProjectionOption = settings.value( QStringLiteral( "Projections/defaultBehavior" ), "prompt" ).toString();
135-
if ( settings.value( QStringLiteral( "Projections/defaultBehavior" ), "prompt" ).toString() == QLatin1String( "prompt" ) )
136-
{
137-
settings.setValue( QStringLiteral( "Projections/defaultBehavior" ), "useProject" );
138-
}
156+
// TODO - remove when there is a cleaner way to block the unknown projection dialog!
157+
ProjectionSettingRestorer restorer;
158+
( void )restorer; // no warnings
139159

140160
// find root item
141161
// we need to create a temporary layer to get metadata
@@ -193,12 +213,6 @@ void QgsBrowserLayerProperties::setItem( QgsDataItem *item )
193213
return;
194214
}
195215

196-
// restore /Projections/defaultBehavior
197-
if ( defaultProjectionOption == QLatin1String( "prompt" ) )
198-
{
199-
settings.setValue( QStringLiteral( "Projections/defaultBehavior" ), defaultProjectionOption );
200-
}
201-
202216
mNameLabel->setText( layerItem->name() );
203217
mUriLabel->setText( layerItem->uri() );
204218
mProviderLabel->setText( layerItem->providerKey() );
@@ -212,7 +226,7 @@ void QgsBrowserLayerProperties::setItem( QgsDataItem *item )
212226
QgsCoordinateReferenceSystem defaultCrs =
213227
QgsProject::instance()->crs();
214228
if ( layerCrs == defaultCrs )
215-
mNoticeLabel->setText( "NOTICE: Layer srs set from project (" + defaultCrs.authid() + ')' );
229+
mNoticeLabel->setText( "NOTICE: Layer CRS set from project (" + defaultCrs.authid() + ')' );
216230
}
217231

218232
if ( mNoticeLabel->text().isEmpty() )

0 commit comments

Comments
 (0)
Please sign in to comment.