KMSideViewController.swift 4.0 KB

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