KMEditDocumentController.swift 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. //
  2. // KMEditDocumentController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2024/11/1.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. @objc protocol KMEditDocumentControllerDelegate: AnyObject {
  10. @objc optional func editControllerDidApplyEnable(_ controller: KMEditDocumentController) -> Bool
  11. @objc optional func editControllerDidExitEnable(_ controller: KMEditDocumentController) -> Bool
  12. @objc optional func editControllerDidApplyClicked(_ controller: KMEditDocumentController)
  13. @objc optional func editControllerDidExitClicked(_ controller: KMEditDocumentController)
  14. }
  15. class KMEditDocumentController: NSViewController {
  16. var pdfDocument: CPDFDocument?
  17. var pdfView: CPDFListView = CPDFListView.init()
  18. let coverView = NSView(frame: CGRectMake(0, 0, 300, 300))
  19. private var groupListMenuGroup: ComponentGroup? = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
  20. weak open var delegate: KMEditDocumentControllerDelegate?
  21. override func viewDidLoad() {
  22. super.viewDidLoad()
  23. // Do view setup here.
  24. pdfView.frame = view.bounds
  25. pdfView.autoresizingMask = [.width, .height]
  26. pdfView.setDisplay(.singlePage)
  27. pdfView.toolMode = .CNoteToolMode
  28. pdfView.autoScales = true
  29. pdfView.pdfListViewDelegate = self
  30. view.addSubview(pdfView)
  31. }
  32. func reloadData() {
  33. guard let pdfDocument = self.pdfDocument else { return }
  34. DispatchQueue.main.async {
  35. self.pdfView.document = pdfDocument
  36. self.pdfView.layoutDocumentView()
  37. }
  38. }
  39. func refreshUI() {
  40. pdfView.updateRender(true)
  41. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.15) {[weak self] in
  42. self?.pdfView.updateRender(true)
  43. }
  44. }
  45. func layoutDocumentView() {
  46. pdfView.document?.refreshPageData()
  47. pdfView.layoutDocumentView()
  48. }
  49. }
  50. extension KMEditDocumentController: CPDFListViewDelegate {
  51. func pdfListViewMenu(forEvent pdfListView: CPDFListView!, for theEvent: NSEvent!, click menu: AutoreleasingUnsafeMutablePointer<NSMenu?>!, isMoveSelectAnno: Bool) {
  52. var pagePoint = CGPoint.zero
  53. let point = self.view.convert(theEvent.locationInWindow, from: nil)
  54. var items: [(String, String)] = []
  55. items.append(("Apply", PDFViewMenuIdentifier_Edit_Apply))
  56. items.append(("Exit", PDFViewMenuIdentifier_Edit_Exit))
  57. var viewHeight: CGFloat = 8
  58. var menuItemArr: [ComponentMenuitemProperty] = []
  59. for (i, value) in items {
  60. if value.count == 0 {
  61. let property: ComponentMenuitemProperty = ComponentMenuitemProperty.divider()
  62. menuItemArr.append(property)
  63. viewHeight += 8
  64. } else {
  65. let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  66. itemSelected: false,
  67. keyEquivalent: nil,
  68. text: KMLocalizedString(i),
  69. identifier: value,representedObject: point)
  70. properties_Menuitem.isDisabled = true
  71. if properties_Menuitem.identifier == PDFViewMenuIdentifier_Edit_Apply {
  72. if delegate?.editControllerDidApplyEnable?(self) == true {
  73. properties_Menuitem.isDisabled = false
  74. }
  75. } else if (properties_Menuitem.identifier == PDFViewMenuIdentifier_Edit_Exit) {
  76. if delegate?.editControllerDidExitEnable?(self) == true {
  77. properties_Menuitem.isDisabled = false
  78. }
  79. }
  80. menuItemArr.append(properties_Menuitem)
  81. viewHeight += 36
  82. }
  83. }
  84. groupListMenuGroup?.pagePoint = pagePoint
  85. groupListMenuGroup?.groupDelegate = self
  86. groupListMenuGroup?.frame = CGRectMake(0, 0, 180, viewHeight)
  87. groupListMenuGroup?.updateGroupInfo(menuItemArr)
  88. groupListMenuGroup?.showWithPoint(CGPoint(x: point.x, y: point.y - viewHeight), relativeTo: nil, withWindow: self.view.window)
  89. }
  90. func pdfListViewIsSupportSelecton(_ theEvent: NSEvent!, mouseType: KMPDFViewMouseType) -> Bool {
  91. if(mouseType == .menuForEvent) {
  92. return true
  93. }
  94. return false
  95. }
  96. }
  97. //MARK: - ComponentGroupDelegate
  98. extension KMEditDocumentController: ComponentGroupDelegate {
  99. func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
  100. if menuItemProperty?.identifier == PDFViewMenuIdentifier_Edit_Apply {
  101. delegate?.editControllerDidApplyClicked?(self)
  102. } else if (menuItemProperty?.identifier == PDFViewMenuIdentifier_Edit_Exit) {
  103. delegate?.editControllerDidExitClicked?(self)
  104. }
  105. }
  106. }