summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <thiago@mapbox.com>2016-07-08 15:09:14 +0300
committerThiago Marcos P. Santos <thiago@mapbox.com>2016-07-11 17:01:32 +0300
commit18c88301696de16037aaa2d3b9b31fdabc813696 (patch)
tree4f1db470cf3a91319493455fff3eb0ddcf86aad2
parentb59070590b71a4a433bbffbada7019bc2a3ef550 (diff)
downloadqtlocation-mapboxgl-18c88301696de16037aaa2d3b9b31fdabc813696.tar.gz
[Qt] Added set style filter method
-rw-r--r--platform/qt/include/qmapboxgl.hpp2
-rw-r--r--platform/qt/src/qmapboxgl.cpp40
2 files changed, 42 insertions, 0 deletions
diff --git a/platform/qt/include/qmapboxgl.hpp b/platform/qt/include/qmapboxgl.hpp
index ad1f5e702c..1caee09be5 100644
--- a/platform/qt/include/qmapboxgl.hpp
+++ b/platform/qt/include/qmapboxgl.hpp
@@ -207,6 +207,8 @@ public:
char* before = NULL);
void removeCustomLayer(const QString& id);
+ void setFilter(const QString &layer, const QVariant &filter);
+
public slots:
void render();
void connectionEstablished();
diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp
index a8fc51b236..c793353ac6 100644
--- a/platform/qt/src/qmapboxgl.cpp
+++ b/platform/qt/src/qmapboxgl.cpp
@@ -642,6 +642,46 @@ void QMapboxGL::removeCustomLayer(const QString& id)
d_ptr->mapObj->removeLayer(id.toStdString());
}
+void QMapboxGL::setFilter(const QString& layer_, const QVariant& filter_)
+{
+ using namespace mbgl::style;
+ using namespace mbgl::style::conversion;
+
+ Layer* layer = d_ptr->mapObj->getLayer(layer_.toStdString());
+ if (!layer) {
+ qWarning() << "Layer not found:" << layer_;
+ return;
+ }
+
+ Filter filter;
+
+ Result<Filter> converted = convert<Filter>(filter_);
+ if (!converted) {
+ qWarning() << "Error parsing filter:" << converted.error().message;
+ return;
+ }
+ filter = std::move(*converted);
+
+ if (layer->is<FillLayer>()) {
+ layer->as<FillLayer>()->setFilter(filter);
+ return;
+ }
+ if (layer->is<LineLayer>()) {
+ layer->as<LineLayer>()->setFilter(filter);
+ return;
+ }
+ if (layer->is<SymbolLayer>()) {
+ layer->as<SymbolLayer>()->setFilter(filter);
+ return;
+ }
+ if (layer->is<CircleLayer>()) {
+ layer->as<CircleLayer>()->setFilter(filter);
+ return;
+ }
+
+ qWarning() << "Layer doesn't support filters";
+}
+
void QMapboxGL::render()
{
d_ptr->dirty = false;