2 // PreferencePanelController.swift
5 // Created by Hori,Masaki on 2016/12/19.
6 // Copyright © 2016年 Hori,Masaki. All rights reserved.
11 enum PreferencesPaneType: Int {
17 enum ScreenshotSaveDirectoryPopupMenuItemTag: Int {
19 case saveDirectory = 1000
20 case selectDiretory = 2000
23 private extension Selector {
25 static let didChangeSelection = #selector(PreferencePanelController.didChangeSelection(_:))
28 final class PreferencePanelController: NSWindowController {
30 @IBOutlet var screenShotSaveDirectoryPopUp: NSPopUpButton!
31 @IBOutlet var generalPane: NSView!
32 @IBOutlet var notificationPane: NSView!
34 override var windowNibName: NSNib.Name {
36 return .nibName(instanceOf: self)
39 private(set) var screenShotSaveDirectory: String {
41 get { return AppDelegate.shared.screenShotSaveDirectory }
43 AppDelegate.shared.screenShotSaveDirectory = newValue
45 let index = screenShotSaveDirectoryPopUp
46 .indexOfItem(withTag: ScreenshotSaveDirectoryPopupMenuItemTag.saveDirectory.rawValue)
48 guard let item = screenShotSaveDirectoryPopUp.item(at: index) else { return }
50 let icon = NSWorkspace.shared.icon(forFile: newValue)
51 let iconSize = icon.size
52 let height: Double = 16
53 icon.size = NSSize(width: Double(iconSize.width) * height / Double(iconSize.height), height: height)
56 item.title = FileManager.default.displayName(atPath: newValue)
60 override func windowDidLoad() {
64 screenShotSaveDirectory = AppDelegate.shared.screenShotSaveDirectory
66 guard let window = window else { return }
67 guard let item = window.toolbar?.items.first else { return }
69 window.toolbar?.selectedItemIdentifier = item.itemIdentifier
70 NSApplication.shared.sendAction(.didChangeSelection, to: self, from: item)
75 @IBAction func selectScreenShotSaveDirectoryPopUp(_ sender: AnyObject?) {
77 guard let window = window else { return }
78 guard let tag = sender?.tag else { return }
79 guard let itemTag = ScreenshotSaveDirectoryPopupMenuItemTag(rawValue: tag) else { return }
80 guard itemTag == .selectDiretory else { return }
82 let panel = NSOpenPanel()
83 panel.canChooseDirectories = true
84 panel.canChooseFiles = false
85 panel.beginSheetModal(for: window) {
87 self.screenShotSaveDirectoryPopUp
88 .selectItem(withTag: ScreenshotSaveDirectoryPopupMenuItemTag.saveDirectory.rawValue)
90 guard $0 != .cancel else { return }
91 guard let path = panel.url?.path else { return }
93 self.screenShotSaveDirectory = path
97 @IBAction func didChangeSelection(_ sender: AnyObject?) {
99 guard let tag = sender?.tag else { return }
100 guard let paneType = PreferencesPaneType(rawValue: tag) else { return }
105 case .general: return generalPane
106 case .notification: return notificationPane
110 guard let item = sender as? NSToolbarItem else { return }
111 guard let window = self.window else { return }
113 window.title = item.label
114 window.contentView?.subviews.forEach { $0.removeFromSuperview() }
116 let windowRect = window.frame
117 var newWindowRect = window.frameRect(forContentRect: pane.frame)
118 newWindowRect.origin.x = windowRect.origin.x
119 newWindowRect.origin.y = windowRect.origin.y + windowRect.size.height - newWindowRect.size.height
120 window.setFrame(newWindowRect, display: true, animate: true)
121 window.contentView?.addSubview(pane)