import AppKit
|
|
import Quartz
|
|
|
|
/// Drives the native Quick Look panel for one URL at a time. Single-click a row
|
|
/// (or hit Space) to preview; the panel floats and closes itself like Finder.
|
|
final class QuickLook: NSObject, QLPreviewPanelDataSource, QLPreviewPanelDelegate {
|
|
static let shared = QuickLook()
|
|
private var url: URL?
|
|
|
|
func preview(_ url: URL) {
|
|
self.url = url
|
|
guard let panel = QLPreviewPanel.shared() else { return }
|
|
if panel.isVisible {
|
|
panel.reloadData()
|
|
} else {
|
|
panel.dataSource = self
|
|
panel.delegate = self
|
|
panel.makeKeyAndOrderFront(nil)
|
|
}
|
|
}
|
|
|
|
func numberOfPreviewItems(in panel: QLPreviewPanel) -> Int { url == nil ? 0 : 1 }
|
|
func previewPanel(_ panel: QLPreviewPanel, previewItemAt index: Int) -> QLPreviewItem {
|
|
(url as NSURL?) ?? NSURL()
|
|
}
|
|
}
|