mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Initial support for multiple windows and state preservation.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user