diff --git a/Splitter-UI/ViewModels/JobViewModel.cs b/Splitter-UI/ViewModels/JobViewModel.cs index f192fa7..7ea0737 100644 --- a/Splitter-UI/ViewModels/JobViewModel.cs +++ b/Splitter-UI/ViewModels/JobViewModel.cs @@ -122,6 +122,19 @@ public partial class JobViewModel : ObservableObject } } + public float IdentityThreshold + { + get => Job.IdentityThreshold; + set + { + if (Math.Abs(Job.IdentityThreshold - value) < 0.001) + return; + Job.IdentityThreshold = value; + OnPropertyChanged(); + Task.Run(CreatePreview); + } + } + public string? Mask { get => Job.Mask; diff --git a/Splitter-UI/ViewModels/MainViewModel.cs b/Splitter-UI/ViewModels/MainViewModel.cs index 3445189..d22d857 100644 --- a/Splitter-UI/ViewModels/MainViewModel.cs +++ b/Splitter-UI/ViewModels/MainViewModel.cs @@ -54,14 +54,14 @@ public partial class MainViewModel : ViewModelBase _cancellationTokenSource?.Cancel(); } - public async Task Start() + public Task Start() => Task.Run(async () => { _cancellationTokenSource = new CancellationTokenSource(); try { StatusBar.StatusText = "Processing…"; - StatusBar.Percent = 0; - TransformMode = true; + StatusBar.Percent = 0; + TransformMode = true; var files = FileList.Files.ToList(); var jobs = new List(); @@ -84,11 +84,11 @@ public partial class MainViewModel : ViewModelBase finally { StatusBar.StatusText = "Ready…"; - StatusBar.Percent = 0; - TransformMode = false; + StatusBar.Percent = 0; + TransformMode = false; _cancellationTokenSource?.Dispose(); } - } + }); } diff --git a/Splitter-UI/ViewModels/ProgressViewModel.cs b/Splitter-UI/ViewModels/ProgressViewModel.cs index d6ef8ee..2b366f9 100644 --- a/Splitter-UI/ViewModels/ProgressViewModel.cs +++ b/Splitter-UI/ViewModels/ProgressViewModel.cs @@ -1,4 +1,5 @@ using System.Collections.ObjectModel; +using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; @@ -26,7 +27,7 @@ public partial class ProgressViewModel : ObservableObject _mainModel = mainModel; } - public void ClearProgress(string name, int progressLine) + public void ClearProgress(string name, int progressLine) => Dispatch(() => { lock (_lock) { @@ -36,8 +37,9 @@ public partial class ProgressViewModel : ObservableObject NumberOfProcesses -= 1; Processes[progressLine] = new ProgressInfo("", progressLine, 0, TimeSpan.Zero, 0); } - } - public void DrawProgress(string name, int progressLine, double progress, TimeSpan eta, double speed) + }); + + public void DrawProgress(string name, int progressLine, double progress, TimeSpan eta, double speed) => Dispatch(() => { lock (_lock) { @@ -53,6 +55,18 @@ public partial class ProgressViewModel : ObservableObject NumberOfProcesses += 1; Processes[progressLine] = new ProgressInfo(name, progressLine, progress, eta, speed); } + }); + + private void Dispatch(Action action) + { + if (Dispatcher.UIThread.CheckAccess()) + { + action(); + } + else + { + Dispatcher.UIThread.Post(() => action()); + } } } diff --git a/Splitter-UI/Views/InspectorPane.axaml b/Splitter-UI/Views/InspectorPane.axaml index 6e5d301..4153bc4 100644 --- a/Splitter-UI/Views/InspectorPane.axaml +++ b/Splitter-UI/Views/InspectorPane.axaml @@ -12,7 +12,7 @@ x:DataType="vm:InspectorPaneViewModel"> + Margin="0,0,10,0">