summaryrefslogtreecommitdiff
path: root/macosx
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-08-06 18:52:00 +0200
committerKonstantin Käfer <mail@kkaefer.com>2014-08-06 18:52:00 +0200
commit6dc391194951bdd39bb7f0b1774ddadea7609643 (patch)
tree6bf02eff0da01bc08dd8515f52bdcf4da8d6d3a6 /macosx
parent3ec51f5a5aaf8981d28c01c4ccddf2b0ebd7f188 (diff)
parent9dc48b773fe1c614655b5c7a7645b3ee9f1fa557 (diff)
downloadqtlocation-mapboxgl-6dc391194951bdd39bb7f0b1774ddadea7609643.tar.gz
Merge pull request #403 from mapbox/symbols
Symbols
Diffstat (limited to 'macosx')
-rw-r--r--macosx/Info.plist11
-rw-r--r--macosx/main.mm68
2 files changed, 79 insertions, 0 deletions
diff --git a/macosx/Info.plist b/macosx/Info.plist
index 366a5d8abc..514db118ea 100644
--- a/macosx/Info.plist
+++ b/macosx/Info.plist
@@ -32,5 +32,16 @@
<string>0.0.1</string>
<key>NSHighResolutionCapable</key>
<true/>
+ <key>CFBundleURLTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleURLName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundleURLSchemes</key>
+ <array>
+ <string>mapboxgl</string>
+ </array>
+ </dict>
+ </array>
</dict>
</plist> \ No newline at end of file
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