KMCompareFilesView.swift 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //
  2. // KMCompareFilesView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lizhe on 2023/11/15.
  6. //
  7. import Cocoa
  8. typealias KMCompareFilesViewDragEnteredCallBack = (Bool) -> Void
  9. typealias KMCompareFilesViewDragSuccessCallBack = (String) -> Void
  10. typealias KMCompareFilesViewMouseUpCallBack = (KMCompareFilesView) -> Void
  11. class KMCompareFilesView: NSView {
  12. var dragEnteredBlock: KMCompareFilesViewDragEnteredCallBack?
  13. var dragSuccessBlock: KMCompareFilesViewDragSuccessCallBack?
  14. var mouseUpBack: KMCompareFilesViewMouseUpCallBack?
  15. override func awakeFromNib() {
  16. super.awakeFromNib()
  17. registerForDraggedTypes([NSPasteboard.PasteboardType.fileURL])
  18. }
  19. override func draggingExited(_ sender: NSDraggingInfo?) {
  20. if let block = dragEnteredBlock {
  21. block(false)
  22. }
  23. }
  24. override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {
  25. if let block = dragEnteredBlock {
  26. block(true)
  27. }
  28. guard let pboard = sender.draggingPasteboard.propertyList(forType: NSPasteboard.PasteboardType.fileURL) as? [String: Any],
  29. let fileNames = pboard[NSPasteboard.PasteboardType.fileURL.rawValue] as? [String],
  30. let path = fileNames.first, (path as NSString).pathExtension.lowercased() == "pdf" else {
  31. self.layer?.borderColor = NSColor.clear.cgColor
  32. return []
  33. }
  34. return NSDragOperation.copy
  35. }
  36. override func prepareForDragOperation(_ sender: NSDraggingInfo) -> Bool {
  37. guard let pboard = sender.draggingPasteboard.propertyList(forType: NSPasteboard.PasteboardType.fileURL) as? [String: Any],
  38. let fileNames = pboard[NSPasteboard.PasteboardType.fileURL.rawValue] as? [String],
  39. let path = fileNames.first, (path as NSString).pathExtension.lowercased() == "pdf" else {
  40. return false
  41. }
  42. if let block = dragSuccessBlock {
  43. block(path)
  44. }
  45. return true
  46. }
  47. override func mouseUp(with event: NSEvent) {
  48. super.mouseUp(with: event)
  49. if let block = mouseUpBack {
  50. block(self)
  51. }
  52. }
  53. }