-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEditTrackPieceView.swift
More file actions
117 lines (108 loc) · 4.28 KB
/
EditTrackPieceView.swift
File metadata and controls
117 lines (108 loc) · 4.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
See the LICENSE.txt file for this sample’s licensing information.
Abstract:
A SwiftUI view used as an attachment to edit the selected piece or pieces.
*/
import SwiftSplashTrackPieces
import SwiftUI
struct EditTrackPieceView: View {
@Environment(AppState.self) var appState
@State private var isSelecting = true
@Environment(\.dismiss) private var dismiss
var body: some View {
VStack {
HStack(spacing: 0) {
Button {
appState.selectConnectedPieces()
} label: {
Label("Select Attached", systemImage: "plus.square.dashed")
.fontWeight(.semibold)
.frame(width: 180)
}
.padding(.leading, 20)
.accessibilityElement()
.accessibilityLabel(Text("Select all ride pieces that connect back to this piece."))
Spacer()
Button(role: .destructive) {
if let goalPiece = appState.goalPiece {
if appState.trackPieceBeingEdited == goalPiece ||
appState.additionalSelectedTrackPieces.contains(goalPiece) {
goalPiece.removeFromParent()
}
}
appState.deleteSelectedPieces()
} label: {
Label("Delete", systemImage: "trash")
.labelStyle(.iconOnly)
}
.disabled(appState.trackPieceBeingEdited == appState.startPiece)
.accessibilityElement()
.accessibilityLabel(Text("Delete all selected ride pieces."))
Button {
appState.clearSelection(keepPrimary: false)
} label: {
Label("Dismiss", systemImage: "checkmark")
.labelStyle(.iconOnly)
}
.padding(.trailing, 5)
.accessibilityElement()
.accessibilityLabel(Text("Clear the selection and dismiss this window."))
}
.padding(.vertical)
.frame(width: 350)
.background(.regularMaterial)
HStack {
Button {
appState.setMaterialForAllSelected(.metal)
} label: {
VStack {
Image(decorative: "metalPreview")
.resizable()
.frame(width: 50, height: 50)
Text("Metal")
}
.padding(.vertical, 10)
}
.accessibilityElement()
.accessibilityLabel(Text("Change all selected pieces to use a metal material."))
Button {
appState.setMaterialForAllSelected(.wood)
} label: {
VStack {
Image(decorative: "woodPreview")
.resizable()
.frame(width: 50, height: 50)
Text("Wood")
}
.padding(.vertical, 10)
}
.accessibilityElement()
.accessibilityLabel(Text("Change all selected pieces to use a wood material."))
Button {
appState.setMaterialForAllSelected(.plastic)
} label: {
VStack {
Image(decorative: "plasticPreview")
.resizable()
.frame(width: 50, height: 50)
Text("Plastic")
}
.padding(.vertical, 10)
}
.accessibilityElement()
.accessibilityLabel(Text("Change all selected pieces to use a plastic material."))
}
.buttonBorderShape(.roundedRectangle(radius: 15))
.buttonStyle(.borderless)
.padding()
}
.glassBackgroundEffect()
}
}
#Preview {
VStack {
Spacer()
EditTrackPieceView()
.environment(AppState())
}
}