diff options
author | Lubomir I. Ivanov <neolit123@gmail.com> | 2017-07-17 17:58:34 +0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2017-07-28 07:31:11 -0700 |
commit | fc6cb67626b3270d8619c38dab671e954d78be88 (patch) | |
tree | b9a46f3f23855ef540a7b90cd016b143a9d7c49d /qt-models/maplocationmodel.h | |
parent | 2cb8fee827f82bc6b79a75da40148a7417c2581b (diff) | |
download | subsurface-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.h')
-rw-r--r-- | qt-models/maplocationmodel.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/qt-models/maplocationmodel.h b/qt-models/maplocationmodel.h new file mode 100644 index 000000000..e398a8091 --- /dev/null +++ b/qt-models/maplocationmodel.h @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-2.0 +#ifndef MAPLOCATIONMODEL_H +#define MAPLOCATIONMODEL_H + +#include <QObject> +#include <QList> +#include <QHash> +#include <QByteArray> +#include <QAbstractListModel> + +class MapLocation : public QObject +{ + Q_OBJECT + Q_PROPERTY(qreal latitude MEMBER m_latitude) + Q_PROPERTY(qreal longitude MEMBER m_longitude) + +public: + explicit MapLocation(); + explicit MapLocation(qreal lat, qreal lng); + + QVariant getRole(int role) const; + + enum Roles { + RoleLatitude = Qt::UserRole + 1, + RoleLongitude + }; + +private: + qreal m_latitude; + qreal m_longitude; +}; + +class MapLocationModel : public QAbstractListModel +{ + Q_OBJECT + Q_PROPERTY(int count READ count NOTIFY countChanged) + +public: + MapLocationModel(QObject *parent = NULL); + ~MapLocationModel(); + + Q_INVOKABLE MapLocation *get(int row); + + QVariant data(const QModelIndex &index, int role) const override; + int rowCount(const QModelIndex &parent) const override; + int count(); + +protected: + QHash<int, QByteArray> roleNames() const; + +private: + QList<MapLocation *> m_mapLocations; + QHash<int, QByteArray> m_roles; + +signals: + void countChanged(int c); + +}; + +#endif |