OSDN Git Service

staticプロパティをインスタンスプロパティに変更
[kcd/KCD.git] / KCD / UpgradableShipsWindowController.swift
index db7b86a..e721e6c 100644 (file)
@@ -8,11 +8,6 @@
 
 import Cocoa
 
-private extension Selector {
-    
-    static let showHideShip = #selector(UpgradableShipsWindowController.showHideShip(_:))
-}
-
 final class UpgradableShipsWindowController: NSWindowController {
     
     @objc let managedObjectContext = ServerDataStore.default.context
@@ -24,9 +19,15 @@ final class UpgradableShipsWindowController: NSWindowController {
         return excludeShiIDsCache.contains(shipID)
     }
     
-    @objc class func keyPathsForValuesAffectingFilterPredicate() -> Set<String> {
+    @objc override class func keyPathsForValuesAffectingValue(forKey key: String) -> Set<String> {
+        
+        switch key {
+            
+        case #keyPath(filterPredicate): return [#keyPath(showLevelOneShipInUpgradableList), #keyPath(showsExcludedShipInUpgradableList)]
         
-        return [#keyPath(showLevelOneShipInUpgradableList), #keyPath(showsExcludedShipInUpgradableList)]
+        default: return []
+            
+        }
     }
     
     private var excludeShiIDsCache: [Int] {
@@ -41,9 +42,9 @@ final class UpgradableShipsWindowController: NSWindowController {
     }
     
     
-    @IBOutlet var contextualMenu: NSMenu!
-    @IBOutlet var tableView: NSTableView!
-    @IBOutlet var shipsController: NSArrayController!
+    @IBOutlet private var contextualMenu: NSMenu!
+    @IBOutlet private var tableView: NSTableView!
+    @IBOutlet private var shipsController: NSArrayController!
     
     override var windowNibName: NSNib.Name {
         
@@ -52,30 +53,30 @@ final class UpgradableShipsWindowController: NSWindowController {
     
     @objc dynamic var filterPredicate: NSPredicate? {
         
-        var filterPredicate: NSPredicate?
+        var levelOnePredicate: NSPredicate?
         var excludeShip: NSPredicate?
         
         if showLevelOneShipInUpgradableList == false {
             
-            filterPredicate = NSPredicate(format: "lv != 1")
+            levelOnePredicate = NSPredicate(#keyPath(Ship.lv), notEqual: 1)
         }
         
         if showsExcludedShipInUpgradableList == false,
-            excludeShiIDs.count != 0 {
+            excludeShiIDsCache.count != 0 {
             
-            excludeShip = NSPredicate(format: "NOT id IN %@", excludeShiIDs)
+            excludeShip = .not(NSPredicate(#keyPath(Ship.id), valuesIn: excludeShiIDsCache))
         }
         
-        if let filterPredicate = filterPredicate,
-            let excludeShip = excludeShip {
+        switch (levelOnePredicate, excludeShip) {
+            
+        case let (p0?, p1?): return p0.and(p1)
             
-            return NSCompoundPredicate(andPredicateWithSubpredicates: [filterPredicate, excludeShip])
+        case let (p0?, _): return p0
+            
+        case let (_, p1?): return p1
+            
+        default: return nil
         }
-        
-        if let filterPredicate = filterPredicate { return filterPredicate }
-        if let excludeShip = excludeShip { return excludeShip }
-        
-        return nil
     }
     
     @objc var showLevelOneShipInUpgradableList: Bool {
@@ -104,40 +105,43 @@ final class UpgradableShipsWindowController: NSWindowController {
     
     private var excludeShipIDsSaveURL: URL {
         
-        return ApplicationDirecrories.support.appendingPathComponent("ExcludeShipIDs")
+        return ApplicationDirecrories.shared.support.appendingPathComponent("ExcludeShipIDs")
     }
     
-    override func windowDidLoad() {
+    override func windowWillLoad() {
         
-        super.windowDidLoad()
+        super.windowWillLoad()
         
         excludeShiIDsCache = excludeShiIDs
     }
     
     private func includeShip(shipID: Int) {
         
-        var array = excludeShiIDs
-        
-        guard let index = array.index(of: shipID) else { return }
+        guard let index = excludeShiIDs.index(of: shipID) else {
+            
+            return
+        }
         
-        array.remove(at: index)
-        excludeShiIDs = array
+        excludeShiIDs.remove(at: index)
     }
     
     private func excludeShip(shipID: Int) {
         
-        var array = excludeShiIDs
-        array.append(shipID)
-        excludeShiIDs = array
+        excludeShiIDs.append(shipID)
     }
     
     @IBAction func showHideShip(_ sender: AnyObject?) {
         
         let row = tableView.clickedRow
         
-        guard let ships = shipsController.arrangedObjects as? [Ship],
-            case 0..<ships.count = row
-            else { return }
+        guard let ships = shipsController.arrangedObjects as? [Ship] else {
+            
+            return
+        }
+        guard case 0..<ships.count = row else {
+            
+            return
+        }
         
         let shipID = ships[row].id
         if isExcludeShipID(shipID) {
@@ -152,27 +156,39 @@ final class UpgradableShipsWindowController: NSWindowController {
     
     override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
         
-        if menuItem.action == .showHideShip {
+        guard let action = menuItem.action else {
+            
+            return false
+        }
+        
+        switch action {
+            
+        case #selector(UpgradableShipsWindowController.showHideShip(_:)):
             
             let row = tableView.clickedRow
             
-            guard let ships = shipsController.arrangedObjects as? [Ship],
-                case 0..<ships.count = row
-                else { return false }
+            guard let ships = shipsController.arrangedObjects as? [Ship] else {
+                
+                return false
+            }
+            guard case 0..<ships.count = row else {
+                
+                return false
+            }
             
-            let shipID = ships[row].id
-            if isExcludeShipID(shipID) {
+            if isExcludeShipID(ships[row].id) {
                 
-                menuItem.title = NSLocalizedString("Show Kanmusu", comment: "UpgradableShipsWindowController menu item")
+                menuItem.title = LocalizedStrings.showKanmusu.string
                 
             } else {
                 
-                menuItem.title = NSLocalizedString("Hide Kanmusu", comment: "UpgradableShipsWindowController menu item")
+                menuItem.title = LocalizedStrings.hideKanmusu.string
             }
             
             return true
+            
+        default: return false
+            
         }
-        
-        return false
     }
 }