Ver Fonte

config(macOS): show progress indicator for long tasks

Resolves #4006
osy há 1 ano atrás
pai
commit
5fc988f681

+ 26 - 1
Platform/Shared/BusyIndicator.swift

@@ -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
Platform/Shared/BusyOverlay.swift

@@ -22,7 +22,7 @@ struct BusyOverlay: View {
     var body: some View {
         Group {
             if data.busy {
-                BusyIndicator()
+                BusyIndicator(progress: $data.busyProgress)
             } else {
                 EmptyView()
             }

+ 3 - 0
Platform/UTMData.swift

@@ -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?