[Qt] Added set style filter method

This commit is contained in:
Thiago Marcos P. Santos
2016-07-08 15:09:14 +03:00
parent b59070590b
commit 18c8830169
2 changed files with 42 additions and 0 deletions

View File

@@ -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();

View File

@@ -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;