diff --git a/Multiplatform/Shared/Article/ArticleContainerView.swift b/Multiplatform/Shared/Article/ArticleContainerView.swift index 021c39d62..8db0c6318 100644 --- a/Multiplatform/Shared/Article/ArticleContainerView.swift +++ b/Multiplatform/Shared/Article/ArticleContainerView.swift @@ -13,19 +13,15 @@ struct ArticleContainerView: View { @EnvironmentObject private var sceneModel: SceneModel @StateObject private var articleModel = ArticleModel() - var article: Article? = nil + var article: Article @ViewBuilder var body: some View { - if let article = article { - ArticleView() - .environmentObject(articleModel) - .onAppear { - sceneModel.articleModel = articleModel - articleModel.delegate = sceneModel - } - } else { - EmptyView() - } + ArticleView() + .environmentObject(articleModel) + .onAppear { + sceneModel.articleModel = articleModel + articleModel.delegate = sceneModel + } } } diff --git a/Multiplatform/Shared/Timeline/TimelineContainerView.swift b/Multiplatform/Shared/Timeline/TimelineContainerView.swift index 008e28d42..306119ac1 100644 --- a/Multiplatform/Shared/Timeline/TimelineContainerView.swift +++ b/Multiplatform/Shared/Timeline/TimelineContainerView.swift @@ -24,6 +24,11 @@ struct TimelineContainerView: View { timelineModel.delegate = sceneModel timelineModel.rebuildTimelineItems(feed) } + .overlay(Group { + #if os(iOS) + TimelineToolbar() + #endif + },alignment: .bottom) } else { EmptyView() } diff --git a/Multiplatform/Shared/Timeline/TimelineToolbar.swift b/Multiplatform/Shared/Timeline/TimelineToolbar.swift new file mode 100644 index 000000000..5344fbd02 --- /dev/null +++ b/Multiplatform/Shared/Timeline/TimelineToolbar.swift @@ -0,0 +1,56 @@ +// +// TimelineToolbar.swift +// NetNewsWire +// +// Created by Maurice Parker on 7/3/20. +// Copyright © 2020 Ranchero Software. All rights reserved. +// + +import SwiftUI + +struct TimelineToolbar: View { + + var body: some View { + VStack { + Divider() + HStack(alignment: .center) { + Button(action: { + }, label: { + AppAssets.markAllAsReadImage + .resizable() + .scaledToFit() + .frame(width: 24, height: 24, alignment: .center) + .foregroundColor(.accentColor) + }).help("Mark All As Read") + + Spacer() + + Text("Last updated") + .font(.caption) + .foregroundColor(.secondary) + + Spacer() + + Button(action: { + }, label: { + AppAssets.nextUnreadArticleImage + .font(.title3) + .foregroundColor(.accentColor) + }) + .help("Next Unread") + } + .padding(.horizontal, 16) + .padding(.bottom, 12) + .padding(.top, 4) + } + .background(VisualEffectBlur(blurStyle: .systemChromeMaterial).edgesIgnoringSafeArea(.bottom)) + + } +} + + +struct TimelineToolbar_Previews: PreviewProvider { + static var previews: some View { + TimelineToolbar() + } +} diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index dfe9076e6..59c2857e6 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -222,6 +222,8 @@ 517A757C24451C1500B553B9 /* OAuthSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 517A755324451BD500B553B9 /* OAuthSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 5181C5AD24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5181C5AC24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift */; }; 5181C5AE24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5181C5AC24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift */; }; + 5181C64C24B024B4002E0F70 /* TimelineToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5181C64B24B024B4002E0F70 /* TimelineToolbar.swift */; }; + 5181C64D24B024B4002E0F70 /* TimelineToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5181C64B24B024B4002E0F70 /* TimelineToolbar.swift */; }; 5183CCD0226E1E880010922C /* NonIntrinsicLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCCF226E1E880010922C /* NonIntrinsicLabel.swift */; }; 5183CCDA226E31A50010922C /* NonIntrinsicImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCD9226E31A50010922C /* NonIntrinsicImageView.swift */; }; 5183CCE5226F4DFA0010922C /* RefreshInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCE4226F4DFA0010922C /* RefreshInterval.swift */; }; @@ -1848,6 +1850,7 @@ 517A745A2443665000B553B9 /* UIPageViewController-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIPageViewController-Extensions.swift"; sourceTree = ""; }; 517A754424451BD500B553B9 /* OAuthSwift.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OAuthSwift.xcodeproj; path = submodules/OAuthSwift/OAuthSwift.xcodeproj; sourceTree = ""; }; 5181C5AC24AF89B1002E0F70 /* PreferredColorSchemeModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferredColorSchemeModifier.swift; sourceTree = ""; }; + 5181C64B24B024B4002E0F70 /* TimelineToolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineToolbar.swift; sourceTree = ""; }; 5183CCCF226E1E880010922C /* NonIntrinsicLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NonIntrinsicLabel.swift; sourceTree = ""; }; 5183CCD9226E31A50010922C /* NonIntrinsicImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NonIntrinsicImageView.swift; sourceTree = ""; }; 5183CCE4226F4DFA0010922C /* RefreshInterval.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefreshInterval.swift; sourceTree = ""; }; @@ -2688,10 +2691,11 @@ children = ( 51919FED24AB85E400541E64 /* TimelineContainerView.swift */, 51919FF324AB869C00541E64 /* TimelineItem.swift */, + 514E6C0124AD29A300AC6F6E /* TimelineItemStatusView.swift */, 514E6BD924ACEA0400AC6F6E /* TimelineItemView.swift */, 51919FF024AB864A00541E64 /* TimelineModel.swift */, + 5181C64B24B024B4002E0F70 /* TimelineToolbar.swift */, 51919FF624AB8B7700541E64 /* TimelineView.swift */, - 514E6C0124AD29A300AC6F6E /* TimelineItemStatusView.swift */, ); path = Timeline; sourceTree = ""; @@ -4811,6 +4815,7 @@ 514E6BDA24ACEA0400AC6F6E /* TimelineItemView.swift in Sources */, 51E4990D24A808C500B667CB /* RSHTMLMetadata+Extension.swift in Sources */, 51919FF424AB869C00541E64 /* TimelineItem.swift in Sources */, + 5181C64C24B024B4002E0F70 /* TimelineToolbar.swift in Sources */, 514E6C0224AD29A300AC6F6E /* TimelineItemStatusView.swift in Sources */, 51E49A0024A91FC100B667CB /* RegularSidebarContainerView.swift in Sources */, 51E4995C24A875F300B667CB /* ArticleRenderer.swift in Sources */, @@ -4923,6 +4928,7 @@ 17D232A924AFF10A0005F075 /* AddWebFeedModel.swift in Sources */, 51E4993324A867E700B667CB /* AppNotifications.swift in Sources */, 51E4990624A808C300B667CB /* ImageDownloader.swift in Sources */, + 5181C64D24B024B4002E0F70 /* TimelineToolbar.swift in Sources */, 51E4994F24A8734C00B667CB /* TwitterFeedProvider-Extensions.swift in Sources */, 51E498CA24A8085D00B667CB /* SmartFeedDelegate.swift in Sources */, 51E4990524A808C300B667CB /* FeaturedImageDownloader.swift in Sources */,