94 lines
2.1 KiB
Swift
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
|