Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #52528 from elpaso/bugfix-gh52446-map-coords-widge…
…t-locale-fix

Fix coords widget locale issues (plus other unreported)
  • Loading branch information
elpaso committed Apr 20, 2023
2 parents 24f40ca + 10df998 commit dc04a2d
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 6 deletions.
39 changes: 34 additions & 5 deletions src/app/qgsstatusbarcoordinateswidget.cpp
Expand Up @@ -60,9 +60,7 @@ QgsStatusBarCoordinatesWidget::QgsStatusBarCoordinatesWidget( QWidget *parent )
mLineEdit->setAlignment( Qt::AlignCenter );
connect( mLineEdit, &QLineEdit::returnPressed, this, &QgsStatusBarCoordinatesWidget::validateCoordinates );

const QRegularExpression coordValidator( "[+-]?\\d+\\.?\\d*\\s*,\\s*[+-]?\\d+\\.?\\d*" );
mCoordsEditValidator = new QRegularExpressionValidator( coordValidator, this );
mLineEdit->setToolTip( tr( "Current map coordinate (longitude,latitude or east,north)" ) );
mLineEdit->setToolTip( tr( "Current map coordinate (longitude latitude or east north)" ) );

//toggle to switch between mouse pos and extents display in status bar widget
mToggleExtentsViewButton = new QToolButton( this );
Expand Down Expand Up @@ -173,6 +171,7 @@ void QgsStatusBarCoordinatesWidget::validateCoordinates()
QString coordText = mLineEdit->text();
const thread_local QRegularExpression sMultipleWhitespaceRx( QStringLiteral( " {2,}" ) );
coordText.replace( sMultipleWhitespaceRx, QStringLiteral( " " ) );
coordText.remove( QStringLiteral( "°" ) );

QStringList parts = coordText.split( ',' );
if ( parts.size() == 2 )
Expand All @@ -191,6 +190,17 @@ void QgsStatusBarCoordinatesWidget::validateCoordinates()
}
}

// Use locale
if ( !xOk || !yOk )
{
parts = coordText.split( ' ' );
if ( parts.size() == 2 )
{
first = QLocale().toDouble( parts.at( 0 ), &xOk );
second = QLocale().toDouble( parts.at( 1 ), &yOk );
}
}

if ( !xOk || !yOk )
return;

Expand All @@ -202,13 +212,32 @@ void QgsStatusBarCoordinatesWidget::validateCoordinates()
{
case Qgis::CoordinateOrder::Default:
case Qgis::CoordinateOrder::XY:
mMapCanvas->setCenter( QgsPointXY( first, second ) );
break;
case Qgis::CoordinateOrder::YX:
mMapCanvas->setCenter( QgsPointXY( second, first ) );
std::swap( first, second );
break;
}

QgsPointXY centerPoint { first, second };

const QgsCoordinateReferenceSystem displayCrs = QgsProject::instance()->displaySettings()->coordinateCrs();
const QgsCoordinateReferenceSystem canvasCrs = mMapCanvas->mapSettings().destinationCrs();
if ( displayCrs.isValid() && canvasCrs.isValid() && displayCrs != canvasCrs )
{
const QgsCoordinateTransform ct { displayCrs, canvasCrs, QgsProject::instance()->transformContext() };
try
{

centerPoint = ct.transform( centerPoint );
}
catch ( const QgsCsException & )
{
return;
}
}

mMapCanvas->setCenter( centerPoint );

mMapCanvas->refresh();
}

Expand Down
1 change: 0 additions & 1 deletion src/app/qgsstatusbarcoordinateswidget.h
Expand Up @@ -78,7 +78,6 @@ class APP_EXPORT QgsStatusBarCoordinatesWidget : public QWidget
//! Widget that will live on the statusbar to display "Coordinate / Extent"
QLabel *mLabel = nullptr;

QValidator *mCoordsEditValidator = nullptr;
QTimer *mDizzyTimer = nullptr;
QgsMapCanvas *mMapCanvas = nullptr;
int mTwoCharSize = 0;
Expand Down

0 comments on commit dc04a2d

Please sign in to comment.