From 7fc96fd6e3c5b073f51b01b5ace63e78e7c1c8fe Mon Sep 17 00:00:00 2001 From: Alasdair Monk Date: Wed, 14 Oct 2015 11:44:35 +0100 Subject: [PATCH 1/4] Cleanup UI --- Sketch Toolbox/Base.lproj/MainMenu.xib | 215 +++++++++++-------------- Sketch Toolbox/STAppDelegate.m | 6 + 2 files changed, 96 insertions(+), 125 deletions(-) diff --git a/Sketch Toolbox/Base.lproj/MainMenu.xib b/Sketch Toolbox/Base.lproj/MainMenu.xib index f1f314b..3ee97a6 100644 --- a/Sketch Toolbox/Base.lproj/MainMenu.xib +++ b/Sketch Toolbox/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - + - + @@ -14,9 +14,8 @@ - - - + + @@ -25,28 +24,30 @@ - + - + - - + + - + - + + + - + - + @@ -60,32 +61,35 @@ - + - + + - + - + + @@ -93,8 +97,9 @@ - + + @@ -102,29 +107,21 @@ - + + - + + - + @@ -147,58 +145,77 @@ + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -326,58 +343,6 @@ - - -YnBsaXN0MDDUAQIDBAUGPj9YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoK4HCBMU -GR4fIyQsLzI4O1UkbnVsbNUJCgsMDQ4PEBESVk5TU2l6ZVYkY2xhc3NcTlNJbWFnZUZsYWdzVk5TUmVw -c1dOU0NvbG9ygAKADRIgwwAAgAOAC1Z7MSwgMX3SFQoWGFpOUy5vYmplY3RzoReABIAK0hUKGh2iGxyA -BYAGgAkQANIgCiEiXxAUTlNUSUZGUmVwcmVzZW50YXRpb26AB4AITxEIdE1NACoAAAAKAAAADgEAAAMA -AAABAAEAAAEBAAMAAAABAAEAAAECAAMAAAACAAgACAEDAAMAAAABAAEAAAEGAAMAAAABAAEAAAERAAQA -AAABAAAACAESAAMAAAABAAEAAAEVAAMAAAABAAIAAAEWAAMAAAABAAEAAAEXAAQAAAABAAAAAgEcAAMA -AAABAAEAAAFSAAMAAAABAAEAAAFTAAMAAAACAAEAAYdzAAcAAAe8AAAAuAAAAAAAAAe8YXBwbAIgAABt -bnRyR1JBWVhZWiAH0AACAA4ADAAAAABhY3NwQVBQTAAAAABub25lAAAAAAAAAAAAAAAAAAAAAAAA9tYA -AQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVk -ZXNjAAAAwAAAAG9kc2NtAAABMAAABi5jcHJ0AAAHYAAAADh3dHB0AAAHmAAAABRrVFJDAAAHrAAAAA5k -ZXNjAAAAAAAAABVHZW5lcmljIEdyYXkgUHJvZmlsZQAAAAAAAAAAAAAAFUdlbmVyaWMgR3JheSBQcm9m -aWxlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAA -AAAeAAAADHNrU0sAAAAqAAABeGRhREsAAAA0AAABomNhRVMAAAAsAAAB1nB0QlIAAAAqAAACAnVrVUEA -AAAsAAACLGZyRlUAAAAqAAACWGh1SFUAAAAuAAACgnpoVFcAAAAQAAACsG5iTk8AAAAsAAACwGNzQ1oA -AAAkAAAC7GhlSUwAAAAgAAADEGl0SVQAAAAuAAADMHJvUk8AAAAkAAADXmRlREUAAAA6AAADgmtvS1IA -AAAYAAADvHN2U0UAAAAuAAAD1HpoQ04AAAAQAAAEAmphSlAAAAAWAAAEEmVsR1IAAAAkAAAEKHB0UE8A -AAA4AAAETG5sTkwAAAAqAAAEhGVzRVMAAAAoAAAErnRoVEgAAAAkAAAE1nRyVFIAAAAiAAAE+mZpRkkA -AAAsAAAFHGhySFIAAAA6AAAFSHBsUEwAAAA2AAAFgnJ1UlUAAAAmAAAFuGFyRUcAAAAoAAAF3mVuVVMA -AAAoAAAGBgBWAWEAZQBvAGIAZQBjAG4A/QAgAHMAaQB2AP0AIABwAHIAbwBmAGkAbABHAGUAbgBlAHIA -ZQBsACAAZwByAOUAdABvAG4AZQBiAGUAcwBrAHIAaQB2AGUAbABzAGUAUABlAHIAZgBpAGwAIABkAGUA -IABnAHIAaQBzACAAZwBlAG4A6AByAGkAYwBQAGUAcgBmAGkAbAAgAEMAaQBuAHoAYQAgAEcAZQBuAOkA -cgBpAGMAbwQXBDAEMwQwBDsETAQ9BDgEOQAgBD8EQAQ+BEQEMAQ5BDsAIABHAHIAYQB5AFAAcgBvAGYA -aQBsACAAZwDpAG4A6QByAGkAcQB1AGUAIABnAHIAaQBzAMEAbAB0AGEAbADhAG4AbwBzACAAcwB6APwA -cgBrAGUAIABwAHIAbwBmAGkAbJAadShwcJaOgnJfaWPPj/AARwBlAG4AZQByAGkAcwBrACAAZwByAOUA -dABvAG4AZQBwAHIAbwBmAGkAbABPAGIAZQBjAG4A/QAgAWEAZQBkAP0AIABwAHIAbwBmAGkAbAXkBegF -1QXkBdkF3AAgAEcAcgBhAHkAIAXbBdwF3AXZAFAAcgBvAGYAaQBsAG8AIABnAHIAaQBnAGkAbwAgAGcA -ZQBuAGUAcgBpAGMAbwBQAHIAbwBmAGkAbAAgAGcAcgBpACAAZwBlAG4AZQByAGkAYwBBAGwAbABnAGUA -bQBlAGkAbgBlAHMAIABHAHIAYQB1AHMAdAB1AGYAZQBuAC0AUAByAG8AZgBpAGzHfLwYACAARwByAGEA -eQAg1QS4XNMMx3wARwBlAG4AZQByAGkAcwBrACAAZwByAOUAcwBrAGEAbABlAHAAcgBvAGYAaQBsZm6Q -GnBwXqZjz4/wZYdO9k4AgiwwsDDsMKQw1zDtMNUwoTCkMOsDkwO1A70DuQO6A8wAIAPAA8EDvwPGA68D -uwAgA7MDugPBA7kAUABlAHIAZgBpAGwAIABnAGUAbgDpAHIAaQBjAG8AIABkAGUAIABjAGkAbgB6AGUA -bgB0AG8AcwBBAGwAZwBlAG0AZQBlAG4AIABnAHIAaQBqAHMAcAByAG8AZgBpAGUAbABQAGUAcgBmAGkA -bAAgAGcAcgBpAHMAIABnAGUAbgDpAHIAaQBjAG8OQg4bDiMORA4fDiUOTA4qDjUOQA4XDjIOFw4xDkgO -Jw5EDhsARwBlAG4AZQBsACAARwByAGkAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABoAGEA -cgBtAGEAYQBwAHIAbwBmAGkAaQBsAGkARwBlAG4AZQByAGkBDQBrAGkAIABwAHIAbwBmAGkAbAAgAHMA -aQB2AGkAaAAgAHQAbwBuAG8AdgBhAFUAbgBpAHcAZQByAHMAYQBsAG4AeQAgAHAAcgBvAGYAaQBsACAA -cwB6AGEAcgBvAVsAYwBpBB4EMQRJBDgEOQAgBEEENQRABEsEOQAgBD8EQAQ+BEQEOAQ7BEwGRQZEBkEA -IAYqBjkGMQZKBkEAIABHAHIAYQB5ACAGJwZEBjkGJwZFAEcAZQBuAGUAcgBpAGMAIABHAHIAYQB5ACAA -UAByAG8AZgBpAGwAZQAAdGV4dAAAAABDb3B5cmlnaHQgMjAwNyBBcHBsZSBJbmMuLCBhbGwgcmlnaHRz -IHJlc2VydmVkLgBYWVogAAAAAAAA81EAAQAAAAEWzGN1cnYAAAAAAAAAAQHNAADSJSYnKFokY2xhc3Nu -YW1lWCRjbGFzc2VzXxAQTlNCaXRtYXBJbWFnZVJlcKMpKitfEBBOU0JpdG1hcEltYWdlUmVwWk5TSW1h -Z2VSZXBYTlNPYmplY3TSJSYtLldOU0FycmF5oi0r0iUmMDFeTlNNdXRhYmxlQXJyYXmjMC0r0zM0CjU2 -N1dOU1doaXRlXE5TQ29sb3JTcGFjZUQwIDAAEAOADNIlJjk6V05TQ29sb3KiOSvSJSY8PVdOU0ltYWdl -ojwrXxAPTlNLZXllZEFyY2hpdmVy0UBBVHJvb3SAAQAIABEAGgAjAC0AMgA3AEYATABXAF4AZQByAHkA -gQCDAIUAigCMAI4AlQCaAKUApwCpAKsAsACzALUAtwC5ALsAwADXANkA2wlTCVgJYwlsCX8JgwmWCaEJ -qgmvCbcJugm/Cc4J0gnZCeEJ7gnzCfUJ9wn8CgQKBwoMChQKFwopCiwKMQAAAAAAAAIBAAAAAAAAAEIA -AAAAAAAAAAAAAAAAAAozA - - - diff --git a/Sketch Toolbox/STAppDelegate.m b/Sketch Toolbox/STAppDelegate.m index e1feb27..6514ecd 100644 --- a/Sketch Toolbox/STAppDelegate.m +++ b/Sketch Toolbox/STAppDelegate.m @@ -32,6 +32,12 @@ - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { [self startApp]; pluginManager = [PluginManager sharedManager]; [pluginManager downloadCatalog]; + + plugins = [Plugin MR_findAllSortedBy:@"name" ascending:YES]; + activePlugins = plugins; + [self.filterControl setSelectedSegment:0]; + [self.tableView reloadData]; + } -(void)migrate { From 03eba99c9bf21513c477fcc34cfc01652c4c270f Mon Sep 17 00:00:00 2001 From: Alasdair Monk Date: Wed, 14 Oct 2015 16:49:45 +0100 Subject: [PATCH 2/4] New assets, keyboard shortcuts & UI --- Sketch Toolbox.xcodeproj/project.pbxproj | 4 + Sketch Toolbox/Base.lproj/MainMenu.xib | 125 ++++++++++-------- Sketch Toolbox/Images.xcassets/Contents.json | 6 + .../Download.imageset/Contents.json | 12 +- .../Github.imageset/Contents.json | 12 +- .../Refresh.imageset/Contents.json | 8 +- .../Star.imageset/Contents.json | 12 +- .../Images.xcassets/Star.imageset/Star.png | Bin 3440 -> 0 bytes .../Images.xcassets/Star.imageset/Star@2x.png | Bin 3440 -> 0 bytes .../Images.xcassets/Star.imageset/star-2.png | Bin 0 -> 597 bytes .../Star.imageset/star-2@2x.png | Bin 0 -> 1364 bytes .../Trash.imageset/Contents.json | 12 +- .../User.imageset/Contents.json | 12 +- .../Images.xcassets/User.imageset/User.png | Bin 3184 -> 0 bytes .../Images.xcassets/User.imageset/User@2x.png | Bin 3929 -> 0 bytes .../Images.xcassets/User.imageset/user-2.png | Bin 0 -> 466 bytes .../User.imageset/user-2@2x.png | Bin 0 -> 1088 bytes Sketch Toolbox/STAppDelegate.h | 1 + Sketch Toolbox/STAppDelegate.m | 14 ++ Sketch Toolbox/STPluginCellView.h | 2 + Sketch Toolbox/STPluginCellView.m | 4 + 21 files changed, 150 insertions(+), 74 deletions(-) create mode 100644 Sketch Toolbox/Images.xcassets/Contents.json delete mode 100644 Sketch Toolbox/Images.xcassets/Star.imageset/Star.png delete mode 100644 Sketch Toolbox/Images.xcassets/Star.imageset/Star@2x.png create mode 100644 Sketch Toolbox/Images.xcassets/Star.imageset/star-2.png create mode 100644 Sketch Toolbox/Images.xcassets/Star.imageset/star-2@2x.png delete mode 100644 Sketch Toolbox/Images.xcassets/User.imageset/User.png delete mode 100644 Sketch Toolbox/Images.xcassets/User.imageset/User@2x.png create mode 100644 Sketch Toolbox/Images.xcassets/User.imageset/user-2.png create mode 100644 Sketch Toolbox/Images.xcassets/User.imageset/user-2@2x.png diff --git a/Sketch Toolbox.xcodeproj/project.pbxproj b/Sketch Toolbox.xcodeproj/project.pbxproj index 5efc092..36db2a9 100644 --- a/Sketch Toolbox.xcodeproj/project.pbxproj +++ b/Sketch Toolbox.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 0E5D4F26192B15560084F30C /* STPluginCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E5D4F25192B15560084F30C /* STPluginCellView.m */; }; + 9FEE44C41BCEA38500F550FB /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FEE44C31BCEA38500F550FB /* WebKit.framework */; }; EA12D97F19354808000E5232 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = EA12D97E19354808000E5232 /* dsa_pub.pem */; }; EA5913BD192D627E00FF4CC0 /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = EA5913BC192D627E00FF4CC0 /* Constants.m */; }; EA70F99C192AC88D00315D05 /* PluginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EA70F99B192AC88D00315D05 /* PluginManager.m */; }; @@ -72,6 +73,7 @@ /* Begin PBXFileReference section */ 0E5D4F24192B15560084F30C /* STPluginCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STPluginCellView.h; sourceTree = ""; }; 0E5D4F25192B15560084F30C /* STPluginCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = STPluginCellView.m; sourceTree = ""; }; + 9FEE44C31BCEA38500F550FB /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; EA12D97E19354808000E5232 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = ""; }; EA5913BC192D627E00FF4CC0 /* Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Constants.m; sourceTree = ""; }; EA5913BE192D691200FF4CC0 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = ""; }; @@ -171,6 +173,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 9FEE44C41BCEA38500F550FB /* WebKit.framework in Frameworks */, EA70F9B0192ACEBA00315D05 /* libz.dylib in Frameworks */, EA86F5CE192AB55F00B834ED /* Cocoa.framework in Frameworks */, EAA8CF53193534BE00F8AE07 /* Sparkle.framework in Frameworks */, @@ -358,6 +361,7 @@ EA86F5CC192AB55F00B834ED /* Frameworks */ = { isa = PBXGroup; children = ( + 9FEE44C31BCEA38500F550FB /* WebKit.framework */, EAA8CF4E19350E0400F8AE07 /* Sparkle.framework */, EA70F9AF192ACEBA00315D05 /* libz.dylib */, EA86F5CD192AB55F00B834ED /* Cocoa.framework */, diff --git a/Sketch Toolbox/Base.lproj/MainMenu.xib b/Sketch Toolbox/Base.lproj/MainMenu.xib index 3ee97a6..0571414 100644 --- a/Sketch Toolbox/Base.lproj/MainMenu.xib +++ b/Sketch Toolbox/Base.lproj/MainMenu.xib @@ -1,5 +1,5 @@ - + @@ -15,8 +15,8 @@ - - + + @@ -24,22 +24,21 @@ - - + + - + - - - + + - + - - + + @@ -47,7 +46,7 @@ - + @@ -61,12 +60,14 @@ - + - - - - + + @@ -86,19 +86,11 @@ - - - - - - - - - - - - - + + + + + @@ -106,38 +98,39 @@ - - - + + - - - - - - - + + + + + + + - @@ -161,6 +154,12 @@ + + + + + + @@ -175,10 +174,10 @@ - + - + @@ -215,7 +214,7 @@ - + @@ -313,6 +312,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -343,7 +365,6 @@ - diff --git a/Sketch Toolbox/Images.xcassets/Contents.json b/Sketch Toolbox/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Sketch Toolbox/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Sketch Toolbox/Images.xcassets/Download.imageset/Contents.json b/Sketch Toolbox/Images.xcassets/Download.imageset/Contents.json index 76facd1..7ad8251 100644 --- a/Sketch Toolbox/Images.xcassets/Download.imageset/Contents.json +++ b/Sketch Toolbox/Images.xcassets/Download.imageset/Contents.json @@ -2,13 +2,17 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "Cloud_Download.png" + "filename" : "Cloud_Download.png", + "scale" : "1x" }, { "idiom" : "universal", - "scale" : "2x", - "filename" : "Cloud_Download@2x.png" + "filename" : "Cloud_Download@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/Sketch Toolbox/Images.xcassets/Github.imageset/Contents.json b/Sketch Toolbox/Images.xcassets/Github.imageset/Contents.json index 108ccdd..5da3501 100644 --- a/Sketch Toolbox/Images.xcassets/Github.imageset/Contents.json +++ b/Sketch Toolbox/Images.xcassets/Github.imageset/Contents.json @@ -2,13 +2,17 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "Github.png" + "filename" : "Github.png", + "scale" : "1x" }, { "idiom" : "universal", - "scale" : "2x", - "filename" : "Github@2x.png" + "filename" : "Github@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/Sketch Toolbox/Images.xcassets/Refresh.imageset/Contents.json b/Sketch Toolbox/Images.xcassets/Refresh.imageset/Contents.json index 6ea66bd..0ffb627 100644 --- a/Sketch Toolbox/Images.xcassets/Refresh.imageset/Contents.json +++ b/Sketch Toolbox/Images.xcassets/Refresh.imageset/Contents.json @@ -2,12 +2,16 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "icon_4985.png" + "filename" : "icon_4985.png", + "scale" : "1x" }, { "idiom" : "universal", "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/Sketch Toolbox/Images.xcassets/Star.imageset/Contents.json b/Sketch Toolbox/Images.xcassets/Star.imageset/Contents.json index 3e62b40..8ab2955 100644 --- a/Sketch Toolbox/Images.xcassets/Star.imageset/Contents.json +++ b/Sketch Toolbox/Images.xcassets/Star.imageset/Contents.json @@ -2,13 +2,17 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "Star.png" + "filename" : "star-2.png", + "scale" : "1x" }, { "idiom" : "universal", - "scale" : "2x", - "filename" : "Star@2x.png" + "filename" : "star-2@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/Sketch Toolbox/Images.xcassets/Star.imageset/Star.png b/Sketch Toolbox/Images.xcassets/Star.imageset/Star.png deleted file mode 100644 index 0bedbd99febb99a043bd6b7ab960f495e2da0a0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3440 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 Suw%af0000X+uL$Nkc;* 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 literal 0 HcmV?d00001 diff --git a/Sketch Toolbox/Images.xcassets/Star.imageset/star-2@2x.png b/Sketch Toolbox/Images.xcassets/Star.imageset/star-2@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2d8438c196d433cb46bf0ba7f499e1dccc520a1c GIT binary patch literal 1364 zcmV-a1*`grP)Px)4oO5oR9Fecmu*a&RTRgew7jjDN`eu5A+oPHjmz9jd`WS}*vyPU2~mzS4!t*xy!6&4mg&V0K)6x*-Z&N4@fi;FLI zb#>ja`SWi#SWpu~k zSis20h&P!`zQ(E!v8pmMe2k2`|A?^-d<< z#AYpkWcRPGu7&_TOo9)Kii+N5B^OLkJ~N%$Lyp%e;sE$B$PuK7?=oXI6=1de1Auo^ z`JuYHy7vQtz(1LR`8-cfPL{-Cu@~s%QSjI3&@-8@WJ3W%Lqqpz#eh9XYcLo*mk&`c zOehp;0CNKQR~_l^@BiM!qzf1yAFoIx5@!JHrd?0bt|V6Bl6YP*SGoo z{*`PvW8<~@c_kmQz^}{8%lEanw=c@)G62Y5h5S(fujC?E%*@Qp4)6yh(oG(xSvi$k z9O5##Q~|W;UK}s0{a&y4gmLDW_u<#>kVwxtlv^C)5~l)82ei-2`RE4P+S>lkl}THU zBpu*Bkw}*dCn4soG2 zirdAZvWEmU7>)~&&j8;_lBT_Zqn9cwD&`G9 zGYL-uxW}?3(arZF)9-B6u;o+2FbSUnWA9=Te=3GtSJCSXUR(Z8g61 ztiaOJ()}d*3gaM&-;741+V@$9e8S)yRE%P?k=ujKJ2D@b-IvlkJ3FtJm6bh9!jl+| z%+AifwFzVyEZ-4f6{A=uESMCh3b;Wx>Lw;8wmE@2Iy&aL2OK8mXRwaPu6)7>s~D$z z;u5F0Re=8E?Oa@3taJ*Hor}gDOgb-g`lW_Wzl;-5z8VW_p*Bwzmu^qzTvQxIsp2G) z;b!AOoNkZDqnnZTegj+Y8;Nw;ET2AXVI7CXRV8j0mxK!_Iy^RPl`PQ#Y?o_mYk!0= zh<=(lk3_m`@(F_od$Z9gPI0@sySsk_d5U+kmv-*T78Qv^eE1*2H^U8Q5MA5xJcrQ} z66vzZCycO)LEkjQfqyTKQ{vV)pm7XI(3&?0EKON#f0mY(9^>&A0{4UIqWS?Y6$d$r zV-o4I$tR4kR*WqRXE(XUfiZ!IbN#5~>h%K&w6X*7c)V2(`yfcGbc4}p`8@c;=0+o& zblK#yFm5YG?(|S@afnNta+nSju!?tad+T>41tt+~eeo4CnoQ4w_zVxGf!U&5f zCOwo>xy2za{W!H3A^rdQdHx?# WD&wg`a|gWu0000X+uL$Nkc;* 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 diff --git a/Sketch Toolbox/Images.xcassets/User.imageset/user-2.png b/Sketch Toolbox/Images.xcassets/User.imageset/user-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a3f99136f04613693b7d2cd62c70fa52e6402c GIT binary patch literal 466 zcmV;@0WJQCP)Px$j7da6R5%fhQ$0(=P!u(vV-c*2ZtA9s4sPx$x;W_M;821g85{)hFH}%Ss}zw8 zZW+`;r1%S*+Cg;FC0i8QAw)jz z5Ov$OuOvxId5Ow5R6{tCW!V|xOI6iPMSPgS8{WAf5@E0c{7J-11|ZFVV7d}aGpyBgld|0f;aClCe?(op3g%K27^H# zq=X|T1;#-?<*)AmAIcJL+rnrO@yM~es4pGI>0*&LmSuI=Oriq9c?b_t>WBwj*V~3+ zeA0}aR;yKw<9HSQIwFQq9Y!w_T&DnB12_e6&jkNvT)2S?55U=_9n{d=jw&W&;*y56 zw1b+WDBG^Px&`bk7VR9FeMmP<%fQ5eUYYYh(AgT%4NrW)H6J?OcJBBTt)7HzU1Gon;{E+SjC z3Id6U7!^|pp<0y7D50npff2nZ2!tqtln|#v!b)wN>Gzj=W4PnJXQbx9;XCJi|MUNU z=ezej0&`|rIy*a;ClZMxsZ{DDQ&*=?4+H`)7{3_`g>F?>R}ZE8yxIXT$4uj~SZpWb zJ=6$d{nWPz{uUOSPk#$`Bi&DyWwkUmHulQrSF#GAt*vbt#H|P%hU_P{5`q4@y1G%? zDGA`Wy1TmG&W!PrH(O8KJ(Wrltq-)z{a{OcyXo z8egdQ+uPfZC6mdg1hSR>zXj0M)wOVPa&ohX5k7@A7J?iUh@c8gV9N-wtb7QA;Nm8% z<0tj&)h2*X&X|`q20$vmF*!~UB~&9`LZp5-W)%E;_5F&Gu(q~VfB8FBvx+Ua!jDY8 zo}QjXm;>NnMGSp@(|1o1pRhyDdq zDG(Nr@dp%_M>pmFQ zoGh^B42YznqT&~;c}%mMtr+$qwteNoYK|8!eLSlSXaXsXVODV2wD$J)hSEvY)|h<4 z*jP7Y#(vfTaPiz@Wv!(5csw32ce80sK4FA)`@Q;E2LN%ZxVZQnL8J+tfEUyaKFOoz=H@pu@uiP>2EePP5MUIdD(W`s0{SlzYQ*Yt za+inl5yWvEm#E(fL= zo^64137k9Nt6^>#d?VN{I4{6CCcfzaY~WRZQ9ycdUgZ6k^f6#9W3BK20000 +#import @interface STAppDelegate : NSObject diff --git a/Sketch Toolbox/STAppDelegate.m b/Sketch Toolbox/STAppDelegate.m index 6514ecd..e447a93 100644 --- a/Sketch Toolbox/STAppDelegate.m +++ b/Sketch Toolbox/STAppDelegate.m @@ -37,6 +37,7 @@ - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { activePlugins = plugins; [self.filterControl setSelectedSegment:0]; [self.tableView reloadData]; + } @@ -97,6 +98,19 @@ -(IBAction)segmentSelected:(NSSegmentedControl*)sender { [self.tableView reloadData]; } +-(IBAction)selectSegmentAll:(id)sender { + [self.filterControl setSelectedSegment:0]; + activePlugins = plugins; + [self.tableView reloadData]; +} + +-(IBAction)selectSegmentInstalled:(id)sender { + [self.filterControl setSelectedSegment:1]; + NSPredicate *installed = [NSPredicate predicateWithFormat:@"installed != nil"]; + activePlugins = [Plugin MR_findAllSortedBy:@"name" ascending:YES withPredicate:installed]; + [self.tableView reloadData]; +} + -(IBAction)filterPlugins:(NSSearchField *)searchField { NSMutableString *searchText = [NSMutableString stringWithString:[searchField stringValue]]; while ([searchText rangeOfString:@" "].location != NSNotFound) { diff --git a/Sketch Toolbox/STPluginCellView.h b/Sketch Toolbox/STPluginCellView.h index 586e3bf..72d1811 100644 --- a/Sketch Toolbox/STPluginCellView.h +++ b/Sketch Toolbox/STPluginCellView.h @@ -7,6 +7,7 @@ // #import +#import @class Plugin; @interface STPluginCellView : NSTableCellView @@ -14,6 +15,7 @@ @property (nonatomic, strong) Plugin *plugin; @property (nonatomic, strong) IBOutlet NSButton *nameButton; +@property (nonatomic, strong) IBOutlet NSTextField *nameField; @property (nonatomic, strong) IBOutlet NSTextField *descriptionField; @property (nonatomic, strong) IBOutlet NSTextField *owner; @property (nonatomic, strong) IBOutlet NSTextField *starCount; diff --git a/Sketch Toolbox/STPluginCellView.m b/Sketch Toolbox/STPluginCellView.m index 7dd5719..47a57b6 100644 --- a/Sketch Toolbox/STPluginCellView.m +++ b/Sketch Toolbox/STPluginCellView.m @@ -13,6 +13,7 @@ @implementation STPluginCellView -(IBAction)actionButtonPressed:(NSButton*)sender { if (!self.plugin.isInstalled) { + self.actionButton.enabled = NO; [sender setTitle:@"Downloading..."]; [self.plugin download]; } @@ -33,10 +34,13 @@ -(void)populate { self.owner.stringValue = self.plugin.owner; self.starCount.stringValue = [NSString stringWithFormat:@"%i", self.plugin.stars]; if (self.plugin.state == PluginStateInstalled) { + self.actionButton.enabled = YES; [self.actionButton setTitle:@"Uninstall"]; } else if (self.plugin.state == PluginStateDownloading) { + self.actionButton.enabled = NO; [self.actionButton setTitle:@"Downloading..."]; } else { + self.actionButton.enabled = YES; [self.actionButton setTitle:@"Install"]; } } From 9f6d8d3486a1e0d8ec2f687c67f7f6d36d6bf5ac Mon Sep 17 00:00:00 2001 From: Pluwen Date: Tue, 28 Jun 2016 11:53:33 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=8F=90=E4=BE=9B=E7=AE=80=E4=BD=93?= =?UTF-8?q?=E4=B8=AD=E6=96=87=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 翻译了所有内容 --- Sketch Toolbox.xcodeproj/project.pbxproj | 23 ++- Sketch Toolbox/Base.lproj/Localizable.strings | 10 ++ Sketch Toolbox/Base.lproj/MainMenu.xib | 22 +-- Sketch Toolbox/STPluginCellView.m | 8 +- Sketch Toolbox/en.lproj/InfoPlist.strings | 2 - Sketch Toolbox/en.lproj/Localizable.strings | 10 ++ Sketch Toolbox/zh-Hans.lproj/Credits.rtf | 24 ++++ .../zh-Hans.lproj/Localizable.strings | 10 ++ Sketch Toolbox/zh-Hans.lproj/MainMenu.strings | 132 ++++++++++++++++++ 9 files changed, 210 insertions(+), 31 deletions(-) create mode 100644 Sketch Toolbox/Base.lproj/Localizable.strings delete mode 100644 Sketch Toolbox/en.lproj/InfoPlist.strings create mode 100644 Sketch Toolbox/en.lproj/Localizable.strings create mode 100644 Sketch Toolbox/zh-Hans.lproj/Credits.rtf create mode 100644 Sketch Toolbox/zh-Hans.lproj/Localizable.strings create mode 100644 Sketch Toolbox/zh-Hans.lproj/MainMenu.strings diff --git a/Sketch Toolbox.xcodeproj/project.pbxproj b/Sketch Toolbox.xcodeproj/project.pbxproj index 36db2a9..6690052 100644 --- a/Sketch Toolbox.xcodeproj/project.pbxproj +++ b/Sketch Toolbox.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 0E5D4F26192B15560084F30C /* STPluginCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E5D4F25192B15560084F30C /* STPluginCellView.m */; }; + 6F702A781D22271E00D62CB6 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6F702A7A1D22271E00D62CB6 /* Localizable.strings */; }; 9FEE44C41BCEA38500F550FB /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FEE44C31BCEA38500F550FB /* WebKit.framework */; }; EA12D97F19354808000E5232 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = EA12D97E19354808000E5232 /* dsa_pub.pem */; }; EA5913BD192D627E00FF4CC0 /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = EA5913BC192D627E00FF4CC0 /* Constants.m */; }; @@ -46,7 +47,6 @@ EA75D492192AC4C4005CF0DF /* MagicalRecord+ShorthandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = EA75D473192AC4C4005CF0DF /* MagicalRecord+ShorthandSupport.m */; }; EA75D493192AC4C4005CF0DF /* MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = EA75D475192AC4C4005CF0DF /* MagicalRecord.m */; }; EA86F5CE192AB55F00B834ED /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA86F5CD192AB55F00B834ED /* Cocoa.framework */; }; - EA86F5D8192AB55F00B834ED /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EA86F5D6192AB55F00B834ED /* InfoPlist.strings */; }; EA86F5DA192AB55F00B834ED /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EA86F5D9192AB55F00B834ED /* main.m */; }; EA86F5DE192AB55F00B834ED /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = EA86F5DC192AB55F00B834ED /* Credits.rtf */; }; EA86F5E1192AB55F00B834ED /* STAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EA86F5E0192AB55F00B834ED /* STAppDelegate.m */; }; @@ -73,6 +73,11 @@ /* Begin PBXFileReference section */ 0E5D4F24192B15560084F30C /* STPluginCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STPluginCellView.h; sourceTree = ""; }; 0E5D4F25192B15560084F30C /* STPluginCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = STPluginCellView.m; sourceTree = ""; }; + 6F702A731D2223BE00D62CB6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainMenu.strings"; sourceTree = ""; }; + 6F702A751D2223BE00D62CB6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "zh-Hans"; path = "zh-Hans.lproj/Credits.rtf"; sourceTree = ""; }; + 6F702A791D22271E00D62CB6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; + 6F702A7B1D22272100D62CB6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 6F702A7C1D22272600D62CB6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; 9FEE44C31BCEA38500F550FB /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; EA12D97E19354808000E5232 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = ""; }; EA5913BC192D627E00FF4CC0 /* Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Constants.m; sourceTree = ""; }; @@ -155,7 +160,6 @@ EA86F5D1192AB55F00B834ED /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; EA86F5D2192AB55F00B834ED /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; EA86F5D5192AB55F00B834ED /* Sketch Toolbox-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Sketch Toolbox-Info.plist"; sourceTree = ""; }; - EA86F5D7192AB55F00B834ED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; EA86F5D9192AB55F00B834ED /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; EA86F5DB192AB55F00B834ED /* Sketch Toolbox-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Sketch Toolbox-Prefix.pch"; sourceTree = ""; }; EA86F5DD192AB55F00B834ED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; @@ -403,11 +407,11 @@ EA75D43C192AC4C4005CF0DF /* MagicalRecord */, EA70F99D192ACD5300315D05 /* SSZipArchive */, EA86F5D5192AB55F00B834ED /* Sketch Toolbox-Info.plist */, - EA86F5D6192AB55F00B834ED /* InfoPlist.strings */, EA86F5D9192AB55F00B834ED /* main.m */, EA86F5DB192AB55F00B834ED /* Sketch Toolbox-Prefix.pch */, EA86F5DC192AB55F00B834ED /* Credits.rtf */, EA12D97E19354808000E5232 /* dsa_pub.pem */, + 6F702A7A1D22271E00D62CB6 /* Localizable.strings */, ); name = "Supporting Files"; sourceTree = ""; @@ -455,6 +459,7 @@ knownRegions = ( en, Base, + "zh-Hans", ); mainGroup = EA86F5C1192AB55F00B834ED; productRefGroup = EA86F5CB192AB55F00B834ED /* Products */; @@ -472,7 +477,7 @@ buildActionMask = 2147483647; files = ( EA12D97F19354808000E5232 /* dsa_pub.pem in Resources */, - EA86F5D8192AB55F00B834ED /* InfoPlist.strings in Resources */, + 6F702A781D22271E00D62CB6 /* Localizable.strings in Resources */, EA86F5E9192AB55F00B834ED /* Images.xcassets in Resources */, EA86F5DE192AB55F00B834ED /* Credits.rtf in Resources */, EA86F5E4192AB55F00B834ED /* MainMenu.xib in Resources */, @@ -530,18 +535,21 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - EA86F5D6192AB55F00B834ED /* InfoPlist.strings */ = { + 6F702A7A1D22271E00D62CB6 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( - EA86F5D7192AB55F00B834ED /* en */, + 6F702A791D22271E00D62CB6 /* Base */, + 6F702A7B1D22272100D62CB6 /* en */, + 6F702A7C1D22272600D62CB6 /* zh-Hans */, ); - name = InfoPlist.strings; + name = Localizable.strings; sourceTree = ""; }; EA86F5DC192AB55F00B834ED /* Credits.rtf */ = { isa = PBXVariantGroup; children = ( EA86F5DD192AB55F00B834ED /* en */, + 6F702A751D2223BE00D62CB6 /* zh-Hans */, ); name = Credits.rtf; sourceTree = ""; @@ -550,6 +558,7 @@ isa = PBXVariantGroup; children = ( EA86F5E3192AB55F00B834ED /* Base */, + 6F702A731D2223BE00D62CB6 /* zh-Hans */, ); name = MainMenu.xib; sourceTree = ""; diff --git a/Sketch Toolbox/Base.lproj/Localizable.strings b/Sketch Toolbox/Base.lproj/Localizable.strings new file mode 100644 index 0000000..dce26f9 --- /dev/null +++ b/Sketch Toolbox/Base.lproj/Localizable.strings @@ -0,0 +1,10 @@ +/* + Localizable.strings + Sketch Toolbox + + Created by pluwen on 16/6/28. + Copyright © 2016年 Shahruz Shaukat. All rights reserved. + */ +"Downloading..." = "Downloading..."; +"Uninstall" = "Uninstall"; +"Install" = "Install"; \ No newline at end of file diff --git a/Sketch Toolbox/Base.lproj/MainMenu.xib b/Sketch Toolbox/Base.lproj/MainMenu.xib index 0571414..8b27569 100644 --- a/Sketch Toolbox/Base.lproj/MainMenu.xib +++ b/Sketch Toolbox/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - + - + @@ -25,7 +25,7 @@ - + @@ -38,9 +38,8 @@ - + - @@ -68,7 +67,6 @@ - @@ -79,7 +77,6 @@ - @@ -91,7 +88,6 @@ - @@ -100,7 +96,6 @@ -