adwaita-swift/Sources/Demo/ViewSwitcherDemo.swift
david-swift ced07e4293
All checks were successful
Deploy Docs / publish (push) Successful in 21m0s
SwiftLint / SwiftLint (push) Successful in 5s
Add support for natural sizes for breakpoints
2024-10-25 14:02:45 +02:00

94 lines
2.1 KiB
Swift

//
// ToolbarDemo.swift
// Adwaita
//
// Created by david-swift on 03.01.24.
//
// swiftlint:disable missing_docs
import Adwaita
import CAdw
struct ViewSwitcherDemo: View {
var app: AdwaitaApp
var view: Body {
VStack {
Button("View Demo") {
app.showWindow("switcher-demo")
}
.suggested()
.pill()
.frame(maxWidth: 100)
}
}
struct WindowContent: View {
@State private var selection: ViewSwitcherView = .albums
@State private var bottom = false
var view: Body {
VStack {
Text(selection.title)
.padding()
}
.valign(.center)
.topToolbar {
if bottom {
HeaderBar
.empty()
} else {
toolbar(bottom: false)
}
}
.bottomToolbar(visible: bottom) {
toolbar(bottom: true)
}
.naturalWidth(matches: .init { !bottom } set: { bottom = !$0 })
}
func toolbar(bottom: Bool) -> AnyView {
HeaderBar(titleButtons: !bottom) { } end: { }
.headerBarTitle {
ViewSwitcher(selectedElement: $selection)
.wideDesign(!bottom)
}
}
}
enum ViewSwitcherView: String, ViewSwitcherOption, CaseIterable {
case albums
case artists
case songs
case playlists
var title: String {
rawValue.capitalized
}
var icon: Icon {
.default(icon: {
switch self {
case .albums:
return .mediaOpticalCdAudio
case .artists:
return .avatarDefault
case .songs:
return .emblemMusic
case .playlists:
return .viewList
}
}())
}
}
}
// swiftlint:enable missing_docs