2 // AirBaseWindowController.swift
5 // Created by Hori,Masaki on 2016/12/22.
6 // Copyright © 2016年 Hori,Masaki. All rights reserved.
11 class AirBaseWindowController: NSWindowController {
12 let managedObjectContext = ServerDataStore.default.managedObjectContext
14 @IBOutlet var areaMatrix: NSMatrix!
15 @IBOutlet var squadronTab: NSSegmentedControl!
16 @IBOutlet var planesTable: NSTableView!
17 @IBOutlet var airBaseController: NSArrayController!
19 override var windowNibName: String! {
20 return "AirBaseWindowController"
23 dynamic var areaId: Int = 0 {
29 dynamic var rId: Int = 0 {
36 override func windowDidLoad() {
41 airBaseController.addObserver(self, forKeyPath: "content", context: nil)
47 override func observeValue(forKeyPath keyPath: String?,
49 change: [NSKeyValueChangeKey: Any]?,
50 context: UnsafeMutableRawPointer?) {
51 guard keyPath == "content" else {
52 super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
60 private func updateAreaRadio() {
61 guard let content = airBaseController.content as? [AirBase]
64 .flatMap { $0.area_id }
68 let cellCount = areaMatrix.numberOfRows * areaMatrix.numberOfColumns
69 if areas.count != cellCount {
70 let diff = areas.count - areaMatrix.numberOfColumns
71 while areas.count != areaMatrix.numberOfColumns {
73 areaMatrix.removeColumn(0)
75 areaMatrix.addColumn()
80 if areaMatrix.numberOfColumns == 0 {
81 areaMatrix.addColumn()
82 let areaCell = areaMatrix.cell(atRow: 0, column: 0)
84 areaCell?.tag = -10_000
86 areaMatrix.isEnabled = false
88 areaMatrix.isEnabled = true
91 let t = AreaNameTransformer()
92 areas.enumerated().forEach {
93 let areaCell = areaMatrix.cell(atRow: 0, column: $0.offset)
94 areaCell?.title = t.transformedValue($0.element) as? String ?? String($0.element)
95 areaCell?.tag = $0.element
98 areaId = areas.first ?? 0
101 private func updatePlaneSegment() {
102 guard let content = airBaseController.content as? NSArray else { return }
103 let area = NSCountedSet()
105 if let i = ($0 as? AirBase)?.area_id {
109 let count = area.count(for: areaId)
110 [0, 1, 2].forEach { squadronTab.setEnabled($0 < count, forSegment: $0) }
113 private func updatePredicate() {
114 airBaseController.filterPredicate = NSPredicate(format: "area_id = %ld AND rid = %ld", areaId, rId)
115 airBaseController.setSelectionIndex(0)
116 planesTable.deselectAll(nil)
120 extension AirBaseWindowController: NSTableViewDelegate {
121 func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
122 return tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: nil)
125 func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool {