2 // HistoryTableViewController.swift
5 // Created by Hori,Masaki on 2017/03/10.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 fileprivate protocol Markable {
12 var marked: Bool { get set }
14 fileprivate protocol HistoryObject {
15 var date: Date { get }
18 extension DropShipHistory: Markable, HistoryObject {
21 set { mark = newValue }
24 extension KenzoHistory: Markable, HistoryObject {
27 set { mark = newValue }
30 extension KaihatuHistory: Markable, HistoryObject {
33 set { mark = newValue }
37 enum MenuItemTag: Int {
43 class HistoryTableViewController: NSViewController {
44 var pickUpPredicateFormat: String { return "date = %@" }
45 var predicateFormat: String { return "" }
46 var entityType: NSManagedObject.Type? { return nil }
48 @IBOutlet var controller: NSArrayController!
49 @IBOutlet var tableView: NSTableView!
51 @IBAction func delete(_ sender: AnyObject?) {
52 let store = LocalDataStore.oneTimeEditor()
53 guard let controller = controller,
54 let selection = controller.selectedObjects as? [NSManagedObject]
56 let selectedIndex = controller.selectionIndex
58 .forEach { store.delete(store.object(with: $0.objectID)) }
59 if selectedIndex > 1 {
60 controller.setSelectionIndex(selectedIndex - 1)
63 @IBAction func addMark(_ sender: AnyObject?) {
64 guard let entityType = entityType,
65 let clickedRow = tableView?.clickedRow,
66 let items = controller?.arrangedObjects as? [HistoryObject],
67 0..<items.count ~= clickedRow
69 let clickedObject = items[clickedRow]
70 let predicate = NSPredicate(format: pickUpPredicateFormat,
71 argumentArray: [clickedObject.date])
72 let store = LocalDataStore.oneTimeEditor()
73 if let a = try? store.objects(with: Entity(name: entityType.entityName, type: entityType),
74 predicate: predicate),
76 var history = item as? Markable {
77 history.marked = !history.marked
82 override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
83 guard let itemTag = MenuItemTag(rawValue: menuItem.tag)
87 return controller.selectionIndex != -1
89 menuItem.isEnabled = false
90 guard let clickedRow = tableView?.clickedRow,
91 let items = controller?.arrangedObjects as? [Markable],
92 0..<items.count ~= clickedRow
94 let clickedObject = items[clickedRow]
95 menuItem.isEnabled = true
96 if clickedObject.marked {
97 menuItem.title = NSLocalizedString("Remove mark", comment: "Remove history mark.")
99 menuItem.title = NSLocalizedString("Add mark", comment: "Add history mark.")
106 extension HistoryTableViewController: NSTableViewDelegate {
107 func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
109 .flatMap { $0.identifier }
110 .flatMap { tableView.make(withIdentifier: $0, owner: nil) }
114 class KaihatsuHistoryTableViewController: HistoryTableViewController {
115 override var predicateFormat: String { return "name contains $value" }
116 override var entityType: NSManagedObject.Type? { return KaihatuHistory.self }
118 class KenzoHistoryTableViewController: HistoryTableViewController {
119 override var predicateFormat: String { return "name contains $value" }
120 override var entityType: NSManagedObject.Type? { return KenzoHistory.self }
122 class DropShipHistoryTableViewController: HistoryTableViewController {
123 override var predicateFormat: String { return "shipName contains $value" }
124 override var entityType: NSManagedObject.Type? { return DropShipHistory.self }