diff --git a/LeCountdown/LeCountdownApp.swift b/LeCountdown/LeCountdownApp.swift index 4987495..4217ab1 100644 --- a/LeCountdown/LeCountdownApp.swift +++ b/LeCountdown/LeCountdownApp.swift @@ -22,14 +22,24 @@ struct LeCountdownApp: App { var body: some Scene { WindowGroup { - ContentView() - .environmentObject(BoringContext()) - .environment(\.managedObjectContext, persistenceController.container.viewContext) - .onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in - self._willEnterForegroundNotification() - }.onAppear { - self._onAppear() - } + TabView { + ContentView() + .environment(\.managedObjectContext, persistenceController.container.viewContext) + .tabItem { Label("Countdown", systemImage: "timer") } + ContentView() + .environment(\.managedObjectContext, persistenceController.container.viewContext) + .tabItem { Label("Stopwatch", systemImage: "stopwatch") } + ContentView() + .environment(\.managedObjectContext, persistenceController.container.viewContext) + .tabItem { Label("Alarm", systemImage: "alarm") } + RecordsView().environment(\.managedObjectContext, persistenceController.container.viewContext) + .tabItem { Label("Stats", systemImage: "chart.bar.fill") } + } + .onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in + self._willEnterForegroundNotification() + }.onAppear { + self._onAppear() + } } } diff --git a/LeCountdown/Views/Alarm/NewAlarmView.swift b/LeCountdown/Views/Alarm/NewAlarmView.swift index 1191621..c435059 100644 --- a/LeCountdown/Views/Alarm/NewAlarmView.swift +++ b/LeCountdown/Views/Alarm/NewAlarmView.swift @@ -18,7 +18,7 @@ struct NewAlarmView: View { var body: some View { AlarmEditView(isPresented: $isPresented) .environment(\.managedObjectContext, viewContext) - .navigationTitle("New countdown") + .navigationTitle("New alarm") } } @@ -127,7 +127,7 @@ struct AlarmEditView: View { } } } - .navigationTitle("Edit countdown") + .navigationTitle("Edit alarm") } } diff --git a/LeCountdown/Views/ContentView.swift b/LeCountdown/Views/ContentView.swift index 599fc6b..c1be15e 100644 --- a/LeCountdown/Views/ContentView.swift +++ b/LeCountdown/Views/ContentView.swift @@ -17,16 +17,16 @@ class BoringContext : ObservableObject { } -struct ContentView: View { +struct ContentView: View { - @EnvironmentObject var boringContext: BoringContext + @StateObject var boringContext: BoringContext = BoringContext() @Environment(\.managedObjectContext) private var viewContext @FetchRequest( - sortDescriptors: [NSSortDescriptor(keyPath: \AbstractTimer.order, ascending: true)], + sortDescriptors: [NSSortDescriptor(keyPath: \T.order, ascending: true)], animation: .default) - private var timers: FetchedResults + private var timers: FetchedResults fileprivate let itemSpacing: CGFloat = 10.0 @@ -35,7 +35,7 @@ struct ContentView: View { GridItem(spacing: 10.0), ] - var timersArray: [AbstractTimer] { + var timersArray: [T] { return Array(timers) } @@ -61,7 +61,7 @@ struct ContentView: View { } }.padding(itemSpacing) - .navigationTitle("Youpi") + .navigationTitle("\(String(describing: T.self))") .alert(boringContext.error?.localizedDescription ?? "missing error", isPresented: $boringContext.showDefaultAlert) { Button("OK", role: .cancel) { } } @@ -69,23 +69,23 @@ struct ContentView: View { PermissionAlertView() } .sheet(isPresented: $boringContext.isShowingNewData, content: { - NewCountdownView(isPresented: $boringContext.isShowingNewData) .environment(\.managedObjectContext, viewContext) - }) - .sheet(isPresented: $boringContext.isShowingNewData, content: { - NewStopwatchView(isPresented: $boringContext.isShowingNewData) .environment(\.managedObjectContext, viewContext) - }) - .sheet(isPresented: $boringContext.isShowingNewData, content: { - NewAlarmView(isPresented: $boringContext.isShowingNewData) .environment(\.managedObjectContext, viewContext) + self._newView(isPresented: $boringContext.isShowingNewData) + .environment(\.managedObjectContext, viewContext) }) +// .sheet(isPresented: $boringContext.isShowingNewData, content: { +// NewStopwatchView(isPresented: $boringContext.isShowingNewData) .environment(\.managedObjectContext, viewContext) +// }) +// .sheet(isPresented: $boringContext.isShowingNewData, content: { +// NewAlarmView(isPresented: $boringContext.isShowingNewData) .environment(\.managedObjectContext, viewContext) +// }) .toolbar { - ToolbarItemGroup(placement: .bottomBar) { - MainToolbarView(isShowingNewData: $boringContext.isShowingNewData) - } ToolbarItem(placement: .navigationBarTrailing) { - NavigationLink { - RecordsView() + Button { + self.boringContext.isShowingNewData = true } label: { - Image(systemName: "chart.bar.fill") + HStack { + Image(systemName: "plus") + } } } ToolbarItem(placement: .navigationBarLeading) { @@ -102,6 +102,21 @@ struct ContentView: View { } } + + @ViewBuilder + fileprivate func _newView(isPresented: Binding) -> some View { + switch T.self { + case is Countdown.Type: + NewCountdownView(isPresented: isPresented) + case is Alarm.Type: + NewAlarmView(isPresented: isPresented) + case is Stopwatch.Type: + NewStopwatchView(isPresented: isPresented) + default: + Text("missing new view") + } + + } fileprivate func _reorder(from: IndexSet, to: Int) { var timers: [AbstractTimer] = self.timersArray @@ -207,6 +222,6 @@ fileprivate extension Countdown { struct ContentView_Previews: PreviewProvider { static var previews: some View { - ContentView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext) + ContentView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext) } } diff --git a/LeCountdown/Views/Countdown/CountdownDialView.swift b/LeCountdown/Views/Countdown/CountdownDialView.swift index acdf7d9..44a69bb 100644 --- a/LeCountdown/Views/Countdown/CountdownDialView.swift +++ b/LeCountdown/Views/Countdown/CountdownDialView.swift @@ -9,8 +9,6 @@ import SwiftUI struct CountdownDialView: View { - @EnvironmentObject var environment: Conductor - @ObservedObject var countdown: Countdown var body: some View { @@ -21,7 +19,7 @@ struct CountdownDialView: View { Spacer() } - if let dateInterval = environment.notificationDates[countdown.stringId] { + if let dateInterval = Conductor.maestro.notificationDates[countdown.stringId] { Text(dateInterval.end, style: .timer) Button { CountdownScheduler.master.cancelCurrentNotifications(countdown: countdown) diff --git a/LeCountdown/Views/Countdown/NewCountdownView.swift b/LeCountdown/Views/Countdown/NewCountdownView.swift index dceb899..94abca9 100644 --- a/LeCountdown/Views/Countdown/NewCountdownView.swift +++ b/LeCountdown/Views/Countdown/NewCountdownView.swift @@ -205,7 +205,9 @@ struct CountdownEditView : View { if !self.nameString.isEmpty { - if let activity = cd.activity, let currentActivityName = activity.name, self.nameString != currentActivityName { + let trimmed = self.nameString.trimmingCharacters(in: .whitespacesAndNewlines) + + if let activity = cd.activity, let currentActivityName = activity.name, trimmed != currentActivityName { switch self._rename { case .none: @@ -213,13 +215,13 @@ struct CountdownEditView : View { return case .some(let rename): if rename { - activity.name = self.nameString + activity.name = trimmed } else { - cd.activity = CoreDataRequests.getOrCreateActivity(name: self.nameString) + cd.activity = CoreDataRequests.getOrCreateActivity(name: trimmed) } } } else { - cd.activity = CoreDataRequests.getOrCreateActivity(name: self.nameString) + cd.activity = CoreDataRequests.getOrCreateActivity(name: trimmed) } } diff --git a/LeCountdown/Views/Stopwatch/NewStopwatchView.swift b/LeCountdown/Views/Stopwatch/NewStopwatchView.swift index 52af4f2..073cf0e 100644 --- a/LeCountdown/Views/Stopwatch/NewStopwatchView.swift +++ b/LeCountdown/Views/Stopwatch/NewStopwatchView.swift @@ -18,7 +18,7 @@ struct NewStopwatchView: View { var body: some View { StopwatchEditView(isPresented: $isPresented) .environment(\.managedObjectContext, viewContext) - .navigationTitle("New countdown") + .navigationTitle("New stopwatch") } } @@ -127,7 +127,7 @@ struct StopwatchEditView: View { } } } - .navigationTitle("Edit countdown") + .navigationTitle("Edit stopwatch") } }