OSDN Git Service

swiftlint 'line_length'の警告を修正
[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 class ShipMasterDetailWindowController: NSWindowController {
12     let managedObjectContext = ServerDataStore.default.managedObjectContext
13     let fleetManager: FleetManager = {
14         return AppDelegate.shared.fleetManager
15     }()
16     let specNames = [
17         "name", "shortTypeName",
18         "slot_0", "slot_1", "slot_2", "slot_3", "slot_4",
19         "onslot_0", "onslot_1", "onslot_2", "onslot_3", "onslot_4",
20         "leng", "slot_ex", "id"
21     ]
22     
23     @IBOutlet var shipController: NSArrayController!
24     @IBOutlet var fleetMemberController: NSArrayController!
25     @IBOutlet weak var shipsView: NSTableView!
26     @IBOutlet weak var fleetMemberView: NSTableView!
27     @IBOutlet weak var sally: NSTextField!
28     
29     override var windowNibName: String! {
30         return "ShipMasterDetailWindowController"
31     }
32     
33     dynamic var selectedShip: Ship? {
34         didSet { buildSpec() }
35     }
36     dynamic var spec: [[String: AnyObject]] = []
37     
38     var equipments: NSArray?
39     
40     private func buildSpec() {
41         guard let selectedShip = selectedShip else { return }
42         spec = specNames.flatMap { (s: String) -> [String: AnyObject]? in
43             guard let v = selectedShip.value(forKeyPath: s) else { return nil }
44             var d = [String: AnyObject]()
45             d["name"] = s as AnyObject?
46             d["value"] = v as AnyObject?
47             return d
48         }
49         equipments = selectedShip.equippedItem.array as NSArray?
50     }
51     
52     @IBAction func applySally(_ sender: AnyObject?) {
53         let store = ServerDataStore.oneTimeEditor()
54         guard let i = selectedShip?.objectID,
55             let ship = store.object(with: i) as? Ship
56             else { return }
57         ship.sally_area = sally.integerValue as NSNumber
58     }
59 }
60
61 extension ShipMasterDetailWindowController: NSTableViewDelegate {
62     func tableViewSelectionDidChange(_ notification: Notification) {
63         guard let tableView = notification.object as? NSTableView else { return }
64         let controller = [
65             (shipsView, shipController),
66             (fleetMemberView, fleetMemberController)
67             ]
68             .filter { $0.0 == tableView }
69             .first
70         guard let selectedObjects = controller?.1.selectedObjects as? [Ship],
71             selectedObjects.count != 0 else { return }
72         selectedShip = selectedObjects[0]
73     }
74 }