move from indexing based on names to appids, increase size of forms

This commit is contained in:
pointfeev 2021-11-30 11:45:09 -05:00
parent 942b2a9b64
commit 43e8b64349
No known key found for this signature in database
GPG key ID: AA14DC36C4D7D13C
6 changed files with 98 additions and 61 deletions

View file

@ -36,11 +36,11 @@ namespace CreamInstaller
private void Toggle(KeyValuePair<int, string> dlcApp, bool enabled) => SelectedSteamDlc[dlcApp.Key] = enabled ? dlcApp.Value : null; private void Toggle(KeyValuePair<int, string> dlcApp, bool enabled) => SelectedSteamDlc[dlcApp.Key] = enabled ? dlcApp.Value : null;
public void ToggleDlc(string dlcName, bool enabled) public void ToggleDlc(int dlcAppId, bool enabled)
{ {
foreach (KeyValuePair<int, string> dlcApp in AllSteamDlc) foreach (KeyValuePair<int, string> dlcApp in AllSteamDlc)
{ {
if (dlcApp.Value == dlcName) if (dlcApp.Key == dlcAppId)
{ {
Toggle(dlcApp, enabled); Toggle(dlcApp, enabled);
break; break;
@ -64,13 +64,13 @@ namespace CreamInstaller
public static List<ProgramSelection> AllSafeEnabled => AllSafe.FindAll(s => s.Enabled); public static List<ProgramSelection> AllSafeEnabled => AllSafe.FindAll(s => s.Enabled);
public static ProgramSelection FromName(string displayName) => AllSafe.Find(s => s.Name == displayName); public static ProgramSelection FromAppId(int appId) => AllSafe.Find(s => s.SteamAppId == appId);
public static KeyValuePair<int, string>? GetDlc(string displayName) public static KeyValuePair<int, string>? GetAllSteamDlc(int appId)
{ {
foreach (ProgramSelection selection in AllSafe) foreach (ProgramSelection selection in AllSafe)
foreach (KeyValuePair<int, string> app in selection.AllSteamDlc) foreach (KeyValuePair<int, string> app in selection.AllSteamDlc)
if (app.Value == displayName) return app; if (app.Key == appId) return app;
return null; return null;
} }
} }

View file

@ -44,7 +44,7 @@ namespace CreamInstaller
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
this.userProgressBar.Location = new System.Drawing.Point(12, 27); this.userProgressBar.Location = new System.Drawing.Point(12, 27);
this.userProgressBar.Name = "userProgressBar"; this.userProgressBar.Name = "userProgressBar";
this.userProgressBar.Size = new System.Drawing.Size(500, 23); this.userProgressBar.Size = new System.Drawing.Size(760, 23);
this.userProgressBar.TabIndex = 1; this.userProgressBar.TabIndex = 1;
// //
// userInfoLabel // userInfoLabel
@ -53,7 +53,7 @@ namespace CreamInstaller
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
this.userInfoLabel.Location = new System.Drawing.Point(12, 9); this.userInfoLabel.Location = new System.Drawing.Point(12, 9);
this.userInfoLabel.Name = "userInfoLabel"; this.userInfoLabel.Name = "userInfoLabel";
this.userInfoLabel.Size = new System.Drawing.Size(500, 15); this.userInfoLabel.Size = new System.Drawing.Size(760, 15);
this.userInfoLabel.TabIndex = 2; this.userInfoLabel.TabIndex = 2;
this.userInfoLabel.Text = "Loading . . . "; this.userInfoLabel.Text = "Loading . . . ";
// //
@ -61,7 +61,7 @@ namespace CreamInstaller
// //
this.acceptButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.acceptButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.acceptButton.Enabled = false; this.acceptButton.Enabled = false;
this.acceptButton.Location = new System.Drawing.Point(437, 286); this.acceptButton.Location = new System.Drawing.Point(697, 526);
this.acceptButton.Name = "acceptButton"; this.acceptButton.Name = "acceptButton";
this.acceptButton.Size = new System.Drawing.Size(75, 23); this.acceptButton.Size = new System.Drawing.Size(75, 23);
this.acceptButton.TabIndex = 4; this.acceptButton.TabIndex = 4;
@ -73,7 +73,7 @@ namespace CreamInstaller
// //
this.retryButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.retryButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.retryButton.Enabled = false; this.retryButton.Enabled = false;
this.retryButton.Location = new System.Drawing.Point(356, 286); this.retryButton.Location = new System.Drawing.Point(616, 526);
this.retryButton.Name = "retryButton"; this.retryButton.Name = "retryButton";
this.retryButton.Size = new System.Drawing.Size(75, 23); this.retryButton.Size = new System.Drawing.Size(75, 23);
this.retryButton.TabIndex = 3; this.retryButton.TabIndex = 3;
@ -84,7 +84,7 @@ namespace CreamInstaller
// cancelButton // cancelButton
// //
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.cancelButton.Location = new System.Drawing.Point(12, 286); this.cancelButton.Location = new System.Drawing.Point(12, 526);
this.cancelButton.Name = "cancelButton"; this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(75, 23); this.cancelButton.Size = new System.Drawing.Size(75, 23);
this.cancelButton.TabIndex = 1; this.cancelButton.TabIndex = 1;
@ -102,17 +102,17 @@ namespace CreamInstaller
this.logTextBox.Name = "logTextBox"; this.logTextBox.Name = "logTextBox";
this.logTextBox.ReadOnly = true; this.logTextBox.ReadOnly = true;
this.logTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedBoth; this.logTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedBoth;
this.logTextBox.Size = new System.Drawing.Size(500, 224); this.logTextBox.Size = new System.Drawing.Size(760, 464);
this.logTextBox.TabIndex = 4; this.logTextBox.TabIndex = 4;
this.logTextBox.TabStop = false; this.logTextBox.TabStop = false;
this.logTextBox.Text = ""; this.logTextBox.Text = "";
// //
// reselectButton // reselectButton
// //
this.reselectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.reselectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.reselectButton.Location = new System.Drawing.Point(135, 286); this.reselectButton.Location = new System.Drawing.Point(410, 526);
this.reselectButton.Name = "reselectButton"; this.reselectButton.Name = "reselectButton";
this.reselectButton.Size = new System.Drawing.Size(175, 23); this.reselectButton.Size = new System.Drawing.Size(200, 23);
this.reselectButton.TabIndex = 2; this.reselectButton.TabIndex = 2;
this.reselectButton.Text = "Reselect Programs / Games"; this.reselectButton.Text = "Reselect Programs / Games";
this.reselectButton.UseVisualStyleBackColor = true; this.reselectButton.UseVisualStyleBackColor = true;
@ -122,7 +122,7 @@ namespace CreamInstaller
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(524, 321); this.ClientSize = new System.Drawing.Size(784, 561);
this.Controls.Add(this.reselectButton); this.Controls.Add(this.reselectButton);
this.Controls.Add(this.logTextBox); this.Controls.Add(this.logTextBox);
this.Controls.Add(this.cancelButton); this.Controls.Add(this.cancelButton);
@ -133,7 +133,7 @@ namespace CreamInstaller
this.DoubleBuffered = true; this.DoubleBuffered = true;
this.MaximizeBox = false; this.MaximizeBox = false;
this.MinimizeBox = false; this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(540, 360); this.MinimumSize = new System.Drawing.Size(600, 400);
this.Name = "InstallForm"; this.Name = "InstallForm";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;

View file

@ -146,7 +146,8 @@ namespace CreamInstaller
"\n\nThis will cause unwanted behavior when updating the program!", "\n\nThis will cause unwanted behavior when updating the program!",
"Ignore", "Abort") == DialogResult.Cancel) "Ignore", "Abort") == DialogResult.Cancel)
{ {
Environment.Exit(0); Application.Exit();
return;
} }
} }
OnLoad(); OnLoad();
@ -194,6 +195,7 @@ namespace CreamInstaller
{ {
updateManager.LaunchUpdater(latestVersion); updateManager.LaunchUpdater(latestVersion);
Application.Exit(); Application.Exit();
return;
} }
else else
{ {

View file

@ -48,10 +48,10 @@ namespace CreamInstaller
// //
this.acceptButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.acceptButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.acceptButton.Enabled = false; this.acceptButton.Enabled = false;
this.acceptButton.Location = new System.Drawing.Point(322, 254); this.acceptButton.Location = new System.Drawing.Point(422, 326);
this.acceptButton.Name = "acceptButton"; this.acceptButton.Name = "acceptButton";
this.acceptButton.Size = new System.Drawing.Size(150, 23); this.acceptButton.Size = new System.Drawing.Size(150, 23);
this.acceptButton.TabIndex = 102; this.acceptButton.TabIndex = 10002;
this.acceptButton.Text = "Generate and Install"; this.acceptButton.Text = "Generate and Install";
this.acceptButton.UseVisualStyleBackColor = true; this.acceptButton.UseVisualStyleBackColor = true;
this.acceptButton.Click += new System.EventHandler(this.OnAccept); this.acceptButton.Click += new System.EventHandler(this.OnAccept);
@ -59,10 +59,10 @@ namespace CreamInstaller
// cancelButton // cancelButton
// //
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.cancelButton.Location = new System.Drawing.Point(12, 254); this.cancelButton.Location = new System.Drawing.Point(12, 326);
this.cancelButton.Name = "cancelButton"; this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(75, 23); this.cancelButton.Size = new System.Drawing.Size(75, 23);
this.cancelButton.TabIndex = 100; this.cancelButton.TabIndex = 10000;
this.cancelButton.Text = "Cancel"; this.cancelButton.Text = "Cancel";
this.cancelButton.UseVisualStyleBackColor = true; this.cancelButton.UseVisualStyleBackColor = true;
this.cancelButton.Click += new System.EventHandler(this.OnCancel); this.cancelButton.Click += new System.EventHandler(this.OnCancel);
@ -84,7 +84,7 @@ namespace CreamInstaller
this.groupBox1.Controls.Add(this.allCheckBox); this.groupBox1.Controls.Add(this.allCheckBox);
this.groupBox1.Location = new System.Drawing.Point(12, 12); this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1"; this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(460, 236); this.groupBox1.Size = new System.Drawing.Size(560, 308);
this.groupBox1.TabIndex = 8; this.groupBox1.TabIndex = 8;
this.groupBox1.TabStop = false; this.groupBox1.TabStop = false;
this.groupBox1.Text = "Programs / Games"; this.groupBox1.Text = "Programs / Games";
@ -96,7 +96,7 @@ namespace CreamInstaller
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
this.noneFoundLabel.Location = new System.Drawing.Point(6, 22); this.noneFoundLabel.Location = new System.Drawing.Point(6, 22);
this.noneFoundLabel.Name = "noneFoundLabel"; this.noneFoundLabel.Name = "noneFoundLabel";
this.noneFoundLabel.Size = new System.Drawing.Size(448, 208); this.noneFoundLabel.Size = new System.Drawing.Size(548, 280);
this.noneFoundLabel.TabIndex = 1002; this.noneFoundLabel.TabIndex = 1002;
this.noneFoundLabel.Text = "No CreamAPI-applicable programs were found on your computer!"; this.noneFoundLabel.Text = "No CreamAPI-applicable programs were found on your computer!";
this.noneFoundLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.noneFoundLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@ -115,7 +115,7 @@ namespace CreamInstaller
this.treeView1.HotTracking = true; this.treeView1.HotTracking = true;
this.treeView1.Location = new System.Drawing.Point(6, 22); this.treeView1.Location = new System.Drawing.Point(6, 22);
this.treeView1.Name = "treeView1"; this.treeView1.Name = "treeView1";
this.treeView1.Size = new System.Drawing.Size(448, 208); this.treeView1.Size = new System.Drawing.Size(548, 280);
this.treeView1.TabIndex = 1001; this.treeView1.TabIndex = 1001;
// //
// allCheckBox // allCheckBox
@ -123,7 +123,7 @@ namespace CreamInstaller
this.allCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.allCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.allCheckBox.AutoSize = true; this.allCheckBox.AutoSize = true;
this.allCheckBox.Enabled = false; this.allCheckBox.Enabled = false;
this.allCheckBox.Location = new System.Drawing.Point(414, 0); this.allCheckBox.Location = new System.Drawing.Point(514, 0);
this.allCheckBox.Name = "allCheckBox"; this.allCheckBox.Name = "allCheckBox";
this.allCheckBox.Size = new System.Drawing.Size(40, 19); this.allCheckBox.Size = new System.Drawing.Size(40, 19);
this.allCheckBox.TabIndex = 1; this.allCheckBox.TabIndex = 1;
@ -135,18 +135,18 @@ namespace CreamInstaller
// //
this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
this.progressBar1.Location = new System.Drawing.Point(12, 225); this.progressBar1.Location = new System.Drawing.Point(12, 297);
this.progressBar1.Name = "progressBar1"; this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(460, 23); this.progressBar1.Size = new System.Drawing.Size(560, 23);
this.progressBar1.TabIndex = 9; this.progressBar1.TabIndex = 9;
// //
// label2 // label2
// //
this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
this.label2.Location = new System.Drawing.Point(12, 207); this.label2.Location = new System.Drawing.Point(12, 279);
this.label2.Name = "label2"; this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(460, 15); this.label2.Size = new System.Drawing.Size(760, 15);
this.label2.TabIndex = 10; this.label2.TabIndex = 10;
this.label2.Text = "Loading . . ."; this.label2.Text = "Loading . . .";
// //
@ -154,11 +154,11 @@ namespace CreamInstaller
// //
this.scanButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.scanButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.scanButton.Enabled = false; this.scanButton.Enabled = false;
this.scanButton.Location = new System.Drawing.Point(110, 254); this.scanButton.Location = new System.Drawing.Point(236, 326);
this.scanButton.Name = "scanButton"; this.scanButton.Name = "scanButton";
this.scanButton.Size = new System.Drawing.Size(190, 23); this.scanButton.Size = new System.Drawing.Size(180, 23);
this.scanButton.TabIndex = 101; this.scanButton.TabIndex = 10001;
this.scanButton.Text = "Rescan for Programs / Games"; this.scanButton.Text = "Rescan Programs / Games";
this.scanButton.UseVisualStyleBackColor = true; this.scanButton.UseVisualStyleBackColor = true;
this.scanButton.Click += new System.EventHandler(this.OnScan); this.scanButton.Click += new System.EventHandler(this.OnScan);
// //
@ -166,7 +166,7 @@ namespace CreamInstaller
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(484, 289); this.ClientSize = new System.Drawing.Size(584, 361);
this.Controls.Add(this.scanButton); this.Controls.Add(this.scanButton);
this.Controls.Add(this.groupBox1); this.Controls.Add(this.groupBox1);
this.Controls.Add(this.progressBar1); this.Controls.Add(this.progressBar1);
@ -177,7 +177,7 @@ namespace CreamInstaller
this.DoubleBuffered = true; this.DoubleBuffered = true;
this.MaximizeBox = false; this.MaximizeBox = false;
this.MinimizeBox = false; this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(500, 328); this.MinimumSize = new System.Drawing.Size(600, 400);
this.Name = "SelectForm"; this.Name = "SelectForm";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;

View file

@ -9,6 +9,7 @@ using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
@ -150,7 +151,7 @@ namespace CreamInstaller
{ {
if (Program.Canceled || !GetDllDirectoriesFromGameDirectory(directory, out List<string> dllDirectories)) return; if (Program.Canceled || !GetDllDirectoriesFromGameDirectory(directory, out List<string> dllDirectories)) return;
VProperty appInfo = null; VProperty appInfo = null;
if (Program.Canceled || (name != "Paradox Launcher" && !SteamCMD.GetAppInfo(appId, out appInfo, branch, buildId))) return; if (Program.Canceled || (appId > 0 && !SteamCMD.GetAppInfo(appId, out appInfo, branch, buildId))) return;
if (Program.Canceled) return; if (Program.Canceled) return;
ConcurrentDictionary<int, string> dlc = new(); ConcurrentDictionary<int, string> dlc = new();
List<Task> dlcTasks = new(); List<Task> dlcTasks = new();
@ -166,8 +167,8 @@ namespace CreamInstaller
string dlcName = null; string dlcName = null;
if (SteamCMD.GetAppInfo(id, out VProperty dlcAppInfo)) dlcName = dlcAppInfo?.Value?["common"]?["name"]?.ToString(); if (SteamCMD.GetAppInfo(id, out VProperty dlcAppInfo)) dlcName = dlcAppInfo?.Value?["common"]?["name"]?.ToString();
if (Program.Canceled) return; if (Program.Canceled) return;
if (string.IsNullOrWhiteSpace(dlcName)) return; if (string.IsNullOrWhiteSpace(dlcName)) return; //dlcName = "Unknown DLC";
dlc[id] = dlcName; dlc[id] = /*$"[{id}] " +*/ dlcName;
progress.Report(++cur); progress.Report(++cur);
}); });
dlcTasks.Add(task); dlcTasks.Add(task);
@ -175,13 +176,13 @@ namespace CreamInstaller
} }
progress.Report(-RunningTasks.Count); progress.Report(-RunningTasks.Count);
} }
else if (name != "Paradox Launcher") return; else if (appId > 0) return;
if (Program.Canceled) return; if (Program.Canceled) return;
if (string.IsNullOrWhiteSpace(name)) return; if (string.IsNullOrWhiteSpace(name)) return;
if (Program.Canceled) return; if (Program.Canceled) return;
ProgramSelection selection = ProgramSelection.FromName(name) ?? new(); ProgramSelection selection = ProgramSelection.FromAppId(appId) ?? new();
selection.Name = name; selection.Name = name;
selection.RootDirectory = directory; selection.RootDirectory = directory;
selection.SteamAppId = appId; selection.SteamAppId = appId;
@ -197,22 +198,22 @@ namespace CreamInstaller
treeView1.Invoke((MethodInvoker)delegate treeView1.Invoke((MethodInvoker)delegate
{ {
if (Program.Canceled) return; if (Program.Canceled) return;
TreeNode programNode = treeNodes.Find(s => s.Text == name) ?? new(); TreeNode programNode = treeNodes.Find(s => s.Name == "" + appId) ?? new();
programNode.Name = "" + appId; programNode.Name = "" + appId;
programNode.Text = name; programNode.Text = /*(appId > 0 ? $"[{appId}] " : "") +*/ name;
programNode.Checked = selection.Enabled; programNode.Checked = selection.Enabled;
programNode.Remove(); programNode.Remove();
treeView1.Nodes.Add(programNode); treeView1.Nodes.Add(programNode);
treeNodes.Remove(programNode); treeNodes.Remove(programNode);
treeNodes.Add(programNode); treeNodes.Add(programNode);
if (name == "Paradox Launcher") if (appId == 0) // paradox launcher
{ {
// maybe add game and/or dlc choice here? // maybe add game and/or dlc choice here?
} }
else foreach (KeyValuePair<int, string> dlcApp in dlc.ToList()) else foreach (KeyValuePair<int, string> dlcApp in dlc.ToList())
{ {
if (Program.Canceled || programNode is null) return; if (Program.Canceled || programNode is null) return;
TreeNode dlcNode = treeNodes.Find(s => s.Text == dlcApp.Value) ?? new(); TreeNode dlcNode = treeNodes.Find(s => s.Name == "" + dlcApp.Key) ?? new();
dlcNode.Name = "" + dlcApp.Key; dlcNode.Name = "" + dlcApp.Key;
dlcNode.Text = dlcApp.Value; dlcNode.Text = dlcApp.Value;
dlcNode.Checked = selection.SelectedSteamDlc.Contains(dlcApp); dlcNode.Checked = selection.SelectedSteamDlc.Contains(dlcApp);
@ -235,6 +236,11 @@ namespace CreamInstaller
task.Wait(); task.Wait();
} }
progress.Report(RunningTasks.Count); progress.Report(RunningTasks.Count);
ProgramSelection.All.ForEach(selection => selection.SteamApiDllDirectories.RemoveAll(directory => !Directory.Exists(directory)));
ProgramSelection.All.RemoveAll(selection => !Directory.Exists(selection.RootDirectory) || !selection.SteamApiDllDirectories.Any());
foreach (TreeNode treeNode in treeNodes)
if (treeNode.Parent is null && ProgramSelection.FromAppId(int.Parse(treeNode.Name)) is null)
treeNode.Remove();
} }
private async void OnLoad() private async void OnLoad()
@ -283,13 +289,7 @@ namespace CreamInstaller
setup = false; setup = false;
label2.Text = "Gathering and caching your applicable games and their DLCs . . . "; label2.Text = "Gathering and caching your applicable games and their DLCs . . . ";
await Task.Run(() => GetCreamApiApplicablePrograms(iProgress)); await Task.Run(() => GetCreamApiApplicablePrograms(iProgress));
treeView1.Sort(); //SetMinimumSizeFromTreeView();
ProgramSelection.All.ForEach(selection => selection.SteamApiDllDirectories.RemoveAll(directory => !Directory.Exists(directory)));
ProgramSelection.All.RemoveAll(selection => !Directory.Exists(selection.RootDirectory) || !selection.SteamApiDllDirectories.Any());
foreach (TreeNode treeNode in treeNodes)
if (treeNode.Parent is null && ProgramSelection.FromName(treeNode.Text) is null)
treeNode.Remove();
progressBar1.Value = 100; progressBar1.Value = 100;
groupBox1.Size = new(groupBox1.Size.Width, groupBox1.Size.Height + 44); groupBox1.Size = new(groupBox1.Size.Width, groupBox1.Size.Height + 44);
@ -305,13 +305,42 @@ namespace CreamInstaller
scanButton.Enabled = true; scanButton.Enabled = true;
} }
/*private const int GWL_STYLE = -16;
private const int WS_VSCROLL = 0x00200000;
private const int WS_HSCROLL = 0x00100000;
[DllImport("user32.dll", ExactSpelling = false, CharSet = CharSet.Auto)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
private const int MINIMUM_SIZE_INCREMENT = 8;
private void SetMinimumSizeFromTreeView()
{
Dictionary<TreeNode, bool> expansionState = new();
foreach (TreeNode node in treeView1.Nodes) expansionState[node] = node.IsExpanded;
treeView1.ExpandAll();
Size minimumSize = MinimumSize;
Point point;
int style = GetWindowLong(treeView1.Handle, GWL_STYLE);
while ((style & WS_HSCROLL) != 0)
{
minimumSize.Width += MINIMUM_SIZE_INCREMENT;
point = Location;
point.X -= MINIMUM_SIZE_INCREMENT / 2;
Location = point;
MinimumSize = minimumSize;
style = GetWindowLong(treeView1.Handle, GWL_STYLE);
Update();
}
foreach (TreeNode node in treeView1.Nodes) if (!expansionState[node]) node.Collapse();
}*/
private void OnTreeViewNodeCheckedChanged(object sender, TreeViewEventArgs e) private void OnTreeViewNodeCheckedChanged(object sender, TreeViewEventArgs e)
{ {
if (e.Action == TreeViewAction.Unknown) return; if (e.Action == TreeViewAction.Unknown) return;
ProgramSelection selection = ProgramSelection.FromName(e.Node.Text); ProgramSelection selection = ProgramSelection.FromAppId(int.Parse(e.Node.Name));
if (selection is null) if (selection is null)
{ {
ProgramSelection.FromName(e.Node.Parent.Text).ToggleDlc(e.Node.Text, e.Node.Checked); ProgramSelection.FromAppId(int.Parse(e.Node.Parent.Name)).ToggleDlc(int.Parse(e.Node.Name), e.Node.Checked);
e.Node.Parent.Checked = e.Node.Parent.Nodes.Cast<TreeNode>().ToList().Any(treeNode => treeNode.Checked); e.Node.Parent.Checked = e.Node.Parent.Nodes.Cast<TreeNode>().ToList().Any(treeNode => treeNode.Checked);
} }
else else
@ -347,8 +376,8 @@ namespace CreamInstaller
{ {
if (e.Button == MouseButtons.Right) if (e.Button == MouseButtons.Right)
{ {
ProgramSelection selection = ProgramSelection.FromName(e.Node.Text); ProgramSelection selection = ProgramSelection.FromAppId(int.Parse(e.Node.Name));
KeyValuePair<int, string>? dlc = ProgramSelection.GetDlc(e.Node.Text); KeyValuePair<int, string>? dlc = ProgramSelection.GetAllSteamDlc(int.Parse(e.Node.Name));
int appId = selection?.SteamAppId ?? dlc?.Key ?? 0; int appId = selection?.SteamAppId ?? dlc?.Key ?? 0;
if (appId > 0) Process.Start(new ProcessStartInfo if (appId > 0) Process.Start(new ProcessStartInfo
{ {
@ -371,7 +400,7 @@ namespace CreamInstaller
private static void PopulateParadoxLauncherDlc(ProgramSelection paradoxLauncher = null) private static void PopulateParadoxLauncherDlc(ProgramSelection paradoxLauncher = null)
{ {
paradoxLauncher ??= ProgramSelection.FromName("Paradox Launcher"); paradoxLauncher ??= ProgramSelection.FromAppId(0);
if (!(paradoxLauncher is null)) if (!(paradoxLauncher is null))
{ {
paradoxLauncher.ExtraSteamAppIdDlc.Clear(); paradoxLauncher.ExtraSteamAppIdDlc.Clear();
@ -395,7 +424,7 @@ namespace CreamInstaller
private static bool ParadoxLauncherDlcDialog(Form form) private static bool ParadoxLauncherDlcDialog(Form form)
{ {
ProgramSelection paradoxLauncher = ProgramSelection.FromName("Paradox Launcher"); ProgramSelection paradoxLauncher = ProgramSelection.FromAppId(0);
if (!(paradoxLauncher is null) && paradoxLauncher.Enabled) if (!(paradoxLauncher is null) && paradoxLauncher.Enabled)
{ {
PopulateParadoxLauncherDlc(paradoxLauncher); PopulateParadoxLauncherDlc(paradoxLauncher);
@ -427,11 +456,9 @@ namespace CreamInstaller
if (installForm.Reselecting) if (installForm.Reselecting)
{ {
foreach (TreeNode treeNode in treeNodes) foreach (TreeNode treeNode in treeNodes)
if (!(treeNode.Parent is null) || treeNode.Text == "Paradox Launcher") if (!(treeNode.Parent is null) || int.Parse(treeNode.Name) == 0)
OnTreeViewNodeCheckedChanged(null, new(treeNode, TreeViewAction.ByMouse)); OnTreeViewNodeCheckedChanged(null, new(treeNode, TreeViewAction.ByMouse));
int X = installForm.Location.X + installForm.Size.Width / 2 - Size.Width / 2; this.InheritLocation(installForm);
int Y = installForm.Location.Y + installForm.Size.Height / 2 - Size.Height / 2;
Location = new(X, Y);
Show(); Show();
} }
else else

View file

@ -37,6 +37,7 @@ namespace CreamInstaller
{ {
if (ExceptionHandler.OutputException(e)) goto retry; if (ExceptionHandler.OutputException(e)) goto retry;
Application.Exit(); Application.Exit();
return;
} }
} }
mutex.Close(); mutex.Close();
@ -90,5 +91,12 @@ namespace CreamInstaller
} }
private static void OnApplicationExit(object s, EventArgs e) => Cleanup(); private static void OnApplicationExit(object s, EventArgs e) => Cleanup();
internal static void InheritLocation(this Form form, Form fromForm)
{
int X = fromForm.Location.X + fromForm.Size.Width / 2 - form.Size.Width / 2;
int Y = fromForm.Location.Y + fromForm.Size.Height / 2 - form.Size.Height / 2;
form.Location = new(X, Y);
}
} }
} }