From ce8426dbf0843f3a3e5fb53073c6a44efbc098b8 Mon Sep 17 00:00:00 2001 From: Laurent Date: Mon, 6 Feb 2023 15:49:21 +0100 Subject: [PATCH] Change editing style --- LeCountdown/Views/ContentView.swift | 14 +++++++-- LeCountdown/Views/DialView.swift | 48 ++++++++++++++++------------- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/LeCountdown/Views/ContentView.swift b/LeCountdown/Views/ContentView.swift index 36e05d5..5f4f179 100644 --- a/LeCountdown/Views/ContentView.swift +++ b/LeCountdown/Views/ContentView.swift @@ -23,12 +23,14 @@ struct ContentView: View { @EnvironmentObject var conductor: Conductor @Environment(\.managedObjectContext) private var viewContext - + @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \T.order, ascending: true)], animation: .default) private var timers: FetchedResults + @State private var isEditing: Bool = false + fileprivate let itemSpacing: CGFloat = 10.0 private let columns: [GridItem] = [ @@ -57,7 +59,7 @@ struct ContentView: View { ReorderableForEach(items: timersArray) { timer in - DialView(timer: timer, frameSize: width) .environment(\.managedObjectContext, viewContext) + DialView(timer: timer, isEditingBinding: self.$isEditing, frameSize: width) .environment(\.managedObjectContext, viewContext) .environmentObject(Conductor.maestro) .environmentObject(boringContext) @@ -103,7 +105,13 @@ struct ContentView: View { } } ToolbarItem(placement: .navigationBarLeading) { - EditButton() + Button { + withAnimation { + self.isEditing.toggle() + } + } label: { + Text(self.isEditing ? "Done" : "Edit") + } } } .onAppear { diff --git a/LeCountdown/Views/DialView.swift b/LeCountdown/Views/DialView.swift index 2e89f55..6723c84 100644 --- a/LeCountdown/Views/DialView.swift +++ b/LeCountdown/Views/DialView.swift @@ -15,40 +15,47 @@ struct DialView: View { @EnvironmentObject var conductor: Conductor @State var timer: AbstractTimer + var isEditingBinding: Binding var frameSize: CGFloat var body: some View { - ZStack(alignment: .topLeading) { + ZStack { Image(timer.imageName).resizable() - Button { - self._launchTimer(timer) - } label: { - self._dialView(timer: timer).padding() - } - - HStack { - Spacer() - NavigationLink { - self._editView(timer: timer, isPresented: $boringContext.isShowingNewData) + switch self.isEditingBinding.wrappedValue { + case false: + Button { + self._launchTimer() } label: { - Image(systemName: "gearshape.fill") - .font(.system(size: 24, weight: .light)) - .padding() - .foregroundColor(Color.white) + self._dialView().padding() + } + case true: + self._dialView().padding() + + VStack { + Spacer() + NavigationLink { + self._editView(timer: timer, isPresented: $boringContext.isShowingNewData) + } label: { + Image(systemName: "gearshape.fill") + .font(.system(size: 50.0)) + .padding(30.0) + .foregroundColor(Color.white) + } } } + } .frame(width: frameSize, height: frameSize) .cornerRadius(40.0) } @ViewBuilder - fileprivate func _dialView(timer: AbstractTimer) -> some View { + fileprivate func _dialView() -> some View { Group { - switch timer { + switch self.timer { case let countdown as Countdown: CountdownDialView(countdown: countdown) .environmentObject(Conductor.maestro) @@ -81,9 +88,9 @@ struct DialView: View { } } - fileprivate func _launchTimer(_ timer: AbstractTimer) { + fileprivate func _launchTimer() { - TimerRouter.performAction(timer: timer) { result in + TimerRouter.performAction(timer: self.timer) { result in switch result { case .success: break @@ -107,10 +114,9 @@ struct DialView_Previews: PreviewProvider { DialView( timer: Countdown.fake(context: PersistenceController.preview.container.viewContext), - frameSize: 150.0) + isEditingBinding: .constant(false), frameSize: 150.0) .environmentObject(Conductor.maestro) .environmentObject(BoringContext()) - } }