123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- //
- // KMRightSideController.swift
- // PDF Reader Pro
- //
- // Created by Niehaoyu on 2024/11/12.
- //
- import Cocoa
- import KMComponentLibrary
- @objc protocol KMRightSideControllerDelegate: AnyObject {
-
- @objc optional func kmRightSideControllerDidContendVCUpdated(_ controller: KMRightSideController)
-
- }
- 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?
- var pen_Controller: KMPenController?
- var eraser_Controller: KMEraserController?
-
- //Edit
- var edit_textController: KMEditPDFTextPropertyViewController?
- var edit_imageController: KMEditImageController?
- var edit_linkController: KMLinkViewController?
- var edit_cropController: KMCropPropertyController?
-
- //Form
-
- //Fill
-
- //
-
- var contentViewController: NSViewController?
-
- weak open var delegate: KMRightSideControllerDelegate?
-
- //MARK: - func
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
-
- setupUI()
-
- setupContentController()
- }
-
- //MARK: - Get
- func checkMultiAnnotation() -> Bool {
- 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
- }
-
- //MARK: - Set
- 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 setEmptyView(isHidden hidden: Bool) {
- if hidden {
- infoContendView.isHidden = false
- headerBGView.isHidden = false
-
- emptyView.isHidden = true
- } else {
- headerBGView.isHidden = true
- infoContendView.isHidden = true
-
- emptyView.isHidden = false
- }
- }
-
- func updateTitleLabel() {
- let subToolMode = viewManager?.subToolMode ?? .None
-
- if viewManager?.toolMode == .Markup {
- if subToolMode != .None {
- if subToolMode == .Highlight {
- titleLabel.stringValue = KMLocalizedString("Highlight")
- } else if subToolMode == .Underline {
-
- } else if subToolMode == .Waveline {
-
- } else if subToolMode == .Strikethrough {
-
- } else if subToolMode == .Text {
-
- } else if subToolMode == .Note {
-
- } else if subToolMode == .Pen {
-
- } else if subToolMode == .Eraser {
- titleLabel.stringValue = KMLocalizedString("Eraser")
- } else if subToolMode == .Rectangle {
-
- } else if subToolMode == .Circle {
-
- } else if subToolMode == .Arrow {
-
- } else if subToolMode == .Line {
-
- } else if subToolMode == .Stamp {
-
- } else if subToolMode == .Sign {
-
- }
- }
- } else if viewManager?.toolMode == .Edit {
- if subToolMode == .Edit_text {
- titleLabel.stringValue = KMLocalizedString("Text")
- } else if subToolMode == .Edit_Image {
- titleLabel.stringValue = KMLocalizedString("Image")
- } else if subToolMode == .Edit_Link {
- titleLabel.stringValue = KMLocalizedString("Link")
- } else if subToolMode == .Edit_Crop {
- titleLabel.stringValue = KMLocalizedString("Crop")
- } else {
- if pdfView?.km_EditingAreas().isEmpty == true {
-
- } else if pdfView?.km_editingImageAreas().isEmpty == true && pdfView?.km_editingTextAreas().isEmpty == false {
- //编辑文字
- titleLabel.stringValue = KMLocalizedString("Text")
- } else if pdfView?.km_editingImageAreas().isEmpty == false && pdfView?.km_editingTextAreas().isEmpty == true {
- //编辑图片
- titleLabel.stringValue = KMLocalizedString("Image")
- } else {
- //多选
- }
- }
- }
- }
-
- func setupContentController() {
- updateTitleLabel()
-
- contentViewController?.view.removeFromSuperview()
- contentViewController = nil
-
- setEmptyView(isHidden: true)
-
- let toolMode = viewManager?.toolMode ?? .None
- let subToolMode = viewManager?.subToolMode ?? .None
-
- let annotations: [CPDFAnnotation] = self.pdfView?.activeAnnotations as? [CPDFAnnotation] ?? []
-
- if toolMode == .Edit {
- //MARK: -Edit编辑
- setEmptyView(isHidden: true)
- if subToolMode != .None {
- if subToolMode == .Edit_text {
- 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 subToolMode == .Edit_Image {
-
- } else if subToolMode == .Edit_Link {
- //链接
- if edit_linkController == nil {
- edit_linkController = KMLinkViewController.init()
- }
- edit_linkController?.pdfView = self.pdfView
- contentViewController = edit_linkController
- } else if subToolMode == .Edit_Crop {
- if edit_cropController == nil {
- edit_cropController = KMCropPropertyController.init()
- }
- contentViewController = edit_cropController
- }
- } else {
- if pdfView?.km_EditingAreas().isEmpty == true {
- //未选中文字跟图片
- setEmptyView(isHidden: false)
-
- } 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 pdfView?.km_editingImageAreas().isEmpty == false && pdfView?.km_editingTextAreas().isEmpty == false {
- //混选
- setEmptyView(isHidden: false)
- }
- }
-
- } else {
- let exitMulitAnnotation = self.checkMultiAnnotation()
-
- if exitMulitAnnotation == true {
- setEmptyView(isHidden: false)
-
- return
- }
-
- if annotations.count == 0 {
- return
- }
-
- 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
- } else if firstAnnotation is CPDFInkAnnotation {
- if pen_Controller == nil {
- pen_Controller = KMPenController.init()
- }
- pen_Controller?.pdfView = self.pdfView
-
- contentViewController = pen_Controller
- }
-
- }
-
-
- if let contendVC = contentViewController {
- contendVC.view.frame = infoContendView.bounds
- contendVC.view.autoresizingMask = [.width, .height]
- infoContendView.addSubview(contendVC.view)
-
- delegate?.kmRightSideControllerDidContendVCUpdated?(self)
- }
-
-
-
-
-
-
-
-
- }
-
- func reloadData() {
- let toolMode = viewManager?.toolMode ?? .None
-
- let subToolMode = viewManager?.subToolMode ?? .None
-
- let annotations: [CPDFAnnotation] = self.pdfView?.activeAnnotations as? [CPDFAnnotation] ?? []
-
- if (contentViewController is KMHighlightController) {
- (contentViewController as? KMHighlightController)?.reloadData()
- } else if (contentViewController is KMNoteController) {
- (contentViewController as? KMNoteController)?.reloadData()
- } else if (contentViewController is KMPenController) {
- (contentViewController as? KMPenController)?.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
- }
- var linkAnnotations: [CPDFLinkAnnotation] = []
- for annotation in annotations {
- if annotation is CPDFLinkAnnotation {
- linkAnnotations.append((annotation as! CPDFLinkAnnotation))
- }
- }
- (contentViewController as! KMLinkViewController).annotations = linkAnnotations
- (contentViewController as! KMLinkViewController).reloadData()
- } else if viewManager?.subToolMode == .Edit_Crop && (contentViewController is KMCropPropertyController) {
- (contentViewController as! KMCropPropertyController).reloadData()
- }
-
- }
-
-
-
- }
-
- public func reloadDataWithPDFView(pdfView: CPDFListView) {
- self.pdfView = pdfView
-
- setupContentController()
-
- reloadData()
-
- }
-
- //MARK: - 重新刷新编辑中内容
- public func reloadEditingAreas() {
- if contentViewController is KMEditPDFTextPropertyViewController {
- (contentViewController as! KMEditPDFTextPropertyViewController).reloadData()
- } else if contentViewController is KMEditImageController {
- (contentViewController as! KMEditImageController).reloadData()
- }
- }
-
- //MARK: - 裁剪模式下刷新文档
- public func reloadCropDocument(_ pdfview: CPDFListView?) {
- if viewManager?.subToolMode == .Edit_Crop && (contentViewController is KMCropPropertyController) {
- (contentViewController as! KMCropPropertyController).pdfView = pdfview
- (contentViewController as! KMCropPropertyController).reloadData()
- }
- }
-
- }
|