// // MeasurementListView.swift // GasTankAR // // Created by Dennis Nemec on 28.08.26. // import SwiftUI /// Von unten einschwebendes Sheet mit den angelegten Strecken. Ist keine vorhanden, /// wird zum Hinzufügen aufgefordert. struct MeasurementListView: View { let controller: ARSessionController /// Startet einen neuen Messvorgang (schließt das Sheet und lässt den Nutzer zwei Punkte wählen). let onAddStrecke: () -> Void var body: some View { NavigationStack { List { Section("Tankmaße") { Toggle("Alle anzeigen", isOn: allDimensionsBinding) ForEach(TankDimension.allCases) { dimension in Toggle( dimension.title, isOn: dimensionBinding(for: dimension) ) } } Section("Eigene Strecken") { if controller.measurements.isEmpty { Text("Noch keine eigenen Strecken angelegt.") .foregroundStyle(.secondary) } else { ForEach(controller.measurements) { measurement in HStack { VStack(alignment: .leading, spacing: 2) { Text(measurement.name) .font(.headline) Text(measurement.formattedDistance) .font(.subheadline) .foregroundStyle(.secondary) } Spacer() Image(systemName: "ruler") .foregroundStyle(.secondary) } } .onDelete { controller.deleteMeasurements(at: $0) } } } } .navigationTitle("Strecken") .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .topBarTrailing) { Button("Hinzufügen", systemImage: "plus", action: onAddStrecke) } } } .presentationDetents([.medium, .large]) } private var allDimensionsBinding: Binding { Binding( get: { TankDimension.allCases.allSatisfy { controller.visibleTankDimensions.contains($0) } }, set: { isVisible in for dimension in TankDimension.allCases { controller.setTankDimension(dimension, visible: isVisible) } } ) } private func dimensionBinding(for dimension: TankDimension) -> Binding { Binding( get: { controller.visibleTankDimensions.contains(dimension) }, set: { controller.setTankDimension(dimension, visible: $0) } ) } }