summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorMinh Nguyễn <mxn@1ec5.org>2016-05-27 00:35:18 -0700
committerMinh Nguyễn <mxn@1ec5.org>2016-05-27 21:42:39 -0700
commitb94a125ff28db2d4bfd181928ce8eee523a30ec7 (patch)
tree82a2ef12f67803f7026b5592b1a6acf36bcb64a2 /platform
parent974e6696986d49e2eb130e24bde9e75402b0f386 (diff)
downloadqtlocation-mapboxgl-b94a125ff28db2d4bfd181928ce8eee523a30ec7.tar.gz
[osx] Relegated “selection” to context menu
Moved feature selection to the context menu and restored the press gesture for dropping a pin. Bust complex features into simple shapes to feed into MGLMapView as overlays.
Diffstat (limited to 'platform')
-rw-r--r--platform/darwin/src/MGLShapeCollection.h4
-rw-r--r--platform/darwin/src/MGLShapeCollection.m4
-rw-r--r--platform/osx/app/Base.lproj/MainMenu.xib2
-rw-r--r--platform/osx/app/Base.lproj/MapDocument.xib8
-rw-r--r--platform/osx/app/MapDocument.m37
5 files changed, 47 insertions, 8 deletions
diff --git a/platform/darwin/src/MGLShapeCollection.h b/platform/darwin/src/MGLShapeCollection.h
index 6a21d6fb90..a617223ea7 100644
--- a/platform/darwin/src/MGLShapeCollection.h
+++ b/platform/darwin/src/MGLShapeCollection.h
@@ -19,7 +19,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
An array of shapes forming the shape collection.
*/
-@property (nonatomic, copy, readonly) NS_ARRAY_OF(MGLShape <MGLAnnotation> *) *shapes;
+@property (nonatomic, copy, readonly) NS_ARRAY_OF(MGLShape *) *shapes;
/**
Creates and returns a shape collection consisting of the given shapes.
@@ -28,7 +28,7 @@ NS_ASSUME_NONNULL_BEGIN
this array is copied to the new object.
@return A new shape collection object.
*/
-+ (instancetype)shapeCollectionWithShapes:(NS_ARRAY_OF(MGLShape <MGLAnnotation> *) *)shapes;
++ (instancetype)shapeCollectionWithShapes:(NS_ARRAY_OF(MGLShape *) *)shapes;
@end
diff --git a/platform/darwin/src/MGLShapeCollection.m b/platform/darwin/src/MGLShapeCollection.m
index 3fc4cdda75..5d42b5a51c 100644
--- a/platform/darwin/src/MGLShapeCollection.m
+++ b/platform/darwin/src/MGLShapeCollection.m
@@ -2,11 +2,11 @@
@implementation MGLShapeCollection
-+ (instancetype)shapeCollectionWithShapes:(NS_ARRAY_OF(MGLShape <MGLAnnotation> *) *)shapes {
++ (instancetype)shapeCollectionWithShapes:(NS_ARRAY_OF(MGLShape *) *)shapes {
return [[self alloc] initWithShapes:shapes];
}
-- (instancetype)initWithShapes:(NS_ARRAY_OF(MGLShape <MGLAnnotation> *) *)shapes {
+- (instancetype)initWithShapes:(NS_ARRAY_OF(MGLShape *) *)shapes {
if (self = [super init]) {
NSAssert(shapes.count, @"Cannot create an empty shape collection");
_shapes = shapes.copy;
diff --git a/platform/osx/app/Base.lproj/MainMenu.xib b/platform/osx/app/Base.lproj/MainMenu.xib
index 4afb3b244e..c80428ff00 100644
--- a/platform/osx/app/Base.lproj/MainMenu.xib
+++ b/platform/osx/app/Base.lproj/MainMenu.xib
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10117" systemVersion="15E65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10117"/>
</dependencies>
diff --git a/platform/osx/app/Base.lproj/MapDocument.xib b/platform/osx/app/Base.lproj/MapDocument.xib
index 9a3db47df6..55d82d21d0 100644
--- a/platform/osx/app/Base.lproj/MapDocument.xib
+++ b/platform/osx/app/Base.lproj/MapDocument.xib
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10117" systemVersion="15E65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10117"/>
</dependencies>
@@ -123,6 +123,12 @@
<action selector="removePin:" target="-1" id="w0R-0B-7mG"/>
</connections>
</menuItem>
+ <menuItem title="Select Features" id="za5-bY-mdf">
+ <modifierMask key="keyEquivalentModifierMask"/>
+ <connections>
+ <action selector="selectFeatures:" target="-1" id="ikt-CZ-yZT"/>
+ </connections>
+ </menuItem>
</items>
<connections>
<outlet property="delegate" destination="-2" id="oHe-ZP-lyc"/>
diff --git a/platform/osx/app/MapDocument.m b/platform/osx/app/MapDocument.m
index 6fcfc7ce5d..4274126747 100644
--- a/platform/osx/app/MapDocument.m
+++ b/platform/osx/app/MapDocument.m
@@ -14,6 +14,27 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
{ .latitude = -13.15589555, .longitude = -74.2178961777998 },
};
+NS_ARRAY_OF(id <MGLAnnotation>) *MBXFlattenedShapes(NS_ARRAY_OF(id <MGLAnnotation>) *shapes) {
+ NSMutableArray *flattenedShapes = [NSMutableArray arrayWithCapacity:shapes.count];
+ for (id <MGLAnnotation> shape in shapes) {
+ NSArray *subshapes;
+ if ([shape isKindOfClass:[MGLMultiPolyline class]]) {
+ subshapes = [(MGLMultiPolyline *)shape polylines];
+ } else if ([shape isKindOfClass:[MGLMultiPolygon class]]) {
+ subshapes = [(MGLMultiPolygon *)shape polygons];
+ } else if ([shape isKindOfClass:[MGLShapeCollection class]]) {
+ subshapes = MBXFlattenedShapes([(MGLShapeCollection *)shape shapes]);
+ }
+
+ if (subshapes) {
+ [flattenedShapes addObjectsFromArray:subshapes];
+ } else {
+ [flattenedShapes addObject:shape];
+ }
+ }
+ return flattenedShapes;
+}
+
@interface MapDocument () <NSWindowDelegate, NSSharingServicePickerDelegate, NSMenuDelegate, MGLMapViewDelegate>
@property (weak) IBOutlet NSMenu *mapViewContextMenu;
@@ -420,8 +441,7 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
if (!NSPointInRect([gestureRecognizer locationInView:self.mapView.compass], self.mapView.compass.bounds)
&& !NSPointInRect([gestureRecognizer locationInView:self.mapView.zoomControls], self.mapView.zoomControls.bounds)
&& !NSPointInRect([gestureRecognizer locationInView:self.mapView.attributionView], self.mapView.attributionView.bounds)) {
- NSArray *features = [self.mapView visibleFeaturesAtPoint:location];
- [self.mapView addAnnotations:features];
+ [self dropPinAtPoint:location];
}
}
}
@@ -464,6 +484,16 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
[self.mapView removeAnnotation:[self.mapView annotationAtPoint:point]];
}
+- (IBAction)selectFeatures:(id)sender {
+ [self selectFeaturesAtPoint:_mouseLocationForMapViewContextMenu];
+}
+
+- (void)selectFeaturesAtPoint:(NSPoint)point {
+ NSArray *features = [self.mapView visibleFeaturesAtPoint:point];
+ NSArray *flattenedFeatures = MBXFlattenedShapes(features);
+ [self.mapView addAnnotations:flattenedFeatures];
+}
+
#pragma mark User interface validation
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
@@ -521,6 +551,9 @@ static const CLLocationCoordinate2D WorldTourDestinations[] = {
menuItem.hidden = annotationUnderCursor == nil;
return YES;
}
+ if (menuItem.action == @selector(selectFeatures:)) {
+ return YES;
+ }
if (menuItem.action == @selector(toggleTileBoundaries:)) {
BOOL isShown = self.mapView.debugMask & MGLMapDebugTileBoundariesMask;
menuItem.title = isShown ? @"Hide Tile Boundaries" : @"Show Tile Boundaries";