KMSplitPDFViewController.swift 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. //
  2. // KMSplitPDFViewController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2024/10/29.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. @objc protocol KMSplitPDFViewControllerDelegate: AnyObject {
  10. @objc optional func splitPDFViewControllerDidUpdateFilePath(_ controller: KMSplitPDFViewController)
  11. }
  12. class KMSplitPDFViewController: NSViewController {
  13. @IBOutlet var contendView: NSView!
  14. @IBOutlet var emptyView: ComponentEmpty!
  15. var pdfView: KMSecondaryPDFView?
  16. var viewManager: KMPDFViewManager?
  17. weak open var delegate: KMSplitPDFViewControllerDelegate?
  18. deinit {
  19. pdfView?.removeFromSuperview()
  20. KMPrint(self.className + " deinit.")
  21. }
  22. override func viewDidLoad() {
  23. super.viewDidLoad()
  24. // Do view setup here.
  25. view.wantsLayer = true
  26. view.layer?.backgroundColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-low").cgColor
  27. setupProperty()
  28. reloadData()
  29. }
  30. func setupProperty() {
  31. emptyView.properties = ComponentEmptyProperty(emptyType: .add_File,
  32. text: KMLocalizedString("No recently opened file"),
  33. subText: KMLocalizedString("Click Open File or drag-and-drop file here to open them."))
  34. emptyView.setTarget(self, action: #selector(emptyViewAddFileClicked(_:)))
  35. if pdfView == nil {
  36. pdfView = KMSecondaryPDFView.init()
  37. }
  38. pdfView?.frame = contendView.bounds
  39. pdfView?.autoresizingMask = [.width, .height]
  40. contendView.addSubview(pdfView!)
  41. }
  42. func reloadData() {
  43. if let fileURL = viewManager?.splitPDFFileURL {
  44. emptyView.isHidden = true
  45. pdfView?.isHidden = false
  46. let document = CPDFDocument(url: fileURL)
  47. let isLocked = document?.isLocked ?? false
  48. if isLocked {
  49. if let pw = viewManager?.splitPDFFilePassword {
  50. document?.unlock(withPassword: pw)
  51. }
  52. }
  53. pdfView?.document = document
  54. } else {
  55. emptyView.isHidden = false
  56. pdfView?.isHidden = true
  57. }
  58. }
  59. @objc func emptyViewAddFileClicked(_ sender: NSView) {
  60. let openPanel = NSOpenPanel()
  61. openPanel.allowedFileTypes = ["pdf", "PDF"]
  62. openPanel.allowsMultipleSelection = false
  63. openPanel.beginSheetModal(for: self.view.window!) { [weak self] result in
  64. if result == NSApplication.ModalResponse.OK {
  65. if let url = openPanel.url {
  66. guard let weakSelf = self else { return }
  67. weakSelf.viewManager?.splitPDFFileURL = url
  68. let document = CPDFDocument(url: url)
  69. let isLocked = document?.isLocked ?? false
  70. if isLocked {
  71. }
  72. weakSelf.reloadData()
  73. weakSelf.delegate?.splitPDFViewControllerDidUpdateFilePath?(weakSelf)
  74. }
  75. }
  76. }
  77. }
  78. }