162 lines
4.2 KiB
Swift
162 lines
4.2 KiB
Swift
//
|
|
// Page.swift
|
|
// Adwaita
|
|
//
|
|
// Created by david-swift on 25.09.23.
|
|
//
|
|
|
|
// swiftlint:disable missing_docs implicitly_unwrapped_optional
|
|
|
|
import Adwaita
|
|
import Foundation
|
|
|
|
enum Page: String, Identifiable, CaseIterable, Codable, CustomStringConvertible {
|
|
|
|
case welcome
|
|
case counter
|
|
case windows
|
|
case toolbar
|
|
case transition
|
|
case dice
|
|
case dialog
|
|
case alertDialog
|
|
case toast
|
|
case list
|
|
case carousel
|
|
case viewSwitcher
|
|
case form
|
|
case passwordChecker
|
|
case popover
|
|
case flowBox
|
|
case navigationView
|
|
case picture
|
|
case idle
|
|
case fixed
|
|
|
|
var id: Self {
|
|
self
|
|
}
|
|
|
|
var label: String {
|
|
switch self {
|
|
case .viewSwitcher:
|
|
return "View Switcher"
|
|
case .flowBox:
|
|
return "Flow Box"
|
|
case .navigationView:
|
|
return "Navigation View"
|
|
case .alertDialog:
|
|
return "Alert Dialog"
|
|
case .passwordChecker:
|
|
return "Password Checker is such a long name..."
|
|
default:
|
|
return rawValue.capitalized
|
|
}
|
|
}
|
|
|
|
var icon: Icon? {
|
|
switch self {
|
|
case .welcome:
|
|
return .default(icon: .emojiNature)
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
var description: String {
|
|
switch self {
|
|
case .welcome:
|
|
return "This is a collection of examples for the Swift Adwaita package"
|
|
case .counter:
|
|
return "A simple sample view"
|
|
case .windows:
|
|
return "Showcase window management"
|
|
case .toolbar:
|
|
return "Toggle the bottom toolbar"
|
|
case .transition:
|
|
return "A slide transition between two views"
|
|
case .dice:
|
|
return "Roll the dice"
|
|
case .dialog:
|
|
return "A window on top of another window"
|
|
case .alertDialog:
|
|
return "A dialog presenting a message or question"
|
|
case .toast:
|
|
return "Show a notification inside of your app"
|
|
case .list:
|
|
return "Organize content in multiple rows"
|
|
case .carousel:
|
|
return "Scroll horizontally on a touchpad or touchscreen, or scroll down on your mouse wheel"
|
|
case .viewSwitcher:
|
|
return "Switch the window's view"
|
|
case .form:
|
|
return "Group controls used for data entry"
|
|
case .passwordChecker:
|
|
return "Check the validity of a password"
|
|
case .popover:
|
|
return "Present content in a bubble-like context popup"
|
|
case .flowBox:
|
|
return "Display views in a reflowing grid"
|
|
case .navigationView:
|
|
return "A page-based navigation container"
|
|
case .picture:
|
|
return "Display an image"
|
|
case .idle:
|
|
return "Update UI from an asynchronous context"
|
|
case .fixed:
|
|
return "Place widgets in a coordinate system"
|
|
}
|
|
}
|
|
|
|
// swiftlint:disable cyclomatic_complexity
|
|
@ViewBuilder
|
|
func view(app: AdwaitaApp!, window: AdwaitaWindow, toast: Signal) -> Body {
|
|
switch self {
|
|
case .welcome:
|
|
[]
|
|
case .counter:
|
|
CounterDemo()
|
|
case .windows:
|
|
WindowsDemo(app: app)
|
|
case .toolbar:
|
|
ToolbarDemo(app: app)
|
|
case .transition:
|
|
TransitionDemo()
|
|
case .dice:
|
|
DiceDemo()
|
|
case .dialog:
|
|
DialogDemo()
|
|
case .alertDialog:
|
|
AlertDialogDemo()
|
|
case .toast:
|
|
ToastDemo(toast: toast)
|
|
case .list:
|
|
ListDemo()
|
|
case .carousel:
|
|
CarouselDemo()
|
|
case .viewSwitcher:
|
|
ViewSwitcherDemo(app: app)
|
|
case .form:
|
|
FormDemo(app: app)
|
|
case .passwordChecker:
|
|
PasswordCheckerDemo(app: app)
|
|
case .popover:
|
|
PopoverDemo()
|
|
case .flowBox:
|
|
FlowBoxDemo()
|
|
case .navigationView:
|
|
NavigationViewDemo(app: app)
|
|
case .picture:
|
|
PictureDemo(app: app, window: window)
|
|
case .idle:
|
|
IdleDemo()
|
|
case .fixed:
|
|
FixedDemo()
|
|
}
|
|
}
|
|
// swiftlint:enable cyclomatic_complexity
|
|
|
|
}
|
|
|
|
// swiftlint:enable missing_docs implicitly_unwrapped_optional
|