diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2014-08-06 18:52:00 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2014-08-06 18:52:00 +0200 |
commit | 6dc391194951bdd39bb7f0b1774ddadea7609643 (patch) | |
tree | 6bf02eff0da01bc08dd8515f52bdcf4da8d6d3a6 /macosx/main.mm | |
parent | 3ec51f5a5aaf8981d28c01c4ccddf2b0ebd7f188 (diff) | |
parent | 9dc48b773fe1c614655b5c7a7645b3ee9f1fa557 (diff) | |
download | qtlocation-mapboxgl-6dc391194951bdd39bb7f0b1774ddadea7609643.tar.gz |
Merge pull request #403 from mapbox/symbols
Symbols
Diffstat (limited to 'macosx/main.mm')
-rw-r--r-- | macosx/main.mm | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/macosx/main.mm b/macosx/main.mm index 3df85a782a..a1b01de7b3 100644 --- a/macosx/main.mm +++ b/macosx/main.mm @@ -4,6 +4,67 @@ #import <Foundation/Foundation.h> +@interface URLHandler : NSObject +@property (nonatomic) mbgl::Map *map; + +- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event + withReplyEvent:(NSAppleEventDescriptor *)replyEvent; +@end + +@implementation URLHandler + +- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event + withReplyEvent:(NSAppleEventDescriptor *)replyEvent { + NSString* urlString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; + NSURL *url = [NSURL URLWithString:urlString]; + NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; + for (NSString *param in [[url query] componentsSeparatedByString:@"&"]) { + NSArray *parts = [param componentsSeparatedByString:@"="]; + if([parts count] < 2) continue; + [params setObject:[parts objectAtIndex:1] forKey:[parts objectAtIndex:0]]; + } + + double latitude = 0, longitude = 0, zoom = 0, bearing = 0; + bool hasCenter = false, hasZoom = false, hasBearing = false; + + NSString *centerString = [params objectForKey:@"center"]; + if (centerString) { + NSArray *latlon = [centerString componentsSeparatedByString:@","]; + if ([latlon count] == 2) { + latitude = [[latlon objectAtIndex:0] doubleValue]; + longitude = [[latlon objectAtIndex:1] doubleValue]; + hasCenter = true; + } + } + + NSString *zoomString = [params objectForKey:@"zoom"]; + if (zoomString) { + zoom = [zoomString doubleValue]; + hasZoom = true; + } + + NSString *bearingString = [params objectForKey:@"bearing"]; + if (bearingString) { + bearing = [bearingString doubleValue]; + hasBearing = true; + } + + if ([self map]) { + if (hasCenter && hasZoom) { + [self map]->setLonLatZoom(longitude, latitude, zoom); + } else if (hasCenter) { + [self map]->setLonLat(longitude, latitude); + } else if (hasZoom) { + [self map]->setZoom(zoom); + } + + if (hasBearing) { + [self map]->setBearing(bearing); + } + } +} +@end + int main() { mbgl::Log::Set<mbgl::NSLogBackend>(); @@ -16,6 +77,9 @@ int main() { map.setBearing(settings.bearing); map.setDebug(settings.debug); + URLHandler *handler = [[URLHandler alloc] init]; + [handler setMap:&map]; + // Set access token if present NSString *accessToken = [[NSProcessInfo processInfo] environment][@"MAPBOX_ACCESS_TOKEN"]; if ( ! accessToken) mbgl::Log::Warning(mbgl::Event::Setup, "No access token set. Mapbox vector tiles won't work."); @@ -28,6 +92,10 @@ int main() { error:nil]; map.setStyleJSON((std::string)[json cStringUsingEncoding:[NSString defaultCStringEncoding]]); + NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager]; + [appleEventManager setEventHandler:handler andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; + + int ret = view.run(); // Save settings |