From b79a14b7a05f6ef80351ba74e0ef386e3231eaa7 Mon Sep 17 00:00:00 2001 From: Tadej Novak Date: Mon, 2 Nov 2020 11:59:21 +0100 Subject: Allow removal of layers and sources created using parameters in MapboxGL [ChangeLog][MapboxGL] Sources and layers from parameters can be removed Task-number: QTBUG-91623 Change-Id: I08db3e02b123f3ffb16e09fb77070ad5b6dbb18a Reviewed-by: Alex Blasche --- .../geoservices/mapboxgl/qgeomapmapboxgl.cpp | 5 ++++ .../geoservices/mapboxgl/qmapboxglstylechange.cpp | 29 ++++++++++++++++++++++ .../geoservices/mapboxgl/qmapboxglstylechange_p.h | 1 + 3 files changed, 35 insertions(+) diff --git a/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp b/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp index 9c088f2f..66763af3 100644 --- a/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp +++ b/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp @@ -193,6 +193,11 @@ void QGeoMapMapboxGLPrivate::removeParameter(QGeoMapParameter *param) Q_Q(QGeoMapMapboxGL); q->disconnect(param); + + if (m_styleLoaded) { + m_styleChanges << QMapboxGLStyleChange::removeMapParameter(param); + emit q->sgNodeChanged(); + } } QGeoMap::ItemTypes QGeoMapMapboxGLPrivate::supportedMapItemTypes() const diff --git a/src/plugins/geoservices/mapboxgl/qmapboxglstylechange.cpp b/src/plugins/geoservices/mapboxgl/qmapboxglstylechange.cpp index 6dc8ea70..483f8f6d 100644 --- a/src/plugins/geoservices/mapboxgl/qmapboxglstylechange.cpp +++ b/src/plugins/geoservices/mapboxgl/qmapboxglstylechange.cpp @@ -255,6 +255,35 @@ QList> QMapboxGLStyleChange::addMapItem(QDe return changes; } +QList> QMapboxGLStyleChange::removeMapParameter(QGeoMapParameter *param) +{ + static const QStringList acceptedParameterTypes = QStringList() + << QStringLiteral("paint") << QStringLiteral("layout") << QStringLiteral("filter") + << QStringLiteral("layer") << QStringLiteral("source") << QStringLiteral("image"); + + QList> changes; + + switch (acceptedParameterTypes.indexOf(param->type())) { + case -1: + qWarning() << "Invalid value for property 'type': " + param->type(); + break; + case 0: // paint + case 1: // layout + case 2: // filter + break; + case 3: // layer + changes << QSharedPointer(new QMapboxGLStyleRemoveLayer(param->property("name").toString())); + break; + case 4: // source + changes << QSharedPointer(new QMapboxGLStyleRemoveSource(param->property("name").toString())); + break; + case 5: // image + break; + } + + return changes; +} + QList> QMapboxGLStyleChange::removeMapItem(QDeclarativeGeoMapItemBase *item) { QList> changes; diff --git a/src/plugins/geoservices/mapboxgl/qmapboxglstylechange_p.h b/src/plugins/geoservices/mapboxgl/qmapboxglstylechange_p.h index fd5b9af4..9a8f50ea 100644 --- a/src/plugins/geoservices/mapboxgl/qmapboxglstylechange_p.h +++ b/src/plugins/geoservices/mapboxgl/qmapboxglstylechange_p.h @@ -59,6 +59,7 @@ public: static QList> addMapParameter(QGeoMapParameter *); static QList> addMapItem(QDeclarativeGeoMapItemBase *, const QString &before); + static QList> removeMapParameter(QGeoMapParameter *); static QList> removeMapItem(QDeclarativeGeoMapItemBase *); virtual void apply(QMapboxGL *map) = 0; -- cgit v1.2.1