From 992726ab492bad5bddd49a5a5c3e57764f1998b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguye=CC=82=CC=83n?= Date: Sun, 21 Aug 2016 13:01:09 -0700 Subject: [PATCH] [macos] Added Layers sidebar Added a sidebar to the main document window in macosapp that lists the layers in the current style and updates whenever the style changes or a layer is added or removed programmatically. Display an icon beside each layer in the sidebar that indicates the kind of layer. Double-click a layer or layers to toggle their visibility, which is an undoable action. Added a menu item and toolbar button to toggle the Layers sidebar. Added a context menu for toggling visibility of and deleting layers selected in the Layers sidebar. Checked in the original SVGs for layer icons. --- .../app/Assets.xcassets/Layers/Contents.json | 6 + .../Layers/background.imageset/Contents.json | 15 ++ .../Layers/background.imageset/background.pdf | 69 +++++++ .../Layers/circle.imageset/Contents.json | 15 ++ .../Layers/circle.imageset/circle.pdf | 70 +++++++ .../Layers/fill.imageset/Contents.json | 15 ++ .../Layers/fill.imageset/fill.pdf | Bin 0 -> 1046 bytes .../Layers/symbol.imageset/Contents.json | 15 ++ .../Layers/symbol.imageset/symbol.pdf | 71 +++++++ platform/macos/app/Base.lproj/MainMenu.xib | 5 + platform/macos/app/Base.lproj/MapDocument.xib | 185 ++++++++++++++++-- platform/macos/app/MapDocument.m | 150 +++++++++++++- .../macos/app/StyleLayerIconTransformer.h | 5 + .../macos/app/StyleLayerIconTransformer.m | 38 ++++ platform/macos/app/resources/background.svg | 90 +++++++++ platform/macos/app/resources/circle.svg | 67 +++++++ platform/macos/app/resources/fill.svg | 68 +++++++ platform/macos/app/resources/symbol.svg | 66 +++++++ .../macos/macos.xcodeproj/project.pbxproj | 6 + 19 files changed, 940 insertions(+), 16 deletions(-) create mode 100644 platform/macos/app/Assets.xcassets/Layers/Contents.json create mode 100644 platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json create mode 100644 platform/macos/app/Assets.xcassets/Layers/background.imageset/background.pdf create mode 100644 platform/macos/app/Assets.xcassets/Layers/circle.imageset/Contents.json create mode 100644 platform/macos/app/Assets.xcassets/Layers/circle.imageset/circle.pdf create mode 100644 platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json create mode 100644 platform/macos/app/Assets.xcassets/Layers/fill.imageset/fill.pdf create mode 100644 platform/macos/app/Assets.xcassets/Layers/symbol.imageset/Contents.json create mode 100644 platform/macos/app/Assets.xcassets/Layers/symbol.imageset/symbol.pdf create mode 100644 platform/macos/app/StyleLayerIconTransformer.h create mode 100644 platform/macos/app/StyleLayerIconTransformer.m create mode 100644 platform/macos/app/resources/background.svg create mode 100644 platform/macos/app/resources/circle.svg create mode 100644 platform/macos/app/resources/fill.svg create mode 100644 platform/macos/app/resources/symbol.svg diff --git a/platform/macos/app/Assets.xcassets/Layers/Contents.json b/platform/macos/app/Assets.xcassets/Layers/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/platform/macos/app/Assets.xcassets/Layers/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json new file mode 100644 index 000000000..3d2c87887 --- /dev/null +++ b/platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "background.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Layers/background.imageset/background.pdf b/platform/macos/app/Assets.xcassets/Layers/background.imageset/background.pdf new file mode 100644 index 000000000..95a50c144 --- /dev/null +++ b/platform/macos/app/Assets.xcassets/Layers/background.imageset/background.pdf @@ -0,0 +1,69 @@ +%PDF-1.5 +%µí®û +3 0 obj +<< /Length 4 0 R + /Filter /FlateDecode +>> +stream +xœ}’Mjä@ …÷u +] š*Iõ£ ²H²f1x Ü‹�E®?OÕ¶» ChÚÖgÕ“T’>R¦ø½ü¤2½}¦Ìƒ¾ðõÿ÷ôë7eÎô7=Ñ•yø!^Epp¹$aŽCÏ «QeíÏQŽav²�ç¶ÑJ$”Œ‡6r–ÁåÎ\ú+•Â6"¨”uTÓÍw…tÈ‚›Ü„•³Cpo»ðz¥çôßÛ>(«�ò@˜ \QÖ@¸©Xx¼êÉ^‚¼o´ú娷6ÇÇf5ÂÙ8ÙKP³�Öè::�Û¨±ëî™v:DmæØEÎæQuÜ/³zÙ\'øæ²ÂÞ;*U æ‚2.‹Þ»2Uõp!ν5D>Ðè¨!²§éPäVà’QNvŒ×kßh�ü¥K¨:†W”E¯¾t1^�9du.!ÔY •Æ c¹:OðÝxñ®>„ò1`,iÛìDææÓi(ý1ä^mÇcÆÀ 3Ìʸ`Ã#(vçK ”Wt/ÞÐ�"³¥5íÎI7ag+vúܧXð1£ïsÖƒÒ!�ë?§°Ä8 +endstream +endobj +4 0 obj + 424 +endobj +2 0 obj +<< + /ExtGState << + /a0 << /CA 1 /ca 1 >> + >> +>> +endobj +5 0 obj +<< /Type /Page + /Parent 1 0 R + /MediaBox [ 0 0 12.8 12.8 ] + /Contents 3 0 R + /Group << + /Type /Group + /S /Transparency + /I true + /CS /DeviceRGB + >> + /Resources 2 0 R +>> +endobj +1 0 obj +<< /Type /Pages + /Kids [ 5 0 R ] + /Count 1 +>> +endobj +6 0 obj +<< /Creator (cairo 1.14.0 (http://cairographics.org)) + /Producer (cairo 1.14.0 (http://cairographics.org)) +>> +endobj +7 0 obj +<< /Type /Catalog + /Pages 1 0 R +>> +endobj +xref +0 8 +0000000000 65535 f +0000000826 00000 n +0000000538 00000 n +0000000015 00000 n +0000000516 00000 n +0000000610 00000 n +0000000891 00000 n +0000001018 00000 n +trailer +<< /Size 8 + /Root 7 0 R + /Info 6 0 R +>> +startxref +1070 +%%EOF diff --git a/platform/macos/app/Assets.xcassets/Layers/circle.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/circle.imageset/Contents.json new file mode 100644 index 000000000..c924214fd --- /dev/null +++ b/platform/macos/app/Assets.xcassets/Layers/circle.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "circle.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Layers/circle.imageset/circle.pdf b/platform/macos/app/Assets.xcassets/Layers/circle.imageset/circle.pdf new file mode 100644 index 000000000..fde79a19b --- /dev/null +++ b/platform/macos/app/Assets.xcassets/Layers/circle.imageset/circle.pdf @@ -0,0 +1,70 @@ +%PDF-1.5 +%µí®û +3 0 obj +<< /Length 4 0 R + /Filter /FlateDecode +>> +stream +xœ]ŽM +1 …÷9Å»€1�?''£ËaRAf1¸ðú¦Ó X)ÍëGÞKº� �Ëû›àñ¦ÀAõ Š�µNv_4NÜ©Á šØ% ÷ˆ3™Z +×Úc†£r'•×ÂáQ›¶J2’ûWp{tÊî\ûù‹džIå†mÜóÿÃW 4Ðè4J +endstream +endobj +4 0 obj + 139 +endobj +2 0 obj +<< + /ExtGState << + /a0 << /CA 1 /ca 1 >> + >> +>> +endobj +5 0 obj +<< /Type /Page + /Parent 1 0 R + /MediaBox [ 0 0 12.8 12.8 ] + /Contents 3 0 R + /Group << + /Type /Group + /S /Transparency + /I true + /CS /DeviceRGB + >> + /Resources 2 0 R +>> +endobj +1 0 obj +<< /Type /Pages + /Kids [ 5 0 R ] + /Count 1 +>> +endobj +6 0 obj +<< /Creator (cairo 1.14.0 (http://cairographics.org)) + /Producer (cairo 1.14.0 (http://cairographics.org)) +>> +endobj +7 0 obj +<< /Type /Catalog + /Pages 1 0 R +>> +endobj +xref +0 8 +0000000000 65535 f +0000000541 00000 n +0000000253 00000 n +0000000015 00000 n +0000000231 00000 n +0000000325 00000 n +0000000606 00000 n +0000000733 00000 n +trailer +<< /Size 8 + /Root 7 0 R + /Info 6 0 R +>> +startxref +785 +%%EOF diff --git a/platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json new file mode 100644 index 000000000..ea68330e7 --- /dev/null +++ b/platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "fill.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Layers/fill.imageset/fill.pdf b/platform/macos/app/Assets.xcassets/Layers/fill.imageset/fill.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ca7e4cc505c09a5877c4827bb00ff7fe58f21d18 GIT binary patch literal 1046 zcma)6&ubGw6fOx1Wx=3S@#vEhNKyAkl1)-c3TD%UQpJ#X5G3eiGfB3@oiIC*)T0pa z=%GhX9z=>1FCKdIUyurVl^*oqrFav;H@n#+G#7_ucjuco^L^iYZ#P-5RBxG@r6xcA zI{Kq#zyQ|XQ;S8=?^3TP`jADap#p$jbq9iSd=7}973#1KRkyZOUvNsEs^ix;PSf?3 zPj7_sw-TTHZfo&UbIn)m_0oFNQEa>9#~r1WY8@QDdaHc7becFJtDnic-V@jBx8K(j z2WPSGH;;ZiRN|%h!e2m_B!Fz6JX8~dyjTpQf6a#gpdJdS}TON zRuFG9Pv8b0WOc$))HoXr7sQ7Q0UD`nA}=SNKa_0FegyA;;G;l?G;L#4g+6l~+NhOf zNa#dwP@j#sLw%5$Yb^MZs-q5>`|<;!yKcuv57K%ABJCq-b>V>A!T~mRj$j;84skgH zQ!}%g0ja(a!`nJ$AHg0c!@leI8soi> +stream +xœ]ŽA +Â@ E÷9Å¿€q’IgÒ‚‹êR\ÈŠÐEqáõíØqQ !ÿ…üð' +¨uÜa{ ¸¿HXRLQñ&Á~î'�/p#ÃäëØÔ!ÊŽ2’6ëaìæÑ0s—‰cïõR¥_CY£r씪KÝþ•FÊ–ó¼·9Oç¿×‹.pN’- ¨yVñ +ÿyOh ¢4 +endstream +endobj +4 0 obj + 152 +endobj +2 0 obj +<< + /ExtGState << + /a0 << /CA 1 /ca 1 >> + >> +>> +endobj +5 0 obj +<< /Type /Page + /Parent 1 0 R + /MediaBox [ 0 0 12.8 12.8 ] + /Contents 3 0 R + /Group << + /Type /Group + /S /Transparency + /I true + /CS /DeviceRGB + >> + /Resources 2 0 R +>> +endobj +1 0 obj +<< /Type /Pages + /Kids [ 5 0 R ] + /Count 1 +>> +endobj +6 0 obj +<< /Creator (cairo 1.14.0 (http://cairographics.org)) + /Producer (cairo 1.14.0 (http://cairographics.org)) +>> +endobj +7 0 obj +<< /Type /Catalog + /Pages 1 0 R +>> +endobj +xref +0 8 +0000000000 65535 f +0000000554 00000 n +0000000266 00000 n +0000000015 00000 n +0000000244 00000 n +0000000338 00000 n +0000000619 00000 n +0000000746 00000 n +trailer +<< /Size 8 + /Root 7 0 R + /Info 6 0 R +>> +startxref +798 +%%EOF diff --git a/platform/macos/app/Base.lproj/MainMenu.xib b/platform/macos/app/Base.lproj/MainMenu.xib index 7dd4d0843..4efb8d4c4 100644 --- a/platform/macos/app/Base.lproj/MainMenu.xib +++ b/platform/macos/app/Base.lproj/MainMenu.xib @@ -429,6 +429,11 @@ + + + + + diff --git a/platform/macos/app/Base.lproj/MapDocument.xib b/platform/macos/app/Base.lproj/MapDocument.xib index 4e58490e6..9af40d461 100644 --- a/platform/macos/app/Base.lproj/MapDocument.xib +++ b/platform/macos/app/Base.lproj/MapDocument.xib @@ -1,40 +1,160 @@ - + - + + + + + + + style + + + + + + + + layers + + + + + + + + identifier + visible + + + + + - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + StyleLayerIconTransformer + + + + + + + + + + + + + + + + + + + + + + + + + NSNegateBoolean + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - + - - - - + + + + @@ -89,8 +209,25 @@ + + + + + + + + + + @@ -135,8 +272,30 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform/macos/app/MapDocument.m b/platform/macos/app/MapDocument.m index f9477206a..e312eccca 100644 --- a/platform/macos/app/MapDocument.m +++ b/platform/macos/app/MapDocument.m @@ -46,9 +46,12 @@ NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id +@interface MapDocument () +@property (weak) IBOutlet NSArrayController *styleLayersArrayController; +@property (weak) IBOutlet NSTableView *styleLayersTableView; @property (weak) IBOutlet NSMenu *mapViewContextMenu; +@property (weak) IBOutlet NSSplitView *splitView; @end @@ -98,6 +101,8 @@ NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id = 0 && ![indices containsIndex:clickedRow]) { + indices = [NSIndexSet indexSetWithIndex:clickedRow]; + } + [self toggleStyleLayersAtArrangedObjectIndexes:indices]; +} + +- (void)toggleStyleLayersAtArrangedObjectIndexes:(NSIndexSet *)indices { + NS_ARRAY_OF(MGLStyleLayer *) *layers = [self.mapView.style.layers objectsAtIndexes:indices]; + BOOL isVisible = layers.firstObject.visible; + [self.undoManager registerUndoWithTarget:self handler:^(MapDocument * _Nonnull target) { + [target toggleStyleLayersAtArrangedObjectIndexes:indices]; + }]; + + if (!self.undoManager.undoing) { + NSString *actionName; + if (indices.count == 1) { + actionName = [NSString stringWithFormat:@"%@ Layer “%@â€�", isVisible ? @"Hide" : @"Show", layers.firstObject.identifier]; + } else { + actionName = [NSString stringWithFormat:@"%@ %@ Layers", isVisible ? @"Hide" : @"Show", + [NSNumberFormatter localizedStringFromNumber:@(indices.count) + numberStyle:NSNumberFormatterDecimalStyle]]; + } + [self.undoManager setActionIsDiscardable:YES]; + [self.undoManager setActionName:actionName]; + } + + for (MGLStyleLayer *layer in layers) { + layer.visible = !isVisible; + } + + NSIndexSet *columnIndices = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)]; + [self.styleLayersTableView reloadDataForRowIndexes:indices columnIndexes:columnIndices]; +} + +- (IBAction)deleteStyleLayers:(id)sender { + NSInteger clickedRow = self.styleLayersTableView.clickedRow; + NSIndexSet *indices = self.styleLayersTableView.selectedRowIndexes; + if (clickedRow >= 0 && ![indices containsIndex:clickedRow]) { + indices = [NSIndexSet indexSetWithIndex:clickedRow]; + } + [self deleteStyleLayersAtArrangedObjectIndexes:indices]; +} + +- (void)insertStyleLayers:(NS_ARRAY_OF(MGLStyleLayer *) *)layers atArrangedObjectIndexes:(NSIndexSet *)indices { + [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) { + [self deleteStyleLayersAtArrangedObjectIndexes:indices]; + }]; + + if (!self.undoManager.undoing) { + NSString *actionName; + if (indices.count == 1) { + actionName = [NSString stringWithFormat:@"Add Layer “%@â€�", layers.firstObject.identifier]; + } else { + actionName = [NSString stringWithFormat:@"Add %@ Layers", + [NSNumberFormatter localizedStringFromNumber:@(indices.count) numberStyle:NSNumberFormatterDecimalStyle]]; + } + [self.undoManager setActionName:actionName]; + } + + [self.styleLayersArrayController insertObjects:layers atArrangedObjectIndexes:indices]; +} + +- (void)deleteStyleLayersAtArrangedObjectIndexes:(NSIndexSet *)indices { + NS_ARRAY_OF(MGLStyleLayer *) *layers = [self.mapView.style.layers objectsAtIndexes:indices]; + [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) { + [self insertStyleLayers:layers atArrangedObjectIndexes:indices]; + }]; + + if (!self.undoManager.undoing) { + NSString *actionName; + if (indices.count == 1) { + actionName = [NSString stringWithFormat:@"Delete Layer “%@â€�", layers.firstObject.identifier]; + } else { + actionName = [NSString stringWithFormat:@"Delete %@ Layers", + [NSNumberFormatter localizedStringFromNumber:@(indices.count) numberStyle:NSNumberFormatterDecimalStyle]]; + } + [self.undoManager setActionName:actionName]; + } + + [self.styleLayersArrayController removeObjectsAtArrangedObjectIndexes:indices]; +} + - (void)applyPendingState { if (_inheritedStyleURL) { self.mapView.styleURL = _inheritedStyleURL; @@ -607,6 +715,27 @@ NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id = 0 || self.styleLayersTableView.selectedRow >= 0; + } if (menuItem.action == @selector(manipulateStyle:)) { return YES; } @@ -722,7 +851,8 @@ NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id ) *MBXFlattenedShapes(NS_ARRAY_OF(id )annotation { diff --git a/platform/macos/app/StyleLayerIconTransformer.h b/platform/macos/app/StyleLayerIconTransformer.h new file mode 100644 index 000000000..1af1d512d --- /dev/null +++ b/platform/macos/app/StyleLayerIconTransformer.h @@ -0,0 +1,5 @@ +#import + +@interface StyleLayerIconTransformer : NSValueTransformer + +@end diff --git a/platform/macos/app/StyleLayerIconTransformer.m b/platform/macos/app/StyleLayerIconTransformer.m new file mode 100644 index 000000000..93f59abb3 --- /dev/null +++ b/platform/macos/app/StyleLayerIconTransformer.m @@ -0,0 +1,38 @@ +#import "StyleLayerIconTransformer.h" + +#import + +@implementation StyleLayerIconTransformer + ++ (Class)transformedValueClass { + return [NSString class]; +} + ++ (BOOL)allowsReverseTransformation { + return NO; +} + +- (id)transformedValue:(MGLStyleLayer *)layer { + if ([layer isKindOfClass:[MGLBackgroundStyleLayer class]]) { + return [NSImage imageNamed:@"background"]; + } + if ([layer isKindOfClass:[MGLCircleStyleLayer class]]) { + return [NSImage imageNamed:@"circle"]; + } + if ([layer isKindOfClass:[MGLFillStyleLayer class]]) { + return [NSImage imageNamed:@"fill"]; + } + if ([layer isKindOfClass:[MGLLineStyleLayer class]]) { + return [NSImage imageNamed:@"NSListViewTemplate"]; + } + if ([layer isKindOfClass:[MGLRasterStyleLayer class]]) { + return [[NSWorkspace sharedWorkspace] iconForFileType:@"jpg"]; + } + if ([layer isKindOfClass:[MGLSymbolStyleLayer class]]) { + return [NSImage imageNamed:@"symbol"]; + } + + return nil; +} + +@end diff --git a/platform/macos/app/resources/background.svg b/platform/macos/app/resources/background.svg new file mode 100644 index 000000000..39451e8b1 --- /dev/null +++ b/platform/macos/app/resources/background.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/platform/macos/app/resources/circle.svg b/platform/macos/app/resources/circle.svg new file mode 100644 index 000000000..91e0b1199 --- /dev/null +++ b/platform/macos/app/resources/circle.svg @@ -0,0 +1,67 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/platform/macos/app/resources/fill.svg b/platform/macos/app/resources/fill.svg new file mode 100644 index 000000000..7860a5fdd --- /dev/null +++ b/platform/macos/app/resources/fill.svg @@ -0,0 +1,68 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/platform/macos/app/resources/symbol.svg b/platform/macos/app/resources/symbol.svg new file mode 100644 index 000000000..68847cb50 --- /dev/null +++ b/platform/macos/app/resources/symbol.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/platform/macos/macos.xcodeproj/project.pbxproj b/platform/macos/macos.xcodeproj/project.pbxproj index 3ab9d4d9c..0c28691cb 100644 --- a/platform/macos/macos.xcodeproj/project.pbxproj +++ b/platform/macos/macos.xcodeproj/project.pbxproj @@ -115,6 +115,7 @@ DA8F259C1D51CB000010E6B5 /* MGLStyleValue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F259B1D51CB000010E6B5 /* MGLStyleValue_Private.h */; }; DA8F25B21D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25A61D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h */; }; DA8F25B31D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25A71D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm */; }; + DAA48EFD1D6A4731006A7E36 /* StyleLayerIconTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA48EFC1D6A4731006A7E36 /* StyleLayerIconTransformer.m */; }; DAC2ABC51CC6D343006D18C4 /* MGLAnnotationImage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC2ABC41CC6D343006D18C4 /* MGLAnnotationImage_Private.h */; }; DACC22141CF3D3E200D220D9 /* MGLFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = DACC22121CF3D3E200D220D9 /* MGLFeature.h */; settings = {ATTRIBUTES = (Public, ); }; }; DACC22151CF3D3E200D220D9 /* MGLFeature.mm in Sources */ = {isa = PBXBuildFile; fileRef = DACC22131CF3D3E200D220D9 /* MGLFeature.mm */; }; @@ -356,6 +357,8 @@ DA8F25B51D51D2240010E6B5 /* MGLRuntimeStylingTests.m.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; path = MGLRuntimeStylingTests.m.ejs; sourceTree = ""; }; DA8F25B61D51D2240010E6B5 /* MGLStyleLayer.h.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; path = MGLStyleLayer.h.ejs; sourceTree = ""; }; DA8F25B71D51D2240010E6B5 /* MGLStyleLayer.mm.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; path = MGLStyleLayer.mm.ejs; sourceTree = ""; }; + DAA48EFB1D6A4731006A7E36 /* StyleLayerIconTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleLayerIconTransformer.h; sourceTree = ""; }; + DAA48EFC1D6A4731006A7E36 /* StyleLayerIconTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StyleLayerIconTransformer.m; sourceTree = ""; }; DAC2ABC41CC6D343006D18C4 /* MGLAnnotationImage_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationImage_Private.h; sourceTree = ""; }; DACC22121CF3D3E200D220D9 /* MGLFeature.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFeature.h; sourceTree = ""; }; DACC22131CF3D3E200D220D9 /* MGLFeature.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFeature.mm; sourceTree = ""; }; @@ -588,6 +591,8 @@ DA839E9E1CC2E3400062CAFB /* MapDocument.xib */, DAE6C2E91CC3050F00DB3429 /* OfflinePackNameValueTransformer.h */, DAE6C2EA1CC3050F00DB3429 /* OfflinePackNameValueTransformer.m */, + DAA48EFB1D6A4731006A7E36 /* StyleLayerIconTransformer.h */, + DAA48EFC1D6A4731006A7E36 /* StyleLayerIconTransformer.m */, DAE6C2EB1CC3050F00DB3429 /* TimeIntervalTransformer.h */, DAE6C2EC1CC3050F00DB3429 /* TimeIntervalTransformer.m */, DA839EA11CC2E3400062CAFB /* Assets.xcassets */, @@ -1156,6 +1161,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + DAA48EFD1D6A4731006A7E36 /* StyleLayerIconTransformer.m in Sources */, DA839E9D1CC2E3400062CAFB /* MapDocument.m in Sources */, DAE6C2ED1CC3050F00DB3429 /* DroppedPinAnnotation.m in Sources */, DAE6C2EE1CC3050F00DB3429 /* LocationCoordinate2DTransformer.m in Sources */,