KMRightSideController.swift 39 KB

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