OSDN Git Service

staticプロパティをインスタンスプロパティに変更
[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         return v as! NSTableCellView    // swiftlint:disable:this force_cast
31     }
32 }
33
34 struct StrengthenListGroupCellType: StrengthenListCellType {
35     
36     static let cellIdentifier: NSUserInterfaceItemIdentifier = NSUserInterfaceItemIdentifier("GroupCell")
37     
38     static func estimateCellHeightForItem(item: StrengthenListItem, tableView: NSTableView) -> CGFloat {
39         
40         return 23.0
41     }
42 }
43
44 final class StrengthenListGroupItem: NSObject, StrengthenListItem {
45     
46     @objc let name: String
47     let type: EquipmentType
48     let cellType: StrengthenListCellType.Type = StrengthenListGroupCellType.self
49     
50     init(type: EquipmentType) {
51         
52         self.name = SlotItemEquipTypeTransformer().transformedValue(type.rawValue) as? String ?? "Unkown"
53         self.type = type
54         
55         super.init()
56     }
57 }
58
59 final class StrengthenListEnhancementItem: NSObject, StrengthenListItem {
60     
61     let item: EnhancementListItem
62     var type: EquipmentType { return item.equipmentType }
63     let cellType: StrengthenListCellType.Type = StrengthenListItemCellView.self
64     
65     init(item: EnhancementListItem) {
66         
67         self.item = item
68         
69         super.init()
70     }
71  }
72
73 extension StrengthenListEnhancementItem {
74     
75     var identifier: String { return item.identifier }
76     var weekday: Int { return item.weekday }
77     var equipmentType: EquipmentType { return item.equipmentType }
78     var targetEquipment: String { return item.targetEquipment }
79     var remodelEquipment: String? { return item.remodelEquipment }
80     var requiredEquipments: RequiredEquipmentSet { return item.requiredEquipments }
81     var secondsShipNames: [String] { return item.secondsShipNames }
82 }