2 // ShipMasterDetailWindowController.swift
5 // Created by Hori,Masaki on 2017/01/05.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 final class ShipMasterDetailWindowController: NSWindowController {
13 @objc let managedObjectContext = ServerDataStore.default.context
14 @objc let fleetManager: FleetManager = {
16 return AppDelegate.shared.fleetManager
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"
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!
31 override var windowNibName: NSNib.Name {
33 return .nibName(instanceOf: self)
36 @objc dynamic var selectedShip: Ship? {
38 didSet { buildSpec() }
40 @objc dynamic var spec: [[String: AnyObject]] = []
42 @objc var equipments: NSArray?
44 private func buildSpec() {
46 guard let selectedShip = selectedShip else { return }
48 spec = specNames.flatMap { (s: String) -> [String: AnyObject]? in
50 guard let v = selectedShip.value(forKeyPath: s) else { return nil }
52 var d = [String: AnyObject]()
53 d["name"] = s as AnyObject?
54 d["value"] = v as AnyObject?
58 equipments = selectedShip.equippedItem.array as NSArray?
61 @IBAction func applySally(_ sender: AnyObject?) {
63 let store = ServerDataStore.oneTimeEditor()
65 guard let i = selectedShip?.objectID else { return }
66 guard let ship = store.object(of: Ship.entity, with: i) else { return }
68 ship.sally_area = sally.integerValue as NSNumber
72 extension ShipMasterDetailWindowController: NSTableViewDelegate {
74 func tableViewSelectionDidChange(_ notification: Notification) {
76 guard let tableView = notification.object as? NSTableView else { return }
79 (shipsView, shipController),
80 (fleetMemberView, fleetMemberController)
83 .filter { $0.0 == tableView }
87 guard let selectedObjects = controller?.selectedObjects as? [Ship] else { return }
89 selectedShip = selectedObjects.first