From f09f36354fe258c5ff6596871b86fecb67414024 Mon Sep 17 00:00:00 2001 From: Hendrik Mennen Date: Fri, 17 Nov 2023 00:26:24 +0100 Subject: [PATCH] add terminate button --- src/OneWare.Core/Services/Active.cs | 11 ++++------- src/OneWare.Core/Services/ChildProcessService.cs | 2 +- src/OneWare.Core/Styles/Icons.axaml | 7 +++++++ src/OneWare.Core/Views/Windows/MainView.axaml | 7 ++++++- src/OneWare.Core/Views/Windows/MainWindow.axaml | 8 +++++++- .../Services/NetListSvgService.cs | 7 ++++--- src/OneWare.Shared/Models/ApplicationProcess.cs | 2 -- src/OneWare.Shared/Services/IActive.cs | 7 ++++--- 8 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/OneWare.Core/Services/Active.cs b/src/OneWare.Core/Services/Active.cs index c510ad44..30d70aef 100644 --- a/src/OneWare.Core/Services/Active.cs +++ b/src/OneWare.Core/Services/Active.cs @@ -32,7 +32,7 @@ public Active(IWindowService windowService) if (_activeStates.Count > 0) { //Check if active process is compiling - var withProcess = _activeStates.Where(x => x.Process != null || x.Terminate != null).ToArray(); + var withProcess = _activeStates.Where(x => x.Terminate != null).ToArray(); ActiveProcess = (withProcess.Any() ? withProcess.Last() : _activeStates.Last()); } else @@ -46,7 +46,7 @@ public Active(IWindowService windowService) /// /// Use the key to remove the added state with RemoveState() /// - public ApplicationProcess AddState(string status, AppState state, Process? process = null, + public ApplicationProcess AddState(string status, AppState state, Action? terminate = null) { lock (_activeLock) @@ -55,7 +55,6 @@ public ApplicationProcess AddState(string status, AppState state, Process? proce { StatusMessage = status, State = state, - Process = process, Terminate = terminate }; _activeStates.Add(key); @@ -72,7 +71,7 @@ public void RemoveState(ApplicationProcess key, string finishMessage = "Done") } } - public async Task TerminateActiveAsync() + public async Task TerminateActiveDialogAsync() { if(ActiveProcess.State == AppState.Idle) return; @@ -81,9 +80,7 @@ public async Task TerminateActiveAsync() if (result == MessageBoxStatus.Yes) { ActiveProcess.Terminated = true; - - if (ActiveProcess.Terminate != null) ActiveProcess.Terminate.Invoke(); - else if (ActiveProcess.Process is { } process && process.IsRunning()) process.Kill(); + ActiveProcess.Terminate?.Invoke(); RemoveState(ActiveProcess); } } diff --git a/src/OneWare.Core/Services/ChildProcessService.cs b/src/OneWare.Core/Services/ChildProcessService.cs index 736505b4..e26b0504 100644 --- a/src/OneWare.Core/Services/ChildProcessService.cs +++ b/src/OneWare.Core/Services/ChildProcessService.cs @@ -42,7 +42,7 @@ private static ProcessStartInfo GetProcessStartInfo(string path, string workingD using var activeProcess = new Process(); activeProcess.StartInfo = startInfo; - var key = _active.AddState(status, state, activeProcess); + var key = _active.AddState(status, state, () => activeProcess?.Kill()); activeProcess.OutputDataReceived += (o, i) => { diff --git a/src/OneWare.Core/Styles/Icons.axaml b/src/OneWare.Core/Styles/Icons.axaml index 5d28c5e2..706399f7 100644 --- a/src/OneWare.Core/Styles/Icons.axaml +++ b/src/OneWare.Core/Styles/Icons.axaml @@ -1000,6 +1000,13 @@ Geometry="F1M14,13L2,13 2,5 14,5z M1,14L15,14 15,2 1,2z" /> + + + + + + + - @@ -61,6 +60,12 @@ + + + + diff --git a/src/OneWare.Core/Views/Windows/MainWindow.axaml b/src/OneWare.Core/Views/Windows/MainWindow.axaml index cb4d395d..06c03bfc 100644 --- a/src/OneWare.Core/Views/Windows/MainWindow.axaml +++ b/src/OneWare.Core/Views/Windows/MainWindow.axaml @@ -48,7 +48,6 @@ BorderBrush="{DynamicResource ThemeBorderLowBrush}"> - @@ -56,7 +55,14 @@ + + + + + diff --git a/src/OneWare.NetListSvgIntegration/Services/NetListSvgService.cs b/src/OneWare.NetListSvgIntegration/Services/NetListSvgService.cs index b748b7b0..b1713649 100644 --- a/src/OneWare.NetListSvgIntegration/Services/NetListSvgService.cs +++ b/src/OneWare.NetListSvgIntegration/Services/NetListSvgService.cs @@ -77,8 +77,9 @@ public async Task ShowSchemeAsync(IProjectFile jsonFile) } _output = string.Empty; - - var state = _active.AddState("Rendering Scheme...", AppState.Loading); + + var cancel = new CancellationTokenSource(); + var state = _active.AddState("Rendering Scheme...", AppState.Loading, () => cancel.Cancel()); var theme = Application.Current!.ActualThemeVariant; var skin = LoadSkin(theme); @@ -145,7 +146,7 @@ await Task.Run(() => _output = _output.Replace("fill: white; stroke: none", $"fill: {backgroundHex}; stroke: none"); _output = _output.Replace("fill:#000", $"fill:#FFF"); } - }); + }, cancel.Token); } catch (Exception e) { diff --git a/src/OneWare.Shared/Models/ApplicationProcess.cs b/src/OneWare.Shared/Models/ApplicationProcess.cs index 60029563..8020908a 100644 --- a/src/OneWare.Shared/Models/ApplicationProcess.cs +++ b/src/OneWare.Shared/Models/ApplicationProcess.cs @@ -29,8 +29,6 @@ public string? FinishMessage set => SetProperty(ref _finishMessage, value); } - public Process? Process { get; init; } - public bool Terminated { get; set; } public Action? Terminate { get; init; } diff --git a/src/OneWare.Shared/Services/IActive.cs b/src/OneWare.Shared/Services/IActive.cs index d4f6177f..59fa2471 100644 --- a/src/OneWare.Shared/Services/IActive.cs +++ b/src/OneWare.Shared/Services/IActive.cs @@ -6,10 +6,11 @@ namespace OneWare.Shared.Services; public interface IActive { - public ApplicationProcess AddState(string status, AppState state, Process? process = null, - Action? terminate = null); + public ApplicationProcess ActiveProcess { get; } + + public ApplicationProcess AddState(string status, AppState state, Action? terminate = null); public void RemoveState(ApplicationProcess key, string finishMessage = "Done"); - public ApplicationProcess ActiveProcess { get; } + public Task TerminateActiveDialogAsync(); } \ No newline at end of file