Initial support for multiple windows and state preservation.

This commit is contained in:
Maurice Parker
2020-03-02 17:46:31 -08:00
parent 5755dd0844
commit eaa99db5c7
4 changed files with 144 additions and 72 deletions

View File

@@ -131,20 +131,6 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
// MARK: - Notifications
// func window(_ window: NSWindow, willEncodeRestorableState state: NSCoder) {
//
// saveSplitViewState(to: state)
// }
//
// func window(_ window: NSWindow, didDecodeRestorableState state: NSCoder) {
//
// restoreSplitViewState(from: state)
//
// // Make sure the timeline view is first responder if possible, to start out viewing
// // whatever preserved selection might have been restored
// makeTimelineViewFirstResponder()
// }
@objc func applicationWillTerminate(_ note: Notification) {
saveState()
window?.saveFrame(usingName: windowAutosaveName)
@@ -460,9 +446,32 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
// MARK: NSWindowDelegate
extension MainWindowController: NSWindowDelegate {
func window(_ window: NSWindow, willEncodeRestorableState state: NSCoder) {
if let sidebarReadFiltered = sidebarViewController?.isReadFiltered {
state.encode(sidebarReadFiltered, forKey: UserInfoKey.readFeedsFilterState)
}
// saveSplitViewState(to: state)
}
func window(_ window: NSWindow, didDecodeRestorableState state: NSCoder) {
let sidebarReadFiltered = state.decodeBool(forKey: UserInfoKey.readFeedsFilterState)
sidebarViewController?.isReadFiltered = sidebarReadFiltered
// restoreSplitViewState(from: state)
//
// // Make sure the timeline view is first responder if possible, to start out viewing
// // whatever preserved selection might have been restored
// makeTimelineViewFirstResponder()
}
func windowWillClose(_ notification: Notification) {
detailViewController?.stopMediaPlayback()
}
}
// MARK: - SidebarDelegate
@@ -489,6 +498,11 @@ extension MainWindowController: SidebarDelegate {
}
return timelineViewController.unreadCount
}
func sidebarInvalidateRestorableState(_: SidebarViewController) {
invalidateRestorableState()
}
}
// MARK: - TimelineContainerViewControllerDelegate

View File

@@ -15,6 +15,7 @@ import RSCore
protocol SidebarDelegate: class {
func sidebarSelectionDidChange(_: SidebarViewController, selectedObjects: [AnyObject]?)
func unreadCount(for: AnyObject) -> Int
func sidebarInvalidateRestorableState(_: SidebarViewController)
}
@objc class SidebarViewController: NSViewController, NSOutlineViewDelegate, NSOutlineViewDataSource, NSMenuDelegate, UndoableCommandRunner {
@@ -31,8 +32,16 @@ protocol SidebarDelegate: class {
lazy var dataSource: SidebarOutlineDataSource = {
return SidebarOutlineDataSource(treeController: treeController)
}()
var isReadFiltered: Bool {
return treeControllerDelegate.isReadFiltered
get {
return treeControllerDelegate.isReadFiltered
}
set {
treeControllerDelegate.isReadFiltered = newValue
delegate?.sidebarInvalidateRestorableState(self)
rebuildTreeAndRestoreSelection()
}
}
var undoableCommands = [UndoableCommand]()
@@ -355,11 +364,10 @@ protocol SidebarDelegate: class {
func toggleReadFilter() {
if treeControllerDelegate.isReadFiltered {
treeControllerDelegate.isReadFiltered = false
isReadFiltered = false
} else {
treeControllerDelegate.isReadFiltered = true
isReadFiltered = true
}
rebuildTreeAndRestoreSelection()
}
}