diff --git a/OSBindings/Mac/Clock Signal/Base.lproj/MachineDocument.xib b/OSBindings/Mac/Clock Signal/Base.lproj/MachineDocument.xib index 5dd259d78..60249a6b3 100644 --- a/OSBindings/Mac/Clock Signal/Base.lproj/MachineDocument.xib +++ b/OSBindings/Mac/Clock Signal/Base.lproj/MachineDocument.xib @@ -1,10 +1,12 @@ - + - + + + - + diff --git a/OSBindings/Mac/Clock Signal/Document Controller/DocumentController.swift b/OSBindings/Mac/Clock Signal/Document Controller/DocumentController.swift index 62e221294..78c1c53da 100644 --- a/OSBindings/Mac/Clock Signal/Document Controller/DocumentController.swift +++ b/OSBindings/Mac/Clock Signal/Document Controller/DocumentController.swift @@ -9,20 +9,20 @@ import Cocoa class DocumentController: NSDocumentController { - override func newDocument(_ sender: Any?) { - // Show the new document window. - Bundle.main.loadNibNamed(NSNib.Name(rawValue: "MachinePicker"), owner: self, topLevelObjects: nil) - } - - @IBOutlet var machinePicker: MachinePicker? - @IBAction func createMachine(_ sender: NSButton?) { - let machine = machinePicker!.selectedMachine() - let document: MachineDocument = try! openUntitledDocumentAndDisplay(true) as! MachineDocument - document.configureAs(machine) - sender?.window?.close() - } - - @IBAction func cancelCreateMachine(_ sender: NSButton?) { - sender?.window?.close() - } +// override func newDocument(_ sender: Any?) { +// // Show the new document window. +// Bundle.main.loadNibNamed(NSNib.Name(rawValue: "MachinePicker"), owner: self, topLevelObjects: nil) +// } +// +// @IBOutlet var machinePicker: MachinePicker? +// @IBAction func createMachine(_ sender: NSButton?) { +// let machine = machinePicker!.selectedMachine() +// let document: MachineDocument = try! openUntitledDocumentAndDisplay(true) as! MachineDocument +// document.configureAs(machine) +// sender?.window?.close() +// } +// +// @IBAction func cancelCreateMachine(_ sender: NSButton?) { +// sender?.window?.close() +// } } diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift index defa25a86..2322a876d 100644 --- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift @@ -28,6 +28,7 @@ class MachineDocument: return nil } } + var optionsPanelNibName: String? func aspectRatio() -> NSSize { return NSSize(width: 4.0, height: 3.0) @@ -50,6 +51,14 @@ class MachineDocument: super.windowControllerDidLoadNib(aController) aController.window?.contentAspectRatio = self.aspectRatio() setupMachineOutput() + + // If there's no machine but the NIB has loaded, show the new machine dialogue + if self.machine == nil { + Bundle.main.loadNibNamed(NSNib.Name(rawValue: "MachinePicker"), owner: self, topLevelObjects: nil) + aController.window?.beginSheet(self.machinePickerPanel!, completionHandler: { (response) in + Swift.print("\(response)") + }) + } } fileprivate func setupMachineOutput() { @@ -60,6 +69,14 @@ class MachineDocument: machine.setView(openGLView, aspectRatio: Float(aspectRatio.width / aspectRatio.height)) }) + // attach an options panel if one is available + if let optionsPanelNibName = self.optionsPanelNibName { + Bundle.main.loadNibNamed(NSNib.Name(rawValue: optionsPanelNibName), owner: self, topLevelObjects: nil) + self.optionsPanel.machine = machine + self.optionsPanel?.establishStoredOptions() + showOptions(self) + } + machine.delegate = self self.bestEffortUpdater = CSBestEffortUpdater() @@ -121,14 +138,8 @@ class MachineDocument: func configureAs(_ analysis: CSStaticAnalyser) { if let machine = CSMachine(analyser: analysis) { self.machine = machine + self.optionsPanelNibName = analysis.optionsPanelNibName setupMachineOutput() - - if let optionsPanelNibName = analysis.optionsPanelNibName { - Bundle.main.loadNibNamed(NSNib.Name(rawValue: optionsPanelNibName), owner: self, topLevelObjects: nil) - self.optionsPanel.machine = self.machine - self.optionsPanel?.establishStoredOptions() - showOptions(self) - } } } @@ -141,6 +152,11 @@ class MachineDocument: } } + convenience init(type typeName: String) throws { + self.init() + self.fileType = typeName + } + // MARK: the pasteboard func paste(_ sender: AnyObject!) { let pasteboard = NSPasteboard.general @@ -193,21 +209,42 @@ class MachineDocument: // MARK: Input management func windowDidResignKey(_ notification: Notification) { -// self.machine.clearAllKeys() + if let machine = self.machine { + machine.clearAllKeys() + } } func keyDown(_ event: NSEvent) { - self.machine.setKey(event.keyCode, characters: event.characters, isPressed: true) + if let machine = self.machine { + machine.setKey(event.keyCode, characters: event.characters, isPressed: true) + } } func keyUp(_ event: NSEvent) { - self.machine.setKey(event.keyCode, characters: event.characters, isPressed: false) + if let machine = self.machine { + machine.setKey(event.keyCode, characters: event.characters, isPressed: false) + } } func flagsChanged(_ newModifiers: NSEvent) { - self.machine.setKey(VK_Shift, characters: nil, isPressed: newModifiers.modifierFlags.contains(.shift)) - self.machine.setKey(VK_Control, characters: nil, isPressed: newModifiers.modifierFlags.contains(.control)) - self.machine.setKey(VK_Command, characters: nil, isPressed: newModifiers.modifierFlags.contains(.command)) - self.machine.setKey(VK_Option, characters: nil, isPressed: newModifiers.modifierFlags.contains(.option)) + if let machine = self.machine { + machine.setKey(VK_Shift, characters: nil, isPressed: newModifiers.modifierFlags.contains(.shift)) + machine.setKey(VK_Control, characters: nil, isPressed: newModifiers.modifierFlags.contains(.control)) + machine.setKey(VK_Command, characters: nil, isPressed: newModifiers.modifierFlags.contains(.command)) + machine.setKey(VK_Option, characters: nil, isPressed: newModifiers.modifierFlags.contains(.option)) + } + } + + // MARK: New machine creation + @IBOutlet var machinePicker: MachinePicker? + @IBOutlet var machinePickerPanel: NSPanel? + @IBAction func createMachine(_ sender: NSButton?) { + self.configureAs(machinePicker!.selectedMachine()) + machinePicker = nil + sender?.window?.close() + } + + @IBAction func cancelCreateMachine(_ sender: NSButton?) { + close() } } diff --git a/OSBindings/Mac/Clock Signal/New Group/Base.lproj/MachinePicker.xib b/OSBindings/Mac/Clock Signal/New Group/Base.lproj/MachinePicker.xib index b3841fa84..3841f759e 100644 --- a/OSBindings/Mac/Clock Signal/New Group/Base.lproj/MachinePicker.xib +++ b/OSBindings/Mac/Clock Signal/New Group/Base.lproj/MachinePicker.xib @@ -6,15 +6,16 @@ - + + - - + + @@ -62,7 +63,7 @@ - + @@ -76,7 +77,7 @@ - + @@ -84,14 +85,28 @@ + + + + + + + + + + + + + + - - + + - - + +