KMWatermarkController.swift 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. //
  2. // KMWatermarkController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2024/11/1.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. @objc protocol KMWatermarkControllerDelegate: AnyObject {
  10. @objc optional func kmWatermarkControllerDidUpdateMode(_ view: KMWatermarkController)
  11. //水印数据发生变化时处理
  12. @objc optional func kmWatermarkControllerDidWatermarkUpdated(_ view: KMWatermarkController)
  13. }
  14. class KMWatermarkController: NSViewController {
  15. @IBOutlet var contendView: NSView!
  16. @IBOutlet var preInfoView: NSView!
  17. @IBOutlet var propertyInfoView: NSView!
  18. var documentPreview: KMEditDocumentController = KMEditDocumentController.init()
  19. var propertyController: KMNWatermarkPropertyController = KMNWatermarkPropertyController.init()
  20. var templatesController: KMNWatermarkTemplateController = KMNWatermarkTemplateController()
  21. var saveTemplateMessage: ComponentMessage = ComponentMessage()
  22. var pdfDocument: CPDFDocument?
  23. var currentWatermarkData: KMWatermarkModel? {
  24. get {
  25. if editSubType == .template {
  26. return templatesController.selectedWatermark
  27. } else if editSubType == .add ||
  28. editSubType == .edit {
  29. return propertyController.watermarkData
  30. }
  31. return nil
  32. }
  33. }
  34. var currentCPDFWatermark: CPDFWatermark?
  35. weak open var delegate: KMWatermarkControllerDelegate?
  36. var editSubType: KMPDFEditSubModeType = .none {
  37. didSet {
  38. resetUI()
  39. }
  40. }
  41. //MARK: - func
  42. override func viewDidLoad() {
  43. super.viewDidLoad()
  44. // Do view setup here.
  45. documentPreview.view.frame = preInfoView.bounds
  46. documentPreview.view.autoresizingMask = [.width, .height]
  47. preInfoView.addSubview(documentPreview.view)
  48. propertyController.view.frame = propertyInfoView.bounds
  49. propertyController.view.autoresizingMask = [.width, .height]
  50. propertyController.delegate = self
  51. propertyController.view.isHidden = true
  52. propertyInfoView.addSubview(propertyController.view)
  53. templatesController.view.frame = propertyInfoView.bounds
  54. templatesController.view.autoresizingMask = [.width, .height]
  55. templatesController.delegate = self
  56. templatesController.view.isHidden = true
  57. propertyInfoView.addSubview(templatesController.view)
  58. setupProperty()
  59. }
  60. func setupProperty() {
  61. saveTemplateMessage.properties = ComponentMessageProperty(messageType: .success, title: KMLocalizedString("Saved Template"))
  62. }
  63. func resetUI() {
  64. propertyController.view.isHidden = true
  65. templatesController.view.isHidden = true
  66. if editSubType == .template {
  67. templatesController.view.isHidden = false
  68. } else if editSubType == .add {
  69. propertyController.view.isHidden = false
  70. propertyController.editSubType = editSubType
  71. } else if editSubType == .edit {
  72. propertyController.view.isHidden = false
  73. propertyController.editSubType = editSubType
  74. }
  75. }
  76. func reloadData() {
  77. documentPreview.pdfDocument = self.pdfDocument
  78. documentPreview.reloadData()
  79. if editSubType == .template {
  80. templatesController.reloadData()
  81. } else if editSubType == .add {
  82. propertyController.editSubType = editSubType
  83. propertyController.watermarkData = KMWatermarkManager.defaultManager.defaultWatermarkData
  84. propertyController.reloadData()
  85. } else if editSubType == .edit {
  86. propertyController.editSubType = editSubType
  87. propertyController.reloadData()
  88. }
  89. }
  90. //先刷新子界面,再根据子界面的数据刷新PDFView
  91. func loadData() {
  92. self.clearData()
  93. if let value = currentWatermarkData, let pdfDocument = documentPreview.pdfDocument {
  94. currentCPDFWatermark = KMWatermarkModel.returnWaterMarkWith(value, pdfDocument)
  95. pdfDocument.addWatermark(currentCPDFWatermark)
  96. documentPreview.refreshUI()
  97. }
  98. }
  99. func clearData() {
  100. if let value = currentCPDFWatermark {
  101. let document = documentPreview.pdfDocument
  102. document?.removeWatermark(value)
  103. currentCPDFWatermark = nil
  104. }
  105. }
  106. }
  107. //MARK: - KMNWatermarkPropertyControllerDelegate
  108. extension KMWatermarkController: KMNWatermarkPropertyControllerDelegate {
  109. func watermarkPropertyControllerDidUpdate(_ controller: KMNWatermarkPropertyController) {
  110. self.loadData()
  111. delegate?.kmWatermarkControllerDidWatermarkUpdated?(self)
  112. }
  113. func watermarkPropertyControllerDidChangetoTemplate(_ controller: KMNWatermarkPropertyController) {
  114. editSubType = .template
  115. delegate?.kmWatermarkControllerDidUpdateMode?(self)
  116. loadData()
  117. delegate?.kmWatermarkControllerDidWatermarkUpdated?(self)
  118. documentPreview.layoutDocumentView()
  119. }
  120. func watermarkPropertyControllerSaveTemplateSuccess(_ controller: KMNWatermarkPropertyController, _ data: KMWatermarkModel) {
  121. saveTemplateMessage.frame = CGRectMake((CGRectGetWidth(self.view.frame) - saveTemplateMessage.properties.propertyInfo.viewWidth)/2,
  122. CGRectGetHeight(self.view.frame) - saveTemplateMessage.properties.propertyInfo.viewHeight - 8,
  123. saveTemplateMessage.properties.propertyInfo.viewWidth,
  124. saveTemplateMessage.properties.propertyInfo.viewHeight)
  125. saveTemplateMessage.reloadData()
  126. saveTemplateMessage.show(inView: self.view, autoHideSeconde: 2)
  127. editSubType = .template
  128. delegate?.kmWatermarkControllerDidUpdateMode?(self)
  129. templatesController.selectedWatermark = data
  130. templatesController.reloadData()
  131. loadData()
  132. }
  133. func watermarkPropertyControllerCancelTemplateEdit(_ controller: KMNWatermarkPropertyController) {
  134. editSubType = .template
  135. delegate?.kmWatermarkControllerDidUpdateMode?(self)
  136. templatesController.selectedWatermark = nil
  137. templatesController.reloadData()
  138. loadData()
  139. }
  140. }
  141. //MARK: - KMNWatermarkTemplateControllerDelegate
  142. extension KMWatermarkController: KMNWatermarkTemplateControllerDelegate {
  143. func templateControllerDidAddWatermarkData(_ controller: KMNWatermarkTemplateController) {
  144. editSubType = .add
  145. delegate?.kmWatermarkControllerDidUpdateMode?(self)
  146. propertyController.watermarkData = KMWatermarkManager.defaultManager.defaultWatermarkData
  147. propertyController.reloadData()
  148. loadData()
  149. delegate?.kmWatermarkControllerDidWatermarkUpdated?(self)
  150. }
  151. func templateControllerDidEditWatermarkData(_ controller: KMNWatermarkTemplateController, _ watermark: KMWatermarkModel) {
  152. editSubType = .edit
  153. delegate?.kmWatermarkControllerDidUpdateMode?(self)
  154. propertyController.watermarkData = watermark
  155. propertyController.originalDataDict = KMWatermarkManager.defaultManager.parseWaterMark(model: watermark)
  156. propertyController.reloadData()
  157. templatesController.selectedWatermark = nil
  158. loadData()
  159. delegate?.kmWatermarkControllerDidWatermarkUpdated?(self)
  160. }
  161. func templateControllerDidSelectedChanged(_ controller: KMNWatermarkTemplateController) {
  162. loadData()
  163. delegate?.kmWatermarkControllerDidWatermarkUpdated?(self)
  164. }
  165. }