diff --git a/gloss/ContentView.swift b/gloss/ContentView.swift index 777b3fc..1011c67 100644 --- a/gloss/ContentView.swift +++ b/gloss/ContentView.swift @@ -16,7 +16,7 @@ let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "network var currentId: String? var currentOffset: CGFloat? -var gTracker: VisibilityTracker? +//var gTracker: VisibilityTracker? var printCount: Int64 = 0 var disableDrop = false @@ -46,35 +46,28 @@ func goToRibbon(selectedRibbon: Ribbon, refresh: Binding, showOverlay: Binding, appDatabase: AppDatabase, - paneConnector: Binding, + paneConnector: Binding, loading: Bool) { Task { - // print("SELECTED RIBBON", selectedRibbon) - var scrollOffsetToSave = currentOffset - var scrollIdToSave = currentId + var scrollOffsetToSave = paneConnector.wrappedValue.currentOffset + var scrollIdToSave = paneConnector.wrappedValue.currentId var updatedRibbon = selectedRibbon if selectedRibbon.id != destRibbon.id! || loading { print("switching ribbons") - // withAnimation(.spring(response: 0.05)) { - // showOverlay.wrappedValue = true showOverlay.wrappedValue = true - // } if loading { - currentId = destRibbon.scrollId - // currentOffset = CGFloat(destRibbon.scrollOffset) + paneConnector.wrappedValue.currentId = destRibbon.scrollId } scrollId.wrappedValue = destRibbon.scrollId - // print("setting scroll offset") scrollOffset.wrappedValue = CGFloat(destRibbon.scrollOffset) - // print(scrollOffset.wrappedValue) - // print("end setting scroll offset") - refresh.wrappedValue.toggle() + // refresh.wrappedValue.toggle() + paneConnector.wrappedValue.refresh.toggle() var updateSelectRibbon = SelectedRibbon(id: Int64(1), ribbonId: destRibbon.id!) // print("Saving selected ribbon") @@ -88,21 +81,16 @@ func goToRibbon(selectedRibbon: Ribbon, if !loading { print("not loading") - updatedRibbon.scrollOffset = Int(floor(scrollOffsetToSave!)) - updatedRibbon.scrollId = scrollIdToSave! + updatedRibbon.scrollOffset = Int(floor(scrollOffsetToSave)) + // updatedRibbon.scrollId = scrollIdToSave! + updatedRibbon.scrollId = scrollIdToSave _ = try await appDatabase.saveRibbon(&updatedRibbon) - // print("saved updatedRibbon", updatedRibbon) - // print("UPDATED") - // scrollOffsetToSave = userDefaults.object(forKey: "currentOffset") as? CGFloat - // scrollIdToSave = userDefaults.object(forKey: "currentId") as? String } else { print("loading") } - // print("scrollOffsetToSave: ", scrollOffsetToSave) - // print("scrollIdToSave: ", scrollIdToSave) } } @@ -120,7 +108,7 @@ struct RibbonCrown: View { @Binding var scrollOffset: CGFloat? @Binding var showOverlay: Bool @Binding var refresh: Bool - @Binding var paneConnector: PaneConnector? + @Binding var paneConnector: PaneConnector var draggedRibbon: Ribbon? var isDragging: Bool @@ -198,12 +186,18 @@ func makeVerseView(seg: SegDenorm) -> some View { return retView } -class PaneConnector : NSObject { - var scrollId: String - var scrollOffset: CGFloat - var setScrollOffset: CGFloat +class PaneConnector: NSObject { + // var scrollId: String + // var scrollOffset: CGFloat + // var setScrollOffset: CGFloat var showOverlay: Bool = false var refresh: Bool = false + var currentId = "" + var currentOffset = CGFloat() + var visibilityTracker: VisibilityTracker? + var scrollId = "" + var scrollOffset = CGFloat() + var setScrollOffset: CGFloat? } struct ContentView: View { @@ -211,10 +205,9 @@ struct ContentView: View { @State var viewState = CGSize.zero @State var pulledOut = CGSize.zero + @State var paneConnector = PaneConnector() - @State var paneConnector: PaneConnector? - - // scroll location of the main fenestra + // scroll location of the main Pane @State var scrollId: String? @State var scrollOffset: CGFloat? @State var setScrollOffset: CGFloat? @@ -290,16 +283,12 @@ struct ContentView: View { VStack { ScrollViewReader { proxy in VisibilityTrackingScrollView(action: handleVisibilityChanged) { - // ScrollView { - LazyVStack { ForEach(segs) { seg in SegRow(seg: seg, ribbonId: selectedRibbon[0].id!) .id("\(seg.id)") .offset(x: -dragOffset) - // .offset(x: pulledOut.width) - .padding(EdgeInsets(top: 10, leading: 20, bottom: 40, trailing: 20)) .trackVisibility(id: "\(seg.id)") } @@ -308,12 +297,6 @@ struct ContentView: View { } .onAppear { - Print("APPEAR") - // Print(selectedRibbon[0]) - // scrollId = "3" - // scrollOffset = 103 - // refresh.toggle() - goToRibbon(selectedRibbon: selectedRibbon[0], destRibbon: selectedRibbon[0], scrollId: $scrollId, @@ -324,38 +307,29 @@ struct ContentView: View { paneConnector: $paneConnector, loading: true) } - .onChange(of: refresh) { _ in - // if let target = target { - // gTracker!.visibleViews["123123"] = CGFloat(100) - // Print("ON CHANGE", gTracker!.visibleViews) - // Print("removing", gTracker!.visibleViews.removeAll()) + .onChange(of: paneConnector.refresh) { _ in Task { DispatchQueue.main.async { + let gTracker = paneConnector.visibilityTracker! + Print("scroll Id target: \(scrollId)") proxy.scrollTo(scrollId!, anchor: .top) - // proxy.scrollTo(String(Int(scrollId!)! + 1)) - // currentId = scrollId! - // if (currentId != scrollId!) { DispatchQueue.main.asyncAfter(deadline: .now() + 1) { Print(" scroll id target", scrollId) Print(" current id ", currentId) - Print(gTracker!.sortedViewIDs) + Print(gTracker.sortedViewIDs) if currentId! != scrollId! { Print("NO MATCH") } - // Print(" scroll offset target", scrollOffset) - Print(" current offset ", gTracker!.visibleViews[scrollId!]) - var curOffset = gTracker!.visibleViews[scrollId!] - Print(" stats", gTracker!.visibleViews) - // // setScrollOffset = CGFloat(Int(currentOffset!) * -1 + Int(scrollOffset!)) + Print(" current offset ", gTracker.visibleViews[scrollId!]) + var curOffset = gTracker.visibleViews[scrollId!] + Print(" stats", gTracker.visibleViews) if curOffset != nil { setScrollOffset = CGFloat(Int(scrollOffset!) - Int(curOffset!)) Print("applying scroll offset \(setScrollOffset)") - // // setScrollOffset = CGFloat(Int(scrollOffset!)) - // Print("setting scroll offset", setScrollOffset) refresh2.toggle() } else { var adjust = (Int(scrollId!)! - Int(currentId!)!) * 200 @@ -364,13 +338,6 @@ struct ContentView: View { setScrollOffset = CGFloat(adjust) refresh.toggle() } - // // currentId = scrollId! - - // DispatchQueue.main.async { - - // currentOffset = scrollOffset! - // currentId = scrollId! - // } } } } @@ -506,7 +473,9 @@ struct ContentView: View { func handleVisibilityChanged(_: String, change _: VisibilityChange, tracker: VisibilityTracker) { // var printRate: Int64 = 10 - gTracker = tracker + // gTracker = tracker + self.paneConnector.visibilityTracker = tracker + let visibleViews2 = Array(tracker.visibleViews.keys) if visibleViews2.count == 0 { @@ -516,6 +485,9 @@ struct ContentView: View { // currentId = tracker.sortedViewIDs[tracker.sortedViewIDs.count - 1] currentId = tracker.sortedViewIDs[0] currentOffset = tracker.visibleViews[currentId!]! + + self.paneConnector.currentId = tracker.sortedViewIDs[0] + self.paneConnector.currentOffset = tracker.visibleViews[currentId!]! } }