//
import Cocoa
+import Doutaku
private protocol Markable {
// Subbclass MUST override these.
var predicateFormat: String { fatalError("Subbclass MUST implement.") }
- func objects(of predicate: NSPredicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
+ func objects(of predicate: Predicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
fatalError("Subbclass MUST implement.")
}
- @IBOutlet var controller: NSArrayController!
- @IBOutlet var tableView: NSTableView!
+ @IBOutlet private(set) var controller: NSArrayController!
+ @IBOutlet private(set) var tableView: NSTableView!
@IBAction func delete(_ sender: AnyObject?) {
let store = LocalDataStore.oneTimeEditor()
- guard let controller = controller else { return }
- guard let selection = controller.selectedObjects as? [NSManagedObject] else { return }
+ guard let controller = controller else {
+
+ return
+ }
+ guard let selection = controller.selectedObjects as? [NSManagedObject] else {
+
+ return
+ }
let selectedIndex = controller.selectionIndex
- selection
- .lazy
- .map { $0.objectID }
- .map(store.object(with:))
- .forEach(store.delete)
+ store.sync {
+
+ selection
+ .compactMap(store.exchange)
+ .forEach(store.delete)
+ }
if selectedIndex > 1 {
@IBAction func addMark(_ sender: AnyObject?) {
- guard let clickedRow = tableView?.clickedRow else { return }
- guard let items = controller?.arrangedObjects as? [HistoryObject] else { return }
- guard case 0..<items.count = clickedRow else { return }
+ guard let clickedRow = tableView?.clickedRow else {
+
+ return
+ }
+ guard let items = controller?.arrangedObjects as? [HistoryObject] else {
+
+ return
+ }
+ guard case 0..<items.count = clickedRow else {
+
+ return
+ }
let clickedObject = items[clickedRow]
- let predicate = NSPredicate(#keyPath(KenzoMark.date), equal: clickedObject.date)
+ let predicate = Predicate(\KenzoMark.date, equalTo: clickedObject.date)
let store = LocalDataStore.oneTimeEditor()
-
- if let items = try? objects(of: predicate, in: store),
- var history = items.first as? Markable {
+ store.sync {
+
+ if let items = try? self.objects(of: predicate, in: store),
+ var history = items.first as? Markable {
+
+ let currentMark = history.mark
+ history.mark = !currentMark
+ }
- history.mark = !history.mark
+ store.save()
}
-
- store.save(errorHandler: store.presentOnMainThread)
}
override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
- guard let itemTag = MenuItemTag(rawValue: menuItem.tag) else { return false }
+ guard let itemTag = MenuItemTag(rawValue: menuItem.tag) else {
+
+ return false
+ }
switch itemTag {
+
case .delete:
+
return controller.selectionIndex != -1
case .addMark:
+
menuItem.isEnabled = false
- guard let clickedRow = tableView?.clickedRow else { return false }
- guard let items = controller?.arrangedObjects as? [Markable] else { return false }
- guard case 0..<items.count = clickedRow else { return false }
+ guard let clickedRow = tableView?.clickedRow else {
+
+ return false
+ }
+ guard let items = controller?.arrangedObjects as? [Markable] else {
+
+ return false
+ }
+ guard case 0..<items.count = clickedRow else {
+
+ return false
+ }
- let clickedObject = items[clickedRow]
menuItem.isEnabled = true
- if clickedObject.mark {
+ if items[clickedRow].mark {
menuItem.title = LocalizedStrings.removeMark.string
final class KaihatsuHistoryTableViewController: HistoryTableViewController {
override var predicateFormat: String { return "name contains $value" }
- override func objects(of predicate: NSPredicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
+ override func objects(of predicate: Predicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
return try store.objects(of: KaihatuHistory.entity, predicate: predicate)
}
final class KenzoHistoryTableViewController: HistoryTableViewController {
override var predicateFormat: String { return "name contains $value" }
- override func objects(of predicate: NSPredicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
+ override func objects(of predicate: Predicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
return try store.objects(of: KenzoHistory.entity, predicate: predicate)
}
final class DropShipHistoryTableViewController: HistoryTableViewController {
override var predicateFormat: String { return "shipName contains $value" }
- override func objects(of predicate: NSPredicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
+ override func objects(of predicate: Predicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
return try store.objects(of: DropShipHistory.entity, predicate: predicate)
}