KMSideViewController.swift 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. //
  2. // KMSideViewController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lxy on 2022/11/17.
  6. //
  7. import Cocoa
  8. class KMSideViewController: NSViewController {
  9. var isAnimating = false
  10. var listView : CPDFListView!
  11. var mainViewController : KMMainViewController!
  12. // @IBOutlet weak var mainController: KMMainWindowController!
  13. // @IBOutlet weak var gradientView: SKGradientView!
  14. @IBOutlet weak var button: NSSegmentedControl!
  15. @IBOutlet weak var alternateButton: NSSegmentedControl!
  16. @IBOutlet weak var searchField: NSSearchField!
  17. @IBOutlet weak var currentView: NSView!
  18. private let DURATION = 0.7
  19. deinit {
  20. KMPrint("KMSideViewController deinit.")
  21. NotificationCenter.default.removeObserver(self)
  22. }
  23. override func loadView() {
  24. super.loadView()
  25. // [gradientView setAutoTransparent:YES];
  26. // [gradientView setMinSize:NSMakeSize(GRADIENT_MIN_WIDTH, NSHeight([gradientView frame]))];
  27. }
  28. override func viewDidLoad() {
  29. super.viewDidLoad()
  30. // Do view setup here.
  31. }
  32. func requiresAlternateButton(forView aview: NSView?) -> Bool {
  33. return false
  34. }
  35. func replaceSideView(_ newView: NSView, animate: Bool) {
  36. if (newView.window != nil) {
  37. return
  38. }
  39. var _animated = animate
  40. if (UserDefaults.standard.bool(forKey: SKDisableAnimationsKey)) {
  41. _animated = false
  42. }
  43. let oldView = self.currentView
  44. self.currentView = newView
  45. let wasAlternate = self.requiresAlternateButton(forView: oldView)
  46. let isAlternate = self.requiresAlternateButton(forView: newView)
  47. let changeButton = wasAlternate != isAlternate
  48. let oldButton = wasAlternate ? alternateButton : button
  49. let newButton = isAlternate ? alternateButton : button;
  50. let buttonView = oldButton?.superview
  51. let contentView = oldView?.superview
  52. var firstResponder = oldView?.window?.firstResponder
  53. if let data = (firstResponder as? NSView)?.isDescendant(of: oldView!), data {
  54. firstResponder = newView
  55. } else if (wasAlternate != isAlternate && oldButton!.isEqual(to: firstResponder)) {
  56. firstResponder = newButton
  57. } else {
  58. firstResponder = nil
  59. }
  60. // [[SKImageToolTipWindow sharedToolTipWindow] orderOut:self];
  61. if (changeButton != nil) {
  62. newButton?.frame = oldButton?.frame ?? .zero
  63. }
  64. newView.frame = oldView?.frame ?? .zero
  65. if (_animated == false) {
  66. contentView?.replaceSubview(oldView!, with: newView)
  67. if (changeButton != nil) {
  68. oldButton?.superview?.replaceSubview(oldButton!, with: newButton!)
  69. firstResponder?.km_window()?.makeFirstResponder(firstResponder)
  70. contentView?.window?.recalculateKeyViewLoop()
  71. }
  72. } else {
  73. isAnimating = true
  74. contentView?.wantsLayer = true
  75. contentView?.displayIfNeeded()
  76. if (changeButton != nil) {
  77. buttonView?.wantsLayer = true
  78. buttonView?.displayIfNeeded()
  79. }
  80. NSAnimationContext.runAnimationGroup { context in
  81. }
  82. NSAnimationContext.runAnimationGroup { context in
  83. context.duration = DURATION
  84. contentView?.animator().replaceSubview(oldView!, with: newView)
  85. if (changeButton != nil) {
  86. buttonView?.animator().replaceSubview(oldButton!, with: newButton!)
  87. }
  88. } completionHandler: {
  89. contentView?.wantsLayer = false
  90. if (changeButton) {
  91. buttonView?.wantsLayer = false
  92. }
  93. firstResponder?.km_window()?.makeFirstResponder(firstResponder)
  94. contentView?.window?.recalculateKeyViewLoop()
  95. self.isAnimating = false
  96. }
  97. }
  98. }
  99. /*
  100. #define GRADIENT_MIN_WIDTH 111.0
  101. */
  102. }