summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tomaz.canabrava@intel.com>2016-01-08 13:11:49 -0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-01-08 08:04:04 -0800
commit89eed5d36e611f882dbf1e2686ad389f65688fa1 (patch)
treeb7e185df6424d46c9d992ea388a03d4a6b19fd7e
parent7b155774c5105f84303e869317fc946b11b3e78b (diff)
downloadsubsurface-89eed5d36e611f882dbf1e2686ad389f65688fa1.tar.gz
Untangle Library Linkage
with the adittion of gpslistmodel/location, the libraries qt-models had a direct dependency on subsurface-core, and subsurface-core had a direct dependency on qt-models, this is bad. Moving a bit of code around I'v managed to clean this out, and also to clear a bit of uneeded code (GpsTracker and gpsTracker where basically the same thing.) Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--CMakeLists.txt2
-rw-r--r--qt-mobile/qmlmanager.cpp9
-rw-r--r--qt-models/CMakeLists.txt2
-rw-r--r--qt-models/gpslistmodel.cpp54
-rw-r--r--qt-models/gpslistmodel.h30
-rw-r--r--subsurface-core/gpslocation.cpp20
-rw-r--r--subsurface-core/gpslocation.h5
7 files changed, 36 insertions, 86 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 18101e087..548045759 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -225,8 +225,6 @@ if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable")
set(MOBILE_SRC
qt-mobile/qmlmanager.cpp
qt-mobile/qmlprofile.cpp
- qt-models/divelistmodel.cpp
- qt-models/gpslistmodel.cpp
subsurface-mobile-main.cpp
subsurface-mobile-helper.cpp
)
diff --git a/qt-mobile/qmlmanager.cpp b/qt-mobile/qmlmanager.cpp
index e9682d623..1d68dc3a7 100644
--- a/qt-mobile/qmlmanager.cpp
+++ b/qt-mobile/qmlmanager.cpp
@@ -8,6 +8,7 @@
#include <QTextDocument>
#include "qt-models/divelistmodel.h"
+#include <gpslistmodel.h>
#include "divelist.h"
#include "pref.h"
#include "qthelper.h"
@@ -511,18 +512,20 @@ void QMLManager::sendGpsData()
void QMLManager::downloadGpsData()
{
locationProvider->downloadFromServer();
- locationProvider->updateModel();
+ populateGpsData();
+
}
void QMLManager::populateGpsData()
{
- locationProvider->updateModel();
+ if (GpsListModel::instance())
+ GpsListModel::instance()->update();
}
void QMLManager::clearGpsData()
{
locationProvider->clearGpsData();
- locationProvider->updateModel();
+ populateGpsData();
}
QString QMLManager::logText() const
diff --git a/qt-models/CMakeLists.txt b/qt-models/CMakeLists.txt
index c35ca4377..34e462fa3 100644
--- a/qt-models/CMakeLists.txt
+++ b/qt-models/CMakeLists.txt
@@ -20,6 +20,8 @@ set(SUBSURFACE_MODELS_LIB_SRCS
divelocationmodel.cpp
divesitepicturesmodel.cpp
ssrfsortfilterproxymodel.cpp
+ divelistmodel.cpp
+ gpslistmodel.cpp
)
source_group("Subsurface Models" FILES ${SUBSURFACE_MODELS})
diff --git a/qt-models/gpslistmodel.cpp b/qt-models/gpslistmodel.cpp
index 6bd1cfdf0..2c6fe6b5c 100644
--- a/qt-models/gpslistmodel.cpp
+++ b/qt-models/gpslistmodel.cpp
@@ -1,38 +1,6 @@
#include "gpslistmodel.h"
#include "helpers.h"
-GpsTracker::GpsTracker()
-{
- m_latitude = 0;
- m_longitude = 0;
- m_when = 0;
- m_name = QString();
-}
-
-GpsTracker::~GpsTracker()
-{
-}
-
-uint64_t GpsTracker::when() const
-{
- return m_when;
-}
-
-int32_t GpsTracker::latitude() const
-{
- return m_latitude;
-}
-
-int32_t GpsTracker::longitude() const
-{
- return m_longitude;
-}
-
-QString GpsTracker::name() const
-{
- return m_name;
-}
-
GpsListModel *GpsListModel::m_instance = NULL;
GpsListModel::GpsListModel(QObject *parent) : QAbstractListModel(parent)
@@ -40,13 +8,21 @@ GpsListModel::GpsListModel(QObject *parent) : QAbstractListModel(parent)
m_instance = this;
}
-void GpsListModel::addGpsFix(gpsTracker *g)
+void GpsListModel::addGpsFix(gpsTracker g)
{
beginInsertColumns(QModelIndex(), rowCount(), rowCount());
- m_gpsFixes.append(GpsTracker(g));
+ m_gpsFixes.append(g);
endInsertRows();
}
+void GpsListModel::update()
+{
+ QVector<gpsTracker> trackers = GpsLocation::instance()->currentGPSInfo();
+ beginResetModel();
+ m_gpsFixes = trackers;
+ endResetModel();
+}
+
void GpsListModel::clear()
{
if (m_gpsFixes.count()) {
@@ -66,16 +42,16 @@ QVariant GpsListModel::data(const QModelIndex &index, int role) const
if (index.row() < 0 || index.row() > m_gpsFixes.count())
return QVariant();
- const GpsTracker &gt = m_gpsFixes[index.row()];
+ const gpsTracker &gt = m_gpsFixes[index.row()];
if (role == GpsDateRole)
- return get_short_dive_date_string(gt.when());
+ return get_short_dive_date_string(gt.when);
else if (role == GpsNameRole)
- return QString(gt.name());
+ return gt.name;
else if (role == GpsLatitudeRole)
- return QString::number(gt.latitude() / 1000000.0, 'f', 6);
+ return QString::number(gt.latitude.udeg / 1000000.0, 'f', 6);
else if (role == GpsLongitudeRole)
- return QString::number(gt.longitude() / 1000000.0, 'f', 6);
+ return QString::number(gt.longitude.udeg / 1000000.0, 'f', 6);
return QVariant();
}
diff --git a/qt-models/gpslistmodel.h b/qt-models/gpslistmodel.h
index 35a5a03c4..91a15540f 100644
--- a/qt-models/gpslistmodel.h
+++ b/qt-models/gpslistmodel.h
@@ -5,30 +5,6 @@
#include <QObject>
#include <QAbstractListModel>
-class GpsTracker
-{
-private:
- quint64 m_when;
- qint32 m_latitude;
- qint32 m_longitude;
- QString m_name;
-
-public:
- GpsTracker(struct gpsTracker *gt)
- {
- m_when = gt->when;
- m_latitude = gt->latitude.udeg;
- m_longitude = gt->longitude.udeg;
- m_name = gt->name;
- }
- GpsTracker();
- ~GpsTracker();
- uint64_t when() const;
- int32_t latitude() const;
- int32_t longitude() const;
- QString name() const;
-};
-
class GpsListModel : public QAbstractListModel
{
Q_OBJECT
@@ -43,14 +19,14 @@ public:
static GpsListModel *instance();
GpsListModel(QObject *parent = 0);
- void addGpsFix(struct gpsTracker *g);
+ void addGpsFix(gpsTracker g);
void clear();
int rowCount(const QModelIndex &parent = QModelIndex()) const;
QHash<int, QByteArray> roleNames() const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
-
+ void update();
private:
- QList<GpsTracker> m_gpsFixes;
+ QVector<gpsTracker> m_gpsFixes;
static GpsListModel *m_instance;
};
diff --git a/subsurface-core/gpslocation.cpp b/subsurface-core/gpslocation.cpp
index 59cd97900..79fb9a088 100644
--- a/subsurface-core/gpslocation.cpp
+++ b/subsurface-core/gpslocation.cpp
@@ -327,33 +327,29 @@ void GpsLocation::applyLocations()
mark_divelist_changed(true);
}
-#ifdef SUBSURFACE_MOBILE
-void GpsLocation::updateModel()
+QVector< gpsTracker > GpsLocation::currentGPSInfo() const
{
- GpsListModel *gpsListModel = GpsListModel::instance();
- if (!gpsListModel) {
- qDebug() << "no gpsListModel";
- return;
- }
+ QVector<gpsTracker> trackers;
+
int cnt = geoSettings->value("count", 0).toInt();
if (cnt == 0) {
qDebug() << "no gps fixes";
- gpsListModel->clear();
- return;
+ return trackers;
}
// create a table with the GPS information
+ trackers.reserve(cnt);
+
struct gpsTracker gt;
for (int i = 0; i < cnt; i++) {
gt.latitude.udeg = geoSettings->value(QString("gpsFix%1_lat").arg(i)).toInt();
gt.longitude.udeg = geoSettings->value(QString("gpsFix%1_lon").arg(i)).toInt();
gt.when = geoSettings->value(QString("gpsFix%1_time").arg(i)).toULongLong();
gt.name = geoSettings->value(QString("gpsFix%1_name").arg(i)).toString();
- gpsListModel->addGpsFix(&gt);
+ trackers.append(gt);
}
- qDebug() << "added" << cnt << "gps fixes to model";
+ return trackers;
}
-#endif
void GpsLocation::clearGpsData()
{
diff --git a/subsurface-core/gpslocation.h b/subsurface-core/gpslocation.h
index 2a6f6c292..4193be561 100644
--- a/subsurface-core/gpslocation.h
+++ b/subsurface-core/gpslocation.h
@@ -29,6 +29,8 @@ public:
bool hasLocationsSource();
QString currentPosition();
+ QVector<gpsTracker> currentGPSInfo() const;
+
private:
QGeoPositionInfo lastPos;
QGeoPositionInfoSource *getGpsSource();
@@ -49,9 +51,6 @@ public slots:
void downloadFromServer();
void postError(QNetworkReply::NetworkError error);
void getUseridError(QNetworkReply::NetworkError error);
-#ifdef SUBSURFACE_MOBILE
- void updateModel();
-#endif
void clearGpsData();
};