KMWatermarkController.swift 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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. propertyController.scrollToTop()
  72. } else if editSubType == .edit {
  73. propertyController.view.isHidden = false
  74. propertyController.editSubType = editSubType
  75. propertyController.scrollToTop()
  76. }
  77. }
  78. func reloadData() {
  79. documentPreview.pdfDocument = self.pdfDocument
  80. documentPreview.reloadData()
  81. if editSubType == .template {
  82. templatesController.reloadData()
  83. } else if editSubType == .add {
  84. propertyController.editSubType = editSubType
  85. propertyController.watermarkData = KMWatermarkManager.defaultManager.defaultWatermarkData
  86. propertyController.reloadData()
  87. propertyController.beginEditing()
  88. } else if editSubType == .edit {
  89. propertyController.editSubType = editSubType
  90. propertyController.reloadData()
  91. propertyController.beginEditing()
  92. }
  93. }
  94. //先刷新子界面,再根据子界面的数据刷新PDFView
  95. func loadData() {
  96. self.clearData()
  97. if let value = currentWatermarkData, let pdfDocument = documentPreview.pdfDocument {
  98. currentCPDFWatermark = KMWatermarkModel.returnWaterMarkWith(value, pdfDocument)
  99. pdfDocument.addWatermark(currentCPDFWatermark)
  100. }
  101. documentPreview.refreshUI()
  102. }
  103. func clearData() {
  104. if let value = currentCPDFWatermark {
  105. let document = documentPreview.pdfDocument
  106. document?.removeWatermark(value)
  107. currentCPDFWatermark = nil
  108. }
  109. }
  110. }
  111. //MARK: - KMNWatermarkPropertyControllerDelegate
  112. extension KMWatermarkController: KMNWatermarkPropertyControllerDelegate {
  113. func watermarkPropertyControllerDidUpdate(_ controller: KMNWatermarkPropertyController) {
  114. self.loadData()
  115. delegate?.kmWatermarkControllerDidWatermarkUpdated?(self)
  116. }
  117. func watermarkPropertyControllerDidChangetoTemplate(_ controller: KMNWatermarkPropertyController) {
  118. editSubType = .template
  119. delegate?.kmWatermarkControllerDidUpdateMode?(self)
  120. loadData()
  121. delegate?.kmWatermarkControllerDidWatermarkUpdated?(self)
  122. documentPreview.layoutDocumentView()
  123. }
  124. func watermarkPropertyControllerSaveTemplateSuccess(_ controller: KMNWatermarkPropertyController, _ data: KMWatermarkModel) {
  125. saveTemplateMessage.frame = CGRectMake((CGRectGetWidth(self.view.frame) - saveTemplateMessage.properties.propertyInfo.viewWidth)/2,
  126. CGRectGetHeight(self.view.frame) - saveTemplateMessage.properties.propertyInfo.viewHeight - 8,
  127. saveTemplateMessage.properties.propertyInfo.viewWidth,
  128. saveTemplateMessage.properties.propertyInfo.viewHeight)
  129. saveTemplateMessage.reloadData()
  130. saveTemplateMessage.show(inView: self.view, autoHideSeconde: 2)
  131. editSubType = .template
  132. delegate?.kmWatermarkControllerDidUpdateMode?(self)
  133. templatesController.selectedWatermark = data
  134. reloadData()
  135. loadData()
  136. }
  137. func watermarkPropertyControllerCancelTemplateEdit(_ controller: KMNWatermarkPropertyController) {
  138. editSubType = .template
  139. delegate?.kmWatermarkControllerDidUpdateMode?(self)
  140. templatesController.selectedWatermark = nil
  141. reloadData()
  142. loadData()
  143. }
  144. }
  145. //MARK: - KMNWatermarkTemplateControllerDelegate
  146. extension KMWatermarkController: KMNWatermarkTemplateControllerDelegate {
  147. func templateControllerDidAddWatermarkData(_ controller: KMNWatermarkTemplateController) {
  148. editSubType = .add
  149. delegate?.kmWatermarkControllerDidUpdateMode?(self)
  150. propertyController.watermarkData = KMWatermarkManager.defaultManager.defaultWatermarkData
  151. reloadData()
  152. loadData()
  153. delegate?.kmWatermarkControllerDidWatermarkUpdated?(self)
  154. }
  155. func templateControllerDidEditWatermarkData(_ controller: KMNWatermarkTemplateController, _ watermark: KMWatermarkModel) {
  156. editSubType = .edit
  157. delegate?.kmWatermarkControllerDidUpdateMode?(self)
  158. propertyController.watermarkData = watermark
  159. propertyController.originalDataDict = KMWatermarkManager.defaultManager.parseWaterMark(model: watermark)
  160. reloadData()
  161. templatesController.selectedWatermark = nil
  162. loadData()
  163. delegate?.kmWatermarkControllerDidWatermarkUpdated?(self)
  164. }
  165. func templateControllerDidSelectedChanged(_ controller: KMNWatermarkTemplateController) {
  166. loadData()
  167. delegate?.kmWatermarkControllerDidWatermarkUpdated?(self)
  168. }
  169. }