adwaita-swift/Sources/Demo/FormDemo.swift

100 lines
2.9 KiB
Swift

//
// FormDemo.swift
// Adwaita
//
// Created by david-swift on 03.01.24.
//
// swiftlint:disable missing_docs no_magic_numbers
import Adwaita
struct FormDemo: View {
var app: AdwaitaApp
var view: Body {
VStack {
Button("View Demo") {
app.showWindow("form-demo")
}
.suggested()
.pill()
.frame(maxWidth: 100)
}
}
struct WindowContent: View {
@State private var text = "They also have a subtitle"
@State private var password = "Password"
@State private var value = 0
@State private var isOn = true
@State private var selection = "World"
let values: [ListDemo.Element] = [.init(id: "Hello"), .init(id: "World")]
var view: Body {
ScrollView {
VStack {
actionRows
FormSection("Entry Rows") {
Form {
EntryRow("Entry Row", text: $text)
.suffix {
Button(icon: .default(icon: .editCopy)) { AdwaitaApp.copy(text) }
.flat()
.valign(.center)
}
EntryRow(password, text: $password)
.secure(text: $password)
}
}
.padding()
rowDemo("Spin Rows", row: SpinRow("Spin Row", value: $value, min: 0, max: 100).subtitle("\(value)"))
rowDemo("Switch Rows", row: SwitchRow("Switch Row", isOn: $isOn).subtitle(isOn ? "On" : "Off"))
rowDemo(
"Combo Rows",
row: ComboRow("Combo Row", selection: $selection, values: values).subtitle(selection)
)
rowDemo("Expander Rows", row: ExpanderRow().title("Expander Row").rows {
ActionRow("Hello")
ActionRow("World")
})
}
.padding()
.frame(maxWidth: 400)
}
.topToolbar {
HeaderBar.empty()
}
}
var actionRows: AnyView {
Form {
ActionRow("Rows have a title")
.subtitle(text)
ActionRow("Rows can have suffix widgets")
.suffix {
Button("Action") { }
.valign(.center)
}
}
.padding()
}
func rowDemo(_ title: String, row: AnyView) -> AnyView {
FormSection(title) {
Form {
row
}
}
.padding()
}
}
}
// swiftlint:enable missing_docs no_magic_numbers