123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- //
- // KMSplitPDFViewController.swift
- // PDF Reader Pro
- //
- // Created by Niehaoyu on 2024/10/29.
- //
- import Cocoa
- import KMComponentLibrary
- @objc protocol KMSplitPDFViewControllerDelegate: AnyObject {
-
- @objc optional func splitPDFViewControllerDidUpdateFilePath(_ controller: KMSplitPDFViewController)
-
- @objc optional func splitPDFViewControllerDidUpdatePDFScale(_ controller: KMSplitPDFViewController)
-
- @objc optional func splitPDFViewControllerDidUpdatePDFPageIndex(_ controller: KMSplitPDFViewController)
-
- }
- class KMSplitPDFViewController: NSViewController {
- @IBOutlet var contendView: NSView!
-
- @IBOutlet var emptyView: ComponentEmpty!
-
- @IBOutlet var splitToolbar: KMPageNumberPromptView!
-
- var pdfView: CPDFListView?
- var viewManager: KMPDFViewManager?
-
- var inPDFFirst: Bool = false
- var outPDFFirst: Bool = false
- weak open var delegate: KMSplitPDFViewControllerDelegate?
- deinit {
- pdfView?.removeFromSuperview()
-
- KMPrint(self.className + " deinit.")
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
-
- view.wantsLayer = true
- view.layer?.backgroundColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-low").cgColor
-
- setupProperty()
-
- reloadData()
- }
-
- func setupProperty() {
- emptyView.properties = ComponentEmptyProperty(emptyType: .add_File,
- text: KMLocalizedString("No Recently Opened Files"),
- subText: KMLocalizedString("Click Open File or drag-and-drop file here to open them."))
- emptyView.setTarget(self, action: #selector(emptyViewAddFileClicked(_:)))
-
- if pdfView == nil {
- pdfView = CPDFListView.init()
- }
- pdfView?.frame = contendView.bounds
- pdfView?.delegate = self
- pdfView?.autoresizingMask = [.width, .height]
- contendView.addSubview(pdfView!, positioned: .below, relativeTo: splitToolbar)
-
- }
-
- func reloadData() {
- if let fileURL = viewManager?.splitPDFFileURL {
- emptyView.isHidden = true
- pdfView?.isHidden = false
-
- let document = CPDFDocument(url: fileURL)
- let isLocked = document?.isLocked ?? false
- if isLocked {
- if let pw = viewManager?.splitPDFFilePassword {
- document?.unlock(withPassword: pw)
- }
- }
- pdfView?.document = document
-
- } else {
- emptyView.isHidden = false
- pdfView?.isHidden = true
- }
-
- refreshToolbarState()
- }
-
- func refreshToolbarState() {
- if viewManager?.splitShowBottomBar == true &&
- viewManager?.splitPDFFileURL != nil {
-
- splitToolbar.isHidden = false
-
- splitToolbar.pdfView = self.pdfView
-
- reloadToolbarInfo()
- } else {
- splitToolbar.isHidden = true
-
- }
- }
-
- func reloadToolbarInfo() {
- splitToolbar.reloadData()
-
- }
-
- @objc func emptyViewAddFileClicked(_ sender: NSView) {
- let openPanel = NSOpenPanel()
- openPanel.allowedFileTypes = ["pdf", "PDF"]
- openPanel.allowsMultipleSelection = false
- openPanel.beginSheetModal(for: self.view.window!) { [weak self] result in
- if result == NSApplication.ModalResponse.OK {
- if let url = openPanel.url {
- guard let weakSelf = self else { return }
-
- weakSelf.viewManager?.splitPDFFileURL = url
-
- let document = CPDFDocument(url: url)
- let isLocked = document?.isLocked ?? false
- if isLocked {
-
- }
- weakSelf.reloadData()
-
- weakSelf.delegate?.splitPDFViewControllerDidUpdateFilePath?(weakSelf)
- }
- }
- }
- }
-
- }
- //MARK: - CPDFViewDelegate PDFView代理
- extension KMSplitPDFViewController: CPDFViewDelegate {
- func pdfViewDocumentDidLoaded(_ pdfView: CPDFView!) {
- reloadToolbarInfo()
- }
-
- func pdfViewCurrentPageDidChanged(_ pdfView: CPDFView!) {
- reloadToolbarInfo()
-
- if viewManager?.splitSyncScroll == true {
- if inPDFFirst == false && outPDFFirst == false {
- inPDFFirst = true
- delegate?.splitPDFViewControllerDidUpdatePDFPageIndex?(self)
-
- NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(pdfUpdatedFinish), object: nil)
- self.perform(#selector(pdfUpdatedFinish), with: nil, afterDelay: 1)
-
- } else if inPDFFirst == true {
- delegate?.splitPDFViewControllerDidUpdatePDFPageIndex?(self)
-
- NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(pdfUpdatedFinish), object: nil)
- self.perform(#selector(pdfUpdatedFinish), with: nil, afterDelay: 1)
- }
- }
-
- }
-
- func pdfViewScaleDidChanged(_ pdfView: CPDFView!) {
- reloadToolbarInfo()
-
- if viewManager?.splitSyncScroll == true {
- if inPDFFirst == false && outPDFFirst == false {
- inPDFFirst = true
-
- NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(pdfUpdatedFinish), object: nil)
- self.perform(#selector(pdfUpdatedFinish), with: nil, afterDelay: 1)
-
- } else if inPDFFirst == true {
- delegate?.splitPDFViewControllerDidUpdatePDFScale?(self)
-
- NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(pdfUpdatedFinish), object: nil)
- self.perform(#selector(pdfUpdatedFinish), with: nil, afterDelay: 1)
- }
- }
- }
-
- @objc func pdfUpdatedFinish() {
- inPDFFirst = false
- outPDFFirst = false
-
- }
-
- }
|