diff options
author | Tomaz Canabrava <tomaz.canabrava@intel.com> | 2016-01-08 13:11:49 -0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2016-01-08 08:04:04 -0800 |
commit | 89eed5d36e611f882dbf1e2686ad389f65688fa1 (patch) | |
tree | b7e185df6424d46c9d992ea388a03d4a6b19fd7e | |
parent | 7b155774c5105f84303e869317fc946b11b3e78b (diff) | |
download | subsurface-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.txt | 2 | ||||
-rw-r--r-- | qt-mobile/qmlmanager.cpp | 9 | ||||
-rw-r--r-- | qt-models/CMakeLists.txt | 2 | ||||
-rw-r--r-- | qt-models/gpslistmodel.cpp | 54 | ||||
-rw-r--r-- | qt-models/gpslistmodel.h | 30 | ||||
-rw-r--r-- | subsurface-core/gpslocation.cpp | 20 | ||||
-rw-r--r-- | subsurface-core/gpslocation.h | 5 |
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 > = m_gpsFixes[index.row()]; + const gpsTracker > = 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(>); + 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(); }; |