diff --git a/Multiplatform/Shared/Sidebar/CompactSidebarContainerView.swift b/Multiplatform/Shared/Sidebar/CompactSidebarContainerView.swift index a14b01503..686f01ebd 100644 --- a/Multiplatform/Shared/Sidebar/CompactSidebarContainerView.swift +++ b/Multiplatform/Shared/Sidebar/CompactSidebarContainerView.swift @@ -16,6 +16,7 @@ struct CompactSidebarContainerView: View { var body: some View { SidebarView() + .modifier(SidebarToolbar()) .environmentObject(sidebarModel) .navigationBarTitle(Text("Feeds")) .listStyle(PlainListStyle()) @@ -23,11 +24,7 @@ struct CompactSidebarContainerView: View { sceneModel.sidebarModel = sidebarModel sidebarModel.delegate = sceneModel sidebarModel.rebuildSidebarItems() - }.overlay(Group { - #if os(iOS) - SidebarToolbar() - #endif - },alignment: .bottom) + } } } diff --git a/Multiplatform/Shared/Sidebar/RegularSidebarContainerView.swift b/Multiplatform/Shared/Sidebar/RegularSidebarContainerView.swift index f2440a746..bd2e05a42 100644 --- a/Multiplatform/Shared/Sidebar/RegularSidebarContainerView.swift +++ b/Multiplatform/Shared/Sidebar/RegularSidebarContainerView.swift @@ -17,6 +17,7 @@ struct RegularSidebarContainerView: View { @ViewBuilder var body: some View { SidebarView() + .modifier(SidebarToolbar()) .environmentObject(sidebarModel) .navigationTitle(Text("Feeds")) .listStyle(SidebarListStyle()) @@ -25,11 +26,6 @@ struct RegularSidebarContainerView: View { sidebarModel.delegate = sceneModel sidebarModel.rebuildSidebarItems() } - .overlay(Group { - #if os(iOS) - SidebarToolbar() - #endif - },alignment: .bottom) } diff --git a/Multiplatform/Shared/Sidebar/SidebarToolbar.swift b/Multiplatform/Shared/Sidebar/SidebarToolbar.swift index 90d4a7e39..969809e22 100644 --- a/Multiplatform/Shared/Sidebar/SidebarToolbar.swift +++ b/Multiplatform/Shared/Sidebar/SidebarToolbar.swift @@ -8,85 +8,65 @@ import SwiftUI -fileprivate enum ToolbarSheets { - case none, web, twitter, reddit, folder, settings -} -fileprivate class SidebarToolbarViewModel: ObservableObject { - - @Published var showSheet: Bool = false - @Published var sheetToShow: ToolbarSheets = .none { - didSet { - sheetToShow != .none ? (showSheet = true) : (showSheet = false) - } - } - @Published var showActionSheet: Bool = false - @Published var showAddSheet: Bool = false - -} - -struct SidebarToolbar: View { +struct SidebarToolbar: ViewModifier { @EnvironmentObject private var appSettings: AppDefaults - @StateObject private var viewModel = SidebarToolbarViewModel() + @StateObject private var viewModel = SidebarToolbarModel() - var body: some View { - VStack { - Divider() - HStack(alignment: .center) { - Button(action: { - viewModel.sheetToShow = .settings - }, label: { - AppAssets.settingsImage - .font(.title3) - .foregroundColor(.accentColor) - }).help("Settings") + func body(content: Content) -> some View { + content + .toolbar { + ToolbarItem(placement: .automatic) { + Button(action: { + viewModel.sheetToShow = .settings + }, label: { + AppAssets.settingsImage + .font(.title3) + .foregroundColor(.accentColor) + Spacer() + }).help("Settings") + } - Spacer() - - Text("Last updated") - .font(.caption) - .foregroundColor(.secondary) - - Spacer() - - Button(action: { - viewModel.showActionSheet = true - }, label: { - AppAssets.addMenuImage - .font(.title3) - .foregroundColor(.accentColor) + ToolbarItem(placement: .automatic, content: { + Spacer() + Text("Last updated") + .font(.caption) + .foregroundColor(.secondary) + Spacer() }) - .help("Add") - .actionSheet(isPresented: $viewModel.showActionSheet) { - ActionSheet(title: Text("Add"), buttons: [ - .cancel(), - .default(Text("Add Web Feed"), action: { viewModel.sheetToShow = .web }), - .default(Text("Add Twitter Feed")), - .default(Text("Add Reddit Feed")), - .default(Text("Add Folder")) - ]) + + ToolbarItem(placement: .automatic, content: { + Button(action: { + viewModel.showActionSheet = true + }, label: { + Spacer() + AppAssets.addMenuImage + .font(.title3) + .foregroundColor(.accentColor) + }) + .help("Add") + .actionSheet(isPresented: $viewModel.showActionSheet) { + ActionSheet(title: Text("Add"), buttons: [ + .cancel(), + .default(Text("Add Web Feed"), action: { viewModel.sheetToShow = .web }), + .default(Text("Add Twitter Feed")), + .default(Text("Add Reddit Feed")), + .default(Text("Add Folder")) + ]) + } + }) + + } + .sheet(isPresented: $viewModel.showSheet, onDismiss: { viewModel.sheetToShow = .none }) { + if viewModel.sheetToShow == .web { + AddWebFeedView() + } + if viewModel.sheetToShow == .settings { + SettingsView().modifier(PreferredColorSchemeModifier(preferredColorScheme: appSettings.userInterfaceColorPalette)) } } - .padding(.horizontal, 16) - .padding(.bottom, 12) - .padding(.top, 4) - } - .background(VisualEffectBlur(blurStyle: .systemChromeMaterial).edgesIgnoringSafeArea(.bottom)) - .sheet(isPresented: $viewModel.showSheet, onDismiss: { viewModel.sheetToShow = .none }) { - if viewModel.sheetToShow == .web { - AddWebFeedView() - } - if viewModel.sheetToShow == .settings { - SettingsView().modifier(PreferredColorSchemeModifier(preferredColorScheme: appSettings.userInterfaceColorPalette)) - } - } - - } + } } -struct SidebarToolbar_Previews: PreviewProvider { - static var previews: some View { - SidebarToolbar() - } -} + diff --git a/Multiplatform/Shared/Sidebar/SidebarToolbarModel.swift b/Multiplatform/Shared/Sidebar/SidebarToolbarModel.swift new file mode 100644 index 000000000..000066277 --- /dev/null +++ b/Multiplatform/Shared/Sidebar/SidebarToolbarModel.swift @@ -0,0 +1,26 @@ +// +// SidebarToolbarModel.swift +// NetNewsWire +// +// Created by Stuart Breckenridge on 4/7/20. +// Copyright © 2020 Ranchero Software. All rights reserved. +// + +import Foundation + +enum ToolbarSheets { + case none, web, twitter, reddit, folder, settings +} + +class SidebarToolbarModel: ObservableObject { + + @Published var showSheet: Bool = false + @Published var sheetToShow: ToolbarSheets = .none { + didSet { + sheetToShow != .none ? (showSheet = true) : (showSheet = false) + } + } + @Published var showActionSheet: Bool = false + @Published var showAddSheet: Bool = false + +} diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index bdb2dc841..ea58b06bd 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -29,6 +29,8 @@ 179DB3CE822BFCC2D774D9F4 /* AccountsNewsBlurWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DBBA2B22A659F81EED6F9 /* AccountsNewsBlurWindowController.swift */; }; 17D232A824AFF10A0005F075 /* AddWebFeedModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */; }; 17D232A924AFF10A0005F075 /* AddWebFeedModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */; }; + 17D5F17124B0BC6700375168 /* SidebarToolbarModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D5F17024B0BC6700375168 /* SidebarToolbarModel.swift */; }; + 17D5F17224B0BC6700375168 /* SidebarToolbarModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D5F17024B0BC6700375168 /* SidebarToolbarModel.swift */; }; 3B3A32A5238B820900314204 /* FeedWranglerAccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3A328B238B820900314204 /* FeedWranglerAccountViewController.swift */; }; 3B826DCB2385C84800FC1ADB /* AccountsFeedWrangler.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3B826DB02385C84800FC1ADB /* AccountsFeedWrangler.xib */; }; 3B826DCC2385C84800FC1ADB /* AccountsFeedWranglerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B826DCA2385C84800FC1ADB /* AccountsFeedWranglerWindowController.swift */; }; @@ -1731,6 +1733,7 @@ 179DBBA2B22A659F81EED6F9 /* AccountsNewsBlurWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountsNewsBlurWindowController.swift; sourceTree = ""; }; 17B223DB24AC24D2001E4592 /* TimelineLayoutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineLayoutView.swift; sourceTree = ""; }; 17D232A724AFF10A0005F075 /* AddWebFeedModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddWebFeedModel.swift; sourceTree = ""; }; + 17D5F17024B0BC6700375168 /* SidebarToolbarModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarToolbarModel.swift; sourceTree = ""; }; 3B3A328B238B820900314204 /* FeedWranglerAccountViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedWranglerAccountViewController.swift; sourceTree = ""; }; 3B826DB02385C84800FC1ADB /* AccountsFeedWrangler.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AccountsFeedWrangler.xib; sourceTree = ""; }; 3B826DCA2385C84800FC1ADB /* AccountsFeedWranglerWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountsFeedWranglerWindowController.swift; sourceTree = ""; }; @@ -2963,6 +2966,7 @@ 51919FAE24AA8EFA00541E64 /* SidebarItemView.swift */, 51E499FC24A9137600B667CB /* SidebarModel.swift */, 172199F024AB716900A31D04 /* SidebarToolbar.swift */, + 17D5F17024B0BC6700375168 /* SidebarToolbarModel.swift */, 51919FA524AA64B000541E64 /* SidebarView.swift */, 51919FAB24AA8CCA00541E64 /* UnreadCountView.swift */, ); @@ -3972,46 +3976,46 @@ TargetAttributes = { 51314636235A7BBE00387FDC = { CreatedOnToolsVersion = 11.2; - DevelopmentTeam = SHJK2V3AJG; + DevelopmentTeam = FQLBNX3GP7; LastSwiftMigration = 1120; ProvisioningStyle = Automatic; }; 513C5CE5232571C2003D4054 = { CreatedOnToolsVersion = 11.0; - DevelopmentTeam = SHJK2V3AJG; + DevelopmentTeam = FQLBNX3GP7; ProvisioningStyle = Automatic; }; 518B2ED12351B3DD00400001 = { CreatedOnToolsVersion = 11.2; - DevelopmentTeam = SHJK2V3AJG; + DevelopmentTeam = FQLBNX3GP7; ProvisioningStyle = Automatic; TestTargetID = 840D617B2029031C009BC708; }; 51C0513C24A77DF800194D5E = { CreatedOnToolsVersion = 12.0; - DevelopmentTeam = SHJK2V3AJG; + DevelopmentTeam = FQLBNX3GP7; ProvisioningStyle = Automatic; }; 51C0514324A77DF800194D5E = { CreatedOnToolsVersion = 12.0; - DevelopmentTeam = SHJK2V3AJG; + DevelopmentTeam = FQLBNX3GP7; ProvisioningStyle = Automatic; }; 6581C73220CED60000F4AD34 = { - DevelopmentTeam = SHJK2V3AJG; + DevelopmentTeam = FQLBNX3GP7; ProvisioningStyle = Automatic; }; 65ED3FA2235DEF6C0081F399 = { - DevelopmentTeam = SHJK2V3AJG; + DevelopmentTeam = FQLBNX3GP7; ProvisioningStyle = Automatic; }; 65ED4090235DEF770081F399 = { - DevelopmentTeam = SHJK2V3AJG; + DevelopmentTeam = FQLBNX3GP7; ProvisioningStyle = Automatic; }; 840D617B2029031C009BC708 = { CreatedOnToolsVersion = 9.3; - DevelopmentTeam = SHJK2V3AJG; + DevelopmentTeam = FQLBNX3GP7; ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.BackgroundModes = { @@ -4021,7 +4025,7 @@ }; 849C645F1ED37A5D003D8FC0 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = SHJK2V3AJG; + DevelopmentTeam = FQLBNX3GP7; ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.HardenedRuntime = { @@ -4031,7 +4035,7 @@ }; 849C64701ED37A5D003D8FC0 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = SHJK2V3AJG; + DevelopmentTeam = FQLBNX3GP7; ProvisioningStyle = Automatic; TestTargetID = 849C645F1ED37A5D003D8FC0; }; @@ -4797,6 +4801,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 17D5F17124B0BC6700375168 /* SidebarToolbarModel.swift in Sources */, 51E4995924A873F900B667CB /* ErrorHandler.swift in Sources */, 51392D1B24AC19A000BE0D35 /* SidebarExpandedContainers.swift in Sources */, 51E4992F24A8676400B667CB /* ArticleArray.swift in Sources */, @@ -4915,6 +4920,7 @@ 51E4990824A808C300B667CB /* RSHTMLMetadata+Extension.swift in Sources */, 51919FF824AB8B7700541E64 /* TimelineView.swift in Sources */, 51E4992B24A8676300B667CB /* ArticleArray.swift in Sources */, + 17D5F17224B0BC6700375168 /* SidebarToolbarModel.swift in Sources */, 514E6C0724AD2B5F00AC6F6E /* Image-Extensions.swift in Sources */, 51E4994D24A8734C00B667CB /* ExtensionPointIdentifer.swift in Sources */, 51E4992224A8095600B667CB /* URL-Extensions.swift in Sources */,