building and jumps working now

using observed object instead of binding works actually
undo
saint 2024-05-23 17:21:58 -04:00
parent 3a7c83c2d9
commit ae49a5cbfe
2 changed files with 58 additions and 80 deletions

View File

@ -77,7 +77,7 @@ struct SegRow: View {
struct Pane: View { struct Pane: View {
@State var paneConnector = PaneConnector() @ObservedObject var paneConnector: PaneConnector
@State var segs: [SegDenorm] @State var segs: [SegDenorm]
@State var selectedRibbon: [Ribbon] @State var selectedRibbon: [Ribbon]
@ -95,7 +95,7 @@ struct Pane: View {
// var handleVisibilityChanged: (String, VisibilityChange, VisibilityTracker<String>) -> Void // var handleVisibilityChanged: (String, VisibilityChange, VisibilityTracker<String>) -> Void
var body: some View { var body: some View{
ScrollViewReader { proxy in ScrollViewReader { proxy in
VisibilityTrackingScrollView(action: handleVisibilityChanged) { VisibilityTrackingScrollView(action: handleVisibilityChanged) {
LazyVStack { LazyVStack {
@ -115,11 +115,12 @@ struct Pane: View {
goToRibbon(selectedRibbon: selectedRibbon[0], goToRibbon(selectedRibbon: selectedRibbon[0],
destRibbon: selectedRibbon[0], destRibbon: selectedRibbon[0],
appDatabase: appDatabase, appDatabase: appDatabase,
paneConnector: $paneConnector, paneConnector: paneConnector,
refresh: $refresh, refresh: $refresh,
loading: true) loading: true)
} }
.onChange(of: paneConnector.refresh) { _ in .onChange(of: paneConnector.refresh) { _ in
print("inside change")
print("on change") print("on change")
Task { Task {

View File

@ -42,28 +42,37 @@ public extension UserDefaults {
func goToRibbon(selectedRibbon: Ribbon, func goToRibbon(selectedRibbon: Ribbon,
destRibbon: Ribbon, destRibbon: Ribbon,
appDatabase: AppDatabase, appDatabase: AppDatabase,
paneConnector: Binding<PaneConnector>, paneConnector: PaneConnector,
refresh: Binding<Bool>, refresh: Binding<Bool>,
loading: Bool) loading: Bool)
{ {
DispatchQueue.main.asyncAfter(deadline: .now()) {
Task { Task {
var scrollOffsetToSave = paneConnector.wrappedValue.currentOffset var scrollOffsetToSave = paneConnector.currentOffset
var scrollIdToSave = paneConnector.wrappedValue.currentId var scrollIdToSave = paneConnector.currentId
var updatedRibbon = selectedRibbon var updatedRibbon = selectedRibbon
print("go to ribbon")
print("\(selectedRibbon.id) \(destRibbon.id!)")
if selectedRibbon.id != destRibbon.id! || loading { if selectedRibbon.id != destRibbon.id! || loading {
print("switching ribbons") print("switching ribbons")
paneConnector.wrappedValue.showOverlay = true paneConnector.showOverlay = true
if loading { if loading {
paneConnector.wrappedValue.currentId = destRibbon.scrollId paneConnector.currentId = destRibbon.scrollId
} }
paneConnector.wrappedValue.scrollId = destRibbon.scrollId paneConnector.scrollId = destRibbon.scrollId
paneConnector.wrappedValue.scrollOffset = CGFloat(destRibbon.scrollOffset) paneConnector.scrollOffset = CGFloat(destRibbon.scrollOffset)
paneConnector.wrappedValue.refresh.toggle() paneConnector.refresh.toggle()
print("toggling")
print("paneconnector: \(paneConnector.refresh)")
refresh.wrappedValue.toggle()
var updateSelectRibbon = SelectedRibbon(id: Int64(1), ribbonId: destRibbon.id!) var updateSelectRibbon = SelectedRibbon(id: Int64(1), ribbonId: destRibbon.id!)
// print("Saving selected ribbon") // print("Saving selected ribbon")
@ -84,8 +93,9 @@ func goToRibbon(selectedRibbon: Ribbon,
} else { } else {
print("loading") print("loading")
} }
} }
}
} }
extension View { extension View {
@ -98,7 +108,7 @@ extension View {
struct RibbonCrown: View { struct RibbonCrown: View {
var ribbon: Ribbon var ribbon: Ribbon
@Binding var paneConnector: PaneConnector @ObservedObject var paneConnector: PaneConnector
var draggedRibbon: Ribbon? var draggedRibbon: Ribbon?
var isDragging: Bool var isDragging: Bool
@ -142,7 +152,7 @@ struct RibbonCrown: View {
goToRibbon(selectedRibbon: sr[0], goToRibbon(selectedRibbon: sr[0],
destRibbon: ribbon, destRibbon: ribbon,
appDatabase: appDatabase, appDatabase: appDatabase,
paneConnector: $paneConnector, paneConnector: paneConnector,
refresh: $refresh, refresh: $refresh,
loading: false) loading: false)
} }
@ -175,53 +185,18 @@ func makeVerseView(seg: SegDenorm) -> some View {
return retView return retView
} }
class PaneConnector: NSObject, NSCopying { class PaneConnector: NSObject, ObservableObject {
// var scrollId: String // var scrollId: String
// var scrollOffset: CGFloat // var scrollOffset: CGFloat
// var setScrollOffset: CGFloat // var setScrollOffset: CGFloat
var showOverlay: Bool = false var showOverlay: Bool = false
var refresh: Bool = false @Published var refresh: Bool = false
var currentId = "" var currentId = ""
var currentOffset = CGFloat() var currentOffset = CGFloat()
var visibilityTracker: VisibilityTracker<String>? var visibilityTracker: VisibilityTracker<String>?
var scrollId = "" var scrollId = ""
var scrollOffset = CGFloat() var scrollOffset = CGFloat()
var setScrollOffset: CGFloat? var setScrollOffset: CGFloat?
required override init() {}
// convenience init(showOverlay _: Bool, refresh _: Bool, currentId _: String,
// currentOffset _: CGFloat, visibilityTracker _: VisibilityTracker<String>?, 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 { struct ContentView: View {
@ -229,7 +204,7 @@ struct ContentView: View {
@State var viewState = CGSize.zero @State var viewState = CGSize.zero
@State var pulledOut = CGSize.zero @State var pulledOut = CGSize.zero
@State var paneConnector = PaneConnector() @StateObject var paneConnector = PaneConnector()
@State var refresh: Bool = false @State var refresh: Bool = false
@ -270,7 +245,7 @@ struct ContentView: View {
VStack { VStack {
ForEach(ribbons) { ribbon in ForEach(ribbons) { ribbon in
RibbonCrown(ribbon: ribbon, RibbonCrown(ribbon: ribbon,
paneConnector: $paneConnector, paneConnector: paneConnector,
draggedRibbon: draggedRibbon, draggedRibbon: draggedRibbon,
isDragging: isDragging, isDragging: isDragging,
refresh: $refresh) refresh: $refresh)
@ -302,9 +277,7 @@ struct ContentView: View {
segs: segs, segs: segs,
selectedRibbon: selectedRibbon, selectedRibbon: selectedRibbon,
width: geometry.size.width - 50, width: geometry.size.width - 50,
height: geometry.size.height / 2 - vertSep height: geometry.size.height / 2 - vertSep)
)
////// //////
Text("separator").foregroundColor(Color(UIColor(red: 0.76, green: 0.76, blue: 0.76, alpha: 1.00))) 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) // .zIndex(2)
// } // }
} }
.onChange(of: paneConnector.refresh) { _ in
Print("we changing changing")
}
} }
} }