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 }
+ }
+}