/
MainViewController.swift
64 lines (51 loc) · 1.93 KB
/
MainViewController.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//
// MainViewController.swift
// eduVPN
//
import Cocoa
class MainViewController: NSViewController {
@IBOutlet var containerView: NSView!
@IBOutlet weak var cancelButton: NSButton!
@IBOutlet weak var activityIndicatorView: NSVisualEffectView!
@IBOutlet weak var activityIndicator: NSProgressIndicator!
@IBOutlet weak var activityLabel: NSTextField!
var cancellable: Cancellable?
override func viewDidLoad() {
super.viewDidLoad()
view.wantsLayer = true
activityIndicatorView.isHidden = true
}
func show(viewController: NSViewController,
options: NSViewController.TransitionOptions = [],
animated: Bool = true,
completionHandler: (() -> Void)?) {
let currentViewController = self.currentViewController
if !children.contains(viewController) {
addChild(viewController)
}
// Ensure the layer is available
currentViewController.view.superview?.wantsLayer = true
if animated {
assert(currentViewController.view.superview != nil)
transition(from: currentViewController, to: viewController, options: options) {
currentViewController.removeFromParent()
completionHandler?()
}
} else {
assert(currentViewController.view.superview != nil)
NSAnimationContext.runAnimationGroup({ context in
context.duration = 0
transition(from: currentViewController, to: viewController, options: options) {
currentViewController.removeFromParent()
completionHandler?()
}
}, completionHandler: nil)
}
}
var currentViewController: NSViewController {
return children[0]
}
@IBAction func cancel(_ sender: Any) {
cancellable?.cancel()
}
}