123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- //
- // KMSideViewController.swift
- // PDF Reader Pro
- //
- // Created by lxy on 2022/11/17.
- //
- import Cocoa
- class KMSideViewController: NSViewController {
- @IBOutlet weak var searchField: NSSearchField!
- @IBOutlet weak var currentView: NSView!
-
- var isAnimating = false
- weak var listView : CPDFListView?
- weak var mainViewController : KMMainViewController?
-
- private let duration_ = 0.7
-
- deinit {
- KMPrint("KMSideViewController deinit.")
-
- NotificationCenter.default.removeObserver(self)
- }
-
- override func loadView() {
- super.loadView()
-
- // [gradientView setAutoTransparent:YES];
- // [gradientView setMinSize:NSMakeSize(GRADIENT_MIN_WIDTH, NSHeight([gradientView frame]))];
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
- }
-
- func replaceSideView(_ newView: NSView, animate: Bool) {
- if (newView.window != nil) {
- return
- }
-
- var animated = animate
- if (UserDefaults.standard.bool(forKey: SKDisableAnimationsKey)) {
- animated = false
- }
-
- let oldView = self.currentView
- self.currentView = newView
- let contentView = oldView?.superview
-
- var firstResponder = oldView?.window?.firstResponder
- if let data = oldView {
- let des = (firstResponder as? NSView)?.isDescendant(of: data) ?? false
- if des {
- firstResponder = newView
- } else {
- firstResponder = nil
- }
- } else {
- firstResponder = nil
- }
-
- newView.frame = oldView?.frame ?? .zero
- if (animated == false) {
- if let data = oldView {
- contentView?.replaceSubview(data, with: newView)
- }
- firstResponder?.km_window()?.makeFirstResponder(firstResponder)
- contentView?.window?.recalculateKeyViewLoop()
- } else {
- self.isAnimating = true
- contentView?.wantsLayer = true
- contentView?.displayIfNeeded()
- NSAnimationContext.runAnimationGroup { context in
- context.duration = self.duration_
- if let data = oldView {
- contentView?.animator().replaceSubview(data, with: newView)
- }
- } completionHandler: {
- contentView?.wantsLayer = false
- firstResponder?.km_window()?.makeFirstResponder(firstResponder)
- contentView?.window?.recalculateKeyViewLoop()
- self.isAnimating = false
- }
- }
- }
-
- /*
- #define GRADIENT_MIN_WIDTH 111.0
- */
- }
- // MARK: - listView
- extension KMSideViewController {
- func pageCount() -> Int {
- return Int(self.pdfDocument()?.pageCount ?? 0)
- }
-
- func pdfDocument() -> CPDFDocument? {
- return self.listView?.document
- }
-
- func hideNotes() -> Bool {
- return self.listView?.hideNotes ?? false
- }
-
- func allowsNotes() -> Bool {
- return self.listView?.allowsNotes() ?? false
- }
-
- func currentPage() -> CPDFPage? {
- return self.listView?.currentPage()
- }
-
- func currentDestination() -> CPDFDestination? {
- return self.listView?.currentDestination
- }
-
- func currentPageIndex() -> Int {
- return self.listView?.currentPageIndex ?? NSNotFound
- }
-
- func isLocked() -> Bool {
- return self.pdfDocument()?.isLocked ?? true
- }
-
- func scaleFactor() -> Float {
- return Float(self.listView?.scaleFactor ?? 0)
- }
-
- func displayBox() -> CPDFDisplayBox {
- return self.listView?.displayBox ?? .cropBox
- }
-
- func allowsPrinting() -> Bool {
- return self.pdfDocument()?.allowsPrinting ?? true
- }
-
- func bookmarks() -> [CPDFBookmark]? {
- return self.pdfDocument()?.bookmarks()
- }
-
- func outlineRoot() -> CPDFOutline? {
- return self.pdfDocument()?.outlineRoot()
- }
-
- func setNewOutlineRoot() -> CPDFOutline? {
- return self.pdfDocument()?.setNewOutlineRoot()
- }
-
- func layoutDocumentView() {
- self.listView?.layoutDocumentView()
- }
- }
|