From 4b03216fdb7c8e915b0d4368ff9df74f810c4760 Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Wed, 19 Jul 2017 02:27:30 +0300 Subject: [PATCH] maplocationmodel: add a "selectedUuid" property to MapLocationModel Inside the QML Map class there is a MapItemView item. This item uses a delegate that receive a "model" property from the MapLocationModel, but infact that's a QObject with the MapLocation defined properties. That's how MapItemView works. The problem here is that "model" QObject cannot be cast back to a MapLocation as the meta data in there does not include a MapLocation sub-class, for some reason. Even if using propery() on that QObject to fetch data like coordinates works, instead of storing this strange object pointer, store the MapLocation UUID (from dive_site) which is a uint32_t. setSelectedUuid() deals with this oddity and finds the correct MapLocation pointer in the table and dispatches a selectedLocationChanged() signal for it. Signed-off-by: Lubomir I. Ivanov --- qt-models/maplocationmodel.cpp | 16 ++++++++++++++++ qt-models/maplocationmodel.h | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/qt-models/maplocationmodel.cpp b/qt-models/maplocationmodel.cpp index 8e07a7489..e01b46621 100644 --- a/qt-models/maplocationmodel.cpp +++ b/qt-models/maplocationmodel.cpp @@ -92,3 +92,19 @@ void MapLocationModel::clear() m_mapLocations.clear(); endRemoveRows(); } + +quint32 MapLocationModel::selectedUuid() +{ + return m_selectedUuid; +} + +void MapLocationModel::setSelectedUuid(quint32 uuid) +{ + m_selectedUuid = uuid; + MapLocation *location = NULL; + foreach(location, m_mapLocations) { + if (location->getRole(MapLocation::Roles::RoleUuid) == uuid) + break; + } + emit selectedLocationChanged(location); +} diff --git a/qt-models/maplocationmodel.h b/qt-models/maplocationmodel.h index 2793a5137..7a1730653 100644 --- a/qt-models/maplocationmodel.h +++ b/qt-models/maplocationmodel.h @@ -38,6 +38,7 @@ class MapLocationModel : public QAbstractListModel { Q_OBJECT Q_PROPERTY(int count READ count NOTIFY countChanged) + Q_PROPERTY(quint32 selectedUuid READ selectedUuid WRITE setSelectedUuid NOTIFY selectedLocationChanged) public: MapLocationModel(QObject *parent = NULL); @@ -56,11 +57,16 @@ protected: QHash roleNames() const; private: + quint32 selectedUuid(); + void setSelectedUuid(quint32); + QVector m_mapLocations; QHash m_roles; + quint32 m_selectedUuid; signals: void countChanged(int c); + void selectedLocationChanged(MapLocation *); };