KMRightSideController.swift 36 KB

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