summaryrefslogtreecommitdiffstats
path: root/qt-models/maplocationmodel.cpp
diff options
context:
space:
mode:
authorGravatar Lubomir I. Ivanov <neolit123@gmail.com>2017-07-17 17:58:34 +0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-07-28 07:31:11 -0700
commitfc6cb67626b3270d8619c38dab671e954d78be88 (patch)
treeb9a46f3f23855ef540a7b90cd016b143a9d7c49d /qt-models/maplocationmodel.cpp
parent2cb8fee827f82bc6b79a75da40148a7417c2581b (diff)
downloadsubsurface-fc6cb67626b3270d8619c38dab671e954d78be88.tar.gz
qt-models/maplocationmodel: add new classes for map model based handling
The QML Map widget requires a QAbstractListModel based model to operate with good performance. Technically gpslistmodel.cpp can be used for that same purpose (e.g. has GPS coordinates), but the way it updates may complicate the Map widget integration. Thus, a new model is created - MapLocationModel, with items of type MapLocation, for an attempt for a clean project structure on the C++ side. For now it only handles latitude and longitude. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Diffstat (limited to 'qt-models/maplocationmodel.cpp')
-rw-r--r--qt-models/maplocationmodel.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/qt-models/maplocationmodel.cpp b/qt-models/maplocationmodel.cpp
new file mode 100644
index 000000000..5da0733e1
--- /dev/null
+++ b/qt-models/maplocationmodel.cpp
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "maplocationmodel.h"
+
+MapLocation::MapLocation()
+{
+}
+
+MapLocation::MapLocation(qreal latitude, qreal longitude) :
+ m_latitude(latitude), m_longitude(longitude)
+{
+}
+
+QVariant MapLocation::getRole(int role) const
+{
+ switch (role) {
+ case Roles::RoleLatitude:
+ return m_latitude;
+ case Roles::RoleLongitude:
+ return m_longitude;
+ default:
+ return QVariant();
+ }
+}
+
+MapLocationModel::MapLocationModel(QObject *parent) : QAbstractListModel(parent)
+{
+ m_roles[MapLocation::Roles::RoleLatitude] = "latitude";
+ m_roles[MapLocation::Roles::RoleLongitude] = "longitude";
+}
+
+MapLocationModel::~MapLocationModel()
+{
+ qDeleteAll(m_mapLocations);
+}
+
+QVariant MapLocationModel::data( const QModelIndex & index, int role ) const
+{
+ if (index.row() < 0 || index.row() >= m_mapLocations.size())
+ return QVariant();
+
+ return m_mapLocations.at(index.row())->getRole(role);
+}
+
+QHash<int, QByteArray> MapLocationModel::roleNames() const
+{
+ return m_roles;
+}
+
+int MapLocationModel::rowCount(const QModelIndex &parent) const
+{
+ Q_UNUSED(parent);
+ return m_mapLocations.size();
+}
+
+int MapLocationModel::count()
+{
+ return m_mapLocations.size();
+}
+
+MapLocation *MapLocationModel::get(int row)
+{
+ if (row < 0 || row >= m_mapLocations.size())
+ return NULL;
+ return m_mapLocations.at(row);
+}