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