diff --git a/app/inpututils.cpp b/app/inpututils.cpp index eabbccffa..2bf9ddb0d 100644 --- a/app/inpututils.cpp +++ b/app/inpututils.cpp @@ -168,13 +168,13 @@ QString InputUtils::formatNumber( const double number, int precision ) return QString::number( number, 'f', precision ); } -QString InputUtils::formatDistanceInProjectUnit( const double distanceInMeters, int precision, Qgis::DistanceUnit destUnit ) +QString InputUtils::formatDistanceInProjectUnit( const double distanceInMeters, int precision, Qgis::DistanceUnit destUnit, QgsProject *activeProject ) { Qgis::DistanceUnit distUnit = destUnit; if ( distUnit == Qgis::DistanceUnit::Unknown ) { - distUnit = QgsProject::instance()->distanceUnits(); + distUnit = activeProject->distanceUnits(); } if ( distUnit == Qgis::DistanceUnit::Unknown ) @@ -189,13 +189,13 @@ QString InputUtils::formatDistanceInProjectUnit( const double distanceInMeters, return QString( "%1 %2" ).arg( QString::number( distance, 'f', precision ), abbreviation ); } -QString InputUtils::formatAreaInProjectUnit( const double areaInSquareMeters, int precision, Qgis::AreaUnit destUnit ) +QString InputUtils::formatAreaInProjectUnit( const double areaInSquareMeters, int precision, Qgis::AreaUnit destUnit, QgsProject *activeProject ) { Qgis::AreaUnit areaUnit = destUnit; if ( areaUnit == Qgis::AreaUnit::Unknown ) { - areaUnit = QgsProject::instance()->areaUnits(); + areaUnit = activeProject->areaUnits(); } if ( areaUnit == Qgis::AreaUnit::Unknown ) diff --git a/app/inpututils.h b/app/inpututils.h index 05dc9c100..b59956061 100644 --- a/app/inpututils.h +++ b/app/inpututils.h @@ -75,8 +75,8 @@ class InputUtils: public QObject Q_INVOKABLE QString getFileName( const QString &filePath ); Q_INVOKABLE QString formatProjectName( const QString &fullProjectName ); Q_INVOKABLE QString formatNumber( const double number, int precision = 1 ); - Q_INVOKABLE QString formatDistanceInProjectUnit( const double distanceInMeters, int precision = 1, Qgis::DistanceUnit destUnit = Qgis::DistanceUnit::Unknown ); - Q_INVOKABLE QString formatAreaInProjectUnit( const double areaInSquareMeters, int precision = 1, Qgis::AreaUnit destUnit = Qgis::AreaUnit::Unknown ); + Q_INVOKABLE QString formatDistanceInProjectUnit( const double distanceInMeters, int precision = 1, Qgis::DistanceUnit destUnit = Qgis::DistanceUnit::Unknown, QgsProject *activeProject = QgsProject::instance() ); + Q_INVOKABLE QString formatAreaInProjectUnit( const double areaInSquareMeters, int precision = 1, Qgis::AreaUnit destUnit = Qgis::AreaUnit::Unknown, QgsProject *activeProject = QgsProject::instance() ); Q_INVOKABLE void setExtentToFeature( const FeatureLayerPair &pair, InputMapSettings *mapSettings ); diff --git a/app/maptools/abstractmaptool.cpp b/app/maptools/abstractmaptool.cpp index 930496747..19d5fb129 100644 --- a/app/maptools/abstractmaptool.cpp +++ b/app/maptools/abstractmaptool.cpp @@ -25,9 +25,13 @@ InputMapSettings *AbstractMapTool::mapSettings() const void AbstractMapTool::setMapSettings( InputMapSettings *newMapSettings ) { if ( mMapSettings == newMapSettings ) + { return; + } else - disconnect( mMapSettings, nullptr, this, nullptr ); + { + disconnect( mMapSettings ); + } mMapSettings = newMapSettings; emit mapSettingsChanged( mMapSettings ); diff --git a/app/maptools/abstractmaptool.h b/app/maptools/abstractmaptool.h index 5ac544554..4ed41fccd 100644 --- a/app/maptools/abstractmaptool.h +++ b/app/maptools/abstractmaptool.h @@ -27,7 +27,7 @@ class AbstractMapTool : public QObject virtual ~AbstractMapTool(); InputMapSettings *mapSettings() const; - void setMapSettings( InputMapSettings *newMapSettings ); + virtual void setMapSettings( InputMapSettings *newMapSettings ); signals: diff --git a/app/maptools/measurementmaptool.cpp b/app/maptools/measurementmaptool.cpp index 1215a4c8b..89c9b1fba 100644 --- a/app/maptools/measurementmaptool.cpp +++ b/app/maptools/measurementmaptool.cpp @@ -12,7 +12,7 @@ MeasurementMapTool::MeasurementMapTool( QObject *parent ) : AbstractMapTool{ parent } { - connect( this, &AbstractMapTool::mapSettingsChanged, this, &MeasurementMapTool::onMapSettingsChanged ); + connect( this, &AbstractMapTool::mapSettingsChanged, this, &MeasurementMapTool::setMapSettings ); } MeasurementMapTool::~MeasurementMapTool() = default; @@ -131,14 +131,25 @@ void MeasurementMapTool::rebuildGeometry() setRecordedGeometry( geometry ); } -void MeasurementMapTool::onMapSettingsChanged( InputMapSettings *newMapSettings ) +void MeasurementMapTool::setMapSettings( InputMapSettings *newMapSettings ) { - if ( newMapSettings ) + InputMapSettings *currentMapSettings = mapSettings(); + + if ( currentMapSettings ) + { + disconnect( currentMapSettings ); + } + + AbstractMapTool::setMapSettings( newMapSettings ); + + InputMapSettings *updatedMapSettings = mapSettings(); + + if ( updatedMapSettings ) { - connect( newMapSettings, &InputMapSettings::extentChanged, this, &MeasurementMapTool::updateDistance ); + connect( updatedMapSettings, &InputMapSettings::extentChanged, this, &MeasurementMapTool::updateDistance ); mDistanceArea.setEllipsoid( QStringLiteral( "WGS84" ) ); - mDistanceArea.setSourceCrs( newMapSettings->destinationCrs(), newMapSettings->transformContext() ); + mDistanceArea.setSourceCrs( updatedMapSettings->destinationCrs(), updatedMapSettings->transformContext() ); } } diff --git a/app/maptools/measurementmaptool.h b/app/maptools/measurementmaptool.h index d2fd52ff8..3f87a0b67 100644 --- a/app/maptools/measurementmaptool.h +++ b/app/maptools/measurementmaptool.h @@ -94,6 +94,8 @@ class MeasurementMapTool : public AbstractMapTool QgsGeometry existingVertices() const; void setExistingVertices( const QgsGeometry &vertices ); + void setMapSettings( InputMapSettings *newMapSettings ) override; + signals: void lengthWithGuidelineChanged( const double &lengthWithGuideline ); void perimeterChanged( const double &perimeter ); @@ -112,9 +114,6 @@ class MeasurementMapTool : public AbstractMapTool public slots: void updateDistance(); - private slots: - void onMapSettingsChanged( InputMapSettings *newMapSettings ); - private: QVector mPoints; QgsGeometry mRecordedGeometry; diff --git a/app/qml/components/MMDrawerHeader.qml b/app/qml/components/MMDrawerHeader.qml index 7750feb8a..b40c2ce1e 100644 --- a/app/qml/components/MMDrawerHeader.qml +++ b/app/qml/components/MMDrawerHeader.qml @@ -41,13 +41,18 @@ Rectangle { } Text { - // If the close button is visible, we need to properly center the text - property real margin: internal.closeBtnRealWidth + internal.headerSpacing + __style.pageMargins + property real leftMarginShift: { + return Math.max( internal.closeBtnRealWidth, topLeftButtonGroup.width ) + internal.headerSpacing + __style.pageMargins + } + + property real rightMarginShift: { + return Math.max( internal.closeBtnRealWidth, topLeftButtonGroup.width ) + internal.headerSpacing + __style.pageMargins + } anchors { fill: parent - leftMargin: margin - rightMargin: margin + leftMargin: leftMarginShift + rightMargin: rightMarginShift } text: root.title diff --git a/app/qml/gps/MMMeasureDrawer.qml b/app/qml/gps/MMMeasureDrawer.qml index 80102df85..014a4b999 100644 --- a/app/qml/gps/MMMeasureDrawer.qml +++ b/app/qml/gps/MMMeasureDrawer.qml @@ -30,8 +30,8 @@ MMDrawer { property bool closeShapeDone: mapCanvas.mapToolComponent?.mapTool?.closeShapeDone ?? false property bool canUndo: mapCanvas.mapToolComponent?.mapTool?.canUndo ?? false - property string perimeter: __inputUtils.formatDistanceInProjectUnit( mapCanvas.mapToolComponent?.mapTool?.perimeter ?? 0, 1 ) - property string area: __inputUtils.formatAreaInProjectUnit( mapCanvas.mapToolComponent?.mapTool?.area ?? 0, 1 ) + property string perimeter: __inputUtils.formatDistanceInProjectUnit( mapCanvas.mapToolComponent?.mapTool?.perimeter ?? 0, 1, __activeProject.qgsProject ) + property string area: __inputUtils.formatAreaInProjectUnit( mapCanvas.mapToolComponent?.mapTool?.area ?? 0, 1, __activeProject.qgsProject ) signal measureFinished() signal measureDone() diff --git a/app/qml/gps/MMStakeoutDrawer.qml b/app/qml/gps/MMStakeoutDrawer.qml index b1f6fd657..61f6ca354 100644 --- a/app/qml/gps/MMStakeoutDrawer.qml +++ b/app/qml/gps/MMStakeoutDrawer.qml @@ -109,7 +109,7 @@ MMDrawer { width: ( parent.width + parent.spacing ) / 2 title: qsTr( "Distance" ) - value: remainingDistance >= 0 ?__inputUtils.formatDistanceInProjectUnit( remainingDistance, 2 ) : qsTr( "N/A" ) + value: remainingDistance >= 0 ?__inputUtils.formatDistanceInProjectUnit( remainingDistance, 2, __activeProject.qgsProject ) : qsTr( "N/A" ) alignmentRight: true } } diff --git a/app/qml/map/MMMeasurementTools.qml b/app/qml/map/MMMeasurementTools.qml index 13c5a5dd1..e3591d487 100644 --- a/app/qml/map/MMMeasurementTools.qml +++ b/app/qml/map/MMMeasurementTools.qml @@ -91,7 +91,7 @@ Item { qgsProject: __activeProject.qgsProject mapSettings: root.map.mapSettings - text: __inputUtils.formatDistanceInProjectUnit( mapTool.lengthWithGuideline ) + text: __inputUtils.formatDistanceInProjectUnit( mapTool.lengthWithGuideline, __activeProject.qgsProject ) canCloseShape: mapTool.canCloseShape onCloseShapeClicked: closeShape()