last commit from dirk made subsurface-core depend on qt-models, and the
code shouldn't depend on anything to make it easy for linkage and stuff.
From 94db0f77b39af6efaa6c264e7e02e597abb6faa7 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Fri, 8 Jan 2016 13:11:49 -0200
Subject: [PATCH 6/6] 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 <[email protected]>
---
 CMakeLists.txt                  |  2 --
 qt-mobile/qmlmanager.cpp        |  9 ++++---
 qt-models/CMakeLists.txt        |  2 ++
 qt-models/gpslistmodel.cpp      | 54 ++++++++++++-----------------------------
 qt-models/gpslistmodel.h        | 30 +++--------------------
 subsurface-core/gpslocation.cpp | 20 ++++++---------
 subsurface-core/gpslocation.h   |  5 ++--
 7 files changed, 36 insertions(+), 86 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8042aa7..13f34fd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -226,8 +226,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 e9682d6..1d68dc3 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 c35ca43..34e462f 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 6bd1cfd..2c6fe6b 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 35a5a03..91a1554 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 59cd979..79fb9a0 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 2a6f6c2..4193be5 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();
 
 };
-- 
2.7.0

_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to