diff --git a/CreamInstaller/CreamInstaller.csproj b/CreamInstaller/CreamInstaller.csproj index 01cde39..75949bb 100644 --- a/CreamInstaller/CreamInstaller.csproj +++ b/CreamInstaller/CreamInstaller.csproj @@ -6,7 +6,7 @@ true ini.ico true - 2.0.2.3 + 2.0.3.0 ini.ico Automatically generates and installs CreamAPI files for Steam games on the user's computer. It can also generate and install CreamAPI for the Paradox Launcher should the user select a Paradox Interactive game. diff --git a/CreamInstaller/Forms/SelectForm.Designer.cs b/CreamInstaller/Forms/SelectForm.Designer.cs index 8602fc2..d0e6859 100644 --- a/CreamInstaller/Forms/SelectForm.Designer.cs +++ b/CreamInstaller/Forms/SelectForm.Designer.cs @@ -123,8 +123,6 @@ namespace CreamInstaller // this.allCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.allCheckBox.AutoSize = true; - this.allCheckBox.Checked = true; - this.allCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; this.allCheckBox.Enabled = false; this.allCheckBox.Location = new System.Drawing.Point(414, 0); this.allCheckBox.Name = "allCheckBox"; diff --git a/CreamInstaller/Forms/SelectForm.cs b/CreamInstaller/Forms/SelectForm.cs index 24ed769..ae180fb 100644 --- a/CreamInstaller/Forms/SelectForm.cs +++ b/CreamInstaller/Forms/SelectForm.cs @@ -121,6 +121,7 @@ namespace CreamInstaller private void GetCreamApiApplicablePrograms(IProgress progress) { + treeView1.AfterCheck -= OnTreeViewNodeCheckedChanged; int cur = 0; if (Program.Canceled) return; List> applicablePrograms = new(); @@ -197,25 +198,28 @@ namespace CreamInstaller if (Program.Canceled) return; TreeNode programNode = treeNodes.Find(s => s.Text == name) ?? new(); programNode.Text = name; - programNode.Checked = true; + programNode.Checked = selection.Enabled; programNode.Remove(); treeView1.Nodes.Add(programNode); treeNodes.Remove(programNode); treeNodes.Add(programNode); - foreach (KeyValuePair dlcApp in dlc.ToList()) + if (name == "Paradox Launcher") { - if (Program.Canceled || programNode is null) return; - TreeNode dlcNode = treeNodes.Find(s => s.Text == dlcApp.Value) ?? new(); - dlcNode.Text = dlcApp.Value; - dlcNode.Checked = true; - dlcNode.Remove(); - programNode.Nodes.Add(dlcNode); - treeNodes.Remove(dlcNode); - treeNodes.Add(dlcNode); - Tuple app = new(dlcApp.Key, dlcApp.Value); - if (!selection.AllSteamDlc.Contains(app)) selection.AllSteamDlc.Add(app); - if (!selection.SelectedSteamDlc.Contains(app)) selection.SelectedSteamDlc.Add(app); + // maybe add game and/or dlc choice here? } + else foreach (KeyValuePair dlcApp in dlc.ToList()) + { + if (Program.Canceled || programNode is null) return; + Tuple app = new(dlcApp.Key, dlcApp.Value); + TreeNode dlcNode = treeNodes.Find(s => s.Text == app.Item2) ?? new(); + dlcNode.Text = app.Item2; + dlcNode.Checked = selection.SelectedSteamDlc.Contains(app); + dlcNode.Remove(); + programNode.Nodes.Add(dlcNode); + treeNodes.Remove(dlcNode); + treeNodes.Add(dlcNode); + if (!selection.AllSteamDlc.Contains(app)) selection.AllSteamDlc.Add(app); + } }); }); RunningTasks.Add(task); @@ -230,6 +234,7 @@ namespace CreamInstaller task.Wait(); } progress.Report(RunningTasks.Count); + treeView1.AfterCheck += OnTreeViewNodeCheckedChanged; } private bool validated = false; @@ -292,21 +297,11 @@ namespace CreamInstaller label2.Visible = false; progressBar1.Visible = false; - if (ProgramSelection.All.Any()) - { - allCheckBox.Enabled = true; - treeView1.Enabled = true; - treeNodes.ForEach(node => node.Checked = true); - if (ProgramSelection.AllSafeEnabled.Any()) - { - acceptButton.Enabled = true; - } - } - else - { - noneFoundLabel.Visible = true; - } + treeView1.Enabled = ProgramSelection.All.Any(); + allCheckBox.Enabled = treeView1.Enabled; + noneFoundLabel.Visible = !treeView1.Enabled; + acceptButton.Enabled = ProgramSelection.AllSafeEnabled.Any(); cancelButton.Enabled = false; scanButton.Enabled = true; @@ -322,23 +317,29 @@ namespace CreamInstaller ProgramSelection selection = ProgramSelection.FromName(e.Node.Text); if (selection is null) { - selection = ProgramSelection.FromName(e.Node.Parent.Text); - selection.ToggleDlc(e.Node.Text, e.Node.Checked); + ProgramSelection.FromName(e.Node.Parent.Text).ToggleDlc(e.Node.Text, e.Node.Checked); treeView1.AfterCheck -= OnTreeViewNodeCheckedChanged; e.Node.Parent.Checked = e.Node.Parent.Nodes.Cast().ToList().Any(treeNode => treeNode.Checked); treeView1.AfterCheck += OnTreeViewNodeCheckedChanged; } else { - selection.Enabled = e.Node.Checked; - treeView1.AfterCheck -= OnTreeViewNodeCheckedChanged; - e.Node.Nodes.Cast().ToList().ForEach(treeNode => treeNode.Checked = e.Node.Checked); - treeView1.AfterCheck += OnTreeViewNodeCheckedChanged; + if (selection.AllSteamDlc.Any()) + { + selection.ToggleAllDlc(e.Node.Checked); + treeView1.AfterCheck -= OnTreeViewNodeCheckedChanged; + e.Node.Nodes.Cast().ToList().ForEach(treeNode => treeNode.Checked = e.Node.Checked); + treeView1.AfterCheck += OnTreeViewNodeCheckedChanged; + } + else + { + selection.Enabled = e.Node.Checked; + } allCheckBox.CheckedChanged -= OnAllCheckBoxChanged; allCheckBox.Checked = treeNodes.TrueForAll(treeNode => treeNode.Checked); allCheckBox.CheckedChanged += OnAllCheckBoxChanged; - acceptButton.Enabled = ProgramSelection.AllSafeEnabled.Any(); } + acceptButton.Enabled = ProgramSelection.AllSafeEnabled.Any(); } private void OnLoad(object sender, EventArgs _) @@ -370,10 +371,10 @@ namespace CreamInstaller } } - private static bool ParadoxLauncherDlcDialog(Form form) + private static void PopulateParadoxLauncherDlc(ProgramSelection paradoxLauncher = null) { - ProgramSelection paradoxLauncher = ProgramSelection.FromName("Paradox Launcher"); - if (!(paradoxLauncher is null) && paradoxLauncher.Enabled) + paradoxLauncher ??= ProgramSelection.FromName("Paradox Launcher"); + if (!(paradoxLauncher is null)) { paradoxLauncher.ExtraSteamAppIdDlc = new(); foreach (ProgramSelection selection in ProgramSelection.AllSafeEnabled) @@ -391,6 +392,15 @@ namespace CreamInstaller paradoxLauncher.ExtraSteamAppIdDlc.Add(new(selection.SteamAppId, selection.Name, selection.AllSteamDlc)); } } + } + } + + private static bool ParadoxLauncherDlcDialog(Form form) + { + ProgramSelection paradoxLauncher = ProgramSelection.FromName("Paradox Launcher"); + if (!(paradoxLauncher is null) && paradoxLauncher.Enabled) + { + PopulateParadoxLauncherDlc(paradoxLauncher); if (!paradoxLauncher.ExtraSteamAppIdDlc.Any()) { if (new DialogForm(form).Show(Program.ApplicationName, SystemIcons.Warning, @@ -425,8 +435,11 @@ namespace CreamInstaller { foreach (TreeNode treeNode in treeNodes) { - treeNode.Checked = !treeNode.Checked; - treeNode.Checked = !treeNode.Checked; // to fire checked event + if (!(treeNode.Parent is null)) + { + treeNode.Checked = !treeNode.Checked; + treeNode.Checked = !treeNode.Checked; // to fire checked event + } } int X = installForm.Location.X + installForm.Size.Width / 2 - Size.Width / 2; int Y = installForm.Location.Y + installForm.Size.Height / 2 - Size.Height / 2; diff --git a/CreamInstaller/ProgramSelection.cs b/CreamInstaller/ProgramSelection.cs index 3165063..b82373f 100644 --- a/CreamInstaller/ProgramSelection.cs +++ b/CreamInstaller/ProgramSelection.cs @@ -7,7 +7,7 @@ namespace CreamInstaller { public class ProgramSelection { - public bool Enabled = true; + public bool Enabled = false; public string Name; public string RootDirectory; @@ -34,24 +34,33 @@ namespace CreamInstaller } } - public void ToggleDlc(string dlcName, bool Enabled) + private void Toggle(Tuple dlcApp, bool enabled) + { + if (enabled) + { + if (!SelectedSteamDlc.Contains(dlcApp)) SelectedSteamDlc.Add(dlcApp); + } + else SelectedSteamDlc.Remove(dlcApp); + } + + public void ToggleDlc(string dlcName, bool enabled) { foreach (Tuple dlcApp in AllSteamDlc) { if (dlcApp.Item2 == dlcName) { - if (Enabled) - { - if (!SelectedSteamDlc.Contains(dlcApp)) - { - SelectedSteamDlc.Add(dlcApp); - } - } - else SelectedSteamDlc.Remove(dlcApp); + Toggle(dlcApp, enabled); break; } } - this.Enabled = SelectedSteamDlc.Any(); + Enabled = SelectedSteamDlc.Any(); + } + + public void ToggleAllDlc(bool enabled) + { + if (!enabled) SelectedSteamDlc.Clear(); + else foreach (Tuple dlcApp in AllSteamDlc) Toggle(dlcApp, enabled); + Enabled = SelectedSteamDlc.Any(); } public ProgramSelection() => All.Add(this);