From 1819cc1ccc45192359321a09bb734a4d6ca40b2d Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Sun, 17 Apr 2016 22:54:53 -0700 Subject: [PATCH] QML UI: make the state of the GPS service available to QML This exposes a locationServiceAvailable property to QML and keeps it in sync with the corresponding state in the GpsLocation widget. Signed-off-by: Dirk Hohndel --- mobile-widgets/qmlmanager.cpp | 34 ++++++++++++++++++++++++++++++---- mobile-widgets/qmlmanager.h | 7 +++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp index 3c2f8d311..4df82349c 100644 --- a/mobile-widgets/qmlmanager.cpp +++ b/mobile-widgets/qmlmanager.cpp @@ -72,11 +72,11 @@ QMLManager::QMLManager() : m_locationServiceEnabled(false), reply(0), deletedDive(0), deletedTrip(0), + m_updateSelectedDive(-1), + m_selectedDiveTimestamp(0), m_credentialStatus(UNKNOWN), m_lastDevicePixelRatio(1.0), - alreadySaving(false), - m_selectedDiveTimestamp(0), - m_updateSelectedDive(-1) + alreadySaving(false) { m_instance = this; connect(qobject_cast(QApplication::instance()), &QApplication::applicationStateChanged, this, &QMLManager::applicationStateChanged); @@ -88,6 +88,8 @@ QMLManager::QMLManager() : m_locationServiceEnabled(false), setAccessingCloud(-1); // create location manager service locationProvider = new GpsLocation(&appendTextToLogStandalone, this); + connect(locationProvider, SIGNAL(haveSourceChanged()), this, SLOT(hasLocationSourceChanged())); + setLocationServiceAvailable(locationProvider->hasLocationsSource()); set_git_update_cb(&gitProgressCB); // make sure we know if the current cloud repo has been successfully synced @@ -928,6 +930,14 @@ void QMLManager::addDiveAborted(int id) QString QMLManager::getCurrentPosition() { + static bool hasLocationSource = false; + if (locationProvider->hasLocationsSource() != hasLocationSource) { + hasLocationSource = !hasLocationSource; + setLocationServiceAvailable(hasLocationSource); + } + if (!hasLocationSource) + return tr("Unknown GPS location"); + return locationProvider->currentPosition(); } @@ -966,7 +976,6 @@ void QMLManager::deleteGpsFix(quint64 when) populateGpsData(); } - QString QMLManager::logText() const { QString logText = m_logText + QString("\nNumer of GPS fixes: %1").arg(locationProvider->getGpsNum()); @@ -996,6 +1005,23 @@ void QMLManager::setLocationServiceEnabled(bool locationServiceEnabled) locationProvider->serviceEnable(m_locationServiceEnabled); } +bool QMLManager::locationServiceAvailable() const +{ + return m_locationServiceAvailable; +} + +void QMLManager::setLocationServiceAvailable(bool locationServiceAvailable) +{ + qDebug() << "location service is" << (locationServiceAvailable ? "available" : "not available"); + m_locationServiceAvailable = locationServiceAvailable; + emit locationServiceAvailableChanged(); +} + +void QMLManager::hasLocationSourceChanged() +{ + setLocationServiceAvailable(locationProvider->hasLocationsSource()); +} + bool QMLManager::verboseEnabled() const { return m_verboseEnabled; diff --git a/mobile-widgets/qmlmanager.h b/mobile-widgets/qmlmanager.h index 7d1fc4a6b..ece2c7b59 100644 --- a/mobile-widgets/qmlmanager.h +++ b/mobile-widgets/qmlmanager.h @@ -17,6 +17,7 @@ class QMLManager : public QObject { Q_PROPERTY(QString cloudPassword READ cloudPassword WRITE setCloudPassword NOTIFY cloudPasswordChanged) Q_PROPERTY(QString logText READ logText WRITE setLogText NOTIFY logTextChanged) Q_PROPERTY(bool locationServiceEnabled READ locationServiceEnabled WRITE setLocationServiceEnabled NOTIFY locationServiceEnabledChanged) + Q_PROPERTY(bool locationServiceAvailable READ locationServiceAvailable WRITE setLocationServiceAvailable NOTIFY locationServiceAvailableChanged) Q_PROPERTY(int distanceThreshold READ distanceThreshold WRITE setDistanceThreshold NOTIFY distanceThresholdChanged) Q_PROPERTY(int timeThreshold READ timeThreshold WRITE setTimeThreshold NOTIFY timeThresholdChanged) Q_PROPERTY(bool loadFromCloud READ loadFromCloud WRITE setLoadFromCloud NOTIFY loadFromCloudChanged) @@ -52,6 +53,9 @@ public: bool locationServiceEnabled() const; void setLocationServiceEnabled(bool locationServiceEnable); + bool locationServiceAvailable() const; + void setLocationServiceAvailable(bool locationServiceAvailable); + bool verboseEnabled() const; void setVerboseEnabled(bool verboseMode); @@ -133,6 +137,7 @@ public slots: qreal lastDevicePixelRatio(); void appendTextToLog(const QString &newText); void quit(); + void hasLocationSourceChanged(); private: QString m_cloudUserName; @@ -141,6 +146,7 @@ private: QString m_startPageText; QString m_logText; bool m_locationServiceEnabled; + bool m_locationServiceAvailable; bool m_verboseEnabled; int m_distanceThreshold; int m_timeThreshold; @@ -169,6 +175,7 @@ signals: void cloudUserNameChanged(); void cloudPasswordChanged(); void locationServiceEnabledChanged(); + void locationServiceAvailableChanged(); void verboseEnabledChanged(); void logTextChanged(); void timeThresholdChanged();