config(macOS): show progress indicator for long tasks

Resolves #4006
This commit is contained in:
osy
2024-04-29 17:08:15 -07:00
parent 7267f52508
commit 5fc988f681
3 changed files with 30 additions and 2 deletions
+26 -1
View File
@@ -17,13 +17,38 @@
import SwiftUI
struct BusyIndicator: View {
@Binding var progress: Float?
init(progress: Binding<Float?> = .constant(nil)) {
_progress = progress
}
var body: some View {
Spinner(size: .large)
progressView
.frame(width: 100, height: 100, alignment: .center)
.foregroundColor(.white)
.background(Color.gray.opacity(0.5))
.clipShape(RoundedRectangle(cornerRadius: 25.0, style: .continuous))
}
#if os(macOS)
@ViewBuilder
private var progressView: some View {
if let progress = progress {
ProgressView(value: progress)
.progressViewStyle(.circular)
.controlSize(.large)
} else {
Spinner(size: .large)
}
}
#else
// TODO: implement progress spinner for iOS
@ViewBuilder
private var progressView: some View {
Spinner(size: .large)
}
#endif
}
struct BusyIndicator_Previews: PreviewProvider {
+1 -1
View File
@@ -22,7 +22,7 @@ struct BusyOverlay: View {
var body: some View {
Group {
if data.busy {
BusyIndicator()
BusyIndicator(progress: $data.busyProgress)
} else {
EmptyView()
}
+3
View File
@@ -66,6 +66,9 @@ struct AlertMessage: Identifiable {
/// View: show busy spinner
@Published var busy: Bool
/// View: show a percent progress in the busy spinner
@Published var busyProgress: Float?
/// View: currently selected VM
@Published var selectedVM: VMData?