KMRightSideController.swift 10 KB

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