// // Created by Marco Schmickler on 12.11.21. // Copyright (c) 2021 Marco Schmickler. All rights reserved. // import Foundation import SwiftUI protocol EditItemDelegate { func captureZoom() func setStart() func setEnd() func cancelEdit() func seek(_ : Double) } struct EditItemView: View { @ObservedObject var item: MediaItem @State var scrubber = 0.0 var len: Double var delegate: EditItemDelegate var body: some View { Form { Section(header: Text("K Settings")) { VStack() { HStack() { Slider(value: Binding( get: { scrubber }, set: { scrubber = $0 delegate.seek($0) print ($0) } ), in: item.time...(item.time + item.length)) } Text("Start \(EditItemView.formatSecondsToString(item.time)) End \(EditItemView.formatSecondsToString(item.time + item.length)) Length \(item.length, specifier: "%.1f")") HStack { Stepper(value: Binding( get: { item.time }, set: { s in item.time = s delegate.seek(item.time) }), in: 0...len){ Button(action: delegate.setStart, label: { Text("Start") }).buttonStyle(BorderlessButtonStyle()); } Stepper(value:Binding( get: { item.length }, set: { l in item.length = l delegate.seek(item.time + item.length) } ), in: 1...500){ Text("Len") } Button(action: delegate.setEnd, label: { Text("End") }).buttonStyle(BorderlessButtonStyle()); } // Toggle(isOn: $item.loop, label: { // Text("Loop") // }) Text("Zoom \(item.scale, specifier: "%.1f") X \(item.offset.x, specifier: "%.1f") Y \(item.offset.y, specifier: "%.1f") ") HStack { Button(action: delegate.captureZoom, label: { Text("Zoom") }).buttonStyle(BorderlessButtonStyle()); Button(action: { item.scale = 1.0 item.offset = CGPoint(x: 0,y: 0) item.objectWillChange.send() }, label: { Text("Reset") }).buttonStyle(BorderlessButtonStyle()); Button(action: { delegate.cancelEdit() }, label: { Text("cancel") }).buttonStyle(BorderlessButtonStyle()); } }.background(Color.clear) }.background(Color.clear) } .onAppear { UITableView.appearance().backgroundColor = .clear } .onDisappear { UITableView.appearance().backgroundColor = .systemBackground } .frame(height: 350, alignment: .top) //Spacer() } static func formatSecondsToString(_ seconds: TimeInterval) -> String { if seconds.isNaN { return "00:00" } let min = Int(seconds / 60) let sec = seconds.truncatingRemainder(dividingBy: 60) return String(format: "%02d:%.1f", min, sec) } } struct EditItemView_Previews: PreviewProvider { static var previews: some View { EditItemView(item: MediaItem(name: "extern", path: "", root: "", type: ItemType.FAVROOT), len: 1000, delegate: VideoController()) } }