31 lines
1.4 KiB
Swift
31 lines
1.4 KiB
Swift
import SwiftUI
|
|
|
|
@main
|
|
struct ContainerComposeApp: App {
|
|
@StateObject private var compose = ComposeModel()
|
|
@StateObject private var monitor = Monitor()
|
|
@State private var tab = "compose"
|
|
var body: some Scene {
|
|
WindowGroup("Container Compose") {
|
|
TabView(selection: $tab) {
|
|
ContentView().environmentObject(compose).disabled(monitor.demo || monitor.acting)
|
|
.tabItem { Label("Compose", systemImage: "square.stack.3d.up") }.tag("compose")
|
|
Workspace(model: monitor).disabled(compose.busy)
|
|
.tabItem { Label("Monitor & Resources", systemImage: "waveform.path.ecg") }.tag("monitor")
|
|
}
|
|
.frame(minWidth: 1050, minHeight: 720)
|
|
.onChange(of: compose.projectName) { _, name in monitor.project = name }
|
|
}.defaultSize(width: 1250, height: 850)
|
|
.commands {
|
|
CommandGroup(after: .appInfo) { Button("Save Command-Line Tool…") { monitor.exportCLI() } }
|
|
CommandMenu("Containers") {
|
|
Button("Refresh") { Task { await monitor.refresh() } }.keyboardShortcut("r")
|
|
Button("Inspect") { monitor.mode = "Inspect" }.keyboardShortcut("i")
|
|
Button("Logs") { monitor.mode = "Logs" }.keyboardShortcut("l")
|
|
Button("Stats") { monitor.mode = "Stats" }.keyboardShortcut("s")
|
|
}
|
|
}
|
|
Settings { Preferences(model: monitor) }
|
|
}
|
|
}
|