diff --git a/Evergreen/ProgressWindow/IndeterminateProgressWindowController.swift b/Evergreen/ProgressWindow/IndeterminateProgressWindowController.swift index 644570852..b09b28894 100644 --- a/Evergreen/ProgressWindow/IndeterminateProgressWindowController.swift +++ b/Evergreen/ProgressWindow/IndeterminateProgressWindowController.swift @@ -8,7 +8,48 @@ import Cocoa -class IndeterminateProgressWindowController: NSWindowController { +func runIndeterminateProgressWithMessage(_ message: String) { + + IndeterminateProgressController.beginProgressWithMessage(message) +} + +func stopIndeterminateProgress() { + + IndeterminateProgressController.endProgress() +} + +private final class IndeterminateProgressController { + + static var windowController: IndeterminateProgressWindowController? + static var runningProgressWindow = false + + static func beginProgressWithMessage(_ message: String) { + + if runningProgressWindow { + assertionFailure("Expected !runningProgressWindow.") + endProgress() + } + + runningProgressWindow = true + windowController = IndeterminateProgressWindowController(message: message) + NSApplication.shared.runModal(for: windowController!.window!) + } + + static func endProgress() { + + if !runningProgressWindow { + assertionFailure("Expected runningProgressWindow.") + return + } + + runningProgressWindow = false + NSApplication.shared.stopModal() + windowController?.close() + windowController = nil + } +} + +private final class IndeterminateProgressWindowController: NSWindowController { @IBOutlet var messageLabel: NSTextField! @IBOutlet var progressIndicator: NSProgressIndicator! @@ -26,13 +67,5 @@ class IndeterminateProgressWindowController: NSWindowController { } } -func runIndeterminateProgressWithMessage(_ message: String) { - let windowController = IndeterminateProgressWindowController(message: message) - NSApplication.shared.runModal(for: windowController.window!) -} -func stopIndeterminateProgress() { - - NSApplication.shared.stopModal() -}