From a7b8e893b20ccda14e150679ff7687e78395188e Mon Sep 17 00:00:00 2001 From: pointfeev Date: Thu, 2 Mar 2023 14:38:35 -0500 Subject: [PATCH] v4.7.1.0 - Added a quick uninstall all button to the pre-scan selection dialog --- CreamInstaller/CreamInstaller.csproj | 2 +- .../Forms/SelectDialogForm.Designer.cs | 296 +++++++++--------- CreamInstaller/Forms/SelectForm.cs | 43 ++- 3 files changed, 189 insertions(+), 152 deletions(-) diff --git a/CreamInstaller/CreamInstaller.csproj b/CreamInstaller/CreamInstaller.csproj index a287fbe..726e696 100644 --- a/CreamInstaller/CreamInstaller.csproj +++ b/CreamInstaller/CreamInstaller.csproj @@ -4,7 +4,7 @@ net7.0-windows True Resources\ini.ico - 4.7.0.2 + 4.7.1.0 2021, pointfeev (https://github.com/pointfeev) CreamInstaller Automatic DLC Unlocker Installer & Configuration Generator diff --git a/CreamInstaller/Forms/SelectDialogForm.Designer.cs b/CreamInstaller/Forms/SelectDialogForm.Designer.cs index 1869b17..48c3ced 100644 --- a/CreamInstaller/Forms/SelectDialogForm.Designer.cs +++ b/CreamInstaller/Forms/SelectDialogForm.Designer.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using System.Windows.Forms; + using CreamInstaller.Components; namespace CreamInstaller.Forms @@ -22,176 +23,190 @@ namespace CreamInstaller.Forms /// private void InitializeComponent() { - this.acceptButton = new System.Windows.Forms.Button(); - this.groupBox = new System.Windows.Forms.GroupBox(); - this.allCheckBoxFlowPanel = new System.Windows.Forms.FlowLayoutPanel(); - this.allCheckBox = new System.Windows.Forms.CheckBox(); - this.sortCheckBox = new System.Windows.Forms.CheckBox(); - this.cancelButton = new System.Windows.Forms.Button(); - this.loadButton = new System.Windows.Forms.Button(); - this.saveButton = new System.Windows.Forms.Button(); - this.selectionTreeView = new Components.CustomTreeView(); - this.groupBox.SuspendLayout(); - this.allCheckBoxFlowPanel.SuspendLayout(); - this.SuspendLayout(); + acceptButton = new Button(); + groupBox = new GroupBox(); + allCheckBoxFlowPanel = new FlowLayoutPanel(); + allCheckBox = new CheckBox(); + sortCheckBox = new CheckBox(); + cancelButton = new Button(); + loadButton = new Button(); + saveButton = new Button(); + selectionTreeView = new CustomTreeView(); + uninstallAllButton = new Button(); + groupBox.SuspendLayout(); + allCheckBoxFlowPanel.SuspendLayout(); + SuspendLayout(); // // acceptButton // - this.acceptButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.acceptButton.AutoSize = true; - this.acceptButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.acceptButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.acceptButton.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.acceptButton.Location = new System.Drawing.Point(360, 243); - this.acceptButton.Name = "acceptButton"; - this.acceptButton.Padding = new System.Windows.Forms.Padding(12, 0, 12, 0); - this.acceptButton.Size = new System.Drawing.Size(61, 24); - this.acceptButton.TabIndex = 6; - this.acceptButton.Text = "OK"; - this.acceptButton.UseVisualStyleBackColor = true; + acceptButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + acceptButton.AutoSize = true; + acceptButton.AutoSizeMode = AutoSizeMode.GrowAndShrink; + acceptButton.DialogResult = DialogResult.OK; + acceptButton.FlatStyle = FlatStyle.System; + acceptButton.Location = new System.Drawing.Point(475, 243); + acceptButton.Name = "acceptButton"; + acceptButton.Padding = new Padding(12, 0, 12, 0); + acceptButton.Size = new System.Drawing.Size(61, 24); + acceptButton.TabIndex = 6; + acceptButton.Text = "OK"; + acceptButton.UseVisualStyleBackColor = true; // // groupBox // - this.groupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox.Controls.Add(this.selectionTreeView); - this.groupBox.Controls.Add(this.allCheckBoxFlowPanel); - this.groupBox.Location = new System.Drawing.Point(12, 12); - this.groupBox.MinimumSize = new System.Drawing.Size(240, 40); - this.groupBox.Name = "groupBox"; - this.groupBox.Size = new System.Drawing.Size(409, 225); - this.groupBox.TabIndex = 3; - this.groupBox.TabStop = false; - this.groupBox.Text = "Choices"; + groupBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + groupBox.Controls.Add(selectionTreeView); + groupBox.Controls.Add(allCheckBoxFlowPanel); + groupBox.Location = new System.Drawing.Point(12, 12); + groupBox.MinimumSize = new System.Drawing.Size(240, 40); + groupBox.Name = "groupBox"; + groupBox.Size = new System.Drawing.Size(524, 225); + groupBox.TabIndex = 3; + groupBox.TabStop = false; + groupBox.Text = "Choices"; // // selectionTreeView // - this.selectionTreeView.BackColor = System.Drawing.SystemColors.Control; - this.selectionTreeView.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.selectionTreeView.CheckBoxes = true; - this.selectionTreeView.Dock = System.Windows.Forms.DockStyle.Fill; - this.selectionTreeView.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; - this.selectionTreeView.Location = new System.Drawing.Point(3, 19); - this.selectionTreeView.Name = "selectionTreeView"; - this.selectionTreeView.ShowLines = false; - this.selectionTreeView.ShowPlusMinus = false; - this.selectionTreeView.ShowRootLines = false; - this.selectionTreeView.Size = new System.Drawing.Size(403, 203); - this.selectionTreeView.Sorted = true; - this.selectionTreeView.TabIndex = 0; + selectionTreeView.BackColor = System.Drawing.SystemColors.Control; + selectionTreeView.BorderStyle = BorderStyle.None; + selectionTreeView.CheckBoxes = true; + selectionTreeView.Dock = DockStyle.Fill; + selectionTreeView.DrawMode = TreeViewDrawMode.OwnerDrawAll; + selectionTreeView.Location = new System.Drawing.Point(3, 19); + selectionTreeView.Name = "selectionTreeView"; + selectionTreeView.ShowLines = false; + selectionTreeView.ShowPlusMinus = false; + selectionTreeView.ShowRootLines = false; + selectionTreeView.Size = new System.Drawing.Size(518, 203); + selectionTreeView.Sorted = true; + selectionTreeView.TabIndex = 0; // // allCheckBoxFlowPanel // - this.allCheckBoxFlowPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.allCheckBoxFlowPanel.AutoSize = true; - this.allCheckBoxFlowPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.allCheckBoxFlowPanel.Controls.Add(this.allCheckBox); - this.allCheckBoxFlowPanel.Location = new System.Drawing.Point(370, -1); - this.allCheckBoxFlowPanel.Margin = new System.Windows.Forms.Padding(0); - this.allCheckBoxFlowPanel.Name = "allCheckBoxFlowPanel"; - this.allCheckBoxFlowPanel.Size = new System.Drawing.Size(34, 19); - this.allCheckBoxFlowPanel.TabIndex = 1007; + allCheckBoxFlowPanel.Anchor = AnchorStyles.Top | AnchorStyles.Right; + allCheckBoxFlowPanel.AutoSize = true; + allCheckBoxFlowPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink; + allCheckBoxFlowPanel.Controls.Add(allCheckBox); + allCheckBoxFlowPanel.Location = new System.Drawing.Point(485, -1); + allCheckBoxFlowPanel.Margin = new Padding(0); + allCheckBoxFlowPanel.Name = "allCheckBoxFlowPanel"; + allCheckBoxFlowPanel.Size = new System.Drawing.Size(34, 19); + allCheckBoxFlowPanel.TabIndex = 1007; // // allCheckBox // - this.allCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.allCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.allCheckBox.Location = new System.Drawing.Point(2, 0); - this.allCheckBox.Margin = new System.Windows.Forms.Padding(2, 0, 0, 0); - this.allCheckBox.Name = "allCheckBox"; - this.allCheckBox.Size = new System.Drawing.Size(32, 19); - this.allCheckBox.TabIndex = 1; - this.allCheckBox.Text = "All"; - this.allCheckBox.CheckedChanged += new System.EventHandler(this.OnAllCheckBoxChanged); + allCheckBox.Anchor = AnchorStyles.Top | AnchorStyles.Right; + allCheckBox.FlatStyle = FlatStyle.System; + allCheckBox.Location = new System.Drawing.Point(2, 0); + allCheckBox.Margin = new Padding(2, 0, 0, 0); + allCheckBox.Name = "allCheckBox"; + allCheckBox.Size = new System.Drawing.Size(32, 19); + allCheckBox.TabIndex = 1; + allCheckBox.Text = "All"; + allCheckBox.CheckedChanged += OnAllCheckBoxChanged; // // sortCheckBox // - this.sortCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.sortCheckBox.AutoSize = true; - this.sortCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.sortCheckBox.Location = new System.Drawing.Point(105, 245); - this.sortCheckBox.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0); - this.sortCheckBox.Name = "sortCheckBox"; - this.sortCheckBox.Size = new System.Drawing.Size(104, 20); - this.sortCheckBox.TabIndex = 3; - this.sortCheckBox.Text = "Sort By Name"; - this.sortCheckBox.CheckedChanged += new System.EventHandler(this.OnSortCheckBoxChanged); + sortCheckBox.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + sortCheckBox.AutoSize = true; + sortCheckBox.FlatStyle = FlatStyle.System; + sortCheckBox.Location = new System.Drawing.Point(220, 245); + sortCheckBox.Margin = new Padding(3, 0, 0, 0); + sortCheckBox.Name = "sortCheckBox"; + sortCheckBox.Size = new System.Drawing.Size(104, 20); + sortCheckBox.TabIndex = 3; + sortCheckBox.Text = "Sort By Name"; + sortCheckBox.CheckedChanged += OnSortCheckBoxChanged; // // cancelButton // - this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.cancelButton.AutoSize = true; - this.cancelButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.cancelButton.Location = new System.Drawing.Point(12, 243); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Padding = new System.Windows.Forms.Padding(12, 0, 12, 0); - this.cancelButton.Size = new System.Drawing.Size(81, 24); - this.cancelButton.TabIndex = 2; - this.cancelButton.Text = "Cancel"; - this.cancelButton.UseVisualStyleBackColor = true; + cancelButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + cancelButton.AutoSize = true; + cancelButton.AutoSizeMode = AutoSizeMode.GrowAndShrink; + cancelButton.DialogResult = DialogResult.Cancel; + cancelButton.FlatStyle = FlatStyle.System; + cancelButton.Location = new System.Drawing.Point(12, 243); + cancelButton.Name = "cancelButton"; + cancelButton.Padding = new Padding(12, 0, 12, 0); + cancelButton.Size = new System.Drawing.Size(81, 24); + cancelButton.TabIndex = 2; + cancelButton.Text = "Cancel"; + cancelButton.UseVisualStyleBackColor = true; // // loadButton // - this.loadButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.loadButton.AutoSize = true; - this.loadButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.loadButton.Enabled = false; - this.loadButton.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.loadButton.Location = new System.Drawing.Point(283, 243); - this.loadButton.Name = "loadButton"; - this.loadButton.Padding = new System.Windows.Forms.Padding(12, 0, 12, 0); - this.loadButton.Size = new System.Drawing.Size(71, 24); - this.loadButton.TabIndex = 5; - this.loadButton.Text = "Load"; - this.loadButton.UseVisualStyleBackColor = true; - this.loadButton.Click += new System.EventHandler(this.OnLoad); + loadButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + loadButton.AutoSize = true; + loadButton.AutoSizeMode = AutoSizeMode.GrowAndShrink; + loadButton.Enabled = false; + loadButton.FlatStyle = FlatStyle.System; + loadButton.Location = new System.Drawing.Point(398, 243); + loadButton.Name = "loadButton"; + loadButton.Padding = new Padding(12, 0, 12, 0); + loadButton.Size = new System.Drawing.Size(71, 24); + loadButton.TabIndex = 5; + loadButton.Text = "Load"; + loadButton.UseVisualStyleBackColor = true; + loadButton.Click += OnLoad; // // saveButton // - this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.saveButton.AutoSize = true; - this.saveButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.saveButton.Enabled = false; - this.saveButton.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.saveButton.Location = new System.Drawing.Point(208, 243); - this.saveButton.Name = "saveButton"; - this.saveButton.Padding = new System.Windows.Forms.Padding(12, 0, 12, 0); - this.saveButton.Size = new System.Drawing.Size(69, 24); - this.saveButton.TabIndex = 4; - this.saveButton.Text = "Save"; - this.saveButton.UseVisualStyleBackColor = true; - this.saveButton.Click += new System.EventHandler(this.OnSave); + saveButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + saveButton.AutoSize = true; + saveButton.AutoSizeMode = AutoSizeMode.GrowAndShrink; + saveButton.Enabled = false; + saveButton.FlatStyle = FlatStyle.System; + saveButton.Location = new System.Drawing.Point(323, 243); + saveButton.Name = "saveButton"; + saveButton.Padding = new Padding(12, 0, 12, 0); + saveButton.Size = new System.Drawing.Size(69, 24); + saveButton.TabIndex = 4; + saveButton.Text = "Save"; + saveButton.UseVisualStyleBackColor = true; + saveButton.Click += OnSave; + // + // uninstallAllButton + // + uninstallAllButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + uninstallAllButton.AutoSize = true; + uninstallAllButton.AutoSizeMode = AutoSizeMode.GrowAndShrink; + uninstallAllButton.DialogResult = DialogResult.Abort; + uninstallAllButton.FlatStyle = FlatStyle.System; + uninstallAllButton.Location = new System.Drawing.Point(99, 242); + uninstallAllButton.Name = "uninstallAllButton"; + uninstallAllButton.Padding = new Padding(12, 0, 12, 0); + uninstallAllButton.Size = new System.Drawing.Size(108, 24); + uninstallAllButton.TabIndex = 7; + uninstallAllButton.Text = "Uninstall All"; + uninstallAllButton.UseVisualStyleBackColor = true; // // SelectDialogForm // - this.AcceptButton = this.acceptButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoSize = true; - this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.ClientSize = new System.Drawing.Size(433, 279); - this.Controls.Add(this.sortCheckBox); - this.Controls.Add(this.saveButton); - this.Controls.Add(this.loadButton); - this.Controls.Add(this.cancelButton); - this.Controls.Add(this.acceptButton); - this.Controls.Add(this.groupBox); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "SelectDialogForm"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; - this.Text = "SelectDialogForm"; - this.groupBox.ResumeLayout(false); - this.groupBox.PerformLayout(); - this.allCheckBoxFlowPanel.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - + AcceptButton = acceptButton; + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + AutoSize = true; + AutoSizeMode = AutoSizeMode.GrowAndShrink; + ClientSize = new System.Drawing.Size(548, 279); + Controls.Add(uninstallAllButton); + Controls.Add(sortCheckBox); + Controls.Add(saveButton); + Controls.Add(loadButton); + Controls.Add(cancelButton); + Controls.Add(acceptButton); + Controls.Add(groupBox); + FormBorderStyle = FormBorderStyle.FixedSingle; + MaximizeBox = false; + MinimizeBox = false; + Name = "SelectDialogForm"; + ShowInTaskbar = false; + StartPosition = FormStartPosition.Manual; + Text = "SelectDialogForm"; + groupBox.ResumeLayout(false); + groupBox.PerformLayout(); + allCheckBoxFlowPanel.ResumeLayout(false); + ResumeLayout(false); + PerformLayout(); } #endregion @@ -205,5 +220,6 @@ namespace CreamInstaller.Forms private Button loadButton; private Button saveButton; private CheckBox sortCheckBox; + private Button uninstallAllButton; } } \ No newline at end of file diff --git a/CreamInstaller/Forms/SelectForm.cs b/CreamInstaller/Forms/SelectForm.cs index cda417b..0f9851d 100644 --- a/CreamInstaller/Forms/SelectForm.cs +++ b/CreamInstaller/Forms/SelectForm.cs @@ -102,7 +102,7 @@ internal sealed partial class SelectForm : CustomForm private async Task GetApplicablePrograms(IProgress progress, bool uninstallAll = false) { - if (programsToScan is null || !programsToScan.Any()) + if (!uninstallAll && (programsToScan is null || !programsToScan.Any())) return; int totalGameCount = 0; int completeGameCount = 0; @@ -123,14 +123,16 @@ internal sealed partial class SelectForm : CustomForm remainingGames.Clear(); // for display purposes only, otherwise ignorable remainingDLCs.Clear(); // for display purposes only, otherwise ignorable List appTasks = new(); - if (programsToScan.Any(c => c.platform is Platform.Paradox)) + if (uninstallAll || programsToScan.Any(c => c.platform is Platform.Paradox)) { + AddToRemainingGames("Paradox Launcher"); List dllDirectories = await ParadoxLauncher.InstallPath.GetDllDirectoriesFromGameDirectory(Platform.Paradox, this); if (dllDirectories is not null) { if (uninstallAll) { ProgramSelection bareSelection = ProgramSelection.FromPlatformId(Platform.Paradox, "PL") ?? new(); + bareSelection.Enabled = true; bareSelection.Id = "PL"; bareSelection.Name = "Paradox Launcher"; bareSelection.RootDirectory = ParadoxLauncher.InstallPath; @@ -159,10 +161,11 @@ internal sealed partial class SelectForm : CustomForm if (programNode.TreeView is null) _ = selectionTreeView.Nodes.Add(programNode); } + RemoveFromRemainingGames("Paradox Launcher"); } } int steamGamesToCheck; - if (programsToScan.Any(c => c.platform is Platform.Steam)) + if (uninstallAll || programsToScan.Any(c => c.platform is Platform.Steam)) { List<(string appId, string name, string branch, int buildId, string gameDirectory)> steamGames = await SteamLibrary.GetGames(); steamGamesToCheck = steamGames.Count; @@ -197,6 +200,7 @@ internal sealed partial class SelectForm : CustomForm bareSelection.ExecutableDirectories = await SteamLibrary.GetExecutableDirectories(bareSelection.RootDirectory); bareSelection.DllDirectories = dllDirectories; bareSelection.Platform = Platform.Steam; + RemoveFromRemainingGames(name); return; } if (Program.Canceled) @@ -365,7 +369,7 @@ internal sealed partial class SelectForm : CustomForm appTasks.Add(task); } } - if (programsToScan.Any(c => c.platform is Platform.Epic)) + if (uninstallAll || programsToScan.Any(c => c.platform is Platform.Epic)) { List epicGames = await EpicLibrary.GetGames(); foreach (Manifest manifest in epicGames) @@ -398,6 +402,7 @@ internal sealed partial class SelectForm : CustomForm bareSelection.ExecutableDirectories = await EpicLibrary.GetExecutableDirectories(bareSelection.RootDirectory); bareSelection.DllDirectories = dllDirectories; bareSelection.Platform = Platform.Epic; + RemoveFromRemainingGames(name); return; } if (Program.Canceled) @@ -501,7 +506,7 @@ internal sealed partial class SelectForm : CustomForm appTasks.Add(task); } } - if (programsToScan.Any(c => c.platform is Platform.Ubisoft)) + if (uninstallAll || programsToScan.Any(c => c.platform is Platform.Ubisoft)) { List<(string gameId, string name, string gameDirectory)> ubisoftGames = await UbisoftLibrary.GetGames(); foreach ((string gameId, string name, string gameDirectory) in ubisoftGames) @@ -531,6 +536,7 @@ internal sealed partial class SelectForm : CustomForm bareSelection.ExecutableDirectories = await UbisoftLibrary.GetExecutableDirectories(bareSelection.RootDirectory); bareSelection.DllDirectories = dllDirectories; bareSelection.Platform = Platform.Ubisoft; + RemoveFromRemainingGames(name); return; } if (Program.Canceled) @@ -622,12 +628,27 @@ internal sealed partial class SelectForm : CustomForm out List<(Platform platform, string id, string name)> choices); if (selectResult == DialogResult.Abort) // will be an uninstall all button { - choices = new(); - foreach ((Platform platform, string id, string name, bool alreadySelected) in gameChoices) - choices.Add((platform, id, name)); - programsToScan = choices; - await GetApplicablePrograms(new Progress(), true); - OnUninstall(null, null); + int maxProgress = 0; + int curProgress = 0; + Progress progress = new(); + IProgress iProgress = progress; + progress.ProgressChanged += (_, _progress) => + { + if (Program.Canceled) + return; + if (_progress < 0 || _progress > maxProgress) + maxProgress = -_progress; + else + curProgress = _progress; + int p = Math.Max(Math.Min((int)((float)curProgress / maxProgress * 100), 100), 0); + progressLabel.Text = $"Quickly gathering games for uninstallation . . . {p}%"; + progressBar.Value = p; + }; + progressLabel.Text = "Quickly gathering games for uninstallation . . . "; + if (!Program.Canceled) + await GetApplicablePrograms(iProgress, true); + if (!Program.Canceled) + OnUninstall(null, null); } else {