OSDN Git Service

関数名を変更
[kcd/KCD.git] / KCD / ShipMasterDetailWindowController.swift
1 //
2 //  ShipMasterDetailWindowController.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/05.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class ShipMasterDetailWindowController: NSWindowController {
12     
13     @objc let managedObjectContext = ServerDataStore.default.context
14     @objc let fleetManager: FleetManager = {
15         
16         return AppDelegate.shared.fleetManager
17     }()
18     let specNames = [
19         "name", "shortTypeName",
20         "slot_0", "slot_1", "slot_2", "slot_3", "slot_4",
21         "onslot_0", "onslot_1", "onslot_2", "onslot_3", "onslot_4",
22         "leng", "slot_ex", "id"
23     ]
24     
25     @IBOutlet var shipController: NSArrayController!
26     @IBOutlet var fleetMemberController: NSArrayController!
27     @IBOutlet weak var shipsView: NSTableView!
28     @IBOutlet weak var fleetMemberView: NSTableView!
29     @IBOutlet weak var sally: NSTextField!
30     
31     override var windowNibName: NSNib.Name {
32         
33         return .nibName(instanceOf: self)
34     }
35     
36     @objc dynamic var selectedShip: Ship? {
37         
38         didSet { buildSpec() }
39     }
40     @objc dynamic var spec: [[String: AnyObject]] = []
41     
42     @objc var equipments: NSArray?
43     
44     private func buildSpec() {
45         
46         guard let selectedShip = selectedShip else { return }
47         
48         spec = specNames.flatMap { (s: String) -> [String: AnyObject]? in
49             
50             guard let v = selectedShip.value(forKeyPath: s) else { return nil }
51             
52             var d = [String: AnyObject]()
53             d["name"] = s as AnyObject?
54             d["value"] = v as AnyObject?
55             
56             return d
57         }
58         equipments = selectedShip.equippedItem.array as NSArray?
59     }
60     
61     @IBAction func applySally(_ sender: AnyObject?) {
62         
63         let store = ServerDataStore.oneTimeEditor()
64         
65         guard let i = selectedShip?.objectID else { return }
66         guard let ship = store.object(of: Ship.entity, with: i) else { return }
67         
68         ship.sally_area = sally.integerValue as NSNumber
69     }
70 }
71
72 extension ShipMasterDetailWindowController: NSTableViewDelegate {
73     
74     func tableViewSelectionDidChange(_ notification: Notification) {
75         
76         guard let tableView = notification.object as? NSTableView else { return }
77         
78         let controller = [
79             (shipsView, shipController),
80             (fleetMemberView, fleetMemberController)
81             ]
82             .lazy
83             .filter { $0.0 == tableView }
84             .flatMap { $0.1 }
85             .first
86         
87         guard let selectedObjects = controller?.selectedObjects as? [Ship] else { return }
88         
89         selectedShip = selectedObjects.first
90     }
91 }