// // PortraitView.swift // Bunch O' Dice // // Created by Rory Hinnen on 22/6/18. // import SwiftUI struct MainView: View { enum MenuView: Int { case history, add, settings func icon() -> Image { switch self { case .history: return Image(systemName: "folder") case .settings: return Image(systemName: "square.and.pencil") case .add: return Image(systemName: "folder.badge.plus") } } } @EnvironmentObject var current: Roll @ObservedObject var sheet = SettingsSheet() private let controlSize = 30.0 var body: some View { VStack { StatePickerView() VStack(spacing: 8) { RollSummaryView() switch current.state { case .wound: WoundCalculatorView() case .armour: ArmourCalculatorView() default: HitCalculatorView() } InfoAreaView() Spacer() } } .toolbar { ToolbarItemGroup(placement: .bottomBar) { HStack { Button(action: { sheet.state = .history }) { MenuView.history.icon() } Button(action: { current.history.insert(Event(total: current.result, pool: current.dice, state: current.state), at: 0) }) { MenuView.add.icon() } Button(action: { sheet.state = .settings }) { MenuView.settings.icon() } } .font(.system(size: controlSize)) .foregroundColor(.primary) } } .sheet(isPresented: $sheet.isShowing) { switch sheet.state { case .settings: SettingsView(isShowing: $sheet.isShowing) case .history: HistoryView(isShowing: $sheet.isShowing) default: EmptyView() } } } } #Preview("Hit") { MainView().environmentObject(Roll()) } #Preview("Wound") { MainView().environmentObject({ let r = Roll() r.state = .wound return r }()) } #Preview("Armour") { MainView().environmentObject({ let r = Roll() r.state = .armour return r }()) }