2 // BridgeViewController.swift
5 // Created by Hori,Masaki on 2016/12/30.
6 // Copyright © 2016年 Hori,Masaki. All rights reserved.
11 protocol ScreenshotSharingProvider {
12 var contentRect: NSRect { get }
15 class BridgeViewController: NSViewController {
16 @IBOutlet var arrayController: NSArrayController!
19 [NSContentArrayBinding, NSSortDescriptorsBinding,
20 NSSelectionIndexesBinding, NSFilterPredicateBinding]
21 .forEach { arrayController.unbind($0) }
24 override var representedObject: Any? {
26 guard let representedObject = representedObject else { return }
28 (NSContentArrayBinding, "screenshots"),
29 (NSSortDescriptorsBinding, "sortDescriptors"),
30 (NSSelectionIndexesBinding, "selectedIndexes"),
31 (NSFilterPredicateBinding, "filterPredicate")
34 arrayController.bind($0.0, to: representedObject, withKeyPath: $0.1, options: nil)
38 override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
39 (sender as? NSControl)?.action = nil
40 (segue.destinationController as? NSViewController)?.representedObject = representedObject
44 extension BridgeViewController: NSSharingServicePickerDelegate, ScreenshotSharingProvider {
45 var contentRect: NSRect {
46 fatalError("Must implemente")
48 private var appendKanColleTag: Bool {
49 return UserDefaults.standard.appendKanColleTag
51 private var tagString: String? {
52 let tag = NSLocalizedString("kancolle", comment: "kancolle twitter hash tag")
53 if tag == "" { return "" }
56 @IBAction func share(_ sender: AnyObject?) {
57 guard let view = sender as? NSView else { return }
58 let picker = NSSharingServicePicker(items: itemsForShareingServicePicker())
59 picker.delegate = self
60 picker.show(relativeTo: view.bounds, of: view, preferredEdge: .minX)
63 fileprivate func itemsForShareingServicePicker() -> [AnyObject] {
64 guard let informations = arrayController.selectedObjects as? [ScreenshotInformation]
66 let images: [NSImage] = informations.flatMap { NSImage(contentsOf: $0.url) }
67 if !appendKanColleTag { return images }
68 if let tag = tagString {
69 return ["\n\(tag)" as AnyObject] + images
74 extension BridgeViewController: NSSharingServiceDelegate {
75 func sharingServicePicker(_ sharingServicePicker: NSSharingServicePicker,
76 delegateFor sharingService: NSSharingService) -> NSSharingServiceDelegate? {
80 func sharingService(_ sharingService: NSSharingService, sourceFrameOnScreenForShareItem item: Any) -> NSRect {
81 return self.view.window?.convertToScreen(contentRect) ?? .zero
83 func sharingService(_ sharingService: NSSharingService,
84 transitionImageForShareItem item: Any,
85 contentRect: UnsafeMutablePointer<NSRect>) -> NSImage? {
86 return item as? NSImage
88 func sharingService(_ sharingService: NSSharingService,
89 sourceWindowForShareItems items: [Any],
90 sharingContentScope: UnsafeMutablePointer<NSSharingContentScope>) -> NSWindow? {
95 @available(OSX 10.12.2, *)
96 extension BridgeViewController: NSSharingServicePickerTouchBarItemDelegate {
97 func items(for pickerTouchBarItem: NSSharingServicePickerTouchBarItem) -> [Any] {
98 return itemsForShareingServicePicker()