Skip to content

Commit a303ef5

Browse files
committed
fix disabled map unit widgets when opening project prop. dialog
(fixes #17208)
1 parent ae956d7 commit a303ef5

File tree

2 files changed

+39
-27
lines changed

2 files changed

+39
-27
lines changed

src/app/qgsprojectproperties.cpp

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas *mapCanvas, QWidget *pa
152152
// Properties stored in map canvas's QgsMapRenderer
153153
// these ones are propagated to QgsProject by a signal
154154

155-
updateGuiForMapUnits( QgsProject::instance()->crs().mapUnits() );
155+
mCrs = QgsProject::instance()->crs();
156+
updateGuiForMapUnits();
156157
projectionSelector->setCrs( QgsProject::instance()->crs() );
157158

158159
// Datum transforms
@@ -235,12 +236,25 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas *mapCanvas, QWidget *pa
235236
// selection of the ellipsoid from settings is defferred to a later point, because it would
236237
// be overridden in the meanwhile by the projection selector
237238
populateEllipsoidList();
238-
239239
if ( !QgsProject::instance()->crs().isValid() )
240240
{
241241
cmbEllipsoid->setCurrentIndex( 0 );
242242
cmbEllipsoid->setEnabled( false );
243243
}
244+
else
245+
{
246+
// attempt to reset the projection ellipsoid according to the srs
247+
int index = 0;
248+
for ( int i = 0; i < mEllipsoidList.length(); i++ )
249+
{
250+
if ( mEllipsoidList[ i ].acronym == QgsProject::instance()->crs().ellipsoidAcronym() )
251+
{
252+
index = i;
253+
break;
254+
}
255+
}
256+
updateEllipsoidUI( index );
257+
}
244258

245259
QString format = QgsProject::instance()->readEntry( QStringLiteral( "PositionPrecision" ), QStringLiteral( "/DegreeFormat" ), QStringLiteral( "MU" ) );
246260
if ( format == QLatin1String( "MU" ) )
@@ -1260,9 +1274,9 @@ void QgsProjectProperties::cbxWCSPubliedStateChanged( int aIdx )
12601274
}
12611275
}
12621276

1263-
void QgsProjectProperties::updateGuiForMapUnits( QgsUnitTypes::DistanceUnit units )
1277+
void QgsProjectProperties::updateGuiForMapUnits()
12641278
{
1265-
if ( !projectionSelector->crs().isValid() )
1279+
if ( !mCrs.isValid() )
12661280
{
12671281
// no projection set - disable everything!
12681282
int idx = mDistanceUnitsCombo->findData( QgsUnitTypes::DistanceUnknownUnit );
@@ -1289,6 +1303,8 @@ void QgsProjectProperties::updateGuiForMapUnits( QgsUnitTypes::DistanceUnit unit
12891303
}
12901304
else
12911305
{
1306+
QgsUnitTypes::DistanceUnit units = mCrs.mapUnits();
1307+
12921308
mDistanceUnitsCombo->setEnabled( true );
12931309
mAreaUnitsCombo->setEnabled( true );
12941310
mCoordinateDisplayComboBox->setEnabled( true );
@@ -1319,27 +1335,23 @@ void QgsProjectProperties::srIdUpdated()
13191335
if ( !projectionSelector->hasValidSelection() )
13201336
return;
13211337

1322-
QgsCoordinateReferenceSystem srs = projectionSelector->crs();
1338+
mCrs = projectionSelector->crs();
1339+
updateGuiForMapUnits();
13231340

1324-
//set radio button to crs map unit type
1325-
QgsUnitTypes::DistanceUnit units = srs.mapUnits();
1326-
1327-
updateGuiForMapUnits( units );
1328-
1329-
if ( srs.isValid() )
1341+
if ( mCrs.isValid() )
13301342
{
13311343
cmbEllipsoid->setEnabled( true );
13321344
// attempt to reset the projection ellipsoid according to the srs
1333-
int myIndex = 0;
1345+
int index = 0;
13341346
for ( int i = 0; i < mEllipsoidList.length(); i++ )
13351347
{
1336-
if ( mEllipsoidList[ i ].acronym == srs.ellipsoidAcronym() )
1348+
if ( mEllipsoidList[ i ].acronym == mCrs.ellipsoidAcronym() )
13371349
{
1338-
myIndex = i;
1350+
index = i;
13391351
break;
13401352
}
13411353
}
1342-
updateEllipsoidUI( myIndex );
1354+
updateEllipsoidUI( index );
13431355
}
13441356
else
13451357
{
@@ -1410,10 +1422,8 @@ void QgsProjectProperties::pbnWMSSetUsedSRS_clicked()
14101422
}
14111423

14121424
QSet<QString> crsList;
1413-
1414-
QgsCoordinateReferenceSystem srs = projectionSelector->crs();
1415-
if ( srs.isValid() )
1416-
crsList << srs.authid();
1425+
if ( mCrs.isValid() )
1426+
crsList << mCrs.authid();
14171427

14181428
const QMap<QString, QgsMapLayer *> &mapLayers = QgsProject::instance()->mapLayers();
14191429
for ( QMap<QString, QgsMapLayer *>::const_iterator it = mapLayers.constBegin(); it != mapLayers.constEnd(); ++it )
@@ -1927,7 +1937,7 @@ void QgsProjectProperties::updateEllipsoidUI( int newIndex )
19271937
leSemiMajor->clear();
19281938
leSemiMinor->clear();
19291939

1930-
cmbEllipsoid->setEnabled( projectionSelector->crs().isValid() );
1940+
cmbEllipsoid->setEnabled( mCrs.isValid() );
19311941
cmbEllipsoid->setToolTip( QLatin1String( "" ) );
19321942
if ( mEllipsoidList.at( mEllipsoidIndex ).acronym.startsWith( QLatin1String( "PARAMETER:" ) ) )
19331943
{
@@ -1945,7 +1955,7 @@ void QgsProjectProperties::updateEllipsoidUI( int newIndex )
19451955
leSemiMinor->setText( QLocale::system().toString( myMinor, 'f', 3 ) );
19461956
}
19471957

1948-
if ( projectionSelector->crs().isValid() )
1958+
if ( mCrs.isValid() )
19491959
cmbEllipsoid->setCurrentIndex( mEllipsoidIndex ); // Not always necessary
19501960
}
19511961

@@ -1956,24 +1966,24 @@ void QgsProjectProperties::projectionSelectorInitialized()
19561966
// Reading ellipsoid from settings
19571967
QStringList mySplitEllipsoid = QgsProject::instance()->ellipsoid().split( ':' );
19581968

1959-
int myIndex = 0;
1969+
int index = 0;
19601970
for ( int i = 0; i < mEllipsoidList.length(); i++ )
19611971
{
19621972
if ( mEllipsoidList.at( i ).acronym.startsWith( mySplitEllipsoid[ 0 ] ) )
19631973
{
1964-
myIndex = i;
1974+
index = i;
19651975
break;
19661976
}
19671977
}
19681978

19691979
// Update parameters if present.
19701980
if ( mySplitEllipsoid.length() >= 3 )
19711981
{
1972-
mEllipsoidList[ myIndex ].semiMajor = mySplitEllipsoid[ 1 ].toDouble();
1973-
mEllipsoidList[ myIndex ].semiMinor = mySplitEllipsoid[ 2 ].toDouble();
1982+
mEllipsoidList[ index ].semiMajor = mySplitEllipsoid[ 1 ].toDouble();
1983+
mEllipsoidList[ index ].semiMinor = mySplitEllipsoid[ 2 ].toDouble();
19741984
}
19751985

1976-
updateEllipsoidUI( myIndex );
1986+
updateEllipsoidUI( index );
19771987
}
19781988

19791989
void QgsProjectProperties::mButtonAddColor_clicked()

src/app/qgsprojectproperties.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,8 @@ class APP_EXPORT QgsProjectProperties : public QgsOptionsDialogBase, private Ui:
174174
QgsMapCanvas *mMapCanvas = nullptr;
175175
QgsStyle *mStyle = nullptr;
176176

177+
QgsCoordinateReferenceSystem mCrs;
178+
177179
void populateStyles();
178180
void editSymbol( QComboBox *cbo );
179181

@@ -217,7 +219,7 @@ class APP_EXPORT QgsProjectProperties : public QgsOptionsDialogBase, private Ui:
217219

218220
static const char *GEO_NONE_DESC;
219221

220-
void updateGuiForMapUnits( QgsUnitTypes::DistanceUnit units );
222+
void updateGuiForMapUnits();
221223

222224
void showHelp();
223225
};

0 commit comments

Comments
 (0)