KMRightSideController.swift 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713
  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. @objc protocol KMRightSideControllerDelegate: AnyObject {
  10. @objc optional func kmRightSideControllerDidContendVCUpdated(_ controller: KMRightSideController)
  11. }
  12. class KMRightSideController: NSViewController {
  13. @IBOutlet var contendView: NSView!
  14. @IBOutlet var contendLeftDivider: ComponentDivider!
  15. @IBOutlet var headerBGView: NSView!
  16. @IBOutlet var titleLabel: NSTextField!
  17. @IBOutlet var headerRightButton: ComponentButton!
  18. @IBOutlet var infoContendView: NSView!
  19. @IBOutlet var infoContendTopConst: NSLayoutConstraint!
  20. @IBOutlet var emptyView: ComponentEmpty!
  21. var pdfView: CPDFListView?
  22. var viewManager: KMPDFViewManager?
  23. //Controller
  24. //Markup
  25. var highlight_Controller: KMHighlightController?
  26. var note_Controller: KMNoteController?
  27. var pen_Controller: KMPenController?
  28. var eraser_Controller: KMEraserController?
  29. var rectangle_Controller: KMRectangleController?
  30. var line_Controller: KMLineController?
  31. var freeText_Controller: KMTextBoxController?
  32. var stamplist_Controller: KMStampListController?
  33. var stamp_Controller: KMStampController?
  34. var signature_Controller: KMSignatureController?
  35. var signatureList_Controller: KMSignatureListController?
  36. var measure_Controller: KMMeasureController?
  37. //Edit
  38. var edit_textController: KMEditPDFTextPropertyViewController?
  39. var edit_imageController: KMEditImageController?
  40. var edit_linkController: KMLinkViewController?
  41. var edit_cropController: KMCropPropertyController?
  42. //Form
  43. var form_fieldController: FormsTextFieldController?
  44. var form_checkBoxController: FormsCheckBoxController?
  45. var form_radioController: FormsRadioController?
  46. var form_listController: FormsListController?
  47. var form_buttonController: FormsButtonController?
  48. var form_digitalSignController: FormsDigitalSignController?
  49. //Fill
  50. var fill_tickController: FillTickController?
  51. var fill_dateController: FillDateController?
  52. //
  53. //OCR
  54. var tool_OCRController: KMOCRController?
  55. var contentViewController: NSViewController?
  56. weak open var delegate: KMRightSideControllerDelegate?
  57. //MARK: - func
  58. override func viewDidLoad() {
  59. super.viewDidLoad()
  60. // Do view setup here.
  61. setupUI()
  62. setupContentController()
  63. }
  64. //MARK: - Get
  65. func getValidAnnotations() -> [CPDFAnnotation] {
  66. return []
  67. }
  68. //MARK: - Set
  69. func setupUI() {
  70. contendView.wantsLayer = true
  71. contendView.layer?.backgroundColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-middle").cgColor
  72. contendLeftDivider.properties = ComponentDividerProperty(type: .vertical)
  73. titleLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
  74. titleLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-m-bold")
  75. emptyView.properties = ComponentEmptyProperty(emptyType: .noWatermark, text: KMLocalizedString("No identical attributes"), subText: "")
  76. }
  77. func updateTitleLabel() {
  78. let subToolMode = viewManager?.subToolMode ?? .None
  79. let annotations: [CPDFAnnotation] = self.pdfView?.activeAnnotations as? [CPDFAnnotation] ?? []
  80. var firstAnnotation: CPDFAnnotation?
  81. if let firstObject = annotations.first {
  82. firstAnnotation = firstObject
  83. }
  84. titleLabel.stringValue = ""
  85. if contentViewController is KMHighlightController {
  86. titleLabel.stringValue = KMLocalizedString("Highlight")
  87. if let annotation = firstAnnotation, annotation is CPDFMarkupAnnotation {
  88. let markupAnnotation = firstAnnotation as! CPDFMarkupAnnotation
  89. if markupAnnotation.markupType() == .underline {
  90. titleLabel.stringValue = KMLocalizedString("Underline")
  91. } else if markupAnnotation.markupType() == .squiggly {
  92. titleLabel.stringValue = KMLocalizedString("Wavyline")
  93. } else if markupAnnotation.markupType() == .strikeOut {
  94. titleLabel.stringValue = KMLocalizedString("Strikethrough")
  95. }
  96. } else {
  97. if viewManager?.subToolMode == .Underline {
  98. titleLabel.stringValue = KMLocalizedString("Underline")
  99. } else if viewManager?.subToolMode == .Waveline {
  100. titleLabel.stringValue = KMLocalizedString("Wavyline")
  101. } else if viewManager?.subToolMode == .Strikethrough {
  102. titleLabel.stringValue = KMLocalizedString("Strikethrough")
  103. }
  104. }
  105. } else if (contentViewController is KMNoteController) {
  106. titleLabel.stringValue = KMLocalizedString("Note")
  107. } else if (contentViewController is KMPenController) {
  108. titleLabel.stringValue = KMLocalizedString("Pen")
  109. } else if (contentViewController is KMEraserController) {
  110. titleLabel.stringValue = KMLocalizedString("Eraser")
  111. } else if (contentViewController is KMLineController) {
  112. if let annotation = firstAnnotation, annotation is CPDFLineAnnotation {
  113. let lineAnnotation = firstAnnotation as! CPDFLineAnnotation
  114. if lineAnnotation.type == "Line" {
  115. titleLabel.stringValue = KMLocalizedString("Line")
  116. } else if lineAnnotation.type == "Arrow" {
  117. titleLabel.stringValue = KMLocalizedString("Arrow")
  118. }
  119. } else if subToolMode == .Arrow {
  120. titleLabel.stringValue = KMLocalizedString("Arrow")
  121. } else if subToolMode == .Line {
  122. titleLabel.stringValue = KMLocalizedString("Line")
  123. }
  124. } else if (contentViewController is KMRectangleController) {
  125. if let annotation = firstAnnotation, annotation is CPDFSquareAnnotation {
  126. titleLabel.stringValue = KMLocalizedString("Rectangle")
  127. } else if let annotation = firstAnnotation, annotation is CPDFCircleAnnotation {
  128. titleLabel.stringValue = KMLocalizedString("Circle")
  129. } else if subToolMode == .Rectangle {
  130. titleLabel.stringValue = KMLocalizedString("Rectangle")
  131. } else if subToolMode == .Circle {
  132. titleLabel.stringValue = KMLocalizedString("Circle")
  133. }
  134. } else if (contentViewController is KMTextBoxController) {
  135. titleLabel.stringValue = KMLocalizedString("Text Box")
  136. } else if (contentViewController is KMEditPDFTextPropertyViewController) {
  137. titleLabel.stringValue = KMLocalizedString("Text")
  138. } else if (contentViewController is KMEditImageController) {
  139. titleLabel.stringValue = KMLocalizedString("Image")
  140. } else if (contentViewController is KMLinkViewController) {
  141. titleLabel.stringValue = KMLocalizedString("Link")
  142. } else if (contentViewController is KMCropPropertyController) {
  143. titleLabel.stringValue = KMLocalizedString("Crop")
  144. } else if (contentViewController is KMStampListController) || (contentViewController is KMStampController) {
  145. titleLabel.stringValue = KMLocalizedString("Stamp")
  146. } else if (contentViewController is KMSignatureListController) || (contentViewController is KMSignatureController) {
  147. titleLabel.stringValue = KMLocalizedString("Sign")
  148. } else if (contentViewController is KMMeasureController) {
  149. titleLabel.stringValue = KMLocalizedString("Measure")
  150. } else if (contentViewController is FormsTextFieldController) {
  151. titleLabel.stringValue = KMLocalizedString("Text Field")
  152. } else if (contentViewController is FormsCheckBoxController) {
  153. titleLabel.stringValue = KMLocalizedString("Check Box")
  154. } else if (contentViewController is FormsRadioController) {
  155. titleLabel.stringValue = KMLocalizedString("Radio Button")
  156. } else if (contentViewController is FormsButtonController) {
  157. titleLabel.stringValue = KMLocalizedString("Button")
  158. } else if (contentViewController is FormsListController) {
  159. if let annotation = firstAnnotation, annotation is CPDFChoiceWidgetAnnotation {
  160. let lineAnnotation = firstAnnotation as! CPDFChoiceWidgetAnnotation
  161. if lineAnnotation.isListChoice == true {
  162. titleLabel.stringValue = KMLocalizedString("List")
  163. } else {
  164. titleLabel.stringValue = KMLocalizedString("Dropdown")
  165. }
  166. } else if subToolMode == .Form_list {
  167. titleLabel.stringValue = KMLocalizedString("List")
  168. } else if subToolMode == .Form_dropdown {
  169. titleLabel.stringValue = KMLocalizedString("Dropdown")
  170. }
  171. } else if (contentViewController is FillTickController) {
  172. titleLabel.stringValue = KMLocalizedString("Fill")
  173. } else if (contentViewController is KMOCRController) {
  174. titleLabel.stringValue = KMLocalizedString("OCR")
  175. }
  176. else {
  177. }
  178. }
  179. //MARK: - Setup
  180. func setupContentController() {
  181. /**
  182. Case1:选中指定模式:显示指定模式的属性设置界面,例如橡皮擦。
  183. Case2:未选中模式:根据选中的注释显示指定属性设置界面
  184. 1、筛选出指定模式下对应的右边界面,进行显示。
  185. 2、再判断是否有选中注释,多选不同类型注释时,判断为未选中注释。
  186. 3、判断选中指定类型的注释,或者选中的模式,都展示对应的界面。
  187. */
  188. /**
  189. 只在指定模式下可以选中特定注释:
  190. 编辑模式下:可以选中编辑块跟Link注释
  191. Form模式下:可以选中Form注释
  192. */
  193. contentViewController?.view.removeFromSuperview()
  194. contentViewController = nil
  195. let toolMode = viewManager?.toolMode ?? .None
  196. let subToolMode = viewManager?.subToolMode ?? .None
  197. let annotations: [CPDFAnnotation] = self.pdfView?.activeAnnotations as? [CPDFAnnotation] ?? []
  198. if toolMode == .Edit {
  199. //MARK: -Edit编辑
  200. if subToolMode == .Edit_Link {
  201. //链接
  202. if edit_linkController == nil {
  203. edit_linkController = KMLinkViewController.init()
  204. }
  205. edit_linkController?.pdfView = self.pdfView
  206. contentViewController = edit_linkController
  207. } else if subToolMode == .Edit_Crop {
  208. if edit_cropController == nil {
  209. edit_cropController = KMCropPropertyController.init()
  210. }
  211. contentViewController = edit_cropController
  212. } else {
  213. if pdfView?.km_EditingAreas().isEmpty == true {
  214. //未选中文字跟图片
  215. } else if pdfView?.km_editingImageAreas().isEmpty == true && pdfView?.km_editingTextAreas().isEmpty == false {
  216. //编辑文字
  217. if edit_textController == nil {
  218. edit_textController = KMEditPDFTextPropertyViewController.init()
  219. }
  220. edit_textController?.pdfView = self.pdfView
  221. contentViewController = edit_textController
  222. } else if pdfView?.km_editingImageAreas().isEmpty == false && pdfView?.km_editingTextAreas().isEmpty == true {
  223. //编辑图片
  224. if edit_imageController == nil {
  225. edit_imageController = KMEditImageController.init()
  226. }
  227. contentViewController = edit_imageController
  228. } else if pdfView?.km_editingImageAreas().isEmpty == false && pdfView?.km_editingTextAreas().isEmpty == false {
  229. //混选
  230. }
  231. }
  232. } else if toolMode == .Form {
  233. var firstAnnotation: CPDFAnnotation?
  234. if annotations.count > 0 {
  235. firstAnnotation = annotations.first
  236. }
  237. var controlType: CPDFWidgetControlType = .unknownControl
  238. var isListChoice: Int = -1
  239. if let annotation = firstAnnotation, annotation is CPDFButtonWidgetAnnotation {
  240. let widgetAnnot = annotation as! CPDFButtonWidgetAnnotation
  241. controlType = widgetAnnot.controlType()
  242. } else if let annotation = firstAnnotation, annotation is CPDFChoiceWidgetAnnotation {
  243. let widgetAnnot = annotation as! CPDFChoiceWidgetAnnotation
  244. isListChoice = 0
  245. if widgetAnnot.isListChoice {
  246. isListChoice = 1
  247. }
  248. }
  249. if subToolMode == .Form_text || firstAnnotation is CPDFTextWidgetAnnotation {
  250. if form_fieldController == nil {
  251. form_fieldController = FormsTextFieldController.init()
  252. }
  253. form_fieldController?.pdfView = self.pdfView
  254. contentViewController = form_fieldController
  255. } else if subToolMode == .Form_checkbox || controlType == .checkBoxControl {
  256. if form_checkBoxController == nil {
  257. form_checkBoxController = FormsCheckBoxController.init()
  258. }
  259. form_checkBoxController?.pdfView = self.pdfView
  260. contentViewController = form_checkBoxController
  261. } else if subToolMode == .Form_radio || controlType == .radioButtonControl {
  262. if form_radioController == nil {
  263. form_radioController = FormsRadioController.init()
  264. }
  265. form_radioController?.pdfView = self.pdfView
  266. contentViewController = form_radioController
  267. } else if subToolMode == .Form_list || subToolMode == .Form_dropdown || isListChoice >= 0 {
  268. if form_listController == nil {
  269. form_listController = FormsListController.init()
  270. }
  271. form_listController?.pdfView = self.pdfView
  272. contentViewController = form_listController
  273. } else if subToolMode == .Form_OK || controlType == .pushButtonControl {
  274. if form_buttonController == nil {
  275. form_buttonController = FormsButtonController.init()
  276. }
  277. form_buttonController?.pdfView = self.pdfView
  278. contentViewController = form_buttonController
  279. } else if subToolMode == .Form_digitalSign {
  280. if form_digitalSignController == nil {
  281. form_digitalSignController = FormsDigitalSignController.init()
  282. }
  283. form_digitalSignController?.pdfView = self.pdfView
  284. contentViewController = form_digitalSignController
  285. }
  286. } else {
  287. let exitMulitAnnotation = pdfView?.isMultiAnnotation(annotations)
  288. if exitMulitAnnotation == true {
  289. return
  290. }
  291. var firstAnnotation: CPDFAnnotation?
  292. if annotations.count > 0 {
  293. firstAnnotation = annotations.first
  294. }
  295. if viewManager?.viewToolsType == .Content_Selection {
  296. if edit_cropController == nil {
  297. edit_cropController = KMCropPropertyController.init()
  298. }
  299. contentViewController = edit_cropController
  300. } else if firstAnnotation is CPDFMarkupAnnotation || subToolMode == .Highlight || subToolMode == .Underline || subToolMode == .Waveline || subToolMode == .Strikethrough {
  301. if highlight_Controller == nil {
  302. highlight_Controller = KMHighlightController.init()
  303. }
  304. highlight_Controller?.pdfView = self.pdfView
  305. contentViewController = highlight_Controller
  306. } else if firstAnnotation is CPDFFreeTextAnnotation ||
  307. subToolMode == .Text ||
  308. subToolMode == .fill_date {
  309. if firstAnnotation is CSelfSignAnnotationFreeText || subToolMode == .fill_date {
  310. if fill_dateController == nil {
  311. fill_dateController = FillDateController.init()
  312. }
  313. fill_dateController?.pdfView = self.pdfView
  314. contentViewController = fill_dateController
  315. } else {
  316. if freeText_Controller == nil {
  317. freeText_Controller = KMTextBoxController.init()
  318. }
  319. freeText_Controller?.pdfView = self.pdfView
  320. contentViewController = freeText_Controller
  321. }
  322. } else if firstAnnotation is CPDFTextAnnotation || subToolMode == .Note {
  323. if note_Controller == nil {
  324. note_Controller = KMNoteController.init()
  325. }
  326. note_Controller?.pdfView = self.pdfView
  327. contentViewController = note_Controller
  328. } else if firstAnnotation is CPDFInkAnnotation || subToolMode == .Pen {
  329. if pen_Controller == nil {
  330. pen_Controller = KMPenController.init()
  331. }
  332. pen_Controller?.pdfView = self.pdfView
  333. contentViewController = pen_Controller
  334. } else if subToolMode == .Eraser {
  335. if eraser_Controller == nil {
  336. eraser_Controller = KMEraserController.init()
  337. }
  338. contentViewController = eraser_Controller
  339. } else if firstAnnotation is CPDFCircleAnnotation || firstAnnotation is CPDFSquareAnnotation || subToolMode == .Rectangle || subToolMode == .Circle {
  340. if rectangle_Controller == nil {
  341. rectangle_Controller = KMRectangleController.init()
  342. }
  343. rectangle_Controller?.pdfView = self.pdfView
  344. contentViewController = rectangle_Controller
  345. } else if firstAnnotation is CPDFLineAnnotation || subToolMode == .Line || subToolMode == .Arrow {
  346. if line_Controller == nil {
  347. line_Controller = KMLineController.init()
  348. }
  349. line_Controller?.pdfView = self.pdfView
  350. contentViewController = line_Controller
  351. } else if firstAnnotation is CPDFStampAnnotation {
  352. if firstAnnotation is CSelfSignAnnotation {
  353. if fill_tickController == nil {
  354. fill_tickController = FillTickController.init()
  355. }
  356. fill_tickController?.viewManager = self.viewManager
  357. fill_tickController?.pdfView = self.pdfView
  358. contentViewController = fill_tickController
  359. } else {
  360. if stamp_Controller == nil {
  361. stamp_Controller = KMStampController.init()
  362. }
  363. stamp_Controller?.pdfView = self.pdfView
  364. contentViewController = stamp_Controller
  365. }
  366. } else if subToolMode == .Stamp {
  367. if stamplist_Controller == nil {
  368. stamplist_Controller = KMStampListController.init()
  369. stamplist_Controller?.delegate = self
  370. }
  371. stamplist_Controller?.pdfView = self.pdfView
  372. contentViewController = stamplist_Controller
  373. } else if firstAnnotation is CPDFSignatureAnnotation {
  374. if signature_Controller == nil {
  375. signature_Controller = KMSignatureController.init()
  376. }
  377. signature_Controller?.pdfView = self.pdfView
  378. contentViewController = signature_Controller
  379. } else if subToolMode == .Sign || subToolMode == .fill_sign {
  380. if signatureList_Controller == nil {
  381. signatureList_Controller = KMSignatureListController.init()
  382. }
  383. signatureList_Controller?.pdfView = self.pdfView
  384. contentViewController = signatureList_Controller
  385. } else if subToolMode == .Fill_tick ||
  386. subToolMode == .fill_fork ||
  387. subToolMode == .fill_rectangle ||
  388. subToolMode == .fill_line ||
  389. subToolMode == .fill_dot {
  390. if fill_tickController == nil {
  391. fill_tickController = FillTickController.init()
  392. }
  393. fill_tickController?.viewManager = self.viewManager
  394. fill_tickController?.pdfView = self.pdfView
  395. contentViewController = fill_tickController
  396. } else if subToolMode == .Measure {
  397. if measure_Controller == nil {
  398. measure_Controller = KMMeasureController.init()
  399. }
  400. measure_Controller?.pdfView = self.pdfView
  401. contentViewController = measure_Controller
  402. } else if subToolMode == .Tool_OCR {
  403. if tool_OCRController == nil {
  404. tool_OCRController = KMOCRController.init()
  405. }
  406. tool_OCRController?.pdfView = self.pdfView
  407. contentViewController = tool_OCRController
  408. } else {
  409. }
  410. }
  411. if let contendVC = contentViewController {
  412. contendVC.view.frame = infoContendView.bounds
  413. contendVC.view.autoresizingMask = [.width, .height]
  414. infoContendView.addSubview(contendVC.view)
  415. delegate?.kmRightSideControllerDidContendVCUpdated?(self)
  416. }
  417. if let contendVC = contentViewController {
  418. infoContendView.isHidden = false
  419. headerBGView.isHidden = false
  420. emptyView.isHidden = true
  421. } else {
  422. infoContendView.isHidden = true
  423. headerBGView.isHidden = true
  424. emptyView.isHidden = false
  425. }
  426. updateTitleLabel()
  427. }
  428. //MARK: - reloadData
  429. func reloadContendTopConst() {
  430. infoContendTopConst.constant = 40
  431. headerBGView.isHidden = false
  432. if contentViewController is KMHighlightController {
  433. if CPDFMarkupAnnotation.isMarkupAnnotationsContainMultiType((contentViewController as! KMHighlightController).getValidAnnotations()) {
  434. infoContendTopConst.constant = 0
  435. headerBGView.isHidden = true
  436. }
  437. } else if contentViewController is KMLineController {
  438. if CPDFLineAnnotation.isLineAnnotationsContainMultiType((contentViewController as! KMLineController).getValidAnnotations()) {
  439. infoContendTopConst.constant = 0
  440. headerBGView.isHidden = true
  441. }
  442. }
  443. }
  444. func reloadTopRightButtonInfo() {
  445. headerRightButton.isHidden = true
  446. if contentViewController is KMStampListController {
  447. let stampListVC = contentViewController as! KMStampListController
  448. if stampListVC.stampType == .dynamic {
  449. headerRightButton.isHidden = false
  450. headerRightButton.properties = ComponentButtonProperty(type: .text_gray, size: .xxs, onlyIcon: true, icon: NSImage(named: "stampDynamic_Setting"), keepPressState: false)
  451. } else if stampListVC.stampType == .custom {
  452. headerRightButton.isHidden = false
  453. headerRightButton.properties = ComponentButtonProperty(type: .text_gray, size: .xxs, onlyIcon: true, icon: NSImage(named: "watermark_template_add"), keepPressState: false)
  454. }
  455. } else if contentViewController is KMSignatureListController {
  456. headerRightButton.isHidden = false
  457. headerRightButton.properties = ComponentButtonProperty(type: .text_gray, size: .xxs, onlyIcon: true, icon: NSImage(named: "watermark_template_add"), keepPressState: false)
  458. } else if contentViewController is KMOCRController {
  459. headerRightButton.isHidden = false
  460. headerRightButton.properties = ComponentButtonProperty(type: .text_gray, size: .xxs, onlyIcon: true, icon: NSImage(named: "tools_report"), keepPressState: false)
  461. headerRightButton.toolTip = KMLocalizedString("If you have any feedback or suggestions for improvements to the OCR feature, please contact us.")
  462. }
  463. headerRightButton.setTarget(self, action: #selector(headerRightButtonClicked(_:)))
  464. }
  465. func reloadData() {
  466. let toolMode = viewManager?.toolMode ?? .None
  467. let subToolMode = viewManager?.subToolMode ?? .None
  468. let annotations: [CPDFAnnotation] = self.pdfView?.activeAnnotations as? [CPDFAnnotation] ?? []
  469. if (contentViewController is KMHighlightController) {
  470. (contentViewController as? KMHighlightController)?.viewManager = viewManager
  471. (contentViewController as? KMHighlightController)?.reloadData()
  472. } else if (contentViewController is KMNoteController) {
  473. (contentViewController as? KMNoteController)?.reloadData()
  474. } else if (contentViewController is KMPenController) {
  475. (contentViewController as? KMPenController)?.reloadData()
  476. } else if (contentViewController is KMEraserController) {
  477. (contentViewController as? KMEraserController)?.reloadData()
  478. } else if (contentViewController is KMLineController) {
  479. (contentViewController as? KMLineController)?.viewManager = viewManager
  480. (contentViewController as? KMLineController)?.reloadData()
  481. } else if (contentViewController is KMRectangleController) {
  482. (contentViewController as? KMRectangleController)?.viewManager = viewManager
  483. (contentViewController as? KMRectangleController)?.reloadData()
  484. } else if (contentViewController is KMTextBoxController) {
  485. (contentViewController as? KMTextBoxController)?.reloadData()
  486. } else if (contentViewController is KMStampController) {
  487. (contentViewController as? KMStampController)?.reloadData()
  488. } else if (contentViewController is KMSignatureListController) {
  489. (contentViewController as? KMSignatureListController)?.reloadData()
  490. } else if (contentViewController is FormsTextFieldController) {
  491. (contentViewController as? FormsTextFieldController)?.reloadData()
  492. } else if (contentViewController is FormsCheckBoxController) {
  493. (contentViewController as? FormsCheckBoxController)?.reloadData()
  494. } else if (contentViewController is FormsRadioController) {
  495. (contentViewController as? FormsRadioController)?.reloadData()
  496. } else if (contentViewController is FormsListController) {
  497. (contentViewController as? FormsListController)?.reloadData()
  498. } else if (contentViewController is FormsButtonController) {
  499. (contentViewController as? FormsButtonController)?.reloadData()
  500. } else if (contentViewController is FormsDigitalSignController) {
  501. (contentViewController as? FormsDigitalSignController)?.reloadData()
  502. } else if (contentViewController is FillTickController) {
  503. (contentViewController as? FillTickController)?.reloadData()
  504. } else if (contentViewController is FillDateController) {
  505. (contentViewController as? FillDateController)?.reloadData()
  506. }
  507. if toolMode == .Markup {
  508. if (subToolMode == .Highlight ||
  509. subToolMode == .Underline ||
  510. subToolMode == .Waveline ||
  511. subToolMode == .Strikethrough) && (contentViewController is KMHighlightController) {
  512. (contentViewController as? KMHighlightController)?.reloadData()
  513. }
  514. } else if toolMode == .Edit {
  515. //图片&文字
  516. if pdfView?.km_EditingAreas().isEmpty == true {
  517. } else if pdfView?.km_editingImageAreas().isEmpty == true && pdfView?.km_editingTextAreas().isEmpty == false {
  518. //编辑文字
  519. edit_textController?.pdfView = self.pdfView
  520. edit_textController?.reloadData()
  521. } else if pdfView?.km_editingImageAreas().isEmpty == false && pdfView?.km_editingTextAreas().isEmpty == true {
  522. //编辑图片
  523. edit_imageController?.pdfView = self.pdfView
  524. edit_imageController?.reloadData()
  525. } else {
  526. //多选
  527. }
  528. //Link
  529. if viewManager?.subToolMode == .Edit_Link && (contentViewController is KMLinkViewController) {
  530. if (contentViewController as! KMLinkViewController).pdfView != self.pdfView {
  531. (contentViewController as! KMLinkViewController).pdfView = self.pdfView
  532. }
  533. (contentViewController as! KMLinkViewController).reloadData()
  534. } else if viewManager?.subToolMode == .Edit_Crop && (contentViewController is KMCropPropertyController) {
  535. (contentViewController as! KMCropPropertyController).reloadData()
  536. }
  537. }
  538. reloadContendTopConst()
  539. reloadTopRightButtonInfo()
  540. }
  541. public func reloadDataWithPDFView(pdfView: CPDFListView) {
  542. self.pdfView = pdfView
  543. setupContentController()
  544. reloadData()
  545. }
  546. //MARK: - Action
  547. @objc func headerRightButtonClicked(_ button: ComponentButton) {
  548. if contentViewController is KMStampListController {
  549. let stampListVC = contentViewController as! KMStampListController
  550. if stampListVC.stampType == .dynamic {
  551. stampListVC.showDynamicSetting()
  552. } else if stampListVC.stampType == .custom {
  553. stampListVC.createCustomStamp()
  554. }
  555. } else if contentViewController is KMSignatureListController {
  556. let vc = contentViewController as! KMSignatureListController
  557. vc.createCustomStamp()
  558. }
  559. }
  560. //MARK: - 重新刷新编辑中内容
  561. public func reloadEditingAreas() {
  562. if contentViewController is KMEditPDFTextPropertyViewController {
  563. (contentViewController as! KMEditPDFTextPropertyViewController).reloadData()
  564. } else if contentViewController is KMEditImageController {
  565. (contentViewController as! KMEditImageController).reloadData()
  566. }
  567. }
  568. //MARK: - 裁剪模式下刷新文档
  569. public func reloadCropDocument(_ pdfview: CPDFListView?) {
  570. if viewManager?.subToolMode == .Edit_Crop && (contentViewController is KMCropPropertyController) {
  571. (contentViewController as! KMCropPropertyController).pdfView = pdfview
  572. (contentViewController as! KMCropPropertyController).reloadData()
  573. }
  574. }
  575. }
  576. extension KMRightSideController: KMStampListControllerDelegate {
  577. func kmStampListControllerDidStampTypeUpdated(_ controller: KMStampListController) {
  578. reloadTopRightButtonInfo()
  579. }
  580. }