OSDN Git Service

Doutaku を 1.0 にアップデート
[kcd/KCD.git] / KCD / StrengthenListItemCellView.swift
1 //
2 //  StrengthenListItemCellView.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/02.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class StrengthenListItemCellView: NSTableCellView {
12     
13     @objc override class func keyPathsForValuesAffectingValue(forKey key: String) -> Set<String> {
14         
15         switch key {
16             
17         case #keyPath(secondsShipList),
18              #keyPath(requiredEquipment01), #keyPath(requiredEquipment02), #keyPath(requiredEquipment03),
19              #keyPath(targetEquipment), #keyPath(remodelEquipment),
20              #keyPath(needsScrewString01), #keyPath(needsScrewString02), #keyPath(needsScrewString03):
21             
22             return [#keyPath(objectValue)]
23             
24         default: return []
25             
26         }
27     }
28     
29     private var item: StrengthenListEnhancementItem? {
30         
31         return objectValue as? StrengthenListEnhancementItem
32     }
33     
34     @objc var secondsShipList: String? {
35         
36         return item?.secondsShipNames.joined(separator: ", ")
37     }
38     
39     @objc var requiredEquipment01: RequiredEquipment? {
40         
41         return item?.requiredEquipments.requiredEquipments.first
42     }
43     
44     @objc var requiredEquipment02: RequiredEquipment? {
45         
46         guard let req = item?.requiredEquipments.requiredEquipments, req.count > 1 else {
47             
48             return nil
49         }
50         
51         return req[1]
52     }
53     
54     @objc var requiredEquipment03: RequiredEquipment? {
55         
56         guard let req = item?.requiredEquipments.requiredEquipments, req.count > 2 else {
57             
58             return nil
59         }
60         
61         return req[2]
62     }
63     
64     @objc var targetEquipment: String? {
65         
66         return item?.targetEquipment
67     }
68     
69     @objc var remodelEquipment: String? {
70         
71         return item?.remodelEquipment
72     }
73     
74     @objc var needsScrewString01: String? {
75         
76         return needsScrewString(screw: requiredEquipment01?.screw, ensureScrew: requiredEquipment01?.ensureScrew)
77     }
78     
79     @objc var needsScrewString02: String? {
80         
81         return needsScrewString(screw: requiredEquipment02?.screw, ensureScrew: requiredEquipment02?.ensureScrew)
82     }
83     
84     @objc var needsScrewString03: String? {
85         
86         return needsScrewString(screw: requiredEquipment03?.screw, ensureScrew: requiredEquipment03?.ensureScrew)
87     }
88     
89     private func needsScrewString(screw: Int?, ensureScrew: Int?) -> String? {
90         
91         guard let screw = screw else {
92             
93             return nil
94         }
95         guard let ensureScrew = ensureScrew else {
96             
97             return nil
98         }
99         guard ensureScrew != 0 else {
100             
101             return nil
102         }
103         
104         let screwString = (screw == -1) ? "-" : "\(screw)"
105         let ensureScrewString = (ensureScrew == -1) ? "-" : "\(ensureScrew)"
106         
107         return "\(screwString)/\(ensureScrewString)"
108     }
109 }
110
111 extension StrengthenListItemCellView: StrengthenListCellType {
112     
113     static var cellIdentifier: NSUserInterfaceItemIdentifier {
114         
115         return NSUserInterfaceItemIdentifier("ItemCell")
116     }
117     
118     static func estimateCellHeightForItem(item: StrengthenListItem, tableView: NSTableView) -> CGFloat {
119         
120         return 103.0
121     }
122 }