diff --git a/Fenestra.swift b/Fenestra.swift index d940fcd..48f4b7e 100644 --- a/Fenestra.swift +++ b/Fenestra.swift @@ -77,7 +77,7 @@ struct SegRow: View { struct Pane: View { - @State var paneConnector = PaneConnector() + @ObservedObject var paneConnector: PaneConnector @State var segs: [SegDenorm] @State var selectedRibbon: [Ribbon] @@ -95,7 +95,7 @@ struct Pane: View { // var handleVisibilityChanged: (String, VisibilityChange, VisibilityTracker) -> Void - var body: some View { + var body: some View{ ScrollViewReader { proxy in VisibilityTrackingScrollView(action: handleVisibilityChanged) { LazyVStack { @@ -115,11 +115,12 @@ struct Pane: View { goToRibbon(selectedRibbon: selectedRibbon[0], destRibbon: selectedRibbon[0], appDatabase: appDatabase, - paneConnector: $paneConnector, + paneConnector: paneConnector, refresh: $refresh, loading: true) } .onChange(of: paneConnector.refresh) { _ in + print("inside change") print("on change") Task { diff --git a/gloss/ContentView.swift b/gloss/ContentView.swift index 1fed79c..7d8a048 100644 --- a/gloss/ContentView.swift +++ b/gloss/ContentView.swift @@ -42,50 +42,60 @@ public extension UserDefaults { func goToRibbon(selectedRibbon: Ribbon, destRibbon: Ribbon, appDatabase: AppDatabase, - paneConnector: Binding, + paneConnector: PaneConnector, refresh: Binding, loading: Bool) { - Task { - var scrollOffsetToSave = paneConnector.wrappedValue.currentOffset - var scrollIdToSave = paneConnector.wrappedValue.currentId - var updatedRibbon = selectedRibbon + DispatchQueue.main.asyncAfter(deadline: .now()) { + Task { + var scrollOffsetToSave = paneConnector.currentOffset + var scrollIdToSave = paneConnector.currentId - if selectedRibbon.id != destRibbon.id! || loading { - print("switching ribbons") + var updatedRibbon = selectedRibbon + print("go to ribbon") + print("\(selectedRibbon.id) \(destRibbon.id!)") - paneConnector.wrappedValue.showOverlay = true + if selectedRibbon.id != destRibbon.id! || loading { + print("switching ribbons") - if loading { - paneConnector.wrappedValue.currentId = destRibbon.scrollId + paneConnector.showOverlay = true + + if loading { + paneConnector.currentId = destRibbon.scrollId + } + + paneConnector.scrollId = destRibbon.scrollId + paneConnector.scrollOffset = CGFloat(destRibbon.scrollOffset) + paneConnector.refresh.toggle() + + print("toggling") + print("paneconnector: \(paneConnector.refresh)") + + refresh.wrappedValue.toggle() + + var updateSelectRibbon = SelectedRibbon(id: Int64(1), ribbonId: destRibbon.id!) + // print("Saving selected ribbon") + // print(updateSelectRibbon) + do { + _ = try await appDatabase.saveSelectedRibbon(&updateSelectRibbon) + } catch { + // Print("something wrong") + } } - paneConnector.wrappedValue.scrollId = destRibbon.scrollId - paneConnector.wrappedValue.scrollOffset = CGFloat(destRibbon.scrollOffset) - paneConnector.wrappedValue.refresh.toggle() + if !loading { + print("not loading") + updatedRibbon.scrollOffset = Int(floor(scrollOffsetToSave)) + updatedRibbon.scrollId = scrollIdToSave + _ = try await appDatabase.saveRibbon(&updatedRibbon) - var updateSelectRibbon = SelectedRibbon(id: Int64(1), ribbonId: destRibbon.id!) - // print("Saving selected ribbon") - // print(updateSelectRibbon) - do { - _ = try await appDatabase.saveSelectedRibbon(&updateSelectRibbon) - } catch { - // Print("something wrong") + } else { + print("loading") } } - - if !loading { - print("not loading") - updatedRibbon.scrollOffset = Int(floor(scrollOffsetToSave)) - updatedRibbon.scrollId = scrollIdToSave - _ = try await appDatabase.saveRibbon(&updatedRibbon) - - } else { - print("loading") - } - } + } extension View { @@ -98,7 +108,7 @@ extension View { struct RibbonCrown: View { var ribbon: Ribbon - @Binding var paneConnector: PaneConnector + @ObservedObject var paneConnector: PaneConnector var draggedRibbon: Ribbon? var isDragging: Bool @@ -142,7 +152,7 @@ struct RibbonCrown: View { goToRibbon(selectedRibbon: sr[0], destRibbon: ribbon, appDatabase: appDatabase, - paneConnector: $paneConnector, + paneConnector: paneConnector, refresh: $refresh, loading: false) } @@ -175,53 +185,18 @@ func makeVerseView(seg: SegDenorm) -> some View { return retView } -class PaneConnector: NSObject, NSCopying { +class PaneConnector: NSObject, ObservableObject { // var scrollId: String // var scrollOffset: CGFloat // var setScrollOffset: CGFloat var showOverlay: Bool = false - var refresh: Bool = false + @Published var refresh: Bool = false var currentId = "" var currentOffset = CGFloat() var visibilityTracker: VisibilityTracker? var scrollId = "" var scrollOffset = CGFloat() var setScrollOffset: CGFloat? - - required override init() {} - - // convenience init(showOverlay _: Bool, refresh _: Bool, currentId _: String, - // currentOffset _: CGFloat, visibilityTracker _: VisibilityTracker?, scrollId _: String, - // scrollOffset _: CGFloat, setScrollOffset _: CGFloat) { - // self.init() - - // self.showOverlay = showOverlay - // self.refresh = refresh - // self.currentId = currentId - // self.currentOffset = currentOffset - // self.visibilityTracker = visibilityTracker - // self.scrollId = scrollId - // self.scrollOffset = scrollOffset - // self.setScrollOffset = setScrollOffset - // } - - // func copy(with _: NSZone? = nil) -> Any { - // let item = PaneConnector( - // return item - // } - - - func copy(with _: NSZone? = nil) -> Any { - let item = type(of: self).init() - item.showOverlay = showOverlay - item.refresh = refresh - item.currentId = currentId - item.currentOffset = currentOffset - item.visibilityTracker = visibilityTracker - item.scrollId = scrollId - item.setScrollOffset = setScrollOffset - return item - } } struct ContentView: View { @@ -229,7 +204,7 @@ struct ContentView: View { @State var viewState = CGSize.zero @State var pulledOut = CGSize.zero - @State var paneConnector = PaneConnector() + @StateObject var paneConnector = PaneConnector() @State var refresh: Bool = false @@ -270,7 +245,7 @@ struct ContentView: View { VStack { ForEach(ribbons) { ribbon in RibbonCrown(ribbon: ribbon, - paneConnector: $paneConnector, + paneConnector: paneConnector, draggedRibbon: draggedRibbon, isDragging: isDragging, refresh: $refresh) @@ -297,14 +272,12 @@ struct ContentView: View { .frame(alignment: .topLeading) VStack { - // Top pane + // Top pane Pane(paneConnector: paneConnector, segs: segs, selectedRibbon: selectedRibbon, - width: geometry.size.width - 50, - height: geometry.size.height / 2 - vertSep - ) - + width: geometry.size.width - 50, + height: geometry.size.height / 2 - vertSep) ////// Text("separator").foregroundColor(Color(UIColor(red: 0.76, green: 0.76, blue: 0.76, alpha: 1.00))) @@ -410,6 +383,10 @@ struct ContentView: View { // .zIndex(2) // } } + + .onChange(of: paneConnector.refresh) { _ in + Print("we changing changing") + } } }