[kit] Show close button in prefs window if needed

This commit is contained in:
Eryn Wells 2017-08-24 17:57:50 -07:00
parent 5d6cf1a575
commit b028a9ed2e

View file

@ -30,6 +30,11 @@ public class PreferencesViewController: NSViewController {
}
public var defaults = UserDefaults.standard
public var showsCloseButton: Bool = true {
didSet {
showCloseButtonIfNeeded()
}
}
private var colorStackView = NSStackView()
private var colorViews = [ColorView]()
@ -51,6 +56,24 @@ public class PreferencesViewController: NSViewController {
return button
}()
private lazy var closeView: NSView = {
let container = NSView()
container.translatesAutoresizingMaskIntoConstraints = false
let buttonTitle = NSLocalizedString("Close", comment: "close button label")
let button = NSButton(title: buttonTitle, target: self, action: #selector(PreferencesViewController.closeWindow))
button.translatesAutoresizingMaskIntoConstraints = false
container.addSubview(button)
NSLayoutConstraint.activate([
button.topAnchor.constraint(equalTo: container.topAnchor),
button.bottomAnchor.constraint(equalTo: container.bottomAnchor),
button.trailingAnchor.constraint(equalTo: container.trailingAnchor),
])
return container
}()
override public func loadView() {
let view = NSView()
view.translatesAutoresizingMaskIntoConstraints = false
@ -84,6 +107,8 @@ public class PreferencesViewController: NSViewController {
colorViews.append(colorView)
}
showCloseButtonIfNeeded()
self.view = view
}
@ -119,6 +144,14 @@ public class PreferencesViewController: NSViewController {
colorPanel.setAction(#selector(PreferencesViewController.colorPanelDidUpdateValue))
}
private func showCloseButtonIfNeeded() {
if showsCloseButton {
colorStackView.addArrangedSubview(closeView)
} else {
colorStackView.removeArrangedSubview(closeView)
}
}
// MARK: - Actions
func colorPanelDidUpdateValue(_ colorPanel: NSColorPanel) {
@ -130,6 +163,10 @@ public class PreferencesViewController: NSViewController {
postColorNotification()
}
func closeWindow() {
self.view.window?.close()
}
// MARK: - Private
func updateColorViewVisibility() {