From 68d0885b0d041f82dc27025ba927a47e2178693a Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sat, 3 Feb 2018 21:04:28 -0800 Subject: [PATCH] Get rename sheet working, finally. --- Evergreen/Base.lproj/RenameSheet.xib | 2 +- ...MainWindowController+ContextualMenus.swift | 28 +++++++------ .../Renaming/RenameWindowController.swift | 41 +++++++++---------- 3 files changed, 36 insertions(+), 35 deletions(-) diff --git a/Evergreen/Base.lproj/RenameSheet.xib b/Evergreen/Base.lproj/RenameSheet.xib index d9462606f..e76af7899 100644 --- a/Evergreen/Base.lproj/RenameSheet.xib +++ b/Evergreen/Base.lproj/RenameSheet.xib @@ -15,7 +15,7 @@ - + diff --git a/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift b/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift index feab2b0ed..4a0a99885 100644 --- a/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift +++ b/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift @@ -67,20 +67,24 @@ extension MainWindowController { return } - renameWindowController = RenameWindowController(originalTitle: object.nameForDisplay) { (newTitle) in - guard let newTitle = newTitle else { - return - } - if let feed = object as? Feed { - feed.editedName = newTitle - } - else if let folder = object as? Folder { - folder.name = newTitle - } - self.renameWindowController = nil + renameWindowController = RenameWindowController(originalTitle: object.nameForDisplay, representedObject: object, delegate: self) + guard let renameSheet = renameWindowController?.window else { + return } + window.beginSheet(renameSheet) + } +} - renameWindowController?.runSheetOnWindow(window) +extension MainWindowController: RenameWindowControllerDelegate { + + func renameWindowController(_ windowController: RenameWindowController, didRenameObject object: Any, withNewName name: String) { + + if let feed = object as? Feed { + feed.editedName = name + } + else if let folder = object as? Folder { + folder.name = name + } } } diff --git a/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift b/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift index 8deda9538..c88dca2c5 100644 --- a/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift +++ b/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift @@ -8,57 +8,54 @@ import AppKit +protocol RenameWindowControllerDelegate { + + func renameWindowController(_ windowController: RenameWindowController, didRenameObject: Any, withNewName: String) +} + final class RenameWindowController: NSWindowController { @IBOutlet var renamePrompt: NSTextField! @IBOutlet var newTitleTextField: NSTextField! @IBOutlet var renameButton: NSButton! - private var originalTitle: String! - private var hostWindow: NSWindow! - private var callback: ((String?) -> Void)? + private var originalTitle: String? + private var representedObject: Any? + private var delegate: RenameWindowControllerDelegate? - convenience init(originalTitle: String, callback: @escaping ((String?) -> Void)) { + convenience init(originalTitle: String, representedObject: Any, delegate: RenameWindowControllerDelegate) { self.init(windowNibName: NSNib.Name(rawValue: "RenameSheet")) self.originalTitle = originalTitle - self.callback = callback + self.representedObject = representedObject + self.delegate = delegate } override func windowDidLoad() { - newTitleTextField.stringValue = originalTitle + newTitleTextField.stringValue = originalTitle! let prompt = NSLocalizedString("Rename %@ to:", comment: "Rename sheet") - let localizedPrompt = NSString.localizedStringWithFormat(prompt as NSString, originalTitle) + let localizedPrompt = NSString.localizedStringWithFormat(prompt as NSString, originalTitle!) renamePrompt.stringValue = localizedPrompt as String updateUI() } - func runSheetOnWindow(_ w: NSWindow) { - - guard let window = window else { - return - } - - hostWindow = w - hostWindow.beginSheet(window) { (returnCode: NSApplication.ModalResponse) -> Void in - } - } - // MARK: Actions @IBAction func cancel(_ sender: AnyObject) { - callback?(nil) - hostWindow!.endSheet(window!, returnCode: .cancel) + window?.sheetParent?.endSheet(window!, returnCode: .cancel) } @IBAction func rename(_ sender: AnyObject) { - callback?(newTitleTextField.stringValue) - hostWindow!.endSheet(window!, returnCode: .OK) + guard let representedObject = representedObject else { + return + } + delegate?.renameWindowController(self, didRenameObject: representedObject, withNewName: newTitleTextField.stringValue) + window?.sheetParent?.endSheet(window!, returnCode: .OK) } }