1 #pragma once 2 3 #include <mbgl/style/style.hpp> 4 #include <mbgl/style/transition_options.hpp> 5 #include <mbgl/style/observer.hpp> 6 #include <mbgl/style/source_observer.hpp> 7 #include <mbgl/style/layer_observer.hpp> 8 #include <mbgl/style/light_observer.hpp> 9 #include <mbgl/sprite/sprite_loader_observer.hpp> 10 #include <mbgl/style/image.hpp> 11 #include <mbgl/style/source.hpp> 12 #include <mbgl/style/layer.hpp> 13 #include <mbgl/style/collection.hpp> 14 15 #include <mbgl/map/camera.hpp> 16 17 #include <mbgl/util/noncopyable.hpp> 18 #include <mbgl/util/optional.hpp> 19 #include <mbgl/util/geo.hpp> 20 21 #include <memory> 22 #include <string> 23 #include <vector> 24 #include <unordered_map> 25 26 namespace mbgl { 27 28 class Scheduler; 29 class FileSource; 30 class AsyncRequest; 31 class SpriteLoader; 32 33 namespace style { 34 35 class Style::Impl : public SpriteLoaderObserver, 36 public SourceObserver, 37 public LayerObserver, 38 public LightObserver, 39 public util::noncopyable { 40 public: 41 Impl(Scheduler&, FileSource&, float pixelRatio); 42 ~Impl() override; 43 44 void loadJSON(const std::string&); 45 void loadURL(const std::string&); 46 47 std::string getJSON() const; 48 std::string getURL() const; 49 50 void setObserver(Observer*); 51 52 bool isLoaded() const; 53 getLastError() const54 std::exception_ptr getLastError() const { 55 return lastError; 56 } 57 58 std::vector< Source*> getSources(); 59 std::vector<const Source*> getSources() const; 60 Source* getSource(const std::string& id) const; 61 62 void addSource(std::unique_ptr<Source>); 63 std::unique_ptr<Source> removeSource(const std::string& sourceID); 64 65 std::vector< Layer*> getLayers(); 66 std::vector<const Layer*> getLayers() const; 67 Layer* getLayer(const std::string& id) const; 68 69 Layer* addLayer(std::unique_ptr<Layer>, 70 optional<std::string> beforeLayerID = {}); 71 std::unique_ptr<Layer> removeLayer(const std::string& layerID); 72 73 std::string getName() const; 74 CameraOptions getDefaultCamera() const; 75 76 TransitionOptions getTransitionOptions() const; 77 void setTransitionOptions(const TransitionOptions&); 78 79 void setLight(std::unique_ptr<Light>); 80 Light* getLight() const; 81 82 const style::Image* getImage(const std::string&) const; 83 void addImage(std::unique_ptr<style::Image>); 84 void removeImage(const std::string&); 85 86 const std::string& getGlyphURL() const; 87 88 Immutable<std::vector<Immutable<Image::Impl>>> getImageImpls() const; 89 Immutable<std::vector<Immutable<Source::Impl>>> getSourceImpls() const; 90 Immutable<std::vector<Immutable<Layer::Impl>>> getLayerImpls() const; 91 92 void dumpDebugLogs() const; 93 94 bool mutated = false; 95 bool loaded = false; 96 bool spriteLoaded = false; 97 98 private: 99 void parse(const std::string&); 100 101 Scheduler& scheduler; 102 FileSource& fileSource; 103 104 std::string url; 105 std::string json; 106 107 std::unique_ptr<AsyncRequest> styleRequest; 108 std::unique_ptr<SpriteLoader> spriteLoader; 109 110 std::string glyphURL; 111 Collection<style::Image> images; 112 Collection<Source> sources; 113 Collection<Layer> layers; 114 TransitionOptions transitionOptions; 115 std::unique_ptr<Light> light; 116 117 // Defaults 118 std::string name; 119 CameraOptions defaultCamera; 120 121 // SpriteLoaderObserver implementation. 122 void onSpriteLoaded(std::vector<std::unique_ptr<Image>>&&) override; 123 void onSpriteError(std::exception_ptr) override; 124 125 // SourceObserver implementation. 126 void onSourceLoaded(Source&) override; 127 void onSourceChanged(Source&) override; 128 void onSourceError(Source&, std::exception_ptr) override; 129 void onSourceDescriptionChanged(Source&) override; 130 131 // LayerObserver implementation. 132 void onLayerChanged(Layer&) override; 133 134 // LightObserver implementation. 135 void onLightChanged(const Light&) override; 136 137 Observer nullObserver; 138 Observer* observer = &nullObserver; 139 140 std::exception_ptr lastError; 141 }; 142 143 } // namespace style 144 } // namespace mbgl 145