File indexing completed on 2024-05-05 03:49:19
0001 // SPDX-License-Identifier: LGPL-2.1-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2012 Dennis Nienhüser <nienhueser@kde.org> 0004 // 0005 0006 #ifndef MARBLE_DECLARATIVE_PLACEMARK_H 0007 #define MARBLE_DECLARATIVE_PLACEMARK_H 0008 0009 #include "GeoDataPlacemark.h" 0010 #include "RouteRelationModel.h" 0011 0012 #include <QObject> 0013 #include <QtQml> 0014 #include <QStringListModel> 0015 0016 namespace Marble { 0017 0018 /** 0019 * Wraps a GeoDataPlacemark for QML access 0020 */ 0021 class Placemark : public QObject 0022 { 0023 Q_OBJECT 0024 0025 Q_PROPERTY(QString name WRITE setName READ name NOTIFY nameChanged) 0026 Q_PROPERTY(QString description READ description NOTIFY descriptionChanged) 0027 Q_PROPERTY(QString address READ address NOTIFY addressChanged) 0028 Q_PROPERTY(QString website READ website NOTIFY websiteChanged) 0029 Q_PROPERTY(QString wikipedia READ wikipedia NOTIFY wikipediaChanged) 0030 Q_PROPERTY(QString openingHours READ openingHours NOTIFY openingHoursChanged) 0031 Q_PROPERTY(QString coordinates READ coordinates NOTIFY coordinatesChanged) 0032 Q_PROPERTY(QString wheelchairInfo READ wheelchairInfo NOTIFY wheelchairInfoChanged) 0033 Q_PROPERTY(QString wifiAvailable READ wifiAvailable NOTIFY wifiAvailabilityChanged) 0034 Q_PROPERTY(QString phone READ phone NOTIFY phoneChanged) 0035 Q_PROPERTY(double longitude READ longitude NOTIFY coordinatesChanged) 0036 Q_PROPERTY(double latitude READ latitude NOTIFY coordinatesChanged) 0037 Q_PROPERTY(QStringList tags READ tags NOTIFY tagsChanged) 0038 0039 Q_PROPERTY(RouteRelationModel* routeRelationModel READ routeRelationModel CONSTANT) 0040 0041 public: 0042 /** Constructor */ 0043 explicit Placemark( QObject *parent = nullptr ); 0044 0045 void setGeoDataPlacemark( const Marble::GeoDataPlacemark &placemark ); 0046 0047 Marble::GeoDataPlacemark & placemark(); 0048 const Marble::GeoDataPlacemark & placemark() const; 0049 0050 QString name() const; 0051 QString description() const; 0052 QString address() const; 0053 QString website() const; 0054 QString wikipedia() const; 0055 QString openingHours() const; 0056 QString coordinates() const; 0057 QString wheelchairInfo() const; 0058 QString wifiAvailable() const; 0059 QString phone() const; 0060 double longitude() const; 0061 double latitude() const; 0062 const QStringList & tags() const; 0063 0064 RouteRelationModel* routeRelationModel(); 0065 0066 public Q_SLOTS: 0067 void setName(const QString &name); 0068 0069 Q_SIGNALS: 0070 void nameChanged(); 0071 void coordinatesChanged(); 0072 void descriptionChanged(); 0073 void addressChanged(); 0074 void websiteChanged(); 0075 void wikipediaChanged(); 0076 void openingHoursChanged(); 0077 void wheelchairInfoChanged(); 0078 void wifiAvailabilityChanged(); 0079 void phoneChanged(); 0080 void tagsChanged(); 0081 0082 void routeRelationModelChanged(); 0083 0084 private: 0085 bool addTagValue(QString &target, const QString &key, const QString &format=QString(), const QString& separator = QStringLiteral(" · ")) const; 0086 void addFirstTagValueOf(QString &target, const QStringList &keys) const; 0087 void addTagDescription(QString &target, const QString &key, const QString &value, const QString &description) const; 0088 static void append(QString &target, const QString &value); 0089 QString addressFromOsmData() const; 0090 static QString formatStreet(const QString &street, const QString &houseNumber); 0091 void updateTags(); 0092 void updateRelations(const GeoDataPlacemark &placemark); 0093 0094 Marble::GeoDataPlacemark m_placemark; 0095 mutable QString m_address; // mutable to allow lazy calculation in the getter 0096 mutable QString m_description; 0097 mutable QString m_website; 0098 mutable QString m_wikipedia; 0099 mutable QString m_openingHours; 0100 mutable QString m_wheelchairInfo; 0101 mutable QString m_wifiAvailable; 0102 mutable QString m_phone; 0103 QStringList m_tags; 0104 0105 RouteRelationModel m_relationModel; 0106 }; 0107 0108 } 0109 0110 QML_DECLARE_TYPE(Marble::Placemark) 0111 0112 #endif // MARBLE_DECLARATIVE_PLACEMARK_H