OSDN Git Service

dc4c9ceffbe39d7f56431f1c8977760454d24729
[kcd/KCD.git] / KCD / HMShipMasterDetailWindowController.swift
1 //
2 //  HMShipMasterDetailWindowController.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 class HMShipMasterDetailWindowController: NSWindowController {
12     override var windowNibName: String! {
13         return "HMShipMasterDetailWindowController"
14     }
15     override func windowDidLoad() {
16         super.windowDidLoad()
17     
18         // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
19     }
20     
21     let managedObjectContext = HMServerDataStore.default().managedObjectContext
22     let fleetManager: HMFleetManager = {
23         let appDelegate = NSApplication.shared().delegate as! HMAppDelegate
24         return appDelegate.fleetManager
25     }()
26     let specNames: [String] = {
27         return [
28             "name", "shortTypeName",
29             "slot_0", "slot_1", "slot_2", "slot_3", "slot_4",
30             "onslot_0", "onslot_1", "onslot_2", "onslot_3", "onslot_4",
31             "leng", "slot_ex", "id"
32             ]
33     }()
34     
35     @IBOutlet var shipController: NSArrayController!
36     @IBOutlet var fleetMemberController: NSArrayController!
37     @IBOutlet weak var shipsView: NSTableView!
38     @IBOutlet weak var fleetMemberView: NSTableView!
39     @IBOutlet weak var sally: NSTextField!
40     
41     dynamic var selectedShip: HMKCShipObject? {
42         didSet { buildSpec() }
43     }
44     dynamic var spec: [[String: AnyObject]] = []
45     var equipments: NSArray?
46     
47     
48     private func buildSpec() {
49         guard let selectedShip = selectedShip else { return }
50         spec = specNames.flatMap { (s:String) -> [String: AnyObject]? in
51             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?
55             return d
56         }
57         equipments = selectedShip.equippedItem.array as NSArray?
58     }
59     
60     @IBAction func applySally(_ sender: AnyObject?) {
61         guard let i = selectedShip?.objectID else { return }
62         guard let store = HMServerDataStore.oneTimeEditor(),
63             let ship = store.object(with: i) as? HMKCShipObject
64             else { return }
65         ship.sally_area = sally.integerValue as NSNumber
66     }
67 }
68
69 extension HMShipMasterDetailWindowController: NSTableViewDelegate {
70     func tableViewSelectionDidChange(_ notification: Notification) {
71         guard let tableView = notification.object as? NSTableView else { return }
72         let controller =
73             [(shipsView, shipController), (fleetMemberView, fleetMemberController)]
74                 .filter { $0.0 == tableView }
75                 .first
76         guard let selectedObjects = controller?.1.selectedObjects as? [HMKCShipObject],
77             selectedObjects.count != 0 else { return }
78         selectedShip = selectedObjects[0]
79     }
80 }
81