From 224027097b7bc314c7537386cd8e8c1c8aa7fb61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dennis=20Nienh=C3=BCser?= Date: Fri, 8 Jul 2016 22:32:26 +0200 Subject: [PATCH] Show gas station details --- src/apps/marble-maps/MarbleMaps.qrc | 2 + src/apps/marble-maps/PlacemarkDialog.qml | 29 +++++----- .../ic_local_gas_station_48px.svg | 1 + .../marble/declarative/MarbleQuickItem.cpp | 2 + src/lib/marble/declarative/Placemark.cpp | 58 ++++++++++++------- src/lib/marble/declarative/Placemark.h | 8 ++- 6 files changed, 60 insertions(+), 40 deletions(-) create mode 100644 src/apps/marble-maps/material-icons/ic_local_gas_station_48px.svg diff --git a/src/apps/marble-maps/MarbleMaps.qrc b/src/apps/marble-maps/MarbleMaps.qrc index 2ecab3823..bd4afcd34 100644 --- a/src/apps/marble-maps/MarbleMaps.qrc +++ b/src/apps/marble-maps/MarbleMaps.qrc @@ -7,6 +7,7 @@ SearchField.qml Search.qml CircularButton.qml + IconText.qml PositionButton.qml BoxedText.qml ImageButton.qml @@ -48,6 +49,7 @@ ../../../data/android/drawable-xxxhdpi/ic_place_unknown.png ../../../data/android/drawable-xxxhdpi/ic_place_via.png ../../../data/android/drawable-xxxhdpi/ic_add_black_48dp.png + material-icons/ic_local_gas_station_48px.svg RouteProfileRadioButton.qml ScrollBar.qml diff --git a/src/apps/marble-maps/PlacemarkDialog.qml b/src/apps/marble-maps/PlacemarkDialog.qml index dab88f4b2..68ae07be0 100644 --- a/src/apps/marble-maps/PlacemarkDialog.qml +++ b/src/apps/marble-maps/PlacemarkDialog.qml @@ -21,7 +21,7 @@ Item { property var placemark: null property string actionIconSource: viaGroup.current === addDestinationButton ? routeEditor.currentProfileIcon : "qrc:///add.png" - height: placemark === null ? 0 : Screen.pixelDensity * 4 + Math.max(infoLayout.height, actionsLayout.height) + height: placemark === null ? 0 : Screen.pixelDensity * 6 + Math.max(infoLayout.height, actionsLayout.height) function addToRoute() { viaGroup.current.execute() @@ -46,50 +46,47 @@ Item { Column { id: infoLayout - clip: true anchors { - top: parent.top + bottom: parent.bottom left: parent.left right: actionsLayout.left margins: Screen.pixelDensity * 2 } - height: nameLabel.height + (descriptionLabel.text == "" ? 0 : descriptionLabel.height) + (addressLabel.text == "" ? 0 : addressLabel.height) - Text { + IconText { id: nameLabel width: parent.width text: placemark === null ? "" : placemark.name - wrapMode: Text.WordWrap - elide: Text.ElideRight maximumLineCount: 2 font.pointSize: 20 } - Text { + IconText { id: descriptionLabel width: parent.width text: placemark === null ? "" : placemark.description - wrapMode: Text.WordWrap - elide: Text.ElideRight maximumLineCount: 4 - font.pointSize: 14 } - Text { + IconText { id: addressLabel width: parent.width text: placemark === null ? "" : placemark.address - wrapMode: Text.WordWrap - elide: Text.ElideRight maximumLineCount: 4 - font.pointSize: 14 + } + + IconText { + id: fuelLabel + width: parent.width + visible: placemark !== null && placemark.fuelDetails !== "" + text: placemark === null ? "" : placemark.fuelDetails + icon: "qrc:/material/gas_station.svg" } } Column { id: actionsLayout width: rowLayout.width - height: spacer.height + rowLayout.height spacing: Screen.pixelDensity * 2 anchors { right: parent.right diff --git a/src/apps/marble-maps/material-icons/ic_local_gas_station_48px.svg b/src/apps/marble-maps/material-icons/ic_local_gas_station_48px.svg new file mode 100644 index 000000000..560d59649 --- /dev/null +++ b/src/apps/marble-maps/material-icons/ic_local_gas_station_48px.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/lib/marble/declarative/MarbleQuickItem.cpp b/src/lib/marble/declarative/MarbleQuickItem.cpp index 31a851193..42200490f 100644 --- a/src/lib/marble/declarative/MarbleQuickItem.cpp +++ b/src/lib/marble/declarative/MarbleQuickItem.cpp @@ -182,6 +182,8 @@ namespace Marble MarbleQuickItem::MarbleQuickItem(QQuickItem *parent) : QQuickPaintedItem(parent) ,d(new MarbleQuickItemPrivate(this)) { + qRegisterMetaType("Placemark*"); + foreach (AbstractFloatItem *item, d->m_map.floatItems()) { if (item->nameId() == "license") { item->setPosition(QPointF(5.0, -10.0)); diff --git a/src/lib/marble/declarative/Placemark.cpp b/src/lib/marble/declarative/Placemark.cpp index 9cc6ebeca..2ffd142ff 100644 --- a/src/lib/marble/declarative/Placemark.cpp +++ b/src/lib/marble/declarative/Placemark.cpp @@ -34,6 +34,9 @@ void Placemark::setGeoDataPlacemark( const Marble::GeoDataPlacemark &placemark ) emit nameChanged(); emit descriptionChanged(); emit addressChanged(); + if (m_placemark.visualCategory() == GeoDataFeature::TransportFuel) { + emit fuelDetailsChanged(); + } } Marble::GeoDataPlacemark Placemark::placemark() const @@ -62,19 +65,19 @@ QString Placemark::description() const if (category >= GeoDataFeature::FoodBar && category <= GeoDataFeature::FoodRestaurant) { addTagValue("brand"); addTagValue("cuisine"); - addTagDescription("self_service", "yes", "Self Service"); - addTagDescription("takeaway", "yes", "Take Away"); - addTagDescription("outdoor_seating", "yes", "Outdoor Seating"); - addTagDescription("ice_cream", "yes", "Ice Cream"); - addTagDescription("smoking", "dedicated", "Smoking (dedicated)"); - addTagDescription("smoking", "yes", "Smoking allowed"); - addTagDescription("smoking", "separated", "Smoking (separated)"); - addTagDescription("smoking", "isolated", "Smoking (isolated)"); - addTagDescription("smoking", "no", "No smoking"); - addTagDescription("smoking", "outside", "Smoking (outside)"); - addTagDescription("smoking:outside", "yes", "Smoking (outside)"); - addTagDescription("smoking:outside", "separated", "Smoking (outside separated)"); - addTagDescription("smoking:outside", "no", "No smoking outside"); + addTagDescription(m_description, "self_service", "yes", "Self Service"); + addTagDescription(m_description, "takeaway", "yes", "Take Away"); + addTagDescription(m_description, "outdoor_seating", "yes", "Outdoor Seating"); + addTagDescription(m_description, "ice_cream", "yes", "Ice Cream"); + addTagDescription(m_description, "smoking", "dedicated", "Smoking (dedicated)"); + addTagDescription(m_description, "smoking", "yes", "Smoking allowed"); + addTagDescription(m_description, "smoking", "separated", "Smoking (separated)"); + addTagDescription(m_description, "smoking", "isolated", "Smoking (isolated)"); + addTagDescription(m_description, "smoking", "no", "No smoking"); + addTagDescription(m_description, "smoking", "outside", "Smoking (outside)"); + addTagDescription(m_description, "smoking:outside", "yes", "Smoking (outside)"); + addTagDescription(m_description, "smoking:outside", "separated", "Smoking (outside separated)"); + addTagDescription(m_description, "smoking:outside", "no", "No smoking outside"); } else if (category >= GeoDataFeature::ShopBeverages && category <= GeoDataFeature::Shop) { addTagValue("operator"); } else if (category == GeoDataFeature::TransportBusStop) { @@ -87,12 +90,6 @@ QString Placemark::description() const } else if (category == GeoDataFeature::TransportFuel) { addTagValue("brand"); addTagValue("operator"); - addTagDescription("fuel:diesel", "yes", tr("Diesel")); - addTagDescription("fuel:octane_91", "yes", tr("Octane 91")); - addTagDescription("fuel:octane_95", "yes", tr("Octane 95")); - addTagDescription("fuel:octane_98", "yes", tr("Octane 98")); - addTagDescription("fuel:e10", "yes", tr("E10")); - addTagDescription("fuel:lpg", "yes", tr("LPG")); } else if (category == GeoDataFeature::NaturalTree) { addTagValue("species:en"); addTagValue("genus:en"); @@ -119,6 +116,20 @@ QString Placemark::address() const return m_address; } +QString Placemark::fuelDetails() const +{ + if (m_fuelDetails.isEmpty() && m_placemark.visualCategory() == GeoDataFeature::TransportFuel) { + addTagDescription(m_fuelDetails, "fuel:diesel", "yes", tr("Diesel")); + addTagDescription(m_fuelDetails, "fuel:octane_91", "yes", tr("Octane 91")); + addTagDescription(m_fuelDetails, "fuel:octane_95", "yes", tr("Octane 95")); + addTagDescription(m_fuelDetails, "fuel:octane_98", "yes", tr("Octane 98")); + addTagDescription(m_fuelDetails, "fuel:e10", "yes", tr("E10")); + addTagDescription(m_fuelDetails, "fuel:lpg", "yes", tr("LPG")); + + } + return m_fuelDetails; +} + void Placemark::setName(const QString & name) { if (m_placemark.name() == name) { @@ -323,7 +334,7 @@ QString Placemark::categoryName(GeoDataFeature::GeoDataVisualCategory category) case GeoDataFeature::TransportBusStation: return tr("Bus Station"); case GeoDataFeature::TransportBusStop: return tr("Bus Stop"); case GeoDataFeature::TransportCarShare: return tr("Car Sharing"); - case GeoDataFeature::TransportFuel: return tr("Fuel"); + case GeoDataFeature::TransportFuel: return tr("Gas Station"); case GeoDataFeature::TransportParking: return tr("Parking"); case GeoDataFeature::TransportParkingSpace: return tr("Parking Space"); case GeoDataFeature::TransportPlatform: return tr("Platform"); @@ -428,11 +439,14 @@ void Placemark::addTagValue(const QString &key) const } } -void Placemark::addTagDescription(const QString &key, const QString &value, const QString &description) const +void Placemark::addTagDescription(QString &target, const QString &key, const QString &value, const QString &description) const { auto const & osmData = m_placemark.osmData(); if (osmData.containsTag(key, value)) { - m_description += " - " + description; + if (!target.isEmpty()) { + target += " ยท "; + } + target += description; } } diff --git a/src/lib/marble/declarative/Placemark.h b/src/lib/marble/declarative/Placemark.h index 34a358ba5..c819efe79 100644 --- a/src/lib/marble/declarative/Placemark.h +++ b/src/lib/marble/declarative/Placemark.h @@ -32,6 +32,7 @@ class Placemark : public QObject 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 fuelDetails READ fuelDetails NOTIFY fuelDetailsChanged) public: /** Constructor */ @@ -46,6 +47,7 @@ public: QString name() const; QString description() const; QString address() const; + QString fuelDetails() const; public Q_SLOTS: void setName(const QString &name); @@ -56,11 +58,12 @@ Q_SIGNALS: void nameChanged(); void descriptionChanged(); void addressChanged(); + void fuelDetailsChanged(); private: QString categoryName(GeoDataFeature::GeoDataVisualCategory category) const; void addTagValue(const QString &key) const; - void addTagDescription(const QString &key, const QString &value, const QString &description) const; + void addTagDescription(QString &target, const QString &key, const QString &value, const QString &description) const; QString addressFromExtendedData() const; QString addressFromOsmData() const; QString formatStreet(const QString &street, const QString &houseNumber) const; @@ -69,10 +72,11 @@ private: Coordinate m_coordinate; mutable QString m_address; // mutable to allow lazy calculation in the getter mutable QString m_description; + mutable QString m_fuelDetails; }; } -QML_DECLARE_TYPE( Marble::Placemark ) +QML_DECLARE_TYPE(Marble::Placemark) #endif // MARBLE_DECLARATIVE_PLACEMARK_H -- GitLab