From 3408a4c725c338c47742e8e2183a1594e40d7f03 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sat, 16 Feb 2019 22:14:06 -0800 Subject: [PATCH] Make progress on swapping timeline views. --- NetNewsWire/Base.lproj/MainWindow.storyboard | 74 +------------------ .../Detail/DetailViewController.swift | 2 +- .../Timeline/TimelineContainerView.swift | 11 +-- .../TimelineContainerViewController.swift | 51 ++++++++++++- .../MainWindow/Timeline/TimelineTableView.xib | 19 +++++ .../Timeline/TimelineViewController.swift | 16 +++- 6 files changed, 91 insertions(+), 82 deletions(-) diff --git a/NetNewsWire/Base.lproj/MainWindow.storyboard b/NetNewsWire/Base.lproj/MainWindow.storyboard index ba79833cd..28f7d6e4c 100644 --- a/NetNewsWire/Base.lproj/MainWindow.storyboard +++ b/NetNewsWire/Base.lproj/MainWindow.storyboard @@ -416,84 +416,16 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - diff --git a/NetNewsWire/MainWindow/Detail/DetailViewController.swift b/NetNewsWire/MainWindow/Detail/DetailViewController.swift index 52547bab1..c00f58b5f 100644 --- a/NetNewsWire/MainWindow/Detail/DetailViewController.swift +++ b/NetNewsWire/MainWindow/Detail/DetailViewController.swift @@ -48,7 +48,7 @@ final class DetailViewController: NSViewController, WKUIDelegate { // MARK: - API - func showState(_ state: DetailState, mode: TimelineSourceMode) { + func setState(_ state: DetailState, mode: TimelineSourceMode) { // TODO: also to-do is caller } diff --git a/NetNewsWire/MainWindow/Timeline/TimelineContainerView.swift b/NetNewsWire/MainWindow/Timeline/TimelineContainerView.swift index 4f8a4bbe4..b24710675 100644 --- a/NetNewsWire/MainWindow/Timeline/TimelineContainerView.swift +++ b/NetNewsWire/MainWindow/Timeline/TimelineContainerView.swift @@ -10,11 +10,7 @@ import AppKit final class TimelineContainerView: NSView { - override var isOpaque: Bool { - return true - } - - var contentViewConstraints: [NSLayoutConstraint]? + private var contentViewConstraints: [NSLayoutConstraint]? var contentView: NSView? { didSet { @@ -38,8 +34,13 @@ final class TimelineContainerView: NSView { } } + override var isOpaque: Bool { + return true + } + override func draw(_ dirtyRect: NSRect) { NSColor.textBackgroundColor.setFill() dirtyRect.fill() } } + diff --git a/NetNewsWire/MainWindow/Timeline/TimelineContainerViewController.swift b/NetNewsWire/MainWindow/Timeline/TimelineContainerViewController.swift index 6033945de..914bf106b 100644 --- a/NetNewsWire/MainWindow/Timeline/TimelineContainerViewController.swift +++ b/NetNewsWire/MainWindow/Timeline/TimelineContainerViewController.swift @@ -8,11 +8,56 @@ import Cocoa -class TimelineContainerViewController: NSViewController { +enum TimelineState { + case empty + case representedObjects([AnyObject]) +} + +final class TimelineContainerViewController: NSViewController { + + @IBOutlet var containerView: TimelineContainerView! + + private var states: [TimelineSourceMode: TimelineState] = [.regular: .empty, .search: .empty] + + private lazy var regularTimelineViewController = { + return TimelineViewController(delegate: self) + }() + private lazy var searchTimelineViewController = { + return TimelineViewController(delegate: self) + }() override func viewDidLoad() { super.viewDidLoad() - // Do view setup here. + setState(.empty, mode: .regular) + showTimeline(for: .regular) } - + + // MARK: - API + + func setState(_ state: TimelineState, mode: TimelineSourceMode) { + timelineViewController(for: mode).state = state + } + + func showTimeline(for mode: TimelineSourceMode) { + containerView.contentView = timelineViewController(for: mode).view + } +} + +extension TimelineContainerViewController: TimelineDelegate { + + func selectionDidChange(in: TimelineViewController) { + // TODO: notify MainWindowController + } +} + +private extension TimelineContainerViewController { + + func timelineViewController(for mode: TimelineSourceMode) -> TimelineViewController { + switch mode { + case .regular: + return regularTimelineViewController + case .search: + return searchTimelineViewController + } + } } diff --git a/NetNewsWire/MainWindow/Timeline/TimelineTableView.xib b/NetNewsWire/MainWindow/Timeline/TimelineTableView.xib index 0f3920593..525c4a6a3 100644 --- a/NetNewsWire/MainWindow/Timeline/TimelineTableView.xib +++ b/NetNewsWire/MainWindow/Timeline/TimelineTableView.xib @@ -40,6 +40,9 @@ + + + @@ -52,5 +55,21 @@ + + + + + + + + + + + + + + + + diff --git a/NetNewsWire/MainWindow/Timeline/TimelineViewController.swift b/NetNewsWire/MainWindow/Timeline/TimelineViewController.swift index 7102c75a1..8935d2c3d 100644 --- a/NetNewsWire/MainWindow/Timeline/TimelineViewController.swift +++ b/NetNewsWire/MainWindow/Timeline/TimelineViewController.swift @@ -12,13 +12,20 @@ import Articles import Account protocol TimelineDelegate: class { - func selectionDidChange(in: TimelineViewController, mode: TimelineSourceMode) + func selectionDidChange(in: TimelineViewController) } -class TimelineViewController: NSViewController, UndoableCommandRunner { +final class TimelineViewController: NSViewController, UndoableCommandRunner { @IBOutlet var tableView: TimelineTableView! + var state: TimelineState = .empty { + didSet { + // TODO + } + } + + private weak var delegate: TimelineDelegate? var sharingServiceDelegate: NSSharingServiceDelegate? var selectedArticles: [Article] { @@ -117,6 +124,11 @@ class TimelineViewController: NSViewController, UndoableCommandRunner { return selectedArticles.count == 1 ? selectedArticles.first : nil } + convenience init(delegate: TimelineDelegate) { + self.init(nibName: "TimelineTableView", bundle: nil) + self.delegate = delegate + } + override func viewDidLoad() { cellAppearance = TimelineCellAppearance(theme: appDelegate.currentTheme, showAvatar: false, fontSize: fontSize)