KMRightSideController.swift 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. //
  2. // KMRightSideController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2024/11/12.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. class KMRightSideController: NSViewController {
  10. @IBOutlet var contendView: NSView!
  11. @IBOutlet var contendLeftDivider: ComponentDivider!
  12. @IBOutlet var headerBGView: NSView!
  13. @IBOutlet var titleLabel: NSTextField!
  14. @IBOutlet var headerRightButton: ComponentButton!
  15. @IBOutlet var infoContendView: NSView!
  16. @IBOutlet var emptyView: ComponentEmpty!
  17. var pdfView: CPDFListView?
  18. var viewManager: KMPDFViewManager?
  19. //Controller
  20. //Markup
  21. var highlight_Controller: KMHighlightController?
  22. var note_Controller: KMNoteController?
  23. //Edit
  24. var edit_textController: KMEditPDFTextPropertyViewController?
  25. var edit_imageController: KMEditImageController?
  26. var edit_linkController: KMLinkViewController?
  27. //Form
  28. //Fill
  29. //
  30. var contentViewController: NSViewController?
  31. //MARK: - func
  32. override func viewDidLoad() {
  33. super.viewDidLoad()
  34. // Do view setup here.
  35. setupUI()
  36. setupContentController()
  37. }
  38. //MARK: - Get
  39. func checkMultiAnnotation() -> Bool {
  40. let subToolMode = viewManager?.subToolMode ?? .None
  41. var exitMulitAnnotation: Bool = false //判断是否存在不同类型注释
  42. let annotations: [CPDFAnnotation] = self.pdfView?.activeAnnotations as? [CPDFAnnotation] ?? []
  43. if annotations.count == 0 {
  44. exitMulitAnnotation = true //空状态先暂时判断为多种注释。
  45. } else {
  46. for annotationA in annotations {
  47. var markupType: CPDFMarkupType = .highlight
  48. if annotationA is CPDFMarkupAnnotation {
  49. markupType = (annotationA as! CPDFMarkupAnnotation).markupType()
  50. }
  51. for annotationB in annotations {
  52. if annotationA != annotationB {
  53. if annotationA.className != annotationB.className {
  54. exitMulitAnnotation = true
  55. break
  56. } else {
  57. if annotationB is CPDFMarkupAnnotation {
  58. let markupAnnotation = (annotationB as! CPDFMarkupAnnotation)
  59. if markupAnnotation.markupType() != markupType {
  60. exitMulitAnnotation = true
  61. break
  62. }
  63. }
  64. }
  65. }
  66. if exitMulitAnnotation == true {
  67. break
  68. }
  69. }
  70. }
  71. }
  72. return exitMulitAnnotation
  73. }
  74. func setupUI() {
  75. contendView.wantsLayer = true
  76. contendView.layer?.backgroundColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-middle").cgColor
  77. contendLeftDivider.properties = ComponentDividerProperty(type: .vertical)
  78. titleLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
  79. titleLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-m-bold")
  80. emptyView.properties = ComponentEmptyProperty(emptyType: .noWatermark, text: KMLocalizedString("No identical attributes"), subText: "")
  81. }
  82. func updateTitleLabel() {
  83. let subToolMode = viewManager?.subToolMode ?? .None
  84. if viewManager?.toolMode == .Markup {
  85. } else if viewManager?.toolMode == .Edit {
  86. if viewManager?.subToolMode == .Edit_text {
  87. titleLabel.stringValue = KMLocalizedString("Text")
  88. } else if viewManager?.subToolMode == .Edit_Image {
  89. titleLabel.stringValue = KMLocalizedString("Image")
  90. } else if viewManager?.subToolMode == .Edit_Link {
  91. titleLabel.stringValue = KMLocalizedString("Link")
  92. } else if viewManager?.subToolMode == .Edit_Crop {
  93. titleLabel.stringValue = KMLocalizedString("Crop")
  94. }
  95. }
  96. }
  97. func setupContentController() {
  98. updateTitleLabel()
  99. contentViewController?.view.removeFromSuperview()
  100. contentViewController = nil
  101. let subToolMode = viewManager?.subToolMode ?? .None
  102. let exitMulitAnnotation = self.checkMultiAnnotation()
  103. let annotations: [CPDFAnnotation] = self.pdfView?.activeAnnotations as? [CPDFAnnotation] ?? []
  104. if exitMulitAnnotation == true {
  105. headerBGView.isHidden = true
  106. infoContendView.isHidden = true
  107. emptyView.isHidden = false
  108. return
  109. }
  110. if annotations.count == 0 {
  111. return
  112. }
  113. infoContendView.isHidden = false
  114. headerBGView.isHidden = false
  115. emptyView.isHidden = true
  116. let firstAnnotation = annotations.first
  117. if firstAnnotation is CPDFMarkupAnnotation {
  118. if highlight_Controller == nil {
  119. highlight_Controller = KMHighlightController.init()
  120. }
  121. highlight_Controller?.pdfView = self.pdfView
  122. contentViewController = highlight_Controller
  123. } else if firstAnnotation is CPDFTextAnnotation {
  124. if note_Controller == nil {
  125. note_Controller = KMNoteController.init()
  126. }
  127. note_Controller?.pdfView = self.pdfView
  128. contentViewController = note_Controller
  129. }
  130. if pdfView?.km_EditingAreas().isEmpty == true {
  131. } else if pdfView?.km_editingImageAreas().isEmpty == true && pdfView?.km_editingTextAreas().isEmpty == false {
  132. //编辑文字
  133. if edit_textController == nil {
  134. edit_textController = KMEditPDFTextPropertyViewController.init()
  135. }
  136. edit_textController?.pdfView = self.pdfView
  137. contentViewController = edit_textController
  138. } else if pdfView?.km_editingImageAreas().isEmpty == false && pdfView?.km_editingTextAreas().isEmpty == true {
  139. //编辑图片
  140. if edit_imageController == nil {
  141. edit_imageController = KMEditImageController.init()
  142. }
  143. contentViewController = edit_imageController
  144. } else {
  145. //多选
  146. }
  147. if viewManager?.subToolMode == .Edit_Link {
  148. //链接
  149. if edit_linkController == nil {
  150. edit_linkController = KMLinkViewController.init()
  151. }
  152. edit_linkController?.pdfView = self.pdfView
  153. contentViewController = edit_linkController
  154. }
  155. if let contendVC = contentViewController {
  156. contendVC.view.frame = infoContendView.bounds
  157. contendVC.view.autoresizingMask = [.width, .height]
  158. infoContendView.addSubview(contendVC.view)
  159. }
  160. }
  161. func reloadData() {
  162. let toolMode = viewManager?.toolMode ?? .None
  163. let subToolMode = viewManager?.subToolMode ?? .None
  164. if (contentViewController is KMHighlightController) {
  165. (contentViewController as? KMHighlightController)?.reloadData()
  166. } else if (contentViewController is KMNoteController) {
  167. (contentViewController as? KMNoteController)?.reloadData()
  168. }
  169. if toolMode == .Markup {
  170. if (subToolMode == .Highlight ||
  171. subToolMode == .Underline ||
  172. subToolMode == .Waveline ||
  173. subToolMode == .Strikethrough) && (contentViewController is KMHighlightController) {
  174. (contentViewController as? KMHighlightController)?.reloadData()
  175. }
  176. } else if toolMode == .Edit {
  177. //图片&文字
  178. if pdfView?.km_EditingAreas().isEmpty == true {
  179. } else if pdfView?.km_editingImageAreas().isEmpty == true && pdfView?.km_editingTextAreas().isEmpty == false {
  180. //编辑文字
  181. edit_textController?.pdfView = self.pdfView
  182. edit_textController?.reloadData()
  183. } else if pdfView?.km_editingImageAreas().isEmpty == false && pdfView?.km_editingTextAreas().isEmpty == true {
  184. //编辑图片
  185. edit_imageController?.pdfView = self.pdfView
  186. edit_imageController?.reloadData()
  187. } else {
  188. //多选
  189. }
  190. //Link
  191. if viewManager?.subToolMode == .Edit_Link && contentViewController is KMLinkViewController {
  192. if (contentViewController as! KMLinkViewController).pdfView != self.pdfView {
  193. (contentViewController as! KMLinkViewController).pdfView = self.pdfView
  194. }
  195. (contentViewController as! KMLinkViewController).reloadData()
  196. }
  197. }
  198. }
  199. public func reloadDataWithPDFView(pdfView: CPDFListView) {
  200. self.pdfView = pdfView
  201. setupContentController()
  202. reloadData()
  203. }
  204. //重新刷新编辑中内容
  205. public func reloadEditingAreas() {
  206. if contentViewController is KMEditPDFTextPropertyViewController {
  207. (contentViewController as! KMEditPDFTextPropertyViewController).reloadData()
  208. } else if contentViewController is KMEditImageController {
  209. (contentViewController as! KMEditImageController).reloadData()
  210. }
  211. }
  212. }