diff --git a/Evergreen/Base.lproj/RenameSheet.xib b/Evergreen/Base.lproj/RenameSheet.xib index ea16cc5e9..d9462606f 100644 --- a/Evergreen/Base.lproj/RenameSheet.xib +++ b/Evergreen/Base.lproj/RenameSheet.xib @@ -10,6 +10,7 @@ + @@ -50,7 +51,13 @@ + +DQ + + + + diff --git a/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift b/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift index 58729d69e..6230bee6e 100644 --- a/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift +++ b/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift @@ -63,6 +63,24 @@ extension MainWindowController { @objc func renameFromContextualMenu(_ sender: Any?) { + guard let window = window, let menuItem = sender as? NSMenuItem, let object = menuItem.representedObject as? DisplayNameProvider, object is Feed || object is Folder else { + 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!.runSheetOnWindow(window) } } diff --git a/Evergreen/MainWindow/MainWindowController.swift b/Evergreen/MainWindow/MainWindowController.swift index fc3710bef..654a8f115 100644 --- a/Evergreen/MainWindow/MainWindowController.swift +++ b/Evergreen/MainWindow/MainWindowController.swift @@ -25,6 +25,8 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations { return false } + var renameWindowController: RenameWindowController? + // MARK: NSWindowController private let windowAutosaveName = NSWindow.FrameAutosaveName(rawValue: kWindowFrameKey) diff --git a/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift b/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift index 439cd057a..8deda9538 100644 --- a/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift +++ b/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift @@ -15,18 +15,52 @@ final class RenameWindowController: NSWindowController { @IBOutlet var renameButton: NSButton! private var originalTitle: String! + private var hostWindow: NSWindow! + private var callback: ((String?) -> Void)? - convenience init(originalTitle: String) { + convenience init(originalTitle: String, callback: @escaping ((String?) -> Void)) { self.init(windowNibName: NSNib.Name(rawValue: "RenameSheet")) self.originalTitle = originalTitle + self.callback = callback } override func windowDidLoad() { newTitleTextField.stringValue = originalTitle + + let prompt = NSLocalizedString("Rename %@ to:", comment: "Rename sheet") + 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) + } + + @IBAction func rename(_ sender: AnyObject) { + + callback?(newTitleTextField.stringValue) + hostWindow!.endSheet(window!, returnCode: .OK) + } + } extension RenameWindowController: NSTextFieldDelegate {