You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

108 lines
3.5 KiB

// Copyright © 2015 Abhishek Banthia
import Cocoa
class CenteredTabViewController: NSTabViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Setup localized tab labels
tabViewItems.forEach { item in
if let identifier = item.identifier as? String {
item.label = NSLocalizedString(identifier, comment: "Tab View Item Label for \(identifier)")
}
}
}
}
class OneWindowController: NSWindowController {
private var themeDidChangeNotification: NSObjectProtocol?
override func windowDidLoad() {
super.windowDidLoad()
setup()
themeDidChangeNotification = NotificationCenter.default.addObserver(forName: .themeDidChangeNotification, object: nil, queue: OperationQueue.main) { _ in
NSAnimationContext.runAnimationGroup { context in
context.duration = 1
context.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut)
self.window?.animator().backgroundColor = Themer.shared().mainBackgroundColor()
}
self.setupToolbarImages()
}
}
deinit {
if let themeDidChangeNotif = themeDidChangeNotification {
NotificationCenter.default.removeObserver(themeDidChangeNotif)
}
}
private func setup() {
setupWindow()
setupToolbarImages()
}
private func setupWindow() {
window?.titlebarAppearsTransparent = true
window?.backgroundColor = Themer.shared().mainBackgroundColor()
window?.identifier = NSUserInterfaceItemIdentifier("Preferences")
}
private func setupToolbarImages() {
guard let tabViewController = contentViewController as? CenteredTabViewController else {
return
}
let themer = Themer.shared()
var identifierTOImageMapping: [String: NSImage] = ["Appearance Tab": themer.appearanceTabImage(),
"Calendar Tab": themer.calendarTabImage(),
"Permissions Tab": themer.privacyTabImage()]
if let prefsTabImage = themer.generalTabImage() {
identifierTOImageMapping["Preferences Tab"] = prefsTabImage
}
if let aboutTabImage = themer.aboutTabImage() {
identifierTOImageMapping["About Tab"] = aboutTabImage
}
tabViewController.tabViewItems.forEach { tabViewItem in
let identity = (tabViewItem.identifier as? String) ?? ""
if identifierTOImageMapping[identity] != nil {
tabViewItem.image = identifierTOImageMapping[identity]
}
}
}
// MARK: Public
func openPermissionsPane() {
openPreferenceTab(at: 3)
NSApp.activate(ignoringOtherApps: true)
}
// Action mapped to the + button in the PanelController. We should always open the General Pane when the + button is clicked.
func openGeneralPane() {
openPreferenceTab(at: 0)
NSApp.activate(ignoringOtherApps: true)
}
private func openPreferenceTab(at index: Int) {
guard let window = window else {
return
}
if !window.isMainWindow || !window.isVisible {
showWindow(nil)
}
guard let tabViewController = contentViewController as? CenteredTabViewController else {
return
}
tabViewController.selectedTabViewItemIndex = index
}
}