summaryrefslogtreecommitdiff
path: root/platform/macos/src/MGLMapView+IBAdditions.m
diff options
context:
space:
mode:
Diffstat (limited to 'platform/macos/src/MGLMapView+IBAdditions.m')
-rw-r--r--platform/macos/src/MGLMapView+IBAdditions.m118
1 files changed, 118 insertions, 0 deletions
diff --git a/platform/macos/src/MGLMapView+IBAdditions.m b/platform/macos/src/MGLMapView+IBAdditions.m
new file mode 100644
index 0000000000..eada47ef90
--- /dev/null
+++ b/platform/macos/src/MGLMapView+IBAdditions.m
@@ -0,0 +1,118 @@
+#import "MGLMapView+IBAdditions.h"
+
+#import "MGLMapView_Private.h"
+
+@implementation MGLMapView (IBAdditions)
+
++ (NS_SET_OF(NSString *) *)keyPathsForValuesAffectingStyleURL__ {
+ return [NSSet setWithObject:@"styleURL"];
+}
+
+- (nullable NSString *)styleURL__ {
+ return self.styleURL.absoluteString;
+}
+
+- (void)setStyleURL__:(nullable NSString *)URLString {
+ URLString = [URLString stringByTrimmingCharactersInSet:
+ [NSCharacterSet whitespaceAndNewlineCharacterSet]];
+ NSURL *url = URLString.length ? [NSURL URLWithString:URLString] : nil;
+ if (URLString.length && !url) {
+ [NSException raise:@"Invalid style URL"
+ format:@"“%@” is not a valid style URL.", URLString];
+ }
+ self.styleURL = url;
+}
+
++ (NS_SET_OF(NSString *) *)keyPathsForValuesAffectingLatitude {
+ return [NSSet setWithObjects:@"centerCoordinate", @"camera", nil];
+}
+
+- (double)latitude {
+ return self.centerCoordinate.latitude;
+}
+
+- (void)setLatitude:(double)latitude {
+ if (!isnan(self.pendingLongitude)) {
+ // With both components present, set the real center coordinate and
+ // forget the pending parts.
+ self.centerCoordinate = CLLocationCoordinate2DMake(latitude, self.pendingLongitude);
+ self.pendingLatitude = NAN;
+ self.pendingLongitude = NAN;
+ } else {
+ // Not enough info to make a valid center coordinate yet. Stash this
+ // latitude away until the longitude is set too.
+ self.pendingLatitude = latitude;
+ }
+}
+
++ (NS_SET_OF(NSString *) *)keyPathsForValuesAffectingLongitude {
+ return [NSSet setWithObjects:@"centerCoordinate", @"camera", nil];
+}
+
+- (double)longitude {
+ return self.centerCoordinate.longitude;
+}
+
+- (void)setLongitude:(double)longitude {
+ if (!isnan(self.pendingLatitude)) {
+ // With both components present, set the real center coordinate and
+ // forget the pending parts.
+ self.centerCoordinate = CLLocationCoordinate2DMake(self.pendingLatitude, longitude);
+ self.pendingLatitude = NAN;
+ self.pendingLongitude = NAN;
+ } else {
+ // Not enough info to make a valid center coordinate yet. Stash this
+ // longitude away until the latitude is set too.
+ self.pendingLongitude = longitude;
+ }
+}
+
++ (NS_SET_OF(NSString *) *)keyPathsForValuesAffectingAllowsZooming {
+ return [NSSet setWithObject:@"zoomEnabled"];
+}
+
+- (BOOL)allowsZooming {
+ return self.zoomEnabled;
+}
+
+- (void)setAllowsZooming:(BOOL)allowsZooming {
+ self.zoomEnabled = allowsZooming;
+}
+
++ (NS_SET_OF(NSString *) *)keyPathsForValuesAffectingAllowsScrolling {
+ return [NSSet setWithObject:@"scrollEnabled"];
+}
+
+- (BOOL)allowsScrolling {
+ return self.scrollEnabled;
+}
+
+- (void)setAllowsScrolling:(BOOL)allowsScrolling {
+ self.scrollEnabled = allowsScrolling;
+}
+
++ (NS_SET_OF(NSString *) *)keyPathsForValuesAffectingAllowsRotating {
+ return [NSSet setWithObject:@"rotateEnabled"];
+}
+
+- (BOOL)allowsRotating {
+ return self.rotateEnabled;
+}
+
+- (void)setAllowsRotating:(BOOL)allowsRotating {
+ self.rotateEnabled = allowsRotating;
+}
+
++ (NS_SET_OF(NSString *) *)keyPathsForValuesAffectingAllowsTilting {
+ return [NSSet setWithObject:@"pitchEnabled"];
+}
+
+- (BOOL)allowsTilting {
+ return self.pitchEnabled;
+}
+
+- (void)setAllowsTilting:(BOOL)allowsTilting {
+ self.pitchEnabled = allowsTilting;
+}
+
+@end