diff options
author | Minh Nguyễn <mxn@1ec5.org> | 2016-05-27 00:35:18 -0700 |
---|---|---|
committer | Minh Nguyễn <mxn@1ec5.org> | 2016-05-27 21:42:39 -0700 |
commit | b94a125ff28db2d4bfd181928ce8eee523a30ec7 (patch) | |
tree | 82a2ef12f67803f7026b5592b1a6acf36bcb64a2 /platform | |
parent | 974e6696986d49e2eb130e24bde9e75402b0f386 (diff) | |
download | qtlocation-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.h | 4 | ||||
-rw-r--r-- | platform/darwin/src/MGLShapeCollection.m | 4 | ||||
-rw-r--r-- | platform/osx/app/Base.lproj/MainMenu.xib | 2 | ||||
-rw-r--r-- | platform/osx/app/Base.lproj/MapDocument.xib | 8 | ||||
-rw-r--r-- | platform/osx/app/MapDocument.m | 37 |
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"; |