OSDN Git Service

AppDelegateからウインドウに関する部分を分離した
[kcd/KCD.git] / KCD / SlotItemWindowController.swift
1 //
2 //  SlotItemWindowController.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2016/12/21.
6 //  Copyright © 2016年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 class SlotItemWindowController: NSWindowController {
12     enum ShowType: Int {
13         case all = -1
14         case nonEquiped = 0
15         case equiped = 1
16     }
17     
18     let managedObjectContext = ServerDataStore.default.context
19     
20     @IBOutlet var slotItemController: NSArrayController!
21     @IBOutlet var searchField: NSSearchField!
22     
23     override var windowNibName: String! {
24         return "SlotItemWindowController"
25     }
26     
27     var showEquipmentType: Int {
28         get { return UserDefaults.standard.showEquipmentType.rawValue }
29         set {
30             notifyChangeValue(forKey: #keyPath(showEquipmentTypeTitle)) {
31                 UserDefaults.standard.showEquipmentType = ShowType(rawValue: newValue) ?? .all
32             }
33             slotItemController.fetchPredicate = filterPredicate
34         }
35     }
36     var filterPredicate: NSPredicate? {
37         switch UserDefaults.standard.showEquipmentType {
38         case .all:
39             return nil
40         case .nonEquiped:
41             return NSPredicate(format: "equippedShip.lv = NULL && extraEquippedShip.lv = NULL")
42         case .equiped:
43             return NSPredicate(format: "equippedShip.lv != NULL || extraEquippedShip.lv != NULL")
44         }
45     }
46     var showEquipmentTypeTitle: String {
47         switch UserDefaults.standard.showEquipmentType {
48         case .all:
49             return NSLocalizedString("All", comment: "show equipment type All")
50         case .nonEquiped:
51             return NSLocalizedString("Unequiped", comment: "show equipment type Unequiped")
52         case .equiped:
53             return NSLocalizedString("Equiped", comment: "show equipment type Equiped")
54         }
55     }
56     
57     override func windowDidLoad() {
58         super.windowDidLoad()
59         
60         // refresh filter
61         let type = showEquipmentType
62         showEquipmentType = type
63     }
64 }
65
66
67 @available(OSX 10.12.2, *)
68 fileprivate var objectForTouchBar: [Int: NSTouchBar] = [:]
69
70 @available(OSX 10.12.2, *)
71 extension SlotItemWindowController {
72     @IBOutlet var myTouchBar: NSTouchBar? {
73         get { return objectForTouchBar[hash] }
74         set { objectForTouchBar[hash] = newValue }
75     }
76
77     override var touchBar: NSTouchBar? {
78         get {
79             if let _ = myTouchBar {
80                 return myTouchBar
81             }
82             var topLevel: NSArray = []
83             Bundle.main.loadNibNamed("SlotItemWindowTouchBar",
84                                      owner: self,
85                                      topLevelObjects: &topLevel)
86             return myTouchBar
87         }
88         set {}
89     }
90     
91     @IBAction func nextShowType(_ sender: AnyObject?) {
92         let next = (showEquipmentType + 2) % 3 - 1
93         showEquipmentType = next
94     }
95     @IBAction func selectSearchField(_ sender: AnyObject?) {
96         window!.makeFirstResponder(searchField)
97     }
98 }