NetNewsWire/Mac/Preferences/Accounts/AccountsPreferencesViewCont...

102 lines
2.5 KiB
Swift
Raw Normal View History

2019-03-18 03:01:28 +01:00
//
// AccountsPreferencesViewController.swift
// NetNewsWire
//
// Created by Brent Simmons on 3/17/19.
// Copyright © 2019 Ranchero Software. All rights reserved.
//
import AppKit
import Account
final class AccountsPreferencesViewController: NSViewController {
@IBOutlet weak var tableView: NSTableView!
@IBOutlet weak var detailView: NSView!
private var sortedAccounts = [Account]()
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange(_:)), name: .DisplayNameDidChange, object: nil)
}
override func viewWillAppear() {
updateSortedAccounts()
tableView.reloadData()
}
override func viewWillDisappear() {
super.viewWillDisappear()
resetContainerView()
}
@objc func displayNameDidChange(_ note: Notification) {
tableView.reloadData()
}
}
// MARK: - NSTableViewDataSource
extension AccountsPreferencesViewController: NSTableViewDataSource {
func numberOfRows(in tableView: NSTableView) -> Int {
return sortedAccounts.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return sortedAccounts[row]
}
}
// MARK: - NSTableViewDelegate
extension AccountsPreferencesViewController: NSTableViewDelegate {
private static let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "AccountCell")
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "Cell"), owner: nil) as? NSTableCellView {
cell.textField?.stringValue = sortedAccounts[row].nameForDisplay
return cell
}
return nil
}
func tableViewSelectionDidChange(_ notification: Notification) {
let selectedRow = tableView.selectedRow
guard selectedRow != -1 else {
return
}
let account = sortedAccounts[selectedRow]
let controller = LocalAccountPreferencesViewController(account: account)
addChild(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
detailView.addSubview(controller.view)
detailView.rs_addFullSizeConstraints(forSubview: controller.view)
}
}
// MARK: - Private
private extension AccountsPreferencesViewController {
func updateSortedAccounts() {
sortedAccounts = AccountManager.shared.sortedAccounts
}
func resetContainerView() {
if let controller = children.first {
children.removeAll()
controller.view.removeFromSuperview()
}
}
}