diff options
author | Lubomir I. Ivanov <neolit123@gmail.com> | 2017-07-19 02:27:30 +0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2017-07-28 07:31:11 -0700 |
commit | 4b03216fdb7c8e915b0d4368ff9df74f810c4760 (patch) | |
tree | 09dde278c6597528fcdcbfd9b80598ddf018ee97 | |
parent | a9c0abd71aa6d70262d9b218187e4b8d3ec15f07 (diff) | |
download | subsurface-4b03216fdb7c8e915b0d4368ff9df74f810c4760.tar.gz |
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 <neolit123@gmail.com>
-rw-r--r-- | qt-models/maplocationmodel.cpp | 16 | ||||
-rw-r--r-- | qt-models/maplocationmodel.h | 6 |
2 files changed, 22 insertions, 0 deletions
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<int, QByteArray> roleNames() const; private: + quint32 selectedUuid(); + void setSelectedUuid(quint32); + QVector<MapLocation *> m_mapLocations; QHash<int, QByteArray> m_roles; + quint32 m_selectedUuid; signals: void countChanged(int c); + void selectedLocationChanged(MapLocation *); }; |