From 673686ca683f14b160ad27336c5457041083932f Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sat, 17 Feb 2018 12:21:15 -0800 Subject: [PATCH] Create TimelineDataSource as part of making TimelineViewController less big. --- Evergreen.xcodeproj/project.pbxproj | 4 +++ Evergreen/Base.lproj/MainWindow.storyboard | 4 ++- .../Timeline/TimelineDataSource.swift | 32 +++++++++++++++++++ .../Timeline/TimelineViewController.swift | 5 +-- 4 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 Evergreen/MainWindow/Timeline/TimelineDataSource.swift diff --git a/Evergreen.xcodeproj/project.pbxproj b/Evergreen.xcodeproj/project.pbxproj index 5a81b036b..54caa1797 100644 --- a/Evergreen.xcodeproj/project.pbxproj +++ b/Evergreen.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 840D61A12029031E009BC708 /* Evergreen_iOSUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840D61A02029031E009BC708 /* Evergreen_iOSUITests.swift */; }; 8414AD251FCF5A1E00955102 /* TimelineHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8414AD241FCF5A1E00955102 /* TimelineHeaderView.swift */; }; 84162A152038C12C00035290 /* MarkCommandValidationStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84162A142038C12C00035290 /* MarkCommandValidationStatus.swift */; }; + 84162A252038C1E000035290 /* TimelineDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84162A242038C1E000035290 /* TimelineDataSource.swift */; }; 841ABA4E20145E7300980E11 /* NothingInspectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841ABA4D20145E7300980E11 /* NothingInspectorViewController.swift */; }; 841ABA5E20145E9200980E11 /* FolderInspectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841ABA5D20145E9200980E11 /* FolderInspectorViewController.swift */; }; 841ABA6020145EC100980E11 /* BuiltinSmartFeedInspectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841ABA5F20145EC100980E11 /* BuiltinSmartFeedInspectorViewController.swift */; }; @@ -534,6 +535,7 @@ 840D61A22029031E009BC708 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8414AD241FCF5A1E00955102 /* TimelineHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineHeaderView.swift; sourceTree = ""; }; 84162A142038C12C00035290 /* MarkCommandValidationStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkCommandValidationStatus.swift; sourceTree = ""; }; + 84162A242038C1E000035290 /* TimelineDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineDataSource.swift; sourceTree = ""; }; 841ABA4D20145E7300980E11 /* NothingInspectorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NothingInspectorViewController.swift; sourceTree = ""; }; 841ABA5D20145E9200980E11 /* FolderInspectorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FolderInspectorViewController.swift; sourceTree = ""; }; 841ABA5F20145EC100980E11 /* BuiltinSmartFeedInspectorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuiltinSmartFeedInspectorViewController.swift; sourceTree = ""; }; @@ -980,6 +982,7 @@ children = ( 849A976B1ED9EBC8007D329B /* TimelineViewController.swift */, 84E8E0DA202EC49300562D8F /* TimelineViewController+ContextualMenus.swift */, + 84162A242038C1E000035290 /* TimelineDataSource.swift */, 84F204DF1FAACBB30076E152 /* ArticleArray.swift */, 849A97691ED9EBC8007D329B /* TimelineTableRowView.swift */, 849A976A1ED9EBC8007D329B /* TimelineTableView.swift */, @@ -1973,6 +1976,7 @@ 84B99C9D1FAE83C600ECDEDB /* DeleteFromSidebarCommand.swift in Sources */, 849A97541ED9EAC0007D329B /* AddFeedWindowController.swift in Sources */, 849A976D1ED9EBC8007D329B /* TimelineTableView.swift in Sources */, + 84162A252038C1E000035290 /* TimelineDataSource.swift in Sources */, 84D52E951FE588BB00D14F5B /* DetailStatusBarView.swift in Sources */, D5E4CC64202C1AC1009B4FFC /* MainWindowController+Scriptability.swift in Sources */, 84B99C671FAE35E600ECDEDB /* FeedListTreeControllerDelegate.swift in Sources */, diff --git a/Evergreen/Base.lproj/MainWindow.storyboard b/Evergreen/Base.lproj/MainWindow.storyboard index d47facebf..84a2f7180 100644 --- a/Evergreen/Base.lproj/MainWindow.storyboard +++ b/Evergreen/Base.lproj/MainWindow.storyboard @@ -569,7 +569,7 @@ - + @@ -605,6 +605,7 @@ + @@ -635,6 +636,7 @@ + diff --git a/Evergreen/MainWindow/Timeline/TimelineDataSource.swift b/Evergreen/MainWindow/Timeline/TimelineDataSource.swift new file mode 100644 index 000000000..620c457fe --- /dev/null +++ b/Evergreen/MainWindow/Timeline/TimelineDataSource.swift @@ -0,0 +1,32 @@ +// +// TimelineDataSource.swift +// Evergreen +// +// Created by Brent Simmons on 2/17/18. +// Copyright © 2018 Ranchero Software. All rights reserved. +// + +import AppKit + +@objc final class TimelineDataSource: NSObject, NSTableViewDataSource { + + var articles = ArticleArray() + + func numberOfRows(in tableView: NSTableView) -> Int { + + return articles.count + } + + func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? { + + return articles.articleAtRow(row) ?? nil + } + + func tableView(_ tableView: NSTableView, pasteboardWriterForRow row: Int) -> NSPasteboardWriting? { + + guard let article = articles.articleAtRow(row) else { + return nil + } + return ArticlePasteboardWriter(article: article) + } +} diff --git a/Evergreen/MainWindow/Timeline/TimelineViewController.swift b/Evergreen/MainWindow/Timeline/TimelineViewController.swift index 248443c2e..bffe749bd 100644 --- a/Evergreen/MainWindow/Timeline/TimelineViewController.swift +++ b/Evergreen/MainWindow/Timeline/TimelineViewController.swift @@ -16,7 +16,8 @@ class TimelineViewController: NSViewController, UndoableCommandRunner { @IBOutlet var tableView: TimelineTableView! @IBOutlet var contextualMenuDelegate: TimelineContextualMenuDelegate? - + @IBOutlet var dataSource: TimelineDataSource! + var selectedArticles: [Article] { return Array(articles.articlesForIndexes(tableView.selectedRowIndexes)) } @@ -28,6 +29,7 @@ class TimelineViewController: NSViewController, UndoableCommandRunner { var articles = ArticleArray() { didSet { if articles != oldValue { + dataSource.articles = articles updateShowAvatars() tableView.reloadData() } @@ -37,7 +39,6 @@ class TimelineViewController: NSViewController, UndoableCommandRunner { var undoableCommands = [UndoableCommand]() private var cellAppearance: TimelineCellAppearance! private var cellAppearanceWithAvatar: TimelineCellAppearance! - private var showFeedNames = false { didSet { if showFeedNames != oldValue {