2 // BridgeViewController.swift
5 // Created by Hori,Masaki on 2016/12/30.
6 // Copyright © 2016年 Hori,Masaki. All rights reserved.
11 protocol ScreenshotSharingProvider {
13 var contentRect: NSRect { get }
16 class BridgeViewController: NSViewController {
18 @IBOutlet var arrayController: NSArrayController!
22 [.contentArray, .sortDescriptors, .selectionIndexes, .filterPredicate]
23 .forEach { arrayController.unbind($0) }
26 override var representedObject: Any? {
29 guard let representedObject = representedObject else { return }
32 (.contentArray, #keyPath(ScreenshotModel.screenshots)),
33 (.sortDescriptors, #keyPath(ScreenshotModel.sortDescriptors)),
34 (.selectionIndexes, #keyPath(ScreenshotModel.selectedIndexes)),
35 (.filterPredicate, #keyPath(ScreenshotModel.filterPredicate))
38 arrayController.bind($0.0, to: representedObject, withKeyPath: $0.1, options: nil)
43 override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
45 (sender as? NSControl)?.action = nil
46 (segue.destinationController as? NSViewController)?.representedObject = representedObject
50 extension BridgeViewController: NSSharingServicePickerDelegate, ScreenshotSharingProvider {
52 @objc var contentRect: NSRect {
54 fatalError("Must implemente")
57 private var appendKanColleTag: Bool {
59 return UserDefaults.standard[.appendKanColleTag]
62 private var tagString: String? {
64 let tag = NSLocalizedString("kancolle", comment: "kancolle twitter hash tag")
65 if tag == "" { return "" }
70 @IBAction func share(_ sender: AnyObject?) {
72 guard let view = sender as? NSView else { return }
74 let picker = NSSharingServicePicker(items: itemsForShareingServicePicker())
75 picker.delegate = self
76 picker.show(relativeTo: view.bounds, of: view, preferredEdge: .minX)
79 private func itemsForShareingServicePicker() -> [AnyObject] {
81 guard let informations = arrayController.selectedObjects as? [ScreenshotInformation] else { return [] }
83 let images: [NSImage] = informations.flatMap { NSImage(contentsOf: $0.url) }
84 if !appendKanColleTag { return images }
85 if let tag = tagString {
87 return ["\n\(tag)" as AnyObject] + images
94 extension BridgeViewController: NSSharingServiceDelegate {
96 func sharingServicePicker(_ sharingServicePicker: NSSharingServicePicker,
97 delegateFor sharingService: NSSharingService) -> NSSharingServiceDelegate? {
102 func sharingService(_ sharingService: NSSharingService, sourceFrameOnScreenForShareItem item: Any) -> NSRect {
104 return self.view.window?.convertToScreen(contentRect) ?? .zero
107 func sharingService(_ sharingService: NSSharingService,
108 transitionImageForShareItem item: Any,
109 contentRect: UnsafeMutablePointer<NSRect>) -> NSImage? {
111 return item as? NSImage
114 func sharingService(_ sharingService: NSSharingService,
115 sourceWindowForShareItems items: [Any],
116 sharingContentScope: UnsafeMutablePointer<NSSharingService.SharingContentScope>) -> NSWindow? {
122 @available(OSX 10.12.2, *)
123 extension BridgeViewController: NSSharingServicePickerTouchBarItemDelegate {
125 func items(for pickerTouchBarItem: NSSharingServicePickerTouchBarItem) -> [Any] {
127 return itemsForShareingServicePicker()