• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

macOSのスクリーンショットの保存場所を変更するメニュバーエクストラ


Commit MetaInfo

Revision45d113dc46490e79599b0ec45f305060c4c10554 (tree)
Time2017-04-15 19:45:35
Authormasakih <masakih@user...>
Commitermasakih

Log Message

El Capitanで起動しない問題を修正

Change Summary

Incremental Difference

--- a/GoInto.xcodeproj/project.pbxproj
+++ b/GoInto.xcodeproj/project.pbxproj
@@ -11,6 +11,7 @@
1111 F40EB6BF1EA1A55700FEE444 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F40EB6BD1EA1A55700FEE444 /* Localizable.strings */; };
1212 F40EB6C81EA1CD7A00FEE444 /* ImageTypeItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40EB6C71EA1CD7A00FEE444 /* ImageTypeItem.swift */; };
1313 F40EB6CA1EA1D7B500FEE444 /* ImageType.plist in Resources */ = {isa = PBXBuildFile; fileRef = F40EB6C91EA1D7B500FEE444 /* ImageType.plist */; };
14+ F40EB6CE1EA2218200FEE444 /* ActionListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40EB6CD1EA2218200FEE444 /* ActionListener.swift */; };
1415 F47B06EB1E9A5DF9006711D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F47B06EA1E9A5DF9006711D9 /* AppDelegate.swift */; };
1516 F47B06EF1E9A5DF9006711D9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F47B06EE1E9A5DF9006711D9 /* Assets.xcassets */; };
1617 F47B06FD1E9A5DF9006711D9 /* GoIntoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F47B06FC1E9A5DF9006711D9 /* GoIntoTests.swift */; };
@@ -39,6 +40,7 @@
3940 F40EB6C61EA1A94200FEE444 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = "<group>"; };
4041 F40EB6C71EA1CD7A00FEE444 /* ImageTypeItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageTypeItem.swift; sourceTree = "<group>"; };
4142 F40EB6C91EA1D7B500FEE444 /* ImageType.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ImageType.plist; sourceTree = "<group>"; };
43+ F40EB6CD1EA2218200FEE444 /* ActionListener.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionListener.swift; sourceTree = "<group>"; };
4244 F47B06E71E9A5DF9006711D9 /* GoInto.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GoInto.app; sourceTree = BUILT_PRODUCTS_DIR; };
4345 F47B06EA1E9A5DF9006711D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
4446 F47B06EE1E9A5DF9006711D9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@@ -101,6 +103,7 @@
101103 F47B07111EA10A3E006711D9 /* ChooseFolerItem.swift */,
102104 F40EB6C71EA1CD7A00FEE444 /* ImageTypeItem.swift */,
103105 F47B07171EA10A88006711D9 /* QuitItem.swift */,
106+ F40EB6CD1EA2218200FEE444 /* ActionListener.swift */,
104107 F47B06EE1E9A5DF9006711D9 /* Assets.xcassets */,
105108 F47B06F31E9A5DF9006711D9 /* Info.plist */,
106109 F40EB6C91EA1D7B500FEE444 /* ImageType.plist */,
@@ -229,6 +232,7 @@
229232 F47B070C1E9A65FA006711D9 /* StatusItem.swift in Sources */,
230233 F47B06EB1E9A5DF9006711D9 /* AppDelegate.swift in Sources */,
231234 F47B07101EA10A1A006711D9 /* FolderItem.swift in Sources */,
235+ F40EB6CE1EA2218200FEE444 /* ActionListener.swift in Sources */,
232236 F47B07181EA10A88006711D9 /* QuitItem.swift in Sources */,
233237 F40EB6C81EA1CD7A00FEE444 /* ImageTypeItem.swift in Sources */,
234238 F47B070E1E9A6E55006711D9 /* StatusBar.swift in Sources */,
--- /dev/null
+++ b/GoInto/ActionListener.swift
@@ -0,0 +1,13 @@
1+//
2+// ActionListener.swift
3+// GoInto
4+//
5+// Created by Hori,Masaki on 2017/04/15.
6+// Copyright © 2017年 Hori,Masaki. All rights reserved.
7+//
8+
9+import Cocoa
10+
11+class ActionListener: NSObject {
12+ weak var owner: AnyObject?
13+}
--- a/GoInto/ChooseFolerItem.swift
+++ b/GoInto/ChooseFolerItem.swift
@@ -8,22 +8,12 @@
88
99 import Cocoa
1010
11-extension Selector {
12- static let selectFolder = #selector(ChooseFolerItem.selectFolder(_:))
13-}
11+let chooseFolerItemKey = "ChooseFolerItem"
1412
15-class ChooseFolerItem: StatusItem {
16- let menuItem = NSMenuItem()
17- let urlSelector: (URL) -> Void
18-
19- init(_ handler: @escaping ((URL) -> Void)) {
20- urlSelector = handler
21- menuItem.title = NSLocalizedString("Choose Folder", comment: "Choose Folder MenuItem")
22- menuItem.action = .selectFolder
23- menuItem.target = self
24- }
25-
13+extension ActionListener {
2614 @IBAction func selectFolder(_ sender: Any?) {
15+ guard let item = owner as? ChooseFolerItem
16+ else { return }
2717 let panel = NSOpenPanel()
2818 panel.canChooseDirectories = true
2919 panel.allowsMultipleSelection = false
@@ -36,10 +26,24 @@ class ChooseFolerItem: StatusItem {
3626
3727 guard panel.runModal() == NSFileHandlingPanelOKButton,
3828 let url = panel.directoryURL else { return }
39- urlSelector(url)
29+ item.urlSelector(url)
4030 }
31+}
32+
33+extension Selector {
34+ static let selectFolder = #selector(ActionListener.selectFolder(_:))
35+}
36+
37+class ChooseFolerItem: StatusItem {
38+ let menuItem = NSMenuItem()
39+ let urlSelector: (URL) -> Void
40+ let listener = ActionListener()
4141
42- func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
43- return true
42+ init(_ handler: @escaping ((URL) -> Void)) {
43+ urlSelector = handler
44+ menuItem.title = NSLocalizedString("Choose Folder", comment: "Choose Folder MenuItem")
45+ menuItem.action = .selectFolder
46+ menuItem.target = listener
47+ listener.owner = self
4448 }
4549 }
--- a/GoInto/FolderItem.swift
+++ b/GoInto/FolderItem.swift
@@ -8,13 +8,22 @@
88
99 import Cocoa
1010
11+extension ActionListener {
12+ @IBAction func changeFolder(_ sender: Any?) {
13+ guard let item = owner as? FolderItem
14+ else { return }
15+ item.set()
16+ }
17+}
18+
1119 extension Selector {
12- static let changeFolder = #selector(FolderItem.changeFolder(_:))
20+ static let changeFolder = #selector(ActionListener.changeFolder(_:))
1321 }
1422
1523 class FolderItem: StatusItem {
1624 let url: URL
1725 let menuItem = NSMenuItem()
26+ let listener = ActionListener()
1827
1928 init(_ url: URL) {
2029 self.url = url
@@ -30,11 +39,8 @@ class FolderItem: StatusItem {
3039 menuItem.image = fitSize(work.icon(forFile: url.path))
3140
3241 menuItem.action = .changeFolder
33- menuItem.target = self
34- }
35-
36- @IBAction func changeFolder(_ : Any?) {
37- set()
42+ menuItem.target = listener
43+ listener.owner = self
3844 }
3945
4046 func set() {
@@ -62,15 +68,6 @@ class FolderItem: StatusItem {
6268 menuItem.state = NSOffState
6369 }
6470 }
65-
66- func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
67- return true
68- }
69-}
70-extension FolderItem: Equatable {
71- static func ==(lhs: FolderItem, rhs: FolderItem) -> Bool {
72- return lhs.url == rhs.url
73- }
7471 }
7572
7673 func fitSize(_ image: NSImage) -> NSImage {
--- a/GoInto/ImageTypeItem.swift
+++ b/GoInto/ImageTypeItem.swift
@@ -8,8 +8,20 @@
88
99 import Cocoa
1010
11+
12+let imageTypeItemKey = "ImageTypeItem"
13+
14+extension ActionListener {
15+ @IBAction func selectType(_ sender: Any?) {
16+ guard let imageTypeItem = owner as? ImageTypeItem,
17+ let item = sender as? NSMenuItem,
18+ let typeName = item.representedObject as? String
19+ else { return }
20+ imageTypeItem.set(typeName)
21+ }
22+}
1123 extension Selector {
12- static let selectType = #selector(ImageTypeItem.selectType(_:))
24+ static let selectType = #selector(ActionListener.selectType(_:))
1325 }
1426
1527 private func loadImageTypes() -> [String] {
@@ -22,8 +34,11 @@ private func loadImageTypes() -> [String] {
2234 class ImageTypeItem: StatusItem {
2335 let menuItem = NSMenuItem()
2436 let supportTypes = loadImageTypes()
37+ let listener = ActionListener()
2538
2639 init() {
40+ listener.owner = self
41+
2742 menuItem.title = NSLocalizedString("Image Type", comment: "Image Type MenuItem")
2843
2944 let ws = NSWorkspace.shared()
@@ -35,7 +50,7 @@ class ImageTypeItem: StatusItem {
3550 let item = NSMenuItem()
3651 item.title = ws.localizedDescription(forType: $0) ?? "H O G E"
3752 item.action = .selectType
38- item.target = self
53+ item.target = listener
3954 item.representedObject = ws.preferredFilenameExtension(forType: $0)
4055 return item
4156 }
@@ -74,14 +89,7 @@ class ImageTypeItem: StatusItem {
7489 return type
7590 }
7691
77- @IBAction func selectType(_ sender: Any?) {
78- guard let item = sender as? NSMenuItem,
79- let typeName = item.representedObject as? String
80- else { return }
81- set(typeName)
82- }
83-
84- private func set(_ typeName: String) {
92+ fileprivate func set(_ typeName: String) {
8593 DispatchQueue(label: "Launch defaults").async {
8694 let task = Process()
8795 task.launchPath = "/usr/bin/defaults"
--- a/GoInto/QuitItem.swift
+++ b/GoInto/QuitItem.swift
@@ -8,20 +8,24 @@
88
99 import Cocoa
1010
11+extension ActionListener {
12+ @IBAction func quit(_ sender: Any?) {
13+ NSApplication.shared().terminate(nil)
14+ }
15+}
16+
1117 extension Selector {
12- static let quit = #selector(QuitItem.quit(_:))
18+ static let quit = #selector(ActionListener.quit(_:))
1319 }
1420
1521 class QuitItem: StatusItem {
1622 let menuItem = NSMenuItem()
23+ let listener = ActionListener()
1724 init() {
25+ listener.owner = self
1826 let format = NSLocalizedString("Quit %@", comment: "Quit Menu Item")
1927 menuItem.title = String(format: format, AppDelegate.appName)
2028 menuItem.action = .quit
21- menuItem.target = self
22- }
23-
24- @IBAction func quit(_ sender: Any?) {
25- NSApplication.shared().terminate(nil)
29+ menuItem.target = listener
2630 }
2731 }