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;
public void ToggleDlc(string dlcName, bool enabled)
public void ToggleDlc(int dlcAppId, bool enabled)
{
foreach (KeyValuePair<int, string> dlcApp in AllSteamDlc)
{
if (dlcApp.Value == dlcName)
if (dlcApp.Key == dlcAppId)
{
Toggle(dlcApp, enabled);
break;
@ -64,13 +64,13 @@ namespace CreamInstaller
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 (KeyValuePair<int, string> app in selection.AllSteamDlc)
if (app.Value == displayName) return app;
if (app.Key == appId) return app;
return null;
}
}

View file

@ -44,7 +44,7 @@ namespace CreamInstaller
| System.Windows.Forms.AnchorStyles.Right)));
this.userProgressBar.Location = new System.Drawing.Point(12, 27);
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;
//
// userInfoLabel
@ -53,7 +53,7 @@ namespace CreamInstaller
| System.Windows.Forms.AnchorStyles.Right)));
this.userInfoLabel.Location = new System.Drawing.Point(12, 9);
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.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.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.Size = new System.Drawing.Size(75, 23);
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.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.Size = new System.Drawing.Size(75, 23);
this.retryButton.TabIndex = 3;
@ -84,7 +84,7 @@ namespace CreamInstaller
// cancelButton
//
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.Size = new System.Drawing.Size(75, 23);
this.cancelButton.TabIndex = 1;
@ -102,17 +102,17 @@ namespace CreamInstaller
this.logTextBox.Name = "logTextBox";
this.logTextBox.ReadOnly = true;
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.TabStop = false;
this.logTextBox.Text = "";
//
// reselectButton
//
this.reselectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.reselectButton.Location = new System.Drawing.Point(135, 286);
this.reselectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.reselectButton.Location = new System.Drawing.Point(410, 526);
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.Text = "Reselect Programs / Games";
this.reselectButton.UseVisualStyleBackColor = true;
@ -122,7 +122,7 @@ namespace CreamInstaller
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
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.logTextBox);
this.Controls.Add(this.cancelButton);
@ -133,7 +133,7 @@ namespace CreamInstaller
this.DoubleBuffered = true;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(540, 360);
this.MinimumSize = new System.Drawing.Size(600, 400);
this.Name = "InstallForm";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
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!",
"Ignore", "Abort") == DialogResult.Cancel)
{
Environment.Exit(0);
Application.Exit();
return;
}
}
OnLoad();
@ -194,6 +195,7 @@ namespace CreamInstaller
{
updateManager.LaunchUpdater(latestVersion);
Application.Exit();
return;
}
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.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.Size = new System.Drawing.Size(150, 23);
this.acceptButton.TabIndex = 102;
this.acceptButton.TabIndex = 10002;
this.acceptButton.Text = "Generate and Install";
this.acceptButton.UseVisualStyleBackColor = true;
this.acceptButton.Click += new System.EventHandler(this.OnAccept);
@ -59,10 +59,10 @@ namespace CreamInstaller
// cancelButton
//
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.Size = new System.Drawing.Size(75, 23);
this.cancelButton.TabIndex = 100;
this.cancelButton.TabIndex = 10000;
this.cancelButton.Text = "Cancel";
this.cancelButton.UseVisualStyleBackColor = true;
this.cancelButton.Click += new System.EventHandler(this.OnCancel);
@ -84,7 +84,7 @@ namespace CreamInstaller
this.groupBox1.Controls.Add(this.allCheckBox);
this.groupBox1.Location = new System.Drawing.Point(12, 12);
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.TabStop = false;
this.groupBox1.Text = "Programs / Games";
@ -96,7 +96,7 @@ namespace CreamInstaller
| System.Windows.Forms.AnchorStyles.Right)));
this.noneFoundLabel.Location = new System.Drawing.Point(6, 22);
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.Text = "No CreamAPI-applicable programs were found on your computer!";
this.noneFoundLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@ -115,7 +115,7 @@ namespace CreamInstaller
this.treeView1.HotTracking = true;
this.treeView1.Location = new System.Drawing.Point(6, 22);
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;
//
// 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.AutoSize = true;
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.Size = new System.Drawing.Size(40, 19);
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)
| 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.Size = new System.Drawing.Size(460, 23);
this.progressBar1.Size = new System.Drawing.Size(560, 23);
this.progressBar1.TabIndex = 9;
//
// label2
//
this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| 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.Size = new System.Drawing.Size(460, 15);
this.label2.Size = new System.Drawing.Size(760, 15);
this.label2.TabIndex = 10;
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.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.Size = new System.Drawing.Size(190, 23);
this.scanButton.TabIndex = 101;
this.scanButton.Text = "Rescan for Programs / Games";
this.scanButton.Size = new System.Drawing.Size(180, 23);
this.scanButton.TabIndex = 10001;
this.scanButton.Text = "Rescan Programs / Games";
this.scanButton.UseVisualStyleBackColor = true;
this.scanButton.Click += new System.EventHandler(this.OnScan);
//
@ -166,7 +166,7 @@ namespace CreamInstaller
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
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.groupBox1);
this.Controls.Add(this.progressBar1);
@ -177,7 +177,7 @@ namespace CreamInstaller
this.DoubleBuffered = true;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(500, 328);
this.MinimumSize = new System.Drawing.Size(600, 400);
this.Name = "SelectForm";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;

View file

@ -9,6 +9,7 @@ using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
@ -150,7 +151,7 @@ namespace CreamInstaller
{
if (Program.Canceled || !GetDllDirectoriesFromGameDirectory(directory, out List<string> dllDirectories)) return;
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;
ConcurrentDictionary<int, string> dlc = new();
List<Task> dlcTasks = new();
@ -166,8 +167,8 @@ namespace CreamInstaller
string dlcName = null;
if (SteamCMD.GetAppInfo(id, out VProperty dlcAppInfo)) dlcName = dlcAppInfo?.Value?["common"]?["name"]?.ToString();
if (Program.Canceled) return;
if (string.IsNullOrWhiteSpace(dlcName)) return;
dlc[id] = dlcName;
if (string.IsNullOrWhiteSpace(dlcName)) return; //dlcName = "Unknown DLC";
dlc[id] = /*$"[{id}] " +*/ dlcName;
progress.Report(++cur);
});
dlcTasks.Add(task);
@ -175,13 +176,13 @@ namespace CreamInstaller
}
progress.Report(-RunningTasks.Count);
}
else if (name != "Paradox Launcher") return;
else if (appId > 0) return;
if (Program.Canceled) return;
if (string.IsNullOrWhiteSpace(name)) return;
if (Program.Canceled) return;
ProgramSelection selection = ProgramSelection.FromName(name) ?? new();
ProgramSelection selection = ProgramSelection.FromAppId(appId) ?? new();
selection.Name = name;
selection.RootDirectory = directory;
selection.SteamAppId = appId;
@ -197,22 +198,22 @@ namespace CreamInstaller
treeView1.Invoke((MethodInvoker)delegate
{
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.Text = name;
programNode.Text = /*(appId > 0 ? $"[{appId}] " : "") +*/ name;
programNode.Checked = selection.Enabled;
programNode.Remove();
treeView1.Nodes.Add(programNode);
treeNodes.Remove(programNode);
treeNodes.Add(programNode);
if (name == "Paradox Launcher")
if (appId == 0) // paradox launcher
{
// maybe add game and/or dlc choice here?
}
else foreach (KeyValuePair<int, string> dlcApp in dlc.ToList())
{
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.Text = dlcApp.Value;
dlcNode.Checked = selection.SelectedSteamDlc.Contains(dlcApp);
@ -235,6 +236,11 @@ namespace CreamInstaller
task.Wait();
}
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()
@ -283,13 +289,7 @@ namespace CreamInstaller
setup = false;
label2.Text = "Gathering and caching your applicable games and their DLCs . . . ";
await Task.Run(() => GetCreamApiApplicablePrograms(iProgress));
treeView1.Sort();
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();
//SetMinimumSizeFromTreeView();
progressBar1.Value = 100;
groupBox1.Size = new(groupBox1.Size.Width, groupBox1.Size.Height + 44);
@ -305,13 +305,42 @@ namespace CreamInstaller
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)
{
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)
{
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);
}
else
@ -347,8 +376,8 @@ namespace CreamInstaller
{
if (e.Button == MouseButtons.Right)
{
ProgramSelection selection = ProgramSelection.FromName(e.Node.Text);
KeyValuePair<int, string>? dlc = ProgramSelection.GetDlc(e.Node.Text);
ProgramSelection selection = ProgramSelection.FromAppId(int.Parse(e.Node.Name));
KeyValuePair<int, string>? dlc = ProgramSelection.GetAllSteamDlc(int.Parse(e.Node.Name));
int appId = selection?.SteamAppId ?? dlc?.Key ?? 0;
if (appId > 0) Process.Start(new ProcessStartInfo
{
@ -371,7 +400,7 @@ namespace CreamInstaller
private static void PopulateParadoxLauncherDlc(ProgramSelection paradoxLauncher = null)
{
paradoxLauncher ??= ProgramSelection.FromName("Paradox Launcher");
paradoxLauncher ??= ProgramSelection.FromAppId(0);
if (!(paradoxLauncher is null))
{
paradoxLauncher.ExtraSteamAppIdDlc.Clear();
@ -395,7 +424,7 @@ namespace CreamInstaller
private static bool ParadoxLauncherDlcDialog(Form form)
{
ProgramSelection paradoxLauncher = ProgramSelection.FromName("Paradox Launcher");
ProgramSelection paradoxLauncher = ProgramSelection.FromAppId(0);
if (!(paradoxLauncher is null) && paradoxLauncher.Enabled)
{
PopulateParadoxLauncherDlc(paradoxLauncher);
@ -427,11 +456,9 @@ namespace CreamInstaller
if (installForm.Reselecting)
{
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));
int X = installForm.Location.X + installForm.Size.Width / 2 - Size.Width / 2;
int Y = installForm.Location.Y + installForm.Size.Height / 2 - Size.Height / 2;
Location = new(X, Y);
this.InheritLocation(installForm);
Show();
}
else

View file

@ -37,6 +37,7 @@ namespace CreamInstaller
{
if (ExceptionHandler.OutputException(e)) goto retry;
Application.Exit();
return;
}
}
mutex.Close();
@ -90,5 +91,12 @@ namespace CreamInstaller
}
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);
}
}
}