// // KMSideViewController.swift // PDF Reader Pro // // Created by lxy on 2022/11/17. // import Cocoa class KMSideViewController: NSViewController { var isAnimating = false var listView : CPDFListView! var mainViewController : KMMainViewController! // @IBOutlet weak var mainController: KMMainWindowController! // @IBOutlet weak var gradientView: SKGradientView! @IBOutlet weak var button: NSSegmentedControl! @IBOutlet weak var alternateButton: NSSegmentedControl! @IBOutlet weak var searchField: NSSearchField! @IBOutlet weak var currentView: NSView! 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 requiresAlternateButton(forView aview: NSView?) -> Bool { return false } 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 wasAlternate = self.requiresAlternateButton(forView: oldView) let isAlternate = self.requiresAlternateButton(forView: newView) let changeButton = wasAlternate != isAlternate let oldButton = wasAlternate ? alternateButton : button let newButton = isAlternate ? alternateButton : button; let buttonView = oldButton?.superview let contentView = oldView?.superview var firstResponder = oldView?.window?.firstResponder if let data = (firstResponder as? NSView)?.isDescendant(of: oldView!), data { firstResponder = newView } else if (wasAlternate != isAlternate && oldButton!.isEqual(to: firstResponder)) { firstResponder = newButton } else { firstResponder = nil } // [[SKImageToolTipWindow sharedToolTipWindow] orderOut:self]; if (changeButton != nil) { newButton?.frame = oldButton?.frame ?? .zero } newView.frame = oldView?.frame ?? .zero if (_animated == false) { contentView?.replaceSubview(oldView!, with: newView) if (changeButton != nil) { oldButton?.superview?.replaceSubview(oldButton!, with: newButton!) firstResponder?.km_window()?.makeFirstResponder(firstResponder) contentView?.window?.recalculateKeyViewLoop() } } else { isAnimating = true contentView?.wantsLayer = true contentView?.displayIfNeeded() if (changeButton != nil) { buttonView?.wantsLayer = true buttonView?.displayIfNeeded() } NSAnimationContext.runAnimationGroup { context in } NSAnimationContext.runAnimationGroup { context in context.duration = DURATION contentView?.animator().replaceSubview(oldView!, with: newView) if (changeButton != nil) { buttonView?.animator().replaceSubview(oldButton!, with: newButton!) } } completionHandler: { contentView?.wantsLayer = false if (changeButton) { buttonView?.wantsLayer = false } firstResponder?.km_window()?.makeFirstResponder(firstResponder) contentView?.window?.recalculateKeyViewLoop() self.isAnimating = false } } } /* #define GRADIENT_MIN_WIDTH 111.0 */ }