You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

26 lines
885 B

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()
}
}