Continue work on swapping timeline views.

This commit is contained in:
Brent Simmons 2019-02-17 18:46:28 -08:00
parent 0f5383b2f9
commit 9a15068fdd
4 changed files with 38 additions and 40 deletions

View File

@ -66,7 +66,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations,
super.init()
NotificationCenter.default.addObserver(self, selector: #selector(unreadCountDidChange(_:)), name: .UnreadCountDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(sidebarSelectionDidChange(_:)), name: .SidebarSelectionDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(inspectableObjectsDidChange(_:)), name: .InspectableObjectsDidChange, object: nil)
appDelegate = self
}
@ -230,7 +230,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations,
let _ = faviconDownloader.favicon(for: feed)
}
@objc func sidebarSelectionDidChange(_ note: Notification) {
@objc func inspectableObjectsDidChange(_ note: Notification) {
guard let inspectorWindowController = inspectorWindowController, inspectorWindowController.isOpen else {
return

View File

@ -10,10 +10,9 @@ import AppKit
import Articles
extension Notification.Name {
static let SidebarSelectionDidChange = Notification.Name("SidebarSelectionDidChangeNotification")
static let TimelineSelectionDidChange = Notification.Name("TimelineSelectionDidChangeNotification")
static let InspectableObjectsDidChange = Notification.Name("TimelineSelectionDidChangeNotification")
static let UserDidAddFeed = Notification.Name("UserDidAddFeedNotification")
static let UserDidRequestSidebarSelection = Notification.Name("UserDidRequestSidebarSelectionNotification")
}

View File

@ -23,10 +23,12 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
private let windowAutosaveName = NSWindow.FrameAutosaveName("MainWindow")
static var didPositionWindowOnFirstRun = false
private var currentFeedOrFolder: AnyObject? = nil {
didSet {
updateWindowTitle()
private var currentFeedOrFolder: AnyObject? {
// Nil for none or multiple selection.
guard let selectedObjects = selectedObjectsInSidebar(), selectedObjects.count == 1 else {
return nil
}
return selectedObjects.first
}
private var shareToolbarItem: NSToolbarItem? {
@ -34,6 +36,7 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
}
private static var detailViewMinimumThickness = 384
private var sidebarViewController: SidebarViewController!
// MARK: - NSWindowController
@ -61,6 +64,8 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
detailSplitViewItem?.minimumThickness = CGFloat(MainWindowController.detailViewMinimumThickness)
restoreSplitViewState()
sidebarViewController = splitViewController?.splitViewItems[0].viewController as? SidebarViewController
sidebarViewController.delegate = self
NotificationCenter.default.addObserver(self, selector: #selector(applicationWillTerminate(_:)), name: NSApplication.willTerminateNotification, object: nil)
@ -68,7 +73,7 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
NotificationCenter.default.addObserver(self, selector: #selector(refreshProgressDidChange(_:)), name: .AccountRefreshDidFinish, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(refreshProgressDidChange(_:)), name: .AccountRefreshProgressDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(sidebarSelectionDidChange(_:)), name: .SidebarSelectionDidChange, object: nil)
// NotificationCenter.default.addObserver(self, selector: #selector(sidebarSelectionDidChange(_:)), name: .SidebarSelectionDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(unreadCountDidChange(_:)), name: .UnreadCountDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange(_:)), name: .DisplayNameDidChange, object: nil)
@ -103,25 +108,6 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
CoalescingQueue.standard.add(self, #selector(makeToolbarValidate))
}
@objc func sidebarSelectionDidChange(_ note: Notification) {
let selectedObjects = selectedObjectsInSidebar()
// We can only meaninfully display one feed or folder at a time
guard selectedObjects?.count == 1 else {
currentFeedOrFolder = nil
return
}
guard selectedObjects?[0] is DisplayNameProvider else {
currentFeedOrFolder = nil
return
}
currentFeedOrFolder = selectedObjects?[0]
}
@objc func unreadCountDidChange(_ note: Notification) {
updateWindowTitleIfNecessary(note.object)
}
@ -376,6 +362,17 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
}
// MARK: - SidebarDelegate
extension MainWindowController: SidebarDelegate {
func selectionDidChange(to selectedObjects: [AnyObject]?) {
// TODO: communicate with TimelineViewController
updateWindowTitle()
NotificationCenter.default.post(name: .InspectableObjectsDidChange, object: nil)
}
}
// MARK: - Scripting Access
/*
@ -408,10 +405,6 @@ private extension MainWindowController {
return viewController.children.first as? NSSplitViewController
}
var sidebarViewController: SidebarViewController? {
return splitViewController?.splitViewItems[0].viewController as? SidebarViewController
}
var timelineViewController: TimelineViewController? {
return splitViewController?.splitViewItems[1].viewController as? TimelineViewController
}

View File

@ -12,10 +12,16 @@ import Articles
import Account
import RSCore
protocol SidebarDelegate: class {
func selectionDidChange(to: [AnyObject]?)
}
@objc class SidebarViewController: NSViewController, NSOutlineViewDelegate, NSOutlineViewDataSource, NSMenuDelegate, UndoableCommandRunner {
@IBOutlet var outlineView: SidebarOutlineView!
weak var delegate: SidebarDelegate?
let treeControllerDelegate = SidebarTreeControllerDelegate()
lazy var treeController: TreeController = {
return TreeController(delegate: treeControllerDelegate)
@ -380,14 +386,14 @@ private extension SidebarViewController {
}
func postSidebarSelectionDidChangeNotification(_ selectedObjects: [AnyObject]?) {
var userInfo = UserInfoDictionary()
if let objects = selectedObjects {
userInfo[UserInfoKey.objects] = objects
}
userInfo[UserInfoKey.view] = outlineView
NotificationCenter.default.post(name: .SidebarSelectionDidChange, object: self, userInfo: userInfo)
delegate?.selectionDidChange(to: selectedObjects)
// var userInfo = UserInfoDictionary()
// if let objects = selectedObjects {
// userInfo[UserInfoKey.objects] = objects
// }
// userInfo[UserInfoKey.view] = outlineView
//
// NotificationCenter.default.post(name: .SidebarSelectionDidChange, object: self, userInfo: userInfo)
}
func updateUnreadCounts(for objects: [AnyObject]) {