1 #include "qmapboxgl_map_observer.hpp" 2 3 #include "qmapboxgl_p.hpp" 4 5 #include <mbgl/util/exception.hpp> 6 7 #include <exception> 8 QMapboxGLMapObserver(QMapboxGLPrivate * d)9QMapboxGLMapObserver::QMapboxGLMapObserver(QMapboxGLPrivate *d) 10 : d_ptr(d) 11 { 12 } 13 ~QMapboxGLMapObserver()14QMapboxGLMapObserver::~QMapboxGLMapObserver() 15 { 16 } 17 onCameraWillChange(mbgl::MapObserver::CameraChangeMode mode)18void QMapboxGLMapObserver::onCameraWillChange(mbgl::MapObserver::CameraChangeMode mode) 19 { 20 if (mode == mbgl::MapObserver::CameraChangeMode::Immediate) { 21 emit mapChanged(QMapboxGL::MapChangeRegionWillChange); 22 } else { 23 emit mapChanged(QMapboxGL::MapChangeRegionWillChangeAnimated); 24 } 25 } 26 onCameraIsChanging()27void QMapboxGLMapObserver::onCameraIsChanging() 28 { 29 emit mapChanged(QMapboxGL::MapChangeRegionIsChanging); 30 } 31 onCameraDidChange(mbgl::MapObserver::CameraChangeMode mode)32void QMapboxGLMapObserver::onCameraDidChange(mbgl::MapObserver::CameraChangeMode mode) 33 { 34 if (mode == mbgl::MapObserver::CameraChangeMode::Immediate) { 35 emit mapChanged(QMapboxGL::MapChangeRegionDidChange); 36 } else { 37 emit mapChanged(QMapboxGL::MapChangeRegionDidChangeAnimated); 38 } 39 } 40 onWillStartLoadingMap()41void QMapboxGLMapObserver::onWillStartLoadingMap() 42 { 43 emit mapChanged(QMapboxGL::MapChangeWillStartLoadingMap); 44 } 45 onDidFinishLoadingMap()46void QMapboxGLMapObserver::onDidFinishLoadingMap() 47 { 48 emit mapChanged(QMapboxGL::MapChangeDidFinishLoadingMap); 49 } 50 onDidFailLoadingMap(std::exception_ptr exception)51void QMapboxGLMapObserver::onDidFailLoadingMap(std::exception_ptr exception) 52 { 53 emit mapChanged(QMapboxGL::MapChangeDidFailLoadingMap); 54 55 QMapboxGL::MapLoadingFailure type; 56 QString description; 57 58 try { 59 std::rethrow_exception(exception); 60 } catch (const mbgl::util::StyleParseException& e) { 61 type = QMapboxGL::MapLoadingFailure::StyleParseFailure; 62 description = e.what(); 63 } catch (const mbgl::util::StyleLoadException& e) { 64 type = QMapboxGL::MapLoadingFailure::StyleLoadFailure; 65 description = e.what(); 66 } catch (const mbgl::util::NotFoundException& e) { 67 type = QMapboxGL::MapLoadingFailure::NotFoundFailure; 68 description = e.what(); 69 } catch (const std::exception& e) { 70 type = QMapboxGL::MapLoadingFailure::UnknownFailure; 71 description = e.what(); 72 } 73 74 emit mapLoadingFailed(type, description); 75 } 76 onWillStartRenderingFrame()77void QMapboxGLMapObserver::onWillStartRenderingFrame() 78 { 79 emit mapChanged(QMapboxGL::MapChangeWillStartRenderingFrame); 80 } 81 onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode mode)82void QMapboxGLMapObserver::onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode mode) 83 { 84 if (mode == mbgl::MapObserver::RenderMode::Partial) { 85 emit mapChanged(QMapboxGL::MapChangeDidFinishRenderingFrame); 86 } else { 87 emit mapChanged(QMapboxGL::MapChangeDidFinishRenderingFrameFullyRendered); 88 } 89 } 90 onWillStartRenderingMap()91void QMapboxGLMapObserver::onWillStartRenderingMap() 92 { 93 emit mapChanged(QMapboxGL::MapChangeWillStartRenderingMap); 94 } 95 onDidFinishRenderingMap(mbgl::MapObserver::RenderMode mode)96void QMapboxGLMapObserver::onDidFinishRenderingMap(mbgl::MapObserver::RenderMode mode) 97 { 98 if (mode == mbgl::MapObserver::RenderMode::Partial) { 99 emit mapChanged(QMapboxGL::MapChangeDidFinishRenderingMap); 100 } else { 101 emit mapChanged(QMapboxGL::MapChangeDidFinishRenderingMapFullyRendered); 102 } 103 } 104 onDidFinishLoadingStyle()105void QMapboxGLMapObserver::onDidFinishLoadingStyle() 106 { 107 emit mapChanged(QMapboxGL::MapChangeDidFinishLoadingStyle); 108 } 109 onSourceChanged(mbgl::style::Source &)110void QMapboxGLMapObserver::onSourceChanged(mbgl::style::Source&) 111 { 112 std::string attribution; 113 for (const auto& source : d_ptr->mapObj->getStyle().getSources()) { 114 // Avoid duplicates by using the most complete attribution HTML snippet. 115 if (source->getAttribution() && (attribution.size() < source->getAttribution()->size())) 116 attribution = *source->getAttribution(); 117 } 118 emit copyrightsChanged(QString::fromStdString(attribution)); 119 emit mapChanged(QMapboxGL::MapChangeSourceDidChange); 120 } 121