2 // PreferencePanelController.swift
5 // Created by Hori,Masaki on 2016/12/19.
6 // Copyright © 2016年 Hori,Masaki. All rights reserved.
11 enum PreferencesPaneType: Int {
15 enum ScreenshotSaveDirectoryPopupMenuItemTag: Int {
16 case saveDirectory = 1000
17 case selectDiretory = 2000
20 private extension Selector {
21 static let didChangeSelection = #selector(PreferencePanelController.didChangeSelection(_:))
24 class PreferencePanelController: NSWindowController {
25 @IBOutlet var screenShotSaveDirectoryPopUp: NSPopUpButton!
26 @IBOutlet var generalPane: NSView!
27 @IBOutlet var notificationPane: NSView!
29 override var windowNibName: String! {
30 return "PreferencePanelController"
33 private(set) var screenShotSaveDirectory: String {
34 get { return AppDelegate.shared.screenShotSaveDirectory }
36 AppDelegate.shared.screenShotSaveDirectory = newValue
38 let index = screenShotSaveDirectoryPopUp
39 .indexOfItem(withTag: ScreenshotSaveDirectoryPopupMenuItemTag.saveDirectory.rawValue)
40 guard let item = screenShotSaveDirectoryPopUp.item(at: index)
43 let icon = NSWorkspace.shared().icon(forFile: newValue)
44 let iconSize = icon.size
45 let height: Double = 16
46 icon.size = NSSize(width: Double(iconSize.width) * height / Double(iconSize.height), height: height)
49 item.title = FileManager.default.displayName(atPath: newValue)
53 override func windowDidLoad() {
56 screenShotSaveDirectory = AppDelegate.shared.screenShotSaveDirectory
57 guard let window = window,
58 let items = window.toolbar?.items,
59 let item = items.first
61 window.toolbar?.selectedItemIdentifier = item.itemIdentifier
62 NSApplication.shared().sendAction(.didChangeSelection,
69 @IBAction func selectScreenShotSaveDirectoryPopUp(_ sender: AnyObject?) {
70 guard let window = window,
71 let tag = sender?.tag,
72 ScreenshotSaveDirectoryPopupMenuItemTag.selectDiretory.rawValue == tag
75 let panel = NSOpenPanel()
76 panel.canChooseDirectories = true
77 panel.canChooseFiles = false
78 panel.beginSheetModal(for: window) {
79 self.screenShotSaveDirectoryPopUp
80 .selectItem(withTag: ScreenshotSaveDirectoryPopupMenuItemTag.saveDirectory.rawValue)
81 guard $0 != NSModalResponseCancel,
82 let path = panel.url?.path
84 self.screenShotSaveDirectory = path
88 @IBAction func didChangeSelection(_ sender: AnyObject?) {
89 guard let tag = sender?.tag,
90 let paneType = PreferencesPaneType(rawValue: tag)
94 case .general: return generalPane
95 case .notification: return notificationPane
99 guard let item = sender as? NSToolbarItem,
100 let window = self.window
102 window.title = item.label
103 window.contentView?.subviews.forEach { $0.removeFromSuperview() }
105 let windowRect = window.frame
106 var newWindowRect = window.frameRect(forContentRect: pane.frame)
107 newWindowRect.origin.x = windowRect.origin.x
108 newWindowRect.origin.y = windowRect.origin.y + windowRect.size.height - newWindowRect.size.height
109 window.setFrame(newWindowRect, display: true, animate: true)
110 window.contentView?.addSubview(pane)