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 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 +#include +#include +#include +#include + +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 roleNames() const; + +private: + QList m_mapLocations; + QHash m_roles; + +signals: + void countChanged(int c); + +}; + +#endif