OSDN Git Service

AppDelegateからウインドウに関する部分を分離した
[kcd/KCD.git] / KCD / PowerUpSupportViewController.swift
1 //
2 //  PowerUpSupportViewController.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2016/12/25.
6 //  Copyright © 2016年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 class PowerUpSupportViewController: MainTabVIewItemViewController {
12     let managedObjectContext = ServerDataStore.default.context
13     
14     deinit {
15         shipController.removeObserver(self, forKeyPath: NSSortDescriptorsBinding)
16     }
17     
18     @IBOutlet var shipController: NSArrayController!
19     @IBOutlet weak var typeSegment: NSSegmentedControl!
20     
21     override var hasShipTypeSelector: Bool { return true }
22     override var selectedShipType: ShipType {
23         didSet {
24             shipController.filterPredicate = customPredicate(for: selectedShipType)
25             shipController.rearrangeObjects()
26         }
27     }
28     override var nibName: String! {
29         return "PowerUpSupportViewController"
30     }
31     
32     var omitPredicate: NSPredicate? {
33         let sd = UserDefaults.standard
34         let hideKyes = [(Bool, String)]()
35             .appended { (sd.hideMaxKaryoku, "isMaxKaryoku != TRUE") }
36             .appended { (sd.hideMaxRaisou, "isMaxRaisou != TRUE") }
37             .appended { (sd.hideMaxTaiku, "isMaxTaiku != TRUE") }
38             .appended { (sd.hideMaxSoukou, "isMaxSoukou != TRUE") }
39             .appended { (sd.hideMaxLucky, "isMaxLucky != TRUE") }
40             .flatMap { (b, s) in b ? s : nil }
41         if hideKyes.isEmpty { return nil }
42         return NSPredicate(format: hideKyes.joined(separator: " AND "))
43     }
44     
45     override func viewDidLoad() {
46         super.viewDidLoad()
47         
48         changeCategory(nil)
49         do {
50             try shipController.fetch(with: nil, merge: true)
51         } catch {
52             fatalError("PowerUpSupportViewController: can not fetch. \(error)")
53         }
54         shipController.sortDescriptors = UserDefaults.standard.powerupSupportSortDecriptors
55         shipController.addObserver(self, forKeyPath: NSSortDescriptorsBinding, context: nil)
56     }
57     
58     override func observeValue(forKeyPath keyPath: String?,
59                                of object: Any?,
60                                change: [NSKeyValueChangeKey : Any]?,
61                                context: UnsafeMutableRawPointer?) {
62         if keyPath == NSSortDescriptorsBinding {
63             UserDefaults.standard.powerupSupportSortDecriptors = shipController.sortDescriptors
64             return
65         }
66         
67         super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
68     }
69     
70     fileprivate func customPredicate(for type: ShipType) -> NSPredicate? {
71         if let catPredicate = self.predicate(for: type) {
72             if let omitPredicate = self.omitPredicate {
73                 return NSCompoundPredicate(type: .and,
74                                            subpredicates: [omitPredicate, catPredicate])
75             }
76             return catPredicate
77         }
78         return omitPredicate
79     }
80     
81     @IBAction func changeCategory(_ sender: AnyObject?) {
82         guard let type = ShipType(rawValue: typeSegment.selectedSegment) else { return }
83         shipController.filterPredicate = customPredicate(for: type)
84         shipController.rearrangeObjects()
85     }
86 }