diff --git a/src/apps/marble-maps/PlacemarkDialog.qml b/src/apps/marble-maps/PlacemarkDialog.qml --- a/src/apps/marble-maps/PlacemarkDialog.qml +++ b/src/apps/marble-maps/PlacemarkDialog.qml @@ -79,6 +79,12 @@ maximumLineCount: 4 } + IconTest { + width: parent.width + visible: text.length > 0 + text: placemark === null ? "" : placemark.level + } + IconText { width: parent.width visible: url.length > 0 diff --git a/src/lib/marble/declarative/Placemark.h b/src/lib/marble/declarative/Placemark.h --- a/src/lib/marble/declarative/Placemark.h +++ b/src/lib/marble/declarative/Placemark.h @@ -29,6 +29,7 @@ Q_PROPERTY(QString name WRITE setName READ name NOTIFY nameChanged) Q_PROPERTY(QString description READ description NOTIFY descriptionChanged) Q_PROPERTY(QString address READ address NOTIFY addressChanged) + Q_PROPERTY(QString level READ level NOTIFY levelChanged) Q_PROPERTY(QString website READ website NOTIFY websiteChanged) Q_PROPERTY(QString wikipedia READ wikipedia NOTIFY wikipediaChanged) Q_PROPERTY(QString openingHours READ openingHours NOTIFY openingHoursChanged) @@ -50,6 +51,7 @@ QString name() const; QString description() const; QString address() const; + QString level() const; QString website() const; QString wikipedia() const; QString openingHours() const; @@ -67,6 +69,7 @@ void coordinatesChanged(); void descriptionChanged(); void addressChanged(); + void levelChanged(); void websiteChanged(); void wikipediaChanged(); void openingHoursChanged(); @@ -84,6 +87,7 @@ Marble::GeoDataPlacemark m_placemark; mutable QString m_address; // mutable to allow lazy calculation in the getter + mutable QString m_level; mutable QString m_description; mutable QString m_website; mutable QString m_wikipedia; diff --git a/src/lib/marble/declarative/Placemark.cpp b/src/lib/marble/declarative/Placemark.cpp --- a/src/lib/marble/declarative/Placemark.cpp +++ b/src/lib/marble/declarative/Placemark.cpp @@ -31,6 +31,7 @@ { m_placemark = placemark; m_address = QString(); + m_level = QString(); m_description = QString(); m_website = QString(); m_wikipedia = QString(); @@ -41,6 +42,7 @@ emit nameChanged(); emit descriptionChanged(); emit addressChanged(); + emit levelChanged(); emit websiteChanged(); emit wikipediaChanged(); emit openingHoursChanged(); @@ -399,6 +401,28 @@ return m_address; } +QString Placemark::level() const +{ + if (!m_level.isEmpty()) { + return m_level; + } + + const int level = m_placemark.osmData().tagValue(QStringLiteral("level")).toInt(); + if (level > 2) { + addTagValue(m_level, QStringLiteral("level"), tr("Floor %1", "Positive floor level", level)); + } else if (level < -2) { + addTagValue(m_level, QStringLiteral("level"), tr("Basement %1", "Negative floor level", level)); + } else { + addTagDescription(m_level, QStringLiteral("level"), QStringLiteral("2"), tr("Floor 2", "Floor level 2, two levels above ground level")); + addTagDescription(m_level, QStringLiteral("level"), QStringLiteral("1"), tr("Floor 1", "Floor level 1, one level above ground level")); + addTagDescription(m_level, QStringLiteral("level"), QStringLiteral("0"), tr("Ground floor", "Floor level 0")); + addTagDescription(m_level, QStringLiteral("level"), QStringLiteral("-1"), tr("Basement 1", "Floor level -1, one level below ground level")); + addTagDescription(m_level, QStringLiteral("level"), QStringLiteral("-2"), tr("Basement 2", "Floor level -2, two levels below ground level")); + } + + return m_level; +} + QString Placemark::website() const { if (!m_website.isEmpty()) {