| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // LoopFollow
- // InfoDisplaySettingsView.swift
- import SwiftUI
- struct InfoDisplaySettingsView: View {
- @ObservedObject var viewModel: InfoDisplaySettingsViewModel
- @State private var selectedID: Int?
- var body: some View {
- Form {
- Section(header: Text("General")) {
- Toggle(isOn: Binding(
- get: { Storage.shared.hideInfoTable.value },
- set: { Storage.shared.hideInfoTable.value = $0 }
- )) {
- Text("Hide Information Table")
- }
- }
- Section(
- header: Text("Information Display Settings"),
- footer: Text("Drag to reorder. Tap a row to set its visibility and colors.")
- ) {
- // The list stays in edit mode so rows are always draggable; a
- // Button (unlike NavigationLink) still receives taps in edit
- // mode, so reordering and navigation work at the same time.
- ForEach(viewModel.items) { item in
- Button {
- selectedID = item.id
- } label: {
- rowLabel(for: item)
- }
- .buttonStyle(.plain)
- }
- .onMove(perform: viewModel.move)
- }
- }
- .environment(\.editMode, .constant(.active))
- .navigationDestination(isPresented: Binding(
- get: { selectedID != nil },
- set: { if !$0 { selectedID = nil } }
- )) {
- if let id = selectedID {
- InfoRowSettingsView(item: viewModel.binding(for: id))
- }
- }
- .onDisappear {
- NotificationCenter.default.post(name: NSNotification.Name("refresh"), object: nil)
- }
- .preferredColorScheme(Storage.shared.appearanceMode.value.colorScheme)
- .navigationBarTitle("Information Display Settings", displayMode: .inline)
- }
- private func rowLabel(for item: InfoDisplayItem) -> some View {
- HStack {
- Text(item.type.name)
- Spacer()
- if item.type.isColorable, item.coloring.enabled {
- Circle()
- .fill(Color.orange)
- .frame(width: 8, height: 8)
- .accessibilityLabel("Coloring enabled")
- }
- Text(item.isVisible ? "On" : "Off")
- .foregroundStyle(.secondary)
- Image(systemName: "chevron.right")
- .font(.footnote.weight(.semibold))
- .foregroundStyle(.tertiary)
- }
- .contentShape(Rectangle())
- }
- }
|