// // MachineController.swift // Clock Signal // // Created by Thomas Harte on 02/10/2016. // Copyright 2016 Thomas Harte. All rights reserved. // import Cocoa class MachineController: NSObject { var machine: CSMachine! // MARK: IBActions final func prefixedUserDefaultsKey(_ key: String) -> String { return "\(self.machine.userDefaultsPrefix).\(key)" } // MARK: Fast Loading var fastLoadingUserDefaultsKey: String { return prefixedUserDefaultsKey("fastLoading") } @IBOutlet var fastLoadingButton: NSButton? @IBAction func setFastLoading(_ sender: NSButton!) { let useFastLoadingHack = sender.state == .on machine.useFastLoadingHack = useFastLoadingHack UserDefaults.standard.set(useFastLoadingHack, forKey: fastLoadingUserDefaultsKey) } // MARK: Quick Boot var bootQuicklyUserDefaultsKey: String { return prefixedUserDefaultsKey("bootQuickly") } @IBOutlet var fastBootingButton: NSButton? @IBAction func setFastBooting(_ sender: NSButton!) { let useQuickBootingHack = sender.state == .on machine.useQuickBootingHack = useQuickBootingHack UserDefaults.standard.set(useQuickBootingHack, forKey: bootQuicklyUserDefaultsKey) } // MARK: Display-Type Selection fileprivate func signalForTag(tag: Int) -> CSMachineVideoSignal { switch tag { case 1: return .composite case 2: return .sVideo case 3: return .monochromeComposite default: break } return .RGB } var displayTypeUserDefaultsKey: String { return prefixedUserDefaultsKey("displayType") } @IBOutlet var displayTypeButton: NSPopUpButton? @IBAction func setDisplayType(_ sender: NSPopUpButton!) { if let selectedItem = sender.selectedItem { machine.videoSignal = signalForTag(tag: selectedItem.tag) UserDefaults.standard.set(selectedItem.tag, forKey: self.displayTypeUserDefaultsKey) } } // MARK: Restoring user defaults func establishStoredOptions() { let standardUserDefaults = UserDefaults.standard standardUserDefaults.register(defaults: [ fastLoadingUserDefaultsKey: true, bootQuicklyUserDefaultsKey: true, displayTypeUserDefaultsKey: 0 ]) if let fastLoadingButton = self.fastLoadingButton { let useFastLoadingHack = standardUserDefaults.bool(forKey: self.fastLoadingUserDefaultsKey) machine.useFastLoadingHack = useFastLoadingHack fastLoadingButton.state = useFastLoadingHack ? .on : .off } if let fastBootingButton = self.fastBootingButton { let bootQuickly = standardUserDefaults.bool(forKey: self.bootQuicklyUserDefaultsKey) machine.useQuickBootingHack = bootQuickly fastBootingButton.state = bootQuickly ? .on : .off } if let displayTypeButton = self.displayTypeButton { // Enable or disable options as per machine support. var titlesToRemove: [String] = [] for item in displayTypeButton.itemArray { if !machine.supportsVideoSignal(signalForTag(tag: item.tag)) { titlesToRemove.append(item.title) } } for title in titlesToRemove { displayTypeButton.removeItem(withTitle: title) } let displayType = standardUserDefaults.integer(forKey: self.displayTypeUserDefaultsKey) displayTypeButton.selectItem(withTag: displayType) setDisplayType(displayTypeButton) } } }