mirror of
https://github.com/MonitorControl/MonitorControl.git
synced 2026-05-16 14:15:55 -06:00
98 lines
3.4 KiB
Swift
98 lines
3.4 KiB
Swift
import Cocoa
|
|
import os.log
|
|
import Preferences
|
|
import ServiceManagement
|
|
|
|
class MainPrefsViewController: NSViewController, PreferencePane {
|
|
let preferencePaneIdentifier = Preferences.PaneIdentifier.main
|
|
let preferencePaneTitle: String = NSLocalizedString("General", comment: "Shown in the main prefs window")
|
|
|
|
var toolbarItemIcon: NSImage {
|
|
if #available(macOS 11.0, *) {
|
|
return NSImage(systemSymbolName: "switch.2", accessibilityDescription: "Display")!
|
|
} else {
|
|
// Fallback on earlier versions
|
|
return NSImage(named: NSImage.preferencesGeneralName)!
|
|
}
|
|
}
|
|
|
|
let prefs = UserDefaults.standard
|
|
|
|
@IBOutlet var versionLabel: NSTextField!
|
|
@IBOutlet var startAtLogin: NSButton!
|
|
@IBOutlet var showContrastSlider: NSButton!
|
|
@IBOutlet var lowerContrast: NSButton!
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
self.setVersionNumber()
|
|
}
|
|
|
|
@available(macOS, deprecated: 10.10)
|
|
override func viewWillAppear() {
|
|
super.viewWillAppear()
|
|
let startAtLogin = (SMCopyAllJobDictionaries(kSMDomainUserLaunchd).takeRetainedValue() as? [[String: AnyObject]])?.first { $0["Label"] as? String == "\(Bundle.main.bundleIdentifier!)Helper" }?["OnDemand"] as? Bool ?? false
|
|
self.startAtLogin.state = startAtLogin ? .on : .off
|
|
self.showContrastSlider.state = self.prefs.bool(forKey: Utils.PrefKeys.showContrast.rawValue) ? .on : .off
|
|
self.lowerContrast.state = self.prefs.bool(forKey: Utils.PrefKeys.lowerContrast.rawValue) ? .on : .off
|
|
}
|
|
|
|
@IBAction func startAtLoginClicked(_ sender: NSButton) {
|
|
switch sender.state {
|
|
case .on:
|
|
Utils.setStartAtLogin(enabled: true)
|
|
case .off:
|
|
Utils.setStartAtLogin(enabled: false)
|
|
default: break
|
|
}
|
|
}
|
|
|
|
@IBAction func showContrastSliderClicked(_ sender: NSButton) {
|
|
switch sender.state {
|
|
case .on:
|
|
self.prefs.set(true, forKey: Utils.PrefKeys.showContrast.rawValue)
|
|
case .off:
|
|
self.prefs.set(false, forKey: Utils.PrefKeys.showContrast.rawValue)
|
|
default: break
|
|
}
|
|
|
|
#if DEBUG
|
|
os_log("Toggle show contrast slider state: %{public}@", type: .info, sender.state == .on ? "on" : "off")
|
|
#endif
|
|
|
|
NotificationCenter.default.post(name: Notification.Name(Utils.PrefKeys.showContrast.rawValue), object: nil)
|
|
}
|
|
|
|
@IBAction func lowerContrastClicked(_ sender: NSButton) {
|
|
switch sender.state {
|
|
case .on:
|
|
self.prefs.set(true, forKey: Utils.PrefKeys.lowerContrast.rawValue)
|
|
case .off:
|
|
self.prefs.set(false, forKey: Utils.PrefKeys.lowerContrast.rawValue)
|
|
default: break
|
|
}
|
|
|
|
#if DEBUG
|
|
os_log("Toggle lower contrast after brightness state: %{public}@", type: .info, sender.state == .on ? "on" : "off")
|
|
#endif
|
|
}
|
|
|
|
fileprivate func setVersionNumber() {
|
|
let versionName = NSLocalizedString("Version", comment: "Version")
|
|
let buildName = NSLocalizedString("Build", comment: "Build")
|
|
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "error"
|
|
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "error"
|
|
|
|
#if arch(arm64)
|
|
|
|
let arch: String = NSLocalizedString("Apple Silicon", comment: "Apple Silicon designation (shown after the version number in Preferences)")
|
|
|
|
#else
|
|
|
|
let arch: String = NSLocalizedString("Intel", comment: "Intel designation (shown after the version number in Preferences)")
|
|
|
|
#endif
|
|
|
|
self.versionLabel.stringValue = "\(versionName) \(versionNumber) (\(buildName) \(buildNumber)) \(arch)"
|
|
}
|
|
}
|