NetNewsWire/NetNewsWire/MainWindow/Detail/DetailViewController.swift

91 lines
1.9 KiB
Swift
Raw Normal View History

2017-05-27 19:43:27 +02:00
//
// DetailViewController.swift
2018-08-29 07:18:24 +02:00
// NetNewsWire
2017-05-27 19:43:27 +02:00
//
// Created by Brent Simmons on 7/26/15.
// Copyright © 2015 Ranchero Software, LLC. All rights reserved.
//
import Foundation
import WebKit
import RSCore
import Articles
import RSWeb
2017-05-27 19:43:27 +02:00
enum DetailState: Equatable {
case noSelection
case multipleSelection
case article(Article)
}
final class DetailViewController: NSViewController, WKUIDelegate {
@IBOutlet var containerView: DetailContainerView!
@IBOutlet var statusBarView: DetailStatusBarView!
lazy var regularWebViewController = {
return createWebViewController()
}()
lazy var searchWebViewController = {
return createWebViewController()
}()
var currentWebViewController: DetailWebViewController! {
didSet {
let webview = currentWebViewController.view
if containerView.contentView === webview {
return
}
statusBarView.mouseoverLink = nil
containerView.contentView = webview
}
}
2017-05-27 19:43:27 +02:00
override func viewDidLoad() {
currentWebViewController = regularWebViewController
2017-05-27 19:43:27 +02:00
}
// MARK: - API
func showState(_ state: DetailState, mode: TimelineSourceMode) {
// TODO: also to-do is caller
}
2017-12-20 22:39:31 +01:00
func canScrollDown(_ callback: @escaping (Bool) -> Void) {
currentWebViewController.canScrollDown(callback)
2017-12-20 22:39:31 +01:00
}
override func scrollPageDown(_ sender: Any?) {
currentWebViewController.scrollPageDown(sender)
2017-05-27 19:43:27 +02:00
}
}
// MARK: - DetailWebViewControllerDelegate
extension DetailViewController: DetailWebViewControllerDelegate {
func mouseDidEnter(_ link: String) {
guard !link.isEmpty else {
return
}
statusBarView.mouseoverLink = link
}
func mouseDidExit(_ link: String) {
statusBarView.mouseoverLink = nil
}
}
// MARK: - Private
2017-12-20 22:39:31 +01:00
private extension DetailViewController {
func createWebViewController() -> DetailWebViewController {
let controller = DetailWebViewController()
controller.delegate = self
controller.state = .noSelection
return controller
2017-12-20 22:39:31 +01:00
}
}