File indexing completed on 2024-05-12 04:42:08
0001 /* 0002 SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KOSMINDOORMAP_LOCATIONQUERYOVERLAYPROXYMODEL_H 0008 #define KOSMINDOORMAP_LOCATIONQUERYOVERLAYPROXYMODEL_H 0009 0010 #include <QAbstractItemModel> 0011 #include <qqmlregistration.h> 0012 0013 #include <KOSMIndoorMap/MapData> 0014 0015 namespace OSM { 0016 class Element; 0017 class Node; 0018 } 0019 0020 namespace KOSMIndoorMap { 0021 0022 /** Adapts a KPublicTransport::LocationQueryModel to be compatible with a KOSMIndoorMap::OverlaySource. 0023 */ 0024 class LocationQueryOverlayProxyModel : public QAbstractListModel 0025 { 0026 Q_OBJECT 0027 Q_PROPERTY(KOSMIndoorMap::MapData mapData READ mapData WRITE setMapData NOTIFY mapDataChanged) 0028 Q_PROPERTY(QObject* sourceModel READ sourceModel WRITE setSourceModel NOTIFY sourceModelChanged) 0029 QML_ELEMENT 0030 0031 public: 0032 explicit LocationQueryOverlayProxyModel(QObject *parent = nullptr); 0033 ~LocationQueryOverlayProxyModel(); 0034 0035 MapData mapData() const; 0036 void setMapData(const MapData &data); 0037 0038 QObject *sourceModel() const; 0039 void setSourceModel(QObject *sourceModel); 0040 0041 enum Role { 0042 ElementRole = Qt::UserRole, 0043 LevelRole, 0044 HiddenElementRole, 0045 }; 0046 Q_ENUM(Role) 0047 0048 int rowCount(const QModelIndex &parent = {}) const override; 0049 QVariant data(const QModelIndex & index, int role) const override; 0050 QHash<int, QByteArray> roleNames() const override; 0051 0052 Q_SIGNALS: 0053 void mapDataChanged(); 0054 void sourceModelChanged(); 0055 0056 private: 0057 struct Info { 0058 OSM::Node overlayNode; 0059 OSM::Element sourceElement; 0060 }; 0061 0062 void initialize(); 0063 Info nodeForRow(int row) const; 0064 0065 struct { 0066 OSM::TagKey name; 0067 OSM::TagKey amenity; 0068 OSM::TagKey capacity; 0069 OSM::TagKey realtimeAvailable; 0070 OSM::TagKey network; 0071 OSM::TagKey mxoid; 0072 OSM::TagKey remainingRange; 0073 OSM::TagKey vehicle; 0074 OSM::TagKey addr_street; 0075 OSM::TagKey addr_city; 0076 OSM::TagKey addr_postcode; 0077 } m_tagKeys; 0078 OSM::TagKey m_realtimeAvailableTagKeys[5]; 0079 0080 std::vector<Info> m_nodes; 0081 MapData m_data; 0082 QAbstractItemModel *m_sourceModel = nullptr; 0083 }; 0084 0085 } 0086 0087 #endif // KOSMINDOORMAP_LOCATIONQUERYOVERLAYPROXYMODEL_H