NetNewsWire/Evergreen/Inspector/InspectorWindowController.s...

91 lines
2.2 KiB
Swift
Raw Normal View History

//
// InspectorWindowController.swift
// Evergreen
//
// Created by Brent Simmons on 1/20/18.
// Copyright © 2018 Ranchero Software. All rights reserved.
//
import AppKit
2018-01-21 07:36:17 +01:00
protocol Inspector: class {
2018-01-21 06:48:27 +01:00
2018-01-21 07:36:17 +01:00
var objects: [Any]? { get set }
var isFallbackInspector: Bool { get } // Can handle nothing-to-inspect or unexpected type of objects.
2018-01-21 06:48:27 +01:00
2018-01-21 07:36:17 +01:00
func canInspect(_ objects: [Any]) -> Bool
func willEndInspectingObjects() // Called on the current inspector right before objects is about to change.
2018-01-21 06:48:27 +01:00
}
final class InspectorWindowController: NSWindowController {
2018-01-21 07:36:17 +01:00
private var inspectors: [Inspector]!
private var currentInspector: Inspector! {
didSet {
if let oldInspector = oldValue {
oldInspector.willEndInspectingObjects()
}
currentInspector.objects = objects
for inspector in inspectors {
if inspector !== currentInspector {
inspector.objects = nil
}
}
show(currentInspector)
}
}
var objects: [Any]? {
didSet {
currentInspector = inspector(for: objects)
}
}
var isOpen: Bool {
get {
return isWindowLoaded && window!.isVisible
}
}
2018-01-21 07:36:17 +01:00
override func windowDidLoad() {
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]
}
func inspector(for objects: [Any]?) -> Inspector {
var fallbackInspector: Inspector? = nil
for inspector in inspectors {
if inspector.isFallbackInspector {
fallbackInspector = inspector
}
else if let objects = objects, inspector.canInspect(objects) {
return inspector
}
}
return fallbackInspector!
}
}
private extension InspectorWindowController {
func inspector(_ identifier: String, _ storyboard: NSStoryboard) -> Inspector {
return storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: identifier)) as! Inspector
}
func show(_ inspector: Inspector) {
2018-01-21 06:48:27 +01:00
2018-01-21 07:36:17 +01:00
// TODO
2018-01-21 06:48:27 +01:00
}
}