KMBatchWatermarkView.swift 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. //
  2. // KMBatchWatermarkView.swift
  3. // PDF Master
  4. //
  5. // Created by lizhe on 2023/1/16.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. class KMBatchWatermarkView: KMBatchSettingItemView {
  10. @IBOutlet weak var waterContentView: NSView!
  11. @IBOutlet var saveTemplateButton: ComponentButton!
  12. @IBOutlet var applyButton: ComponentButton!
  13. @IBOutlet var applyBtnLeftConst: NSLayoutConstraint!
  14. var propertyController: KMNWatermarkPropertyController = KMNWatermarkPropertyController.init()
  15. var templatesController: KMNWatermarkTemplateController = KMNWatermarkTemplateController()
  16. var saveTemplateMessage: ComponentMessage = ComponentMessage()
  17. var pdfDocument: CPDFDocument?
  18. var currentWatermarkData: KMPDFWatermarkData?
  19. weak open var delegate: KMWatermarkControllerDelegate?
  20. var editSubType: KMPDFEditSubModeType = .none {
  21. didSet {
  22. resetUI()
  23. }
  24. }
  25. override func setup() {
  26. super.setup()
  27. propertyController.view.frame = waterContentView.bounds
  28. propertyController.view.autoresizingMask = [.width, .height]
  29. propertyController.delegate = self
  30. propertyController.view.isHidden = true
  31. propertyController.isInBatchMode = true
  32. waterContentView.addSubview(propertyController.view)
  33. templatesController.view.frame = waterContentView.bounds
  34. templatesController.view.autoresizingMask = [.width, .height]
  35. templatesController.delegate = self
  36. templatesController.view.isHidden = true
  37. waterContentView.addSubview(templatesController.view)
  38. setupProperty()
  39. reloadInfoView()
  40. }
  41. override func reloadData() {
  42. super.reloadData()
  43. var applyEnable = true
  44. if let model = self.currentWatermarkData {
  45. if model.watermarkType == .text {
  46. if model.text == nil || model.text?.count == 0 {
  47. applyEnable = false
  48. }
  49. } else if model.watermarkType == .image {
  50. if model.imagePath == nil {
  51. applyEnable = false
  52. }
  53. }
  54. } else {
  55. applyEnable = false
  56. }
  57. saveTemplateButton.properties.isDisabled = !applyEnable
  58. saveTemplateButton.reloadData()
  59. if self.filesData.count == 0 {
  60. applyEnable = false
  61. }
  62. applyButton.properties.isDisabled = !applyEnable
  63. applyButton.reloadData()
  64. }
  65. func reloadInfoView() {
  66. if editSubType == .template {
  67. templatesController.reloadData()
  68. } else if editSubType == .add {
  69. propertyController.editSubType = editSubType
  70. propertyController.watermarkData = KMWatermarkManager.defaultManager.defaultWatermarkData
  71. propertyController.watermarkData.cPDFWatermark = CPDFWatermark(document: pdfDocument, type: .text)
  72. propertyController.reloadData()
  73. currentWatermarkData = propertyController.watermarkData
  74. } else if editSubType == .edit {
  75. propertyController.editSubType = editSubType
  76. propertyController.reloadData()
  77. }
  78. }
  79. func setupProperty() {
  80. saveTemplateMessage.properties = ComponentMessageProperty(messageType: .success, title: KMLocalizedString("Saved Template"))
  81. saveTemplateButton.properties = ComponentButtonProperty(type: .default_tertiary,
  82. size: .m,
  83. state: .normal,
  84. onlyIcon: true,
  85. icon: NSImage(named: "icon_wm_template_save"),
  86. keepPressState: false)
  87. saveTemplateButton.setTarget(self, action: #selector(saveTemplateButtonAction(_:)))
  88. saveTemplateButton.reloadData()
  89. applyButton.properties = ComponentButtonProperty(type: .primary,
  90. size: .m,
  91. state: .normal,
  92. buttonText: KMLocalizedString("Apply"),
  93. keepPressState: false)
  94. applyButton.setTarget(self, action: #selector(applyButtonAction(_:)))
  95. applyButton.reloadData()
  96. }
  97. func resetUI() {
  98. propertyController.view.isHidden = true
  99. templatesController.view.isHidden = true
  100. if editSubType == .template {
  101. templatesController.view.isHidden = false
  102. applyBtnLeftConst.constant = 16
  103. saveTemplateButton.isHidden = true
  104. } else if editSubType == .add {
  105. propertyController.view.isHidden = false
  106. propertyController.editSubType = editSubType
  107. applyBtnLeftConst.constant = 68
  108. saveTemplateButton.isHidden = false
  109. } else if editSubType == .edit {
  110. propertyController.view.isHidden = false
  111. propertyController.editSubType = editSubType
  112. applyBtnLeftConst.constant = 68
  113. saveTemplateButton.isHidden = false
  114. }
  115. }
  116. //MARK: - Action
  117. @objc func saveTemplateButtonAction(_ sender: NSButton) {
  118. }
  119. @objc func applyButtonAction(_ sender: NSButton) {
  120. }
  121. }
  122. //MARK: - KMNWatermarkPropertyControllerDelegate
  123. extension KMBatchWatermarkView: KMNWatermarkPropertyControllerDelegate {
  124. func watermarkPropertyControllerDidRemoveWatermark(_ controller: KMNWatermarkPropertyController, _ type: CPDFWatermarkType) {
  125. if type == .text {
  126. controller.watermarkData.cPDFWatermark = nil
  127. controller.watermarkData.cPDFWatermark = CPDFWatermark(document: pdfDocument, type: .text)
  128. } else if type == .image {
  129. controller.watermarkData.cPDFWatermark = nil
  130. controller.watermarkData.cPDFWatermark = CPDFWatermark(document: pdfDocument, type: .image)
  131. }
  132. }
  133. func watermarkPropertyControllerDidUpdate(_ controller: KMNWatermarkPropertyController) {
  134. currentWatermarkData = controller.watermarkData
  135. reloadData()
  136. }
  137. func watermarkPropertyControllerDidChangetoTemplate(_ controller: KMNWatermarkPropertyController) {
  138. editSubType = .template
  139. currentWatermarkData = nil
  140. }
  141. func watermarkPropertyControllerSaveTemplateSuccess(_ controller: KMNWatermarkPropertyController, _ data: KMPDFWatermarkData) {
  142. saveTemplateMessage.frame = CGRectMake((CGRectGetWidth(self.frame) - saveTemplateMessage.properties.propertyInfo.viewWidth)/2,
  143. CGRectGetHeight(self.frame) - saveTemplateMessage.properties.propertyInfo.viewHeight - 8,
  144. saveTemplateMessage.properties.propertyInfo.viewWidth,
  145. saveTemplateMessage.properties.propertyInfo.viewHeight)
  146. saveTemplateMessage.reloadData()
  147. saveTemplateMessage.show(inView: self, autoHideSeconde: 2)
  148. editSubType = .template
  149. templatesController.selectedWatermark = data
  150. templatesController.reloadData()
  151. currentWatermarkData = templatesController.selectedWatermark
  152. reloadData()
  153. }
  154. func watermarkPropertyControllerCancelTemplateEdit(_ controller: KMNWatermarkPropertyController) {
  155. currentWatermarkData = nil
  156. reloadData()
  157. editSubType = .template
  158. templatesController.reloadData()
  159. }
  160. }
  161. //MARK: - KMNWatermarkTemplateControllerDelegate
  162. extension KMBatchWatermarkView: KMNWatermarkTemplateControllerDelegate {
  163. func templateControllerDidAddWatermarkData(_ controller: KMNWatermarkTemplateController) {
  164. editSubType = .add
  165. propertyController.watermarkData = KMWatermarkManager.defaultManager.defaultWatermarkData
  166. if let value = propertyController.watermarkData.imagePath {
  167. propertyController.watermarkData.cPDFWatermark = CPDFWatermark(document: pdfDocument, type: .image)
  168. } else {
  169. propertyController.watermarkData.cPDFWatermark = CPDFWatermark(document: pdfDocument, type: .text)
  170. }
  171. propertyController.reloadData()
  172. currentWatermarkData = propertyController.watermarkData
  173. reloadData()
  174. }
  175. func templateControllerDidEditWatermarkData(_ controller: KMNWatermarkTemplateController, _ watermark: KMPDFWatermarkData) {
  176. editSubType = .edit
  177. propertyController.watermarkData = watermark
  178. propertyController.originalDataDict = KMWatermarkManager.defaultManager.parseWaterMark(model: watermark)
  179. propertyController.reloadData()
  180. currentWatermarkData = propertyController.watermarkData
  181. reloadData()
  182. templatesController.selectedWatermark = nil
  183. }
  184. func templateControllerDidSelectedChanged(_ controller: KMNWatermarkTemplateController) {
  185. currentWatermarkData = controller.selectedWatermark
  186. reloadData()
  187. }
  188. }