diff options
Diffstat (limited to 'qt-models')
-rw-r--r-- | qt-models/maplocationmodel.cpp | 65 | ||||
-rw-r--r-- | qt-models/maplocationmodel.h | 60 |
2 files changed, 125 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);
+}
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 |