From 394274f1e570861cb8c82e83a4aaf8960dc764fd Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sun, 21 Jan 2018 11:35:50 -0800 Subject: [PATCH] Continue progress on inspector. --- Evergreen/AppDelegate.swift | 7 +++++ Evergreen/Inspector/Inspector.storyboard | 23 ++++----------- .../Inspector/InspectorWindowController.swift | 28 +++++++++++++------ .../MainWindow/MainWindowController.swift | 9 +++++- .../Sidebar/SidebarViewController.swift | 4 +++ Frameworks/RSTree/RSTree/Node.swift | 8 ++++++ 6 files changed, 51 insertions(+), 28 deletions(-) diff --git a/Evergreen/AppDelegate.swift b/Evergreen/AppDelegate.swift index 82e27d990..a6ab0d675 100644 --- a/Evergreen/AppDelegate.swift +++ b/Evergreen/AppDelegate.swift @@ -310,6 +310,13 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, inspectorWindowController!.window!.performClose(self) } else { + var selectedObjects: [Any]? = nil + if let window = NSApplication.shared.mainWindow { + if let windowController = window.windowController as? MainWindowController { + selectedObjects = windowController.selectedObjectsInSidebar() + } + } + inspectorWindowController!.objects = selectedObjects inspectorWindowController!.showWindow(self) } } diff --git a/Evergreen/Inspector/Inspector.storyboard b/Evergreen/Inspector/Inspector.storyboard index 1a6cf27f0..1219101ba 100644 --- a/Evergreen/Inspector/Inspector.storyboard +++ b/Evergreen/Inspector/Inspector.storyboard @@ -21,26 +21,13 @@ - + - - - - - - - - - - - - - @@ -128,7 +115,7 @@ Field - + @@ -173,7 +160,7 @@ Field - + @@ -212,7 +199,7 @@ Field - + @@ -240,7 +227,7 @@ Field - + diff --git a/Evergreen/Inspector/InspectorWindowController.swift b/Evergreen/Inspector/InspectorWindowController.swift index 3b0c9d94e..57ee5f5a5 100644 --- a/Evergreen/Inspector/InspectorWindowController.swift +++ b/Evergreen/Inspector/InspectorWindowController.swift @@ -18,11 +18,14 @@ protocol Inspector: class { func willEndInspectingObjects() // Called on the current inspector right before objects is about to change. } +typealias InspectorViewController = Inspector & NSViewController + + final class InspectorWindowController: NSWindowController { - private var inspectors: [Inspector]! + private var inspectors: [InspectorViewController]! - private var currentInspector: Inspector! { + private var currentInspector: InspectorViewController! { didSet { if let oldInspector = oldValue { oldInspector.willEndInspectingObjects() @@ -39,6 +42,7 @@ final class InspectorWindowController: NSWindowController { var objects: [Any]? { didSet { + let _ = window currentInspector = inspector(for: objects) } } @@ -51,17 +55,20 @@ final class InspectorWindowController: NSWindowController { override func windowDidLoad() { + let nothingInspector = window?.contentViewController as! InspectorViewController + let storyboard = NSStoryboard(name: NSStoryboard.Name(rawValue: "Inspector"), bundle: nil) let feedInspector = inspector("Feed", storyboard) let folderInspector = inspector("Folder", storyboard) let builtinSmartFeedInspector = inspector("BuiltinSmartFeed", storyboard) - let nothingInspector = inspector("Nothing", storyboard) + inspectors = [feedInspector, folderInspector, builtinSmartFeedInspector, nothingInspector] + currentInspector = nothingInspector } - func inspector(for objects: [Any]?) -> Inspector { + func inspector(for objects: [Any]?) -> InspectorViewController { - var fallbackInspector: Inspector? = nil + var fallbackInspector: InspectorViewController? = nil for inspector in inspectors { if inspector.isFallbackInspector { @@ -78,13 +85,16 @@ final class InspectorWindowController: NSWindowController { private extension InspectorWindowController { - func inspector(_ identifier: String, _ storyboard: NSStoryboard) -> Inspector { + func inspector(_ identifier: String, _ storyboard: NSStoryboard) -> InspectorViewController { - return storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: identifier)) as! Inspector + return storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: identifier)) as! InspectorViewController } - func show(_ inspector: Inspector) { + func show(_ inspector: InspectorViewController) { - // TODO + guard let window = window, inspector !== window.contentViewController else { + return + } + window.contentViewController = inspector } } diff --git a/Evergreen/MainWindow/MainWindowController.swift b/Evergreen/MainWindow/MainWindowController.swift index f314812d5..5fb8cc31c 100644 --- a/Evergreen/MainWindow/MainWindowController.swift +++ b/Evergreen/MainWindow/MainWindowController.swift @@ -63,7 +63,14 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations { self.updateWindowTitle() } } - + + // MARK: Sidebar + + func selectedObjectsInSidebar() -> [AnyObject]? { + + return sidebarViewController?.selectedObjects + } + // MARK: Notifications @objc func applicationWillTerminate(_ note: Notification) { diff --git a/Evergreen/MainWindow/Sidebar/SidebarViewController.swift b/Evergreen/MainWindow/Sidebar/SidebarViewController.swift index 090b0ce0f..9aa90140e 100644 --- a/Evergreen/MainWindow/Sidebar/SidebarViewController.swift +++ b/Evergreen/MainWindow/Sidebar/SidebarViewController.swift @@ -23,6 +23,10 @@ import RSCore private var animatingChanges = false private var sidebarCellAppearance: SidebarCellAppearance! + var selectedObjects: [AnyObject] { + return selectedNodes.representedObjects() + } + //MARK: NSViewController override func viewDidLoad() { diff --git a/Frameworks/RSTree/RSTree/Node.swift b/Frameworks/RSTree/RSTree/Node.swift index d0053f6ce..e91c56983 100644 --- a/Frameworks/RSTree/RSTree/Node.swift +++ b/Frameworks/RSTree/RSTree/Node.swift @@ -190,3 +190,11 @@ public func ==(lhs: Node, rhs: Node) -> Bool { return lhs === rhs } + +public extension Array where Element == Node { + + public func representedObjects() -> [AnyObject] { + + return self.map{ $0.representedObject } + } +}