diff --git a/app/position/tracking/positiontrackingmanager.cpp b/app/position/tracking/positiontrackingmanager.cpp index 4ad58725e..6bd7332a7 100644 --- a/app/position/tracking/positiontrackingmanager.cpp +++ b/app/position/tracking/positiontrackingmanager.cpp @@ -30,6 +30,7 @@ PositionTrackingManager::PositionTrackingManager( QObject *parent ) : QObject( parent ) { + connect( &mElapsedTimeTextTimer, &QTimer::timeout, this, &PositionTrackingManager::elapsedTimeTextChanged ); } void PositionTrackingManager::addPoint( const QgsPoint &position ) @@ -208,6 +209,8 @@ void PositionTrackingManager::setup() { emit trackedGeometryChanged( mTrackedGeometry ); } + + mElapsedTimeTextTimer.start( 1000 ); } AbstractTrackingBackend *PositionTrackingManager::constructTrackingBackend( QgsProject *project, PositionKit *positionKit ) @@ -348,6 +351,20 @@ QDateTime PositionTrackingManager::startTime() const return mTrackingStartTime; } +QString PositionTrackingManager::elapsedTimeText() const +{ + if ( !mIsTrackingPosition ) + return QString(); + + qint64 totalSecs = mTrackingStartTime.secsTo( QDateTime::currentDateTime() ); + int hours = totalSecs / 3600; + totalSecs = totalSecs % 3600; + int minutes = totalSecs / 60; + int seconds = totalSecs % 60; + + return QString( "%1:%2:%3" ).arg( hours, 2, 10, QChar( '0' ) ).arg( minutes, 2, 10, QChar( '0' ) ).arg( seconds, 2, 10, QChar( '0' ) ); +} + bool PositionTrackingManager::isTrackingPosition() const { return mIsTrackingPosition; diff --git a/app/position/tracking/positiontrackingmanager.h b/app/position/tracking/positiontrackingmanager.h index f791b2945..b0d5ff8ac 100644 --- a/app/position/tracking/positiontrackingmanager.h +++ b/app/position/tracking/positiontrackingmanager.h @@ -13,6 +13,7 @@ #include #include #include +#include #include "abstracttrackingbackend.h" @@ -33,6 +34,7 @@ class PositionTrackingManager : public QObject Q_PROPERTY( QDateTime startTime READ startTime NOTIFY startTimeChanged ) Q_PROPERTY( QgsGeometry trackedGeometry READ trackedGeometry NOTIFY trackedGeometryChanged ) Q_PROPERTY( bool isTrackingPosition READ isTrackingPosition NOTIFY isTrackingPositionChanged ) + Q_PROPERTY( QString elapsedTimeText READ elapsedTimeText NOTIFY elapsedTimeTextChanged ) // properties to be set from QML Q_PROPERTY( QgsProject *qgsProject READ qgsProject WRITE setQgsProject NOTIFY qgsProjectChanged ) @@ -73,6 +75,9 @@ class PositionTrackingManager : public QObject QDateTime startTime() const; + //! How long we have been tracking, formatted as a text (empty if not tracking) + QString elapsedTimeText() const; + bool isTrackingPosition() const; public slots: @@ -99,6 +104,8 @@ class PositionTrackingManager : public QObject void abort(); + void elapsedTimeTextChanged(); + private: void setLayerId( QString newLayerId ); void setup(); @@ -114,6 +121,9 @@ class PositionTrackingManager : public QObject QDateTime mTrackingStartTime; QgsFeature mTrackedFeature; bool mIsTrackingPosition = false; + + // timer to make sure we are periodically updating tracking elapsed time + QTimer mElapsedTimeTextTimer; }; #endif // POSITIONTRACKINGMANAGER_H diff --git a/app/qml/dialogs/MMPositionTrackingDialog.qml b/app/qml/dialogs/MMPositionTrackingDialog.qml index 9c5b93e86..465556f32 100644 --- a/app/qml/dialogs/MMPositionTrackingDialog.qml +++ b/app/qml/dialogs/MMPositionTrackingDialog.qml @@ -60,7 +60,7 @@ MMComponents.MMDrawerDialog { MMComponents.MMText { width: parent.width - text: qsTr("Started at") + text: qsTr("Tracking time") horizontalAlignment: Text.AlignRight font: __style.p6 color: __style.nightColor diff --git a/app/qml/main.qml b/app/qml/main.qml index b7fe5ceaf..2442bce0a 100644 --- a/app/qml/main.qml +++ b/app/qml/main.qml @@ -550,10 +550,7 @@ ApplicationWindow { function getStartingTime() { if ( map.isTrackingPosition ) { - let date = map.trackingManager?.startTime - if ( date ) { - return date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() - } + return map.trackingManager?.elapsedTimeText } return qsTr( "not tracking" ) } diff --git a/app/qml/map/MMMapController.qml b/app/qml/map/MMMapController.qml index cea7fc733..3d1586ec2 100644 --- a/app/qml/map/MMMapController.qml +++ b/app/qml/map/MMMapController.qml @@ -521,11 +521,7 @@ Item { text: { if (visible) { - // TODO make some merge with main.qml:trackingPrivate.getStartingTime() - let date = root.trackingManager?.startTime - if ( date ) { - return date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() - } + return root.trackingManager?.elapsedTimeText } else return ""