// // KMRightSideController.swift // PDF Reader Pro // // Created by Niehaoyu on 2024/11/12. // import Cocoa import KMComponentLibrary class KMRightSideController: NSViewController { @IBOutlet var contendView: NSView! @IBOutlet var contendLeftDivider: ComponentDivider! @IBOutlet var headerBGView: NSView! @IBOutlet var titleLabel: NSTextField! @IBOutlet var headerRightButton: ComponentButton! @IBOutlet var infoContendView: NSView! @IBOutlet var emptyView: ComponentEmpty! var pdfView: CPDFListView? var viewManager: KMPDFViewManager? //Controller //Markup var highlight_Controller: KMHighlightController? var note_Controller: KMNoteController? //Edit var edit_textController: KMEditPDFTextPropertyViewController? var edit_imageController: KMEditImageController? var edit_linkController: KMLinkViewController? //Form //Fill // var contentViewController: NSViewController? //MARK: - func override func viewDidLoad() { super.viewDidLoad() // Do view setup here. setupUI() setupContentController() } //MARK: - Get func checkMultiAnnotation() -> Bool { let subToolMode = viewManager?.subToolMode ?? .None var exitMulitAnnotation: Bool = false //判断是否存在不同类型注释 let annotations: [CPDFAnnotation] = self.pdfView?.activeAnnotations as? [CPDFAnnotation] ?? [] if annotations.count == 0 { exitMulitAnnotation = true //空状态先暂时判断为多种注释。 } else { for annotationA in annotations { var markupType: CPDFMarkupType = .highlight if annotationA is CPDFMarkupAnnotation { markupType = (annotationA as! CPDFMarkupAnnotation).markupType() } for annotationB in annotations { if annotationA != annotationB { if annotationA.className != annotationB.className { exitMulitAnnotation = true break } else { if annotationB is CPDFMarkupAnnotation { let markupAnnotation = (annotationB as! CPDFMarkupAnnotation) if markupAnnotation.markupType() != markupType { exitMulitAnnotation = true break } } } } if exitMulitAnnotation == true { break } } } } return exitMulitAnnotation } func setupUI() { contendView.wantsLayer = true contendView.layer?.backgroundColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-middle").cgColor contendLeftDivider.properties = ComponentDividerProperty(type: .vertical) titleLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2") titleLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-m-bold") emptyView.properties = ComponentEmptyProperty(emptyType: .noWatermark, text: KMLocalizedString("No identical attributes"), subText: "") } func updateTitleLabel() { let subToolMode = viewManager?.subToolMode ?? .None if viewManager?.toolMode == .Markup { } else if viewManager?.toolMode == .Edit { if viewManager?.subToolMode == .Edit_text { titleLabel.stringValue = KMLocalizedString("Text") } else if viewManager?.subToolMode == .Edit_Image { titleLabel.stringValue = KMLocalizedString("Image") } else if viewManager?.subToolMode == .Edit_Link { titleLabel.stringValue = KMLocalizedString("Link") } else if viewManager?.subToolMode == .Edit_Crop { titleLabel.stringValue = KMLocalizedString("Crop") } } } func setupContentController() { updateTitleLabel() contentViewController?.view.removeFromSuperview() contentViewController = nil let subToolMode = viewManager?.subToolMode ?? .None let exitMulitAnnotation = self.checkMultiAnnotation() let annotations: [CPDFAnnotation] = self.pdfView?.activeAnnotations as? [CPDFAnnotation] ?? [] if exitMulitAnnotation == true { headerBGView.isHidden = true infoContendView.isHidden = true emptyView.isHidden = false return } if annotations.count == 0 { return } infoContendView.isHidden = false headerBGView.isHidden = false emptyView.isHidden = true let firstAnnotation = annotations.first if firstAnnotation is CPDFMarkupAnnotation { if highlight_Controller == nil { highlight_Controller = KMHighlightController.init() } highlight_Controller?.pdfView = self.pdfView contentViewController = highlight_Controller } else if firstAnnotation is CPDFTextAnnotation { if note_Controller == nil { note_Controller = KMNoteController.init() } note_Controller?.pdfView = self.pdfView contentViewController = note_Controller } if pdfView?.km_EditingAreas().isEmpty == true { } else if pdfView?.km_editingImageAreas().isEmpty == true && pdfView?.km_editingTextAreas().isEmpty == false { //编辑文字 if edit_textController == nil { edit_textController = KMEditPDFTextPropertyViewController.init() } edit_textController?.pdfView = self.pdfView contentViewController = edit_textController } else if pdfView?.km_editingImageAreas().isEmpty == false && pdfView?.km_editingTextAreas().isEmpty == true { //编辑图片 if edit_imageController == nil { edit_imageController = KMEditImageController.init() } contentViewController = edit_imageController } else { //多选 } if viewManager?.subToolMode == .Edit_Link { //链接 if edit_linkController == nil { edit_linkController = KMLinkViewController.init() } edit_linkController?.pdfView = self.pdfView contentViewController = edit_linkController } if let contendVC = contentViewController { contendVC.view.frame = infoContendView.bounds contendVC.view.autoresizingMask = [.width, .height] infoContendView.addSubview(contendVC.view) } } func reloadData() { let toolMode = viewManager?.toolMode ?? .None let subToolMode = viewManager?.subToolMode ?? .None if (contentViewController is KMHighlightController) { (contentViewController as? KMHighlightController)?.reloadData() } else if (contentViewController is KMNoteController) { (contentViewController as? KMNoteController)?.reloadData() } if toolMode == .Markup { if (subToolMode == .Highlight || subToolMode == .Underline || subToolMode == .Waveline || subToolMode == .Strikethrough) && (contentViewController is KMHighlightController) { (contentViewController as? KMHighlightController)?.reloadData() } } else if toolMode == .Edit { //图片&文字 if pdfView?.km_EditingAreas().isEmpty == true { } else if pdfView?.km_editingImageAreas().isEmpty == true && pdfView?.km_editingTextAreas().isEmpty == false { //编辑文字 edit_textController?.pdfView = self.pdfView edit_textController?.reloadData() } else if pdfView?.km_editingImageAreas().isEmpty == false && pdfView?.km_editingTextAreas().isEmpty == true { //编辑图片 edit_imageController?.pdfView = self.pdfView edit_imageController?.reloadData() } else { //多选 } //Link if viewManager?.subToolMode == .Edit_Link && contentViewController is KMLinkViewController { if (contentViewController as! KMLinkViewController).pdfView != self.pdfView { (contentViewController as! KMLinkViewController).pdfView = self.pdfView } (contentViewController as! KMLinkViewController).reloadData() } } } public func reloadDataWithPDFView(pdfView: CPDFListView) { self.pdfView = pdfView setupContentController() reloadData() } //重新刷新编辑中内容 public func reloadEditingAreas() { if contentViewController is KMEditPDFTextPropertyViewController { (contentViewController as! KMEditPDFTextPropertyViewController).reloadData() } else if contentViewController is KMEditImageController { (contentViewController as! KMEditImageController).reloadData() } } }