OSDN Git Service

guard の書き方を統一した
[kcd/KCD.git] / KCD / StrengthenListItem.swift
1 //
2 //  StrengthenListItem.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/03/24.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 protocol StrengthenListItem {
12     
13     var type: EquipmentType { get }
14     var cellType: StrengthenListCellType.Type { get }
15 }
16
17 protocol StrengthenListCellType {
18     
19     static var cellIdentifier: NSUserInterfaceItemIdentifier { get }
20     static func estimateCellHeightForItem(item: StrengthenListItem, tableView: NSTableView) -> CGFloat
21     static func makeCellWithItem(item: StrengthenListItem, tableView: NSTableView, owner: AnyObject?) -> NSTableCellView
22 }
23
24 extension StrengthenListCellType {
25     
26     static func makeCellWithItem(item: StrengthenListItem, tableView: NSTableView, owner: AnyObject?) -> NSTableCellView {
27         
28         let v = tableView.makeView(withIdentifier: cellIdentifier, owner: nil)
29         
30         // swiftlint:disable:next force_cast
31         return v as! NSTableCellView
32     }
33 }
34
35 struct StrengthenListGroupCellType: StrengthenListCellType {
36     
37     static let cellIdentifier: NSUserInterfaceItemIdentifier = NSUserInterfaceItemIdentifier("GroupCell")
38     
39     static func estimateCellHeightForItem(item: StrengthenListItem, tableView: NSTableView) -> CGFloat {
40         
41         return 23.0
42     }
43 }
44
45 final class StrengthenListGroupItem: NSObject, StrengthenListItem {
46     
47     @objc let name: String
48     let type: EquipmentType
49     let cellType: StrengthenListCellType.Type = StrengthenListGroupCellType.self
50     
51     init(type: EquipmentType) {
52         
53         self.name = SlotItemEquipTypeTransformer().transformedValue(type.rawValue) as? String ?? "Unkown"
54         self.type = type
55         
56         super.init()
57     }
58 }
59
60 final class StrengthenListEnhancementItem: NSObject, StrengthenListItem {
61     
62     let item: EnhancementListItem
63     var type: EquipmentType { return item.equipmentType }
64     let cellType: StrengthenListCellType.Type = StrengthenListItemCellView.self
65     
66     init(item: EnhancementListItem) {
67         
68         self.item = item
69         
70         super.init()
71     }
72  }
73
74 extension StrengthenListEnhancementItem {
75     
76     var identifier: String { return item.identifier }
77     var weekday: Int { return item.weekday }
78     var equipmentType: EquipmentType { return item.equipmentType }
79     var targetEquipment: String { return item.targetEquipment }
80     var remodelEquipment: String? { return item.remodelEquipment }
81     var requiredEquipments: RequiredEquipmentSet { return item.requiredEquipments }
82     var secondsShipNames: [String] { return item.secondsShipNames }
83 }