From 7dac791290d8015ed95cfd5a4262b7cca378a7e3 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 3 Apr 2018 18:47:07 -0400 Subject: [PATCH] Causes the machine picker to show as a sheet. Albeit with some user experience issues lingering. --- .../Base.lproj/MachineDocument.xib | 2 +- .../Documents/MachineDocument.swift | 21 +++++++++----- .../New Group/Base.lproj/MachinePicker.xib | 28 +++++-------------- 3 files changed, 22 insertions(+), 29 deletions(-) diff --git a/OSBindings/Mac/Clock Signal/Base.lproj/MachineDocument.xib b/OSBindings/Mac/Clock Signal/Base.lproj/MachineDocument.xib index 60249a6b3..5525b968c 100644 --- a/OSBindings/Mac/Clock Signal/Base.lproj/MachineDocument.xib +++ b/OSBindings/Mac/Clock Signal/Base.lproj/MachineDocument.xib @@ -25,7 +25,7 @@ - + diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift index 2322a876d..7ee64df33 100644 --- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift @@ -52,12 +52,16 @@ class MachineDocument: 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 { + } + + // Attempting to show a sheet before the window is visible (such as when the NIB is loaded) results in + // a sheet mysteriously floating on its own. For now, use windowDidUpdate as a proxy to know that the window + // is visible, though it's a little premature. + func windowDidUpdate(_ notification: Notification) { + if self.shouldShowNewMachinePanel { + self.shouldShowNewMachinePanel = false Bundle.main.loadNibNamed(NSNib.Name(rawValue: "MachinePicker"), owner: self, topLevelObjects: nil) - aController.window?.beginSheet(self.machinePickerPanel!, completionHandler: { (response) in - Swift.print("\(response)") - }) + self.windowControllers[0].window?.beginSheet(self.machinePickerPanel!, completionHandler: nil) } } @@ -87,8 +91,9 @@ class MachineDocument: setupAudioQueueClockRate() - // bring OpenGL view-holding window on top of the options panel + // bring OpenGL view-holding window on top of the options panel and show the content openGLView.window!.makeKeyAndOrderFront(self) + openGLView.isHidden = false // start accepting best effort updates self.bestEffortUpdater!.delegate = self @@ -143,6 +148,7 @@ class MachineDocument: } } + fileprivate var shouldShowNewMachinePanel = false override func read(from url: URL, ofType typeName: String) throws { if let analyser = CSStaticAnalyser(fileAt: url) { self.displayName = analyser.displayName @@ -155,6 +161,7 @@ class MachineDocument: convenience init(type typeName: String) throws { self.init() self.fileType = typeName + self.shouldShowNewMachinePanel = true } // MARK: the pasteboard @@ -237,7 +244,7 @@ class MachineDocument: // MARK: New machine creation @IBOutlet var machinePicker: MachinePicker? - @IBOutlet var machinePickerPanel: NSPanel? + @IBOutlet var machinePickerPanel: NSWindow? @IBAction func createMachine(_ sender: NSButton?) { self.configureAs(machinePicker!.selectedMachine()) machinePicker = nil 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 3841f759e..c89b145f0 100644 --- a/OSBindings/Mac/Clock Signal/New Group/Base.lproj/MachinePicker.xib +++ b/OSBindings/Mac/Clock Signal/New Group/Base.lproj/MachinePicker.xib @@ -14,7 +14,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -77,7 +77,7 @@ - + @@ -85,28 +85,14 @@ - - - - - - - - - - - - - - - - + + + + - -