summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/gpslocation.cpp21
-rw-r--r--core/gpslocation.h5
-rw-r--r--mobile-widgets/qmlmanager.cpp3
3 files changed, 11 insertions, 18 deletions
diff --git a/core/gpslocation.cpp b/core/gpslocation.cpp
index fd598683f..1da12fe5b 100644
--- a/core/gpslocation.cpp
+++ b/core/gpslocation.cpp
@@ -15,17 +15,12 @@
#include <QApplication>
#include <QTimer>
-GpsLocation *GpsLocation::m_Instance = NULL;
-
-GpsLocation::GpsLocation(void (*showMsgCB)(const char *), QObject *parent) :
- QObject(parent),
+GpsLocation::GpsLocation() :
m_GpsSource(0),
+ showMessageCB(0),
waitingForPosition(false),
haveSource(UNKNOWN)
{
- Q_ASSERT_X(m_Instance == NULL, "GpsLocation", "GpsLocation recreated");
- m_Instance = this;
- showMessageCB = showMsgCB;
// create a QSettings object that's separate from the main application settings
geoSettings = new QSettings(QSettings::NativeFormat, QSettings::UserScope,
QStringLiteral("org.subsurfacedivelog"), QStringLiteral("subsurfacelocation"), this);
@@ -39,19 +34,17 @@ GpsLocation::GpsLocation(void (*showMsgCB)(const char *), QObject *parent) :
GpsLocation *GpsLocation::instance()
{
- Q_ASSERT(m_Instance != NULL);
-
- return m_Instance;
+ static GpsLocation self;
+ return &self;
}
-bool GpsLocation::hasInstance()
+GpsLocation::~GpsLocation()
{
- return m_Instance != NULL;
}
-GpsLocation::~GpsLocation()
+void GpsLocation::setLogCallBack(void (*showMsgCB)(const char *))
{
- m_Instance = NULL;
+ showMessageCB = showMsgCB;
}
void GpsLocation::setGpsTimeThreshold(int seconds)
diff --git a/core/gpslocation.h b/core/gpslocation.h
index d376c5ec7..ea3373d3b 100644
--- a/core/gpslocation.h
+++ b/core/gpslocation.h
@@ -29,14 +29,14 @@ struct DiveAndLocation {
class GpsLocation : public QObject {
Q_OBJECT
public:
- GpsLocation(void (*showMsgCB)(const char *msg), QObject *parent);
+ GpsLocation();
~GpsLocation();
static GpsLocation *instance();
- static bool hasInstance();
std::vector<DiveAndLocation> getLocations();
int getGpsNum() const;
bool hasLocationsSource();
QString currentPosition();
+ void setLogCallBack(void (*showMsgCB)(const char *msg));
QMap<qint64, gpsTracker> currentGPSInfo() const;
@@ -49,7 +49,6 @@ private:
QNetworkReply *reply;
QString userAgent;
void (*showMessageCB)(const char *msg);
- static GpsLocation *m_Instance;
bool waitingForPosition;
QMap<qint64, gpsTracker> m_trackers;
QList<gpsTracker> m_deletedTrackers;
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp
index 96fecff96..219b70ea7 100644
--- a/mobile-widgets/qmlmanager.cpp
+++ b/mobile-widgets/qmlmanager.cpp
@@ -290,7 +290,8 @@ QMLManager::QMLManager() : m_locationServiceEnabled(false),
this, &QMLManager::btHostModeChange);
}
// create location manager service
- locationProvider = new GpsLocation(&appendTextToLogStandalone, this);
+ locationProvider = GpsLocation::instance();
+ locationProvider->setLogCallBack(&appendTextToLogStandalone);
progress_callback = &progressCallback;
connect(locationProvider, SIGNAL(haveSourceChanged()), this, SLOT(hasLocationSourceChanged()));
setLocationServiceAvailable(locationProvider->hasLocationsSource());