diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2016-10-20 12:02:04 +0300 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2016-10-20 16:18:08 +0300 |
commit | ab63a9494f109245f9bd81839e2576b60a34cd2c (patch) | |
tree | 62acef7b18d88a8386abdca75b8ff73cb39701fa /src | |
parent | 5527887c4bb1299fd2351e1a0c7550fab5f39bef (diff) | |
download | qtlocation-mapboxgl-ab63a9494f109245f9bd81839e2576b60a34cd2c.tar.gz |
[core] reload geojson source on url change
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/style/source_observer.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/style/sources/geojson_source_impl.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/style/style.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/style/style.hpp | 1 |
4 files changed, 18 insertions, 0 deletions
diff --git a/src/mbgl/style/source_observer.hpp b/src/mbgl/style/source_observer.hpp index a6cdab6ba2..dcbcaeabaf 100644 --- a/src/mbgl/style/source_observer.hpp +++ b/src/mbgl/style/source_observer.hpp @@ -20,6 +20,9 @@ public: virtual void onSourceAttributionChanged(Source&, const std::string&) {} virtual void onSourceError(Source&, std::exception_ptr) {} + //Source description needs to be reloaded + virtual void onSourceDescriptionChanged(Source&) {} + virtual void onTileChanged(Source&, const OverscaledTileID&) {} virtual void onTileError(Source&, const OverscaledTileID&, std::exception_ptr) {} }; diff --git a/src/mbgl/style/sources/geojson_source_impl.cpp b/src/mbgl/style/sources/geojson_source_impl.cpp index 5b7ba4fc77..f4d47cae35 100644 --- a/src/mbgl/style/sources/geojson_source_impl.cpp +++ b/src/mbgl/style/sources/geojson_source_impl.cpp @@ -38,6 +38,12 @@ GeoJSONSource::Impl::~Impl() = default; void GeoJSONSource::Impl::setURL(std::string url_) { url = std::move(url_); + + //Signal that the source description needs a reload + if (loaded) { + loaded = false; + observer->onSourceDescriptionChanged(base); + } } optional<std::string> GeoJSONSource::Impl::getURL() { @@ -132,6 +138,7 @@ void GeoJSONSource::Impl::loadDescription(FileSource& fileSource) { loaded = true; observer->onSourceLoaded(base); + req.reset(); } }); } diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index 522965b953..01ca5b6f36 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -491,6 +491,13 @@ void Style::onSourceError(Source& source, std::exception_ptr error) { observer->onResourceError(error); } +void Style::onSourceDescriptionChanged(Source& source) { + observer->onSourceDescriptionChanged(source); + if (!source.baseImpl->loaded) { + source.baseImpl->loadDescription(fileSource); + } +} + void Style::onTileChanged(Source& source, const OverscaledTileID& tileID) { observer->onTileChanged(source, tileID); observer->onUpdate(Update::Repaint); diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp index 648bd48030..21b25857d6 100644 --- a/src/mbgl/style/style.hpp +++ b/src/mbgl/style/style.hpp @@ -134,6 +134,7 @@ private: void onSourceLoaded(Source&) override; void onSourceAttributionChanged(Source&, const std::string&) override; void onSourceError(Source&, std::exception_ptr) override; + void onSourceDescriptionChanged(Source&) override; void onTileChanged(Source&, const OverscaledTileID&) override; void onTileError(Source&, const OverscaledTileID&, std::exception_ptr) override; |