2017-11-02 04:45:04 +01:00
|
|
|
//
|
|
|
|
// FeedListViewController.swift
|
|
|
|
// Evergreen
|
|
|
|
//
|
|
|
|
// Created by Brent Simmons on 11/1/17.
|
|
|
|
// Copyright © 2017 Ranchero Software. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Cocoa
|
2017-11-04 20:19:34 +01:00
|
|
|
import RSTree
|
2017-11-04 22:53:21 +01:00
|
|
|
import RSCore
|
2017-11-02 04:45:04 +01:00
|
|
|
|
|
|
|
final class FeedListViewController: NSViewController {
|
|
|
|
|
2017-11-04 20:19:34 +01:00
|
|
|
@IBOutlet var outlineView: NSOutlineView!
|
|
|
|
private let treeControllerDelegate = FeedListTreeControllerDelegate()
|
|
|
|
lazy var treeController: TreeController = {
|
|
|
|
TreeController(delegate: treeControllerDelegate)
|
|
|
|
}()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// MARK: - NSOutlineViewDataSource
|
|
|
|
|
|
|
|
extension FeedListViewController: NSOutlineViewDataSource {
|
|
|
|
|
|
|
|
func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int {
|
|
|
|
|
|
|
|
return nodeForItem(item as AnyObject?).numberOfChildNodes
|
|
|
|
}
|
|
|
|
|
|
|
|
func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any {
|
|
|
|
|
|
|
|
return nodeForItem(item as AnyObject?).childNodes![index]
|
|
|
|
}
|
|
|
|
|
|
|
|
func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool {
|
|
|
|
|
|
|
|
return nodeForItem(item as AnyObject?).canHaveChildNodes
|
|
|
|
}
|
|
|
|
|
|
|
|
private func nodeForItem(_ item: AnyObject?) -> Node {
|
|
|
|
|
|
|
|
if item == nil {
|
|
|
|
return treeController.rootNode
|
|
|
|
}
|
|
|
|
return item as! Node
|
|
|
|
}
|
2017-11-02 04:45:04 +01:00
|
|
|
}
|
2017-11-04 22:53:21 +01:00
|
|
|
|
|
|
|
// MARK: - NSOutlineViewDelegate
|
|
|
|
|
|
|
|
extension FeedListViewController: NSOutlineViewDelegate {
|
|
|
|
|
|
|
|
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
|
|
|
|
|
|
|
|
let cell = outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "FeedListCell"), owner: self) as! SidebarCell
|
|
|
|
|
|
|
|
let node = item as! Node
|
|
|
|
configure(cell, node)
|
|
|
|
|
|
|
|
return cell
|
|
|
|
}
|
|
|
|
|
|
|
|
func outlineViewSelectionDidChange(_ notification: Notification) {
|
|
|
|
|
|
|
|
// // TODO: support multiple selection
|
|
|
|
//
|
|
|
|
// let selectedRow = self.outlineView.selectedRow
|
|
|
|
//
|
|
|
|
// if selectedRow < 0 || selectedRow == NSNotFound {
|
|
|
|
// postSidebarSelectionDidChangeNotification(nil)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// if let selectedNode = self.outlineView.item(atRow: selectedRow) as? Node {
|
|
|
|
// postSidebarSelectionDidChangeNotification([selectedNode.representedObject])
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
|
|
|
|
private func configure(_ cell: SidebarCell, _ node: Node) {
|
|
|
|
|
|
|
|
cell.objectValue = node
|
|
|
|
cell.name = nameFor(node)
|
|
|
|
cell.image = imageFor(node)
|
|
|
|
}
|
|
|
|
|
|
|
|
func imageFor(_ node: Node) -> NSImage? {
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func nameFor(_ node: Node) -> String {
|
|
|
|
|
|
|
|
if let displayNameProvider = node.representedObject as? DisplayNameProvider {
|
|
|
|
return displayNameProvider.nameForDisplay
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|