NetNewsWire/Multiplatform/Shared/SceneNavigationView.swift

169 lines
3.8 KiB
Swift
Raw Normal View History

2020-06-28 21:21:43 +02:00
//
// SceneNavigationView.swift
// NetNewsWire
//
// Created by Maurice Parker on 6/28/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import SwiftUI
struct SceneNavigationView: View {
@StateObject private var sceneModel = SceneModel()
@State private var showSheet: Bool = false
@State private var sheetToShow: ToolbarSheets = .none
2020-06-29 16:06:00 +02:00
#if os(iOS)
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
#endif
var body: some View {
2020-06-28 21:21:43 +02:00
NavigationView {
#if os(macOS)
SidebarContainerView()
2020-06-29 23:58:10 +02:00
.frame(minWidth: 100, idealWidth: 150, maxHeight: .infinity)
2020-06-28 21:21:43 +02:00
#else
SidebarContainerView()
2020-06-28 21:21:43 +02:00
#endif
2020-06-29 16:06:00 +02:00
#if os(iOS)
if horizontalSizeClass != .compact {
Text("Timeline")
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
#else
2020-06-28 21:21:43 +02:00
Text("Timeline")
.frame(maxWidth: .infinity, maxHeight: .infinity)
2020-06-29 16:06:00 +02:00
#endif
2020-06-28 21:21:43 +02:00
#if os(macOS)
Text("None Selected")
.frame(maxWidth: .infinity, maxHeight: .infinity)
.toolbar { Spacer() }
#else
Text("None Selected")
.frame(maxWidth: .infinity, maxHeight: .infinity)
#endif
}
.environmentObject(sceneModel)
.onAppear {
sceneModel.startup()
}
.sheet(isPresented: $showSheet, onDismiss: { sheetToShow = .none }) {
if sheetToShow == .web {
AddWebFeedView()
}
if sheetToShow == .folder {
AddFolderView()
}
}
.onChange(of: sheetToShow) { value in
value != .none ? (showSheet = true) : (showSheet = false)
}
.toolbar {
#if os(macOS)
ToolbarItem() {
Menu {
Button("Add Web Feed", action: { sheetToShow = .web })
Button("Add Reddit Feed", action: { })
Button("Add Twitter Feed", action: { })
Button("Add Folder", action: { sheetToShow = .folder})
} label : {
AppAssets.addMenuImage
}
}
ToolbarItem {
Button {
} label: {
AppAssets.refreshImage
}
.help("Refresh").padding(.trailing, 40)
}
ToolbarItem {
Button {
} label: {
AppAssets.markAllAsReadImagePDF
.resizable()
.scaledToFit()
.frame(width: 20, height: 20, alignment: .center)
}
.disabled(sceneModel.markAllAsReadButtonState == nil)
.help("Mark All as Read")
}
ToolbarItem {
MacSearchField()
.frame(width: 200)
}
ToolbarItem {
Button {
} label: {
AppAssets.nextUnreadArticleImage
}
.disabled(sceneModel.nextUnreadButtonState == nil)
.help("Go to Next Unread").padding(.trailing, 40)
}
ToolbarItem {
Button {
sceneModel.toggleReadStatusForSelectedArticles()
} label: {
if sceneModel.readButtonState ?? false {
AppAssets.readClosedImage
} else {
AppAssets.readOpenImage
}
}
.disabled(sceneModel.readButtonState == nil)
.help(sceneModel.readButtonState ?? false ? "Mark as Unread" : "Mark as Read")
}
ToolbarItem {
Button {
sceneModel.toggleStarredStatusForSelectedArticles()
} label: {
if sceneModel.starButtonState ?? false {
AppAssets.starClosedImage
} else {
AppAssets.starOpenImage
}
}
.disabled(sceneModel.starButtonState == nil)
.help(sceneModel.starButtonState ?? false ? "Mark as Unstarred" : "Mark as Starred")
}
2020-07-09 00:34:35 +02:00
ToolbarItem {
Button {
} label: {
2020-07-09 00:34:35 +02:00
AppAssets.articleExtractorOff
}
.disabled(sceneModel.extractorButtonState == nil)
.help("Show Reader View")
2020-07-09 00:34:35 +02:00
}
ToolbarItem {
Button {
} label: {
AppAssets.openInBrowserImage
}
.disabled(sceneModel.openInBrowserButtonState == nil)
.help("Open in Browser")
}
ToolbarItem {
Button {
} label: {
AppAssets.shareImage
}
.disabled(sceneModel.shareButtonState == nil)
.help("Share")
}
#endif
}
2020-06-28 21:21:43 +02:00
}
}
struct NavigationView_Previews: PreviewProvider {
static var previews: some View {
SceneNavigationView()
.environmentObject(SceneModel())
2020-06-28 21:21:43 +02:00
}
}