123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- //
- // 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?
- var rectangle_Controller: KMRectangleController?
- var line_Controller: KMLineController?
- var freeText_Controller: KMTextBoxController?
-
- //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 getValidAnnotations() -> [CPDFAnnotation] {
-
-
- return []
- }
-
- //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
-
- let annotations: [CPDFAnnotation] = self.pdfView?.activeAnnotations as? [CPDFAnnotation] ?? []
- var firstAnnotation: CPDFAnnotation?
- if let firstObject = annotations.first {
- firstAnnotation = firstObject
- }
-
- if annotations.count == 1 {
-
- }
- titleLabel.stringValue = ""
-
- if contentViewController is KMHighlightController {
- titleLabel.stringValue = KMLocalizedString("Highlight")
- if let annotation = firstAnnotation, annotation is CPDFMarkupAnnotation {
- let markupAnnotation = firstAnnotation as! CPDFMarkupAnnotation
- if markupAnnotation.markupType() == .underline {
- titleLabel.stringValue = KMLocalizedString("Underline")
- } else if markupAnnotation.markupType() == .squiggly {
- titleLabel.stringValue = KMLocalizedString("Wavyline")
- } else if markupAnnotation.markupType() == .strikeOut {
- titleLabel.stringValue = KMLocalizedString("Strikethrough")
- }
- } else {
- if viewManager?.subToolMode == .Underline {
- titleLabel.stringValue = KMLocalizedString("Underline")
- } else if viewManager?.subToolMode == .Waveline {
- titleLabel.stringValue = KMLocalizedString("Wavyline")
- } else if viewManager?.subToolMode == .Strikethrough {
- titleLabel.stringValue = KMLocalizedString("Strikethrough")
- }
- }
- } else if (contentViewController is KMNoteController) {
- titleLabel.stringValue = KMLocalizedString("Note")
- } else if (contentViewController is KMPenController) {
- titleLabel.stringValue = KMLocalizedString("Pen")
- } else if (contentViewController is KMEraserController) {
- titleLabel.stringValue = KMLocalizedString("Eraser")
- } else if (contentViewController is KMLineController) {
- if let annotation = firstAnnotation, annotation is CPDFLineAnnotation {
- let lineAnnotation = firstAnnotation as! CPDFLineAnnotation
- if lineAnnotation.type == "Line" {
- titleLabel.stringValue = KMLocalizedString("Line")
- } else if lineAnnotation.type == "Arrow" {
- titleLabel.stringValue = KMLocalizedString("Arrow")
- }
- } else if subToolMode == .Arrow {
- titleLabel.stringValue = KMLocalizedString("Arrow")
- } else if subToolMode == .Line {
- titleLabel.stringValue = KMLocalizedString("Line")
- }
- } else if (contentViewController is KMRectangleController) {
- if let annotation = firstAnnotation, annotation is CPDFSquareAnnotation {
- titleLabel.stringValue = KMLocalizedString("Rectangle")
- } else if let annotation = firstAnnotation, annotation is CPDFCircleAnnotation {
- titleLabel.stringValue = KMLocalizedString("Circle")
- } else if subToolMode == .Rectangle {
- titleLabel.stringValue = KMLocalizedString("Rectangle")
- } else if subToolMode == .Circle {
- titleLabel.stringValue = KMLocalizedString("Circle")
- }
- } else if (contentViewController is KMTextBoxController) {
- titleLabel.stringValue = KMLocalizedString("Text Box")
- } else if (contentViewController is KMEditPDFTextPropertyViewController) {
- titleLabel.stringValue = KMLocalizedString("Text")
- } else if (contentViewController is KMEditImageController) {
- titleLabel.stringValue = KMLocalizedString("Image")
- } else if (contentViewController is KMLinkViewController) {
- titleLabel.stringValue = KMLocalizedString("Link")
- } else if (contentViewController is KMCropPropertyController) {
- titleLabel.stringValue = KMLocalizedString("Crop")
- }
-
- }
-
- func setupContentController() {
- /**
- Case1:选中指定模式:显示指定模式的属性设置界面,例如橡皮擦。
- Case2:未选中模式:根据选中的注释显示指定属性设置界面
-
- 1、筛选出指定模式下对应的右边界面,进行显示。
- 2、再判断是否有选中注释,多选不同类型注释时,判断为未选中注释。
- 3、判断选中指定类型的注释,或者选中的模式,都展示对应的界面。
-
- */
-
- /**
- 只在指定模式下可以选中特定注释:
- 编辑模式下:可以选中编辑块跟Link注释
- Form模式下:可以选中Form注释
- */
-
- 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 if toolMode == .Form {
-
- } else {
- let exitMulitAnnotation = pdfView?.isMultiAnnotation(annotations)
- if exitMulitAnnotation == true {
- setEmptyView(isHidden: false)
-
- return
- }
-
- var firstAnnotation: CPDFAnnotation?
- if annotations.count > 0 {
- firstAnnotation = annotations.first
- }
-
- if firstAnnotation is CPDFMarkupAnnotation || subToolMode == .Highlight || subToolMode == .Underline || subToolMode == .Waveline || subToolMode == .Strikethrough {
- if highlight_Controller == nil {
- highlight_Controller = KMHighlightController.init()
- }
- highlight_Controller?.pdfView = self.pdfView
-
- contentViewController = highlight_Controller
- } else if firstAnnotation is CPDFFreeTextAnnotation || subToolMode == .Text {
- if freeText_Controller == nil {
- freeText_Controller = KMTextBoxController.init()
- }
- freeText_Controller?.pdfView = self.pdfView
-
- contentViewController = freeText_Controller
- } else if firstAnnotation is CPDFTextAnnotation || subToolMode == .Note {
- if note_Controller == nil {
- note_Controller = KMNoteController.init()
- }
- note_Controller?.pdfView = self.pdfView
-
- contentViewController = note_Controller
- } else if firstAnnotation is CPDFInkAnnotation || subToolMode == .Pen {
- if pen_Controller == nil {
- pen_Controller = KMPenController.init()
- }
- pen_Controller?.pdfView = self.pdfView
-
- contentViewController = pen_Controller
- } else if subToolMode == .Eraser {
- if eraser_Controller == nil {
- eraser_Controller = KMEraserController.init()
- }
- contentViewController = eraser_Controller
-
- } else if firstAnnotation is CPDFCircleAnnotation || firstAnnotation is CPDFSquareAnnotation || subToolMode == .Rectangle || subToolMode == .Circle {
- if rectangle_Controller == nil {
- rectangle_Controller = KMRectangleController.init()
- }
- rectangle_Controller?.pdfView = self.pdfView
-
- contentViewController = rectangle_Controller
- } else if firstAnnotation is CPDFLineAnnotation || subToolMode == .Line || subToolMode == .Arrow {
- if line_Controller == nil {
- line_Controller = KMLineController.init()
- }
- line_Controller?.pdfView = self.pdfView
-
- contentViewController = line_Controller
- } else {
-
- }
-
- }
-
-
-
- if let contendVC = contentViewController {
- contendVC.view.frame = infoContendView.bounds
- contendVC.view.autoresizingMask = [.width, .height]
- infoContendView.addSubview(contendVC.view)
-
- delegate?.kmRightSideControllerDidContendVCUpdated?(self)
- }
-
- updateTitleLabel()
-
-
-
-
- }
-
- 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)?.viewManager = viewManager
- (contentViewController as? KMHighlightController)?.reloadData()
-
- } else if (contentViewController is KMNoteController) {
- (contentViewController as? KMNoteController)?.reloadData()
-
- } else if (contentViewController is KMPenController) {
- (contentViewController as? KMPenController)?.reloadData()
-
- } else if (contentViewController is KMEraserController) {
- (contentViewController as? KMEraserController)?.reloadData()
-
- } else if (contentViewController is KMLineController) {
- (contentViewController as? KMLineController)?.reloadData()
-
- } else if (contentViewController is KMRectangleController) {
- (contentViewController as? KMRectangleController)?.viewManager = viewManager
- (contentViewController as? KMRectangleController)?.reloadData()
-
- } else if (contentViewController is KMTextBoxController) {
- (contentViewController as? KMTextBoxController)?.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()
- }
- }
-
- }
|