From b33f992738d0ce8e76630bc150c18ce7436dd4e3 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Thu, 22 Nov 2018 13:58:24 -0800 Subject: [PATCH] Allow inline editing, in the sidebar, only for Renamable-conforming items. --- .../MainWindow/Sidebar/Cell/SidebarCell.swift | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/NetNewsWire/MainWindow/Sidebar/Cell/SidebarCell.swift b/NetNewsWire/MainWindow/Sidebar/Cell/SidebarCell.swift index d017181c8..007620763 100644 --- a/NetNewsWire/MainWindow/Sidebar/Cell/SidebarCell.swift +++ b/NetNewsWire/MainWindow/Sidebar/Cell/SidebarCell.swift @@ -7,6 +7,7 @@ // import Foundation +import RSCore import DB5 import Account import RSTree @@ -14,7 +15,13 @@ import RSTree private var textSizeCache = [String: NSSize]() class SidebarCell : NSTableCellView { - + + override var objectValue: Any? { + didSet { + didSetObjectValue() + } + } + var image: NSImage? { didSet { if let image = image { @@ -76,16 +83,20 @@ class SidebarCell : NSTableCellView { } } + var node: Node? { + return objectValue as? Node + } + override var isFlipped: Bool { return true } private func commonInit() { - unreadCountView.translatesAutoresizingMaskIntoConstraints = false imageView?.translatesAutoresizingMaskIntoConstraints = false textField?.translatesAutoresizingMaskIntoConstraints = false addSubview(unreadCountView) + updateTextFieldIsEditable() } override init(frame frameRect: NSRect) { @@ -113,31 +124,32 @@ class SidebarCell : NSTableCellView { let layout = SidebarCellLayout(appearance: cellAppearance, cellSize: bounds.size, shouldShowImage: shouldShowImage, textField: textField, unreadCountView: unreadCountView) layoutWith(layout) } - + @IBAction func editingEnded(_ sender: NSTextField) { - - guard let node = objectValue as? Node else { - return + if let renamableItem = node?.representedObject as? Renamable { + renamableItem.rename(to: sender.stringValue) } - - if let feed = node.representedObject as? Feed { - feed.editedName = sender.stringValue - } - else if let folder = node.representedObject as? Folder { - folder.name = sender.stringValue - } - } - } private extension SidebarCell { func layoutWith(_ layout: SidebarCellLayout) { - imageView?.rs_setFrameIfNotEqual(layout.faviconRect) textField?.rs_setFrameIfNotEqual(layout.titleRect) unreadCountView.rs_setFrameIfNotEqual(layout.unreadCountRect) } + + func didSetObjectValue() { + updateTextFieldIsEditable() + } + + func updateTextFieldIsEditable() { + var canRename = false + if let _ = node?.representedObject as? Renamable { + canRename = true + } + textField?.isEditable = canRename + } }