- Fixed an exception caused by multiple games having the same DLC ID
- Changed all buttons and bars to standard flatstyles to help get rid of system-specific sizing and clipping issues
- Refreshing queries now update the underlying objects and nodes
- Fixed a rare NRE exception
- Minor refactoring
This commit is contained in:
pointfeev 2023-06-30 21:48:04 -04:00
parent 6841bd64fa
commit a2bd00c287
22 changed files with 1034 additions and 706 deletions

View file

@ -89,8 +89,8 @@ internal sealed class CustomTreeView : TreeView
string text;
if (dlcType is not DLCType.None)
{
SelectionDLC dlc = SelectionDLC.FromTypeId(dlcType, id);
text = dlc is not null ? dlc.Selection.Platform.ToString() : dlcType.ToString();
SelectionDLC dlc = SelectionDLC.FromId(dlcType, node.Parent?.Name, id);
text = dlc?.Selection != null ? dlc.Selection.Platform.ToString() : dlcType.ToString();
}
else
text = platform.ToString();
@ -118,7 +118,7 @@ internal sealed class CustomTreeView : TreeView
}
if (form is SelectForm)
{
Selection selection = Selection.FromPlatformId(platform, id);
Selection selection = Selection.FromId(platform, id);
if (selection is not null)
{
if (bounds == node.Bounds)

View file

@ -4,7 +4,7 @@
<TargetFramework>net7.0-windows</TargetFramework>
<UseWindowsForms>True</UseWindowsForms>
<ApplicationIcon>Resources\ini.ico</ApplicationIcon>
<Version>4.9.6</Version>
<Version>4.9.7</Version>
<Copyright>2021, pointfeev (https://github.com/pointfeev)</Copyright>
<Company>CreamInstaller</Company>
<Product>Automatic DLC Unlocker Installer &amp; Configuration Generator</Product>

View file

@ -31,39 +31,38 @@ partial class DebugForm
/// </summary>
private void InitializeComponent()
{
this.debugTextBox = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
//
// debugTextBox
//
this.debugTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.debugTextBox.Location = new System.Drawing.Point(10, 10);
this.debugTextBox.Name = "debugTextBox";
this.debugTextBox.ReadOnly = true;
this.debugTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedBoth;
this.debugTextBox.Size = new System.Drawing.Size(544, 321);
this.debugTextBox.TabIndex = 0;
this.debugTextBox.TabStop = false;
this.debugTextBox.Text = "";
//
// DebugForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(564, 341);
this.ControlBox = false;
this.Controls.Add(this.debugTextBox);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "DebugForm";
this.Padding = new System.Windows.Forms.Padding(10);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.Text = "Debug";
this.ResumeLayout(false);
debugTextBox = new RichTextBox();
SuspendLayout();
//
// debugTextBox
//
debugTextBox.Dock = DockStyle.Fill;
debugTextBox.Location = new System.Drawing.Point(10, 10);
debugTextBox.Name = "debugTextBox";
debugTextBox.ReadOnly = true;
debugTextBox.ScrollBars = RichTextBoxScrollBars.ForcedBoth;
debugTextBox.Size = new System.Drawing.Size(540, 317);
debugTextBox.TabIndex = 0;
debugTextBox.TabStop = false;
debugTextBox.Text = "";
//
// DebugForm
//
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new System.Drawing.Size(560, 337);
ControlBox = false;
Controls.Add(debugTextBox);
FormBorderStyle = FormBorderStyle.FixedSingle;
MaximizeBox = false;
MinimizeBox = false;
Name = "DebugForm";
Padding = new Padding(10);
ShowIcon = false;
ShowInTaskbar = false;
StartPosition = FormStartPosition.Manual;
Text = "Debug";
ResumeLayout(false);
}
#endregion

View file

@ -72,7 +72,7 @@ internal sealed partial class DebugForm : CustomForm
internal void Log(string text, Color color)
{
if (!debugTextBox.Disposing && !debugTextBox.IsDisposed)
debugTextBox.Invoke(() =>
Invoke(() =>
{
if (debugTextBox.Text.Length > 0)
debugTextBox.AppendText(Environment.NewLine, color, true);

View file

@ -1,4 +1,64 @@
<root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">

View file

@ -21,141 +21,137 @@ namespace CreamInstaller.Forms
/// </summary>
private void InitializeComponent()
{
this.cancelButton = new System.Windows.Forms.Button();
this.acceptButton = new System.Windows.Forms.Button();
this.descriptionLabel = new System.Windows.Forms.LinkLabel();
this.icon = new System.Windows.Forms.PictureBox();
this.descriptionPanel = new System.Windows.Forms.FlowLayoutPanel();
this.descriptionLabelPanel = new System.Windows.Forms.FlowLayoutPanel();
this.buttonPanel = new System.Windows.Forms.FlowLayoutPanel();
((System.ComponentModel.ISupportInitialize)(this.icon)).BeginInit();
this.descriptionPanel.SuspendLayout();
this.descriptionLabelPanel.SuspendLayout();
this.buttonPanel.SuspendLayout();
this.SuspendLayout();
cancelButton = new Button();
acceptButton = new Button();
descriptionLabel = new LinkLabel();
icon = new PictureBox();
descriptionPanel = new FlowLayoutPanel();
descriptionLabelPanel = new FlowLayoutPanel();
buttonPanel = new FlowLayoutPanel();
((ISupportInitialize)icon).BeginInit();
descriptionPanel.SuspendLayout();
descriptionLabelPanel.SuspendLayout();
buttonPanel.SuspendLayout();
SuspendLayout();
//
// cancelButton
//
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
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(132, 9);
this.cancelButton.Name = "cancelButton";
this.cancelButton.Padding = new System.Windows.Forms.Padding(12, 0, 12, 0);
this.cancelButton.Size = new System.Drawing.Size(115, 24);
this.cancelButton.TabIndex = 1;
this.cancelButton.Text = "cancelButton";
this.cancelButton.UseVisualStyleBackColor = true;
cancelButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
cancelButton.AutoSize = true;
cancelButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
cancelButton.DialogResult = DialogResult.Cancel;
cancelButton.Location = new System.Drawing.Point(136, 10);
cancelButton.Name = "cancelButton";
cancelButton.Padding = new Padding(12, 0, 12, 0);
cancelButton.Size = new System.Drawing.Size(115, 24);
cancelButton.TabIndex = 1;
cancelButton.Text = "cancelButton";
cancelButton.UseVisualStyleBackColor = true;
//
// 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(253, 9);
this.acceptButton.Name = "acceptButton";
this.acceptButton.Padding = new System.Windows.Forms.Padding(12, 0, 12, 0);
this.acceptButton.Size = new System.Drawing.Size(116, 24);
this.acceptButton.TabIndex = 0;
this.acceptButton.Text = "acceptButton";
this.acceptButton.UseVisualStyleBackColor = true;
acceptButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
acceptButton.AutoSize = true;
acceptButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
acceptButton.DialogResult = DialogResult.OK;
acceptButton.Location = new System.Drawing.Point(257, 9);
acceptButton.Name = "acceptButton";
acceptButton.Padding = new Padding(12, 0, 12, 0);
acceptButton.Size = new System.Drawing.Size(112, 25);
acceptButton.TabIndex = 0;
acceptButton.Text = "acceptButton";
acceptButton.UseVisualStyleBackColor = true;
//
// descriptionLabel
//
this.descriptionLabel.AutoSize = true;
this.descriptionLabel.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.descriptionLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.descriptionLabel.Location = new System.Drawing.Point(9, 0);
this.descriptionLabel.Margin = new System.Windows.Forms.Padding(9, 0, 3, 0);
this.descriptionLabel.Name = "descriptionLabel";
this.descriptionLabel.Size = new System.Drawing.Size(94, 15);
this.descriptionLabel.TabIndex = 2;
this.descriptionLabel.Text = "descriptionLabel";
descriptionLabel.AutoSize = true;
descriptionLabel.LinkArea = new LinkArea(0, 0);
descriptionLabel.Location = new System.Drawing.Point(9, 0);
descriptionLabel.Margin = new Padding(9, 0, 3, 0);
descriptionLabel.Name = "descriptionLabel";
descriptionLabel.Size = new System.Drawing.Size(94, 15);
descriptionLabel.TabIndex = 2;
descriptionLabel.Text = "descriptionLabel";
//
// icon
//
this.icon.Location = new System.Drawing.Point(15, 15);
this.icon.Name = "icon";
this.icon.Size = new System.Drawing.Size(48, 48);
this.icon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.icon.TabIndex = 4;
this.icon.TabStop = false;
icon.Location = new System.Drawing.Point(15, 15);
icon.Name = "icon";
icon.Size = new System.Drawing.Size(48, 48);
icon.SizeMode = PictureBoxSizeMode.AutoSize;
icon.TabIndex = 4;
icon.TabStop = false;
//
// descriptionPanel
//
this.descriptionPanel.AutoSize = true;
this.descriptionPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.descriptionPanel.Controls.Add(this.icon);
this.descriptionPanel.Controls.Add(this.descriptionLabelPanel);
this.descriptionPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.descriptionPanel.Location = new System.Drawing.Point(0, 0);
this.descriptionPanel.Margin = new System.Windows.Forms.Padding(0);
this.descriptionPanel.Name = "descriptionPanel";
this.descriptionPanel.Padding = new System.Windows.Forms.Padding(12, 12, 12, 6);
this.descriptionPanel.Size = new System.Drawing.Size(384, 73);
this.descriptionPanel.TabIndex = 5;
descriptionPanel.AutoSize = true;
descriptionPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
descriptionPanel.Controls.Add(icon);
descriptionPanel.Controls.Add(descriptionLabelPanel);
descriptionPanel.Dock = DockStyle.Fill;
descriptionPanel.Location = new System.Drawing.Point(0, 0);
descriptionPanel.Margin = new Padding(0);
descriptionPanel.Name = "descriptionPanel";
descriptionPanel.Padding = new Padding(12, 12, 12, 6);
descriptionPanel.Size = new System.Drawing.Size(384, 72);
descriptionPanel.TabIndex = 5;
//
// descriptionLabelPanel
//
this.descriptionLabelPanel.AutoScroll = true;
this.descriptionLabelPanel.AutoSize = true;
this.descriptionLabelPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.descriptionLabelPanel.Controls.Add(this.descriptionLabel);
this.descriptionLabelPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.descriptionLabelPanel.Location = new System.Drawing.Point(66, 12);
this.descriptionLabelPanel.Margin = new System.Windows.Forms.Padding(0);
this.descriptionLabelPanel.Name = "descriptionLabelPanel";
this.descriptionLabelPanel.Size = new System.Drawing.Size(106, 54);
this.descriptionLabelPanel.TabIndex = 6;
descriptionLabelPanel.AutoScroll = true;
descriptionLabelPanel.AutoSize = true;
descriptionLabelPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
descriptionLabelPanel.Controls.Add(descriptionLabel);
descriptionLabelPanel.Dock = DockStyle.Fill;
descriptionLabelPanel.Location = new System.Drawing.Point(66, 12);
descriptionLabelPanel.Margin = new Padding(0);
descriptionLabelPanel.Name = "descriptionLabelPanel";
descriptionLabelPanel.Size = new System.Drawing.Size(106, 54);
descriptionLabelPanel.TabIndex = 6;
//
// buttonPanel
//
this.buttonPanel.AutoSize = true;
this.buttonPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.buttonPanel.Controls.Add(this.acceptButton);
this.buttonPanel.Controls.Add(this.cancelButton);
this.buttonPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
this.buttonPanel.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft;
this.buttonPanel.Location = new System.Drawing.Point(0, 73);
this.buttonPanel.Name = "buttonPanel";
this.buttonPanel.Padding = new System.Windows.Forms.Padding(12, 6, 0, 12);
this.buttonPanel.Size = new System.Drawing.Size(384, 48);
this.buttonPanel.TabIndex = 6;
buttonPanel.AutoSize = true;
buttonPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
buttonPanel.Controls.Add(acceptButton);
buttonPanel.Controls.Add(cancelButton);
buttonPanel.Dock = DockStyle.Bottom;
buttonPanel.FlowDirection = FlowDirection.RightToLeft;
buttonPanel.Location = new System.Drawing.Point(0, 72);
buttonPanel.Name = "buttonPanel";
buttonPanel.Padding = new Padding(12, 6, 0, 12);
buttonPanel.Size = new System.Drawing.Size(384, 49);
buttonPanel.TabIndex = 6;
//
// DialogForm
//
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.CancelButton = this.cancelButton;
this.ClientSize = new System.Drawing.Size(384, 121);
this.Controls.Add(this.descriptionPanel);
this.Controls.Add(this.buttonPanel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MaximumSize = new System.Drawing.Size(1600, 900);
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(400, 160);
this.Name = "DialogForm";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "DialogForm";
((System.ComponentModel.ISupportInitialize)(this.icon)).EndInit();
this.descriptionPanel.ResumeLayout(false);
this.descriptionPanel.PerformLayout();
this.descriptionLabelPanel.ResumeLayout(false);
this.descriptionLabelPanel.PerformLayout();
this.buttonPanel.ResumeLayout(false);
this.buttonPanel.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
AcceptButton = acceptButton;
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
CancelButton = cancelButton;
ClientSize = new System.Drawing.Size(384, 121);
Controls.Add(descriptionPanel);
Controls.Add(buttonPanel);
FormBorderStyle = FormBorderStyle.FixedSingle;
MaximizeBox = false;
MaximumSize = new System.Drawing.Size(1600, 900);
MinimizeBox = false;
MinimumSize = new System.Drawing.Size(400, 160);
Name = "DialogForm";
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterParent;
Text = "DialogForm";
((ISupportInitialize)icon).EndInit();
descriptionPanel.ResumeLayout(false);
descriptionPanel.PerformLayout();
descriptionLabelPanel.ResumeLayout(false);
descriptionLabelPanel.PerformLayout();
buttonPanel.ResumeLayout(false);
buttonPanel.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
#endregion

View file

@ -1,4 +1,64 @@
<root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">

View file

@ -21,125 +21,115 @@ namespace CreamInstaller.Forms
/// </summary>
private void InitializeComponent()
{
this.userProgressBar = new System.Windows.Forms.ProgressBar();
this.userInfoLabel = new System.Windows.Forms.Label();
this.acceptButton = new System.Windows.Forms.Button();
this.retryButton = new System.Windows.Forms.Button();
this.cancelButton = new System.Windows.Forms.Button();
this.logTextBox = new System.Windows.Forms.RichTextBox();
this.reselectButton = new System.Windows.Forms.Button();
this.SuspendLayout();
userProgressBar = new ProgressBar();
userInfoLabel = new Label();
acceptButton = new Button();
retryButton = new Button();
cancelButton = new Button();
logTextBox = new RichTextBox();
reselectButton = new Button();
SuspendLayout();
//
// userProgressBar
//
this.userProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| 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(760, 23);
this.userProgressBar.TabIndex = 1;
userProgressBar.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
userProgressBar.Location = new System.Drawing.Point(12, 27);
userProgressBar.Name = "userProgressBar";
userProgressBar.Size = new System.Drawing.Size(760, 23);
userProgressBar.TabIndex = 1;
//
// userInfoLabel
//
this.userInfoLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.userInfoLabel.AutoEllipsis = true;
this.userInfoLabel.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.userInfoLabel.Location = new System.Drawing.Point(12, 9);
this.userInfoLabel.Name = "userInfoLabel";
this.userInfoLabel.Size = new System.Drawing.Size(760, 15);
this.userInfoLabel.TabIndex = 2;
this.userInfoLabel.Text = "Loading . . . ";
userInfoLabel.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
userInfoLabel.AutoEllipsis = true;
userInfoLabel.Location = new System.Drawing.Point(12, 9);
userInfoLabel.Name = "userInfoLabel";
userInfoLabel.Size = new System.Drawing.Size(760, 15);
userInfoLabel.TabIndex = 2;
userInfoLabel.Text = "Loading . . . ";
//
// acceptButton
//
this.acceptButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.acceptButton.Enabled = false;
this.acceptButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
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;
this.acceptButton.Text = "OK";
this.acceptButton.UseVisualStyleBackColor = true;
this.acceptButton.Click += new System.EventHandler(this.OnAccept);
acceptButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
acceptButton.Enabled = false;
acceptButton.Location = new System.Drawing.Point(697, 526);
acceptButton.Name = "acceptButton";
acceptButton.Size = new System.Drawing.Size(75, 23);
acceptButton.TabIndex = 4;
acceptButton.Text = "OK";
acceptButton.UseVisualStyleBackColor = true;
acceptButton.Click += OnAccept;
//
// retryButton
//
this.retryButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.retryButton.Enabled = false;
this.retryButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
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;
this.retryButton.Text = "Retry";
this.retryButton.UseVisualStyleBackColor = true;
this.retryButton.Click += new System.EventHandler(this.OnRetry);
retryButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
retryButton.Enabled = false;
retryButton.Location = new System.Drawing.Point(616, 526);
retryButton.Name = "retryButton";
retryButton.Size = new System.Drawing.Size(75, 23);
retryButton.TabIndex = 3;
retryButton.Text = "Retry";
retryButton.UseVisualStyleBackColor = true;
retryButton.Click += OnRetry;
//
// cancelButton
//
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
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;
this.cancelButton.Text = "Cancel";
this.cancelButton.UseVisualStyleBackColor = true;
this.cancelButton.Click += new System.EventHandler(this.OnCancel);
cancelButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
cancelButton.Location = new System.Drawing.Point(12, 526);
cancelButton.Name = "cancelButton";
cancelButton.Size = new System.Drawing.Size(75, 23);
cancelButton.TabIndex = 1;
cancelButton.Text = "Cancel";
cancelButton.UseVisualStyleBackColor = true;
cancelButton.Click += OnCancel;
//
// logTextBox
//
this.logTextBox.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.logTextBox.HideSelection = false;
this.logTextBox.Location = new System.Drawing.Point(12, 56);
this.logTextBox.Name = "logTextBox";
this.logTextBox.ReadOnly = true;
this.logTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedBoth;
this.logTextBox.Size = new System.Drawing.Size(760, 464);
this.logTextBox.TabIndex = 4;
this.logTextBox.TabStop = false;
this.logTextBox.Text = "";
logTextBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
logTextBox.HideSelection = false;
logTextBox.Location = new System.Drawing.Point(12, 56);
logTextBox.Name = "logTextBox";
logTextBox.ReadOnly = true;
logTextBox.ScrollBars = RichTextBoxScrollBars.ForcedBoth;
logTextBox.Size = new System.Drawing.Size(760, 464);
logTextBox.TabIndex = 4;
logTextBox.TabStop = false;
logTextBox.Text = "";
//
// reselectButton
//
this.reselectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.reselectButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.reselectButton.Location = new System.Drawing.Point(410, 526);
this.reselectButton.Name = "reselectButton";
this.reselectButton.Size = new System.Drawing.Size(200, 23);
this.reselectButton.TabIndex = 2;
this.reselectButton.Text = "Reselect Programs / Games";
this.reselectButton.UseVisualStyleBackColor = true;
this.reselectButton.Click += new System.EventHandler(this.OnReselect);
reselectButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
reselectButton.Location = new System.Drawing.Point(410, 526);
reselectButton.Name = "reselectButton";
reselectButton.Size = new System.Drawing.Size(200, 23);
reselectButton.TabIndex = 2;
reselectButton.Text = "Reselect Programs / Games";
reselectButton.UseVisualStyleBackColor = true;
reselectButton.Click += OnReselect;
//
// InstallForm
//
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(784, 561);
this.Controls.Add(this.reselectButton);
this.Controls.Add(this.logTextBox);
this.Controls.Add(this.cancelButton);
this.Controls.Add(this.retryButton);
this.Controls.Add(this.acceptButton);
this.Controls.Add(this.userProgressBar);
this.Controls.Add(this.userInfoLabel);
this.DoubleBuffered = true;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "InstallForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.Text = "InstallForm";
this.Load += new System.EventHandler(this.OnLoad);
this.ResumeLayout(false);
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
ClientSize = new System.Drawing.Size(784, 561);
Controls.Add(reselectButton);
Controls.Add(logTextBox);
Controls.Add(cancelButton);
Controls.Add(retryButton);
Controls.Add(acceptButton);
Controls.Add(userProgressBar);
Controls.Add(userInfoLabel);
DoubleBuffered = true;
FormBorderStyle = FormBorderStyle.FixedSingle;
MaximizeBox = false;
MinimizeBox = false;
Name = "InstallForm";
StartPosition = FormStartPosition.Manual;
Text = "InstallForm";
Load += OnLoad;
ResumeLayout(false);
}
#endregion

View file

@ -32,7 +32,7 @@ internal sealed partial class InstallForm : CustomForm
private void UpdateProgress(int progress)
{
if (!userProgressBar.Disposing && !userProgressBar.IsDisposed)
userProgressBar.Invoke(() =>
Invoke(() =>
{
int value = (int)((float)completeOperationsCount / operationsCount * 100) + progress / operationsCount;
if (value < userProgressBar.Value)
@ -44,9 +44,9 @@ internal sealed partial class InstallForm : CustomForm
internal void UpdateUser(string text, Color color, bool info = true, bool log = true)
{
if (info)
_ = userInfoLabel.Invoke(() => userInfoLabel.Text = text);
_ = Invoke(() => userInfoLabel.Text = text);
if (log && !logTextBox.Disposing && !logTextBox.IsDisposed)
logTextBox.Invoke(() =>
Invoke(() =>
{
if (logTextBox.Text.Length > 0)
logTextBox.AppendText(Environment.NewLine, color);

View file

@ -1,4 +1,64 @@
<root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">

View file

@ -1,5 +1,6 @@
using System.ComponentModel;
using System.Windows.Forms;
using CreamInstaller.Components;
namespace CreamInstaller.Forms
@ -30,8 +31,8 @@ namespace CreamInstaller.Forms
cancelButton = new Button();
loadButton = new Button();
saveButton = new Button();
selectionTreeView = new CustomTreeView();
uninstallAllButton = new Button();
selectionTreeView = new CustomTreeView();
groupBox.SuspendLayout();
allCheckBoxFlowPanel.SuspendLayout();
SuspendLayout();
@ -42,11 +43,10 @@ namespace CreamInstaller.Forms
acceptButton.AutoSize = true;
acceptButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
acceptButton.DialogResult = DialogResult.OK;
acceptButton.FlatStyle = FlatStyle.System;
acceptButton.Location = new System.Drawing.Point(475, 243);
acceptButton.Location = new System.Drawing.Point(479, 243);
acceptButton.Name = "acceptButton";
acceptButton.Padding = new Padding(12, 0, 12, 0);
acceptButton.Size = new System.Drawing.Size(61, 24);
acceptButton.Size = new System.Drawing.Size(57, 25);
acceptButton.TabIndex = 6;
acceptButton.Text = "OK";
acceptButton.UseVisualStyleBackColor = true;
@ -86,20 +86,20 @@ namespace CreamInstaller.Forms
allCheckBoxFlowPanel.AutoSize = true;
allCheckBoxFlowPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
allCheckBoxFlowPanel.Controls.Add(allCheckBox);
allCheckBoxFlowPanel.Location = new System.Drawing.Point(485, -1);
allCheckBoxFlowPanel.Location = new System.Drawing.Point(477, -1);
allCheckBoxFlowPanel.Margin = new Padding(0);
allCheckBoxFlowPanel.Name = "allCheckBoxFlowPanel";
allCheckBoxFlowPanel.Size = new System.Drawing.Size(34, 19);
allCheckBoxFlowPanel.Size = new System.Drawing.Size(42, 19);
allCheckBoxFlowPanel.TabIndex = 1007;
//
// allCheckBox
//
allCheckBox.Anchor = AnchorStyles.Top | AnchorStyles.Right;
allCheckBox.FlatStyle = FlatStyle.System;
allCheckBox.AutoSize = true;
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.Size = new System.Drawing.Size(40, 19);
allCheckBox.TabIndex = 1;
allCheckBox.Text = "All";
allCheckBox.CheckedChanged += OnAllCheckBoxChanged;
@ -108,11 +108,10 @@ namespace CreamInstaller.Forms
//
sortCheckBox.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
sortCheckBox.AutoSize = true;
sortCheckBox.FlatStyle = FlatStyle.System;
sortCheckBox.Location = new System.Drawing.Point(220, 245);
sortCheckBox.Location = new System.Drawing.Point(220, 247);
sortCheckBox.Margin = new Padding(3, 0, 0, 0);
sortCheckBox.Name = "sortCheckBox";
sortCheckBox.Size = new System.Drawing.Size(104, 20);
sortCheckBox.Size = new System.Drawing.Size(98, 19);
sortCheckBox.TabIndex = 3;
sortCheckBox.Text = "Sort By Name";
sortCheckBox.CheckedChanged += OnSortCheckBoxChanged;
@ -123,11 +122,10 @@ namespace CreamInstaller.Forms
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.Size = new System.Drawing.Size(77, 25);
cancelButton.TabIndex = 2;
cancelButton.Text = "Cancel";
cancelButton.UseVisualStyleBackColor = true;
@ -138,11 +136,10 @@ namespace CreamInstaller.Forms
loadButton.AutoSize = true;
loadButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
loadButton.Enabled = false;
loadButton.FlatStyle = FlatStyle.System;
loadButton.Location = new System.Drawing.Point(398, 243);
loadButton.Location = new System.Drawing.Point(406, 243);
loadButton.Name = "loadButton";
loadButton.Padding = new Padding(12, 0, 12, 0);
loadButton.Size = new System.Drawing.Size(71, 24);
loadButton.Size = new System.Drawing.Size(67, 25);
loadButton.TabIndex = 5;
loadButton.Text = "Load";
loadButton.UseVisualStyleBackColor = true;
@ -154,11 +151,10 @@ namespace CreamInstaller.Forms
saveButton.AutoSize = true;
saveButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
saveButton.Enabled = false;
saveButton.FlatStyle = FlatStyle.System;
saveButton.Location = new System.Drawing.Point(323, 243);
saveButton.Location = new System.Drawing.Point(335, 243);
saveButton.Name = "saveButton";
saveButton.Padding = new Padding(12, 0, 12, 0);
saveButton.Size = new System.Drawing.Size(69, 24);
saveButton.Size = new System.Drawing.Size(65, 25);
saveButton.TabIndex = 4;
saveButton.Text = "Save";
saveButton.UseVisualStyleBackColor = true;
@ -170,11 +166,10 @@ namespace CreamInstaller.Forms
uninstallAllButton.AutoSize = true;
uninstallAllButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
uninstallAllButton.DialogResult = DialogResult.Abort;
uninstallAllButton.FlatStyle = FlatStyle.System;
uninstallAllButton.Location = new System.Drawing.Point(99, 242);
uninstallAllButton.Location = new System.Drawing.Point(95, 243);
uninstallAllButton.Name = "uninstallAllButton";
uninstallAllButton.Padding = new Padding(12, 0, 12, 0);
uninstallAllButton.Size = new System.Drawing.Size(108, 24);
uninstallAllButton.Size = new System.Drawing.Size(104, 25);
uninstallAllButton.TabIndex = 7;
uninstallAllButton.Text = "Uninstall All";
uninstallAllButton.UseVisualStyleBackColor = true;
@ -204,6 +199,7 @@ namespace CreamInstaller.Forms
groupBox.ResumeLayout(false);
groupBox.PerformLayout();
allCheckBoxFlowPanel.ResumeLayout(false);
allCheckBoxFlowPanel.PerformLayout();
ResumeLayout(false);
PerformLayout();
}

View file

@ -1,4 +1,64 @@
<root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">

View file

@ -1,5 +1,6 @@
using System.ComponentModel;
using System.Windows.Forms;
using CreamInstaller.Components;
namespace CreamInstaller.Forms
@ -18,426 +19,409 @@ namespace CreamInstaller.Forms
private void InitializeComponent()
{
this.installButton = new System.Windows.Forms.Button();
this.cancelButton = new System.Windows.Forms.Button();
this.programsGroupBox = new System.Windows.Forms.GroupBox();
this.koaloaderFlowPanel = new System.Windows.Forms.FlowLayoutPanel();
this.koaloaderAllCheckBox = new System.Windows.Forms.CheckBox();
this.noneFoundLabel = new System.Windows.Forms.Label();
this.blockedGamesFlowPanel = new System.Windows.Forms.FlowLayoutPanel();
this.blockedGamesCheckBox = new System.Windows.Forms.CheckBox();
this.blockProtectedHelpButton = new System.Windows.Forms.Button();
this.selectionTreeView = new CreamInstaller.Components.CustomTreeView();
this.allCheckBoxLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
this.allCheckBox = new System.Windows.Forms.CheckBox();
this.progressBar = new System.Windows.Forms.ProgressBar();
this.progressLabel = new System.Windows.Forms.Label();
this.scanButton = new System.Windows.Forms.Button();
this.uninstallButton = new System.Windows.Forms.Button();
this.progressLabelGames = new System.Windows.Forms.Label();
this.progressLabelDLCs = new System.Windows.Forms.Label();
this.sortCheckBox = new System.Windows.Forms.CheckBox();
this.saveButton = new System.Windows.Forms.Button();
this.loadButton = new System.Windows.Forms.Button();
this.resetKoaloaderButton = new System.Windows.Forms.Button();
this.resetButton = new System.Windows.Forms.Button();
this.saveKoaloaderButton = new System.Windows.Forms.Button();
this.loadKoaloaderButton = new System.Windows.Forms.Button();
this.programsGroupBox.SuspendLayout();
this.koaloaderFlowPanel.SuspendLayout();
this.blockedGamesFlowPanel.SuspendLayout();
this.allCheckBoxLayoutPanel.SuspendLayout();
this.SuspendLayout();
installButton = new Button();
cancelButton = new Button();
programsGroupBox = new GroupBox();
koaloaderFlowPanel = new FlowLayoutPanel();
koaloaderAllCheckBox = new CheckBox();
noneFoundLabel = new Label();
blockedGamesFlowPanel = new FlowLayoutPanel();
blockedGamesCheckBox = new CheckBox();
blockProtectedHelpButton = new Button();
allCheckBoxLayoutPanel = new FlowLayoutPanel();
allCheckBox = new CheckBox();
progressBar = new ProgressBar();
progressLabel = new Label();
scanButton = new Button();
uninstallButton = new Button();
progressLabelGames = new Label();
progressLabelDLCs = new Label();
sortCheckBox = new CheckBox();
saveButton = new Button();
loadButton = new Button();
resetKoaloaderButton = new Button();
resetButton = new Button();
saveKoaloaderButton = new Button();
loadKoaloaderButton = new Button();
selectionTreeView = new CustomTreeView();
programsGroupBox.SuspendLayout();
koaloaderFlowPanel.SuspendLayout();
blockedGamesFlowPanel.SuspendLayout();
allCheckBoxLayoutPanel.SuspendLayout();
SuspendLayout();
//
// installButton
//
this.installButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.installButton.AutoSize = true;
this.installButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.installButton.Enabled = false;
this.installButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.installButton.Location = new System.Drawing.Point(423, 325);
this.installButton.Name = "installButton";
this.installButton.Padding = new System.Windows.Forms.Padding(12, 0, 12, 0);
this.installButton.Size = new System.Drawing.Size(149, 24);
this.installButton.TabIndex = 10000;
this.installButton.Text = "Generate and Install";
this.installButton.UseVisualStyleBackColor = true;
this.installButton.Click += new System.EventHandler(this.OnInstall);
installButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
installButton.AutoSize = true;
installButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
installButton.Enabled = false;
installButton.Location = new System.Drawing.Point(427, 326);
installButton.Name = "installButton";
installButton.Padding = new Padding(12, 0, 12, 0);
installButton.Size = new System.Drawing.Size(145, 25);
installButton.TabIndex = 10000;
installButton.Text = "Generate and Install";
installButton.UseVisualStyleBackColor = true;
installButton.Click += OnInstall;
//
// cancelButton
//
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.cancelButton.AutoSize = true;
this.cancelButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.cancelButton.Location = new System.Drawing.Point(12, 325);
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 = 10004;
this.cancelButton.Text = "Cancel";
this.cancelButton.UseVisualStyleBackColor = true;
this.cancelButton.Click += new System.EventHandler(this.OnCancel);
cancelButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
cancelButton.AutoSize = true;
cancelButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
cancelButton.Location = new System.Drawing.Point(12, 326);
cancelButton.Name = "cancelButton";
cancelButton.Padding = new Padding(12, 0, 12, 0);
cancelButton.Size = new System.Drawing.Size(77, 25);
cancelButton.TabIndex = 10004;
cancelButton.Text = "Cancel";
cancelButton.UseVisualStyleBackColor = true;
cancelButton.Click += OnCancel;
//
// programsGroupBox
//
this.programsGroupBox.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.programsGroupBox.Controls.Add(this.koaloaderFlowPanel);
this.programsGroupBox.Controls.Add(this.noneFoundLabel);
this.programsGroupBox.Controls.Add(this.blockedGamesFlowPanel);
this.programsGroupBox.Controls.Add(this.selectionTreeView);
this.programsGroupBox.Controls.Add(this.allCheckBoxLayoutPanel);
this.programsGroupBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.programsGroupBox.Location = new System.Drawing.Point(12, 12);
this.programsGroupBox.Name = "programsGroupBox";
this.programsGroupBox.Size = new System.Drawing.Size(560, 209);
this.programsGroupBox.TabIndex = 8;
this.programsGroupBox.TabStop = false;
this.programsGroupBox.Text = "Programs / Games";
programsGroupBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
programsGroupBox.Controls.Add(koaloaderFlowPanel);
programsGroupBox.Controls.Add(noneFoundLabel);
programsGroupBox.Controls.Add(blockedGamesFlowPanel);
programsGroupBox.Controls.Add(allCheckBoxLayoutPanel);
programsGroupBox.Controls.Add(selectionTreeView);
programsGroupBox.Location = new System.Drawing.Point(12, 12);
programsGroupBox.Name = "programsGroupBox";
programsGroupBox.Size = new System.Drawing.Size(560, 209);
programsGroupBox.TabIndex = 8;
programsGroupBox.TabStop = false;
programsGroupBox.Text = "Programs / Games";
//
// koaloaderFlowPanel
//
this.koaloaderFlowPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.koaloaderFlowPanel.AutoSize = true;
this.koaloaderFlowPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.koaloaderFlowPanel.Controls.Add(this.koaloaderAllCheckBox);
this.koaloaderFlowPanel.Location = new System.Drawing.Point(430, -1);
this.koaloaderFlowPanel.Margin = new System.Windows.Forms.Padding(0);
this.koaloaderFlowPanel.Name = "koaloaderFlowPanel";
this.koaloaderFlowPanel.Size = new System.Drawing.Size(73, 19);
this.koaloaderFlowPanel.TabIndex = 10005;
this.koaloaderFlowPanel.WrapContents = false;
koaloaderFlowPanel.Anchor = AnchorStyles.Top | AnchorStyles.Right;
koaloaderFlowPanel.AutoSize = true;
koaloaderFlowPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
koaloaderFlowPanel.Controls.Add(koaloaderAllCheckBox);
koaloaderFlowPanel.Location = new System.Drawing.Point(422, -1);
koaloaderFlowPanel.Margin = new Padding(0);
koaloaderFlowPanel.Name = "koaloaderFlowPanel";
koaloaderFlowPanel.Size = new System.Drawing.Size(81, 19);
koaloaderFlowPanel.TabIndex = 10005;
koaloaderFlowPanel.WrapContents = false;
//
// koaloaderAllCheckBox
//
this.koaloaderAllCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.koaloaderAllCheckBox.Checked = true;
this.koaloaderAllCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
this.koaloaderAllCheckBox.Enabled = false;
this.koaloaderAllCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.koaloaderAllCheckBox.Location = new System.Drawing.Point(2, 0);
this.koaloaderAllCheckBox.Margin = new System.Windows.Forms.Padding(2, 0, 0, 0);
this.koaloaderAllCheckBox.Name = "koaloaderAllCheckBox";
this.koaloaderAllCheckBox.Size = new System.Drawing.Size(71, 19);
this.koaloaderAllCheckBox.TabIndex = 4;
this.koaloaderAllCheckBox.Text = "Koaloader";
this.koaloaderAllCheckBox.CheckedChanged += new System.EventHandler(this.OnKoaloaderAllCheckBoxChanged);
koaloaderAllCheckBox.Anchor = AnchorStyles.Top | AnchorStyles.Right;
koaloaderAllCheckBox.AutoSize = true;
koaloaderAllCheckBox.Checked = true;
koaloaderAllCheckBox.CheckState = CheckState.Checked;
koaloaderAllCheckBox.Enabled = false;
koaloaderAllCheckBox.Location = new System.Drawing.Point(2, 0);
koaloaderAllCheckBox.Margin = new Padding(2, 0, 0, 0);
koaloaderAllCheckBox.Name = "koaloaderAllCheckBox";
koaloaderAllCheckBox.Size = new System.Drawing.Size(79, 19);
koaloaderAllCheckBox.TabIndex = 4;
koaloaderAllCheckBox.Text = "Koaloader";
koaloaderAllCheckBox.CheckedChanged += OnKoaloaderAllCheckBoxChanged;
//
// noneFoundLabel
//
this.noneFoundLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.noneFoundLabel.Location = new System.Drawing.Point(3, 19);
this.noneFoundLabel.Name = "noneFoundLabel";
this.noneFoundLabel.Size = new System.Drawing.Size(554, 187);
this.noneFoundLabel.TabIndex = 1002;
this.noneFoundLabel.Text = "No applicable programs nor games were found on your computer!";
this.noneFoundLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.noneFoundLabel.Visible = false;
noneFoundLabel.Dock = DockStyle.Fill;
noneFoundLabel.Location = new System.Drawing.Point(3, 19);
noneFoundLabel.Name = "noneFoundLabel";
noneFoundLabel.Size = new System.Drawing.Size(554, 187);
noneFoundLabel.TabIndex = 1002;
noneFoundLabel.Text = "No applicable programs nor games were found on your computer!";
noneFoundLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
noneFoundLabel.Visible = false;
//
// blockedGamesFlowPanel
//
this.blockedGamesFlowPanel.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.blockedGamesFlowPanel.AutoSize = true;
this.blockedGamesFlowPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.blockedGamesFlowPanel.Controls.Add(this.blockedGamesCheckBox);
this.blockedGamesFlowPanel.Controls.Add(this.blockProtectedHelpButton);
this.blockedGamesFlowPanel.Location = new System.Drawing.Point(125, -1);
this.blockedGamesFlowPanel.Margin = new System.Windows.Forms.Padding(0);
this.blockedGamesFlowPanel.Name = "blockedGamesFlowPanel";
this.blockedGamesFlowPanel.Size = new System.Drawing.Size(162, 20);
this.blockedGamesFlowPanel.TabIndex = 1005;
this.blockedGamesFlowPanel.WrapContents = false;
blockedGamesFlowPanel.Anchor = AnchorStyles.Top;
blockedGamesFlowPanel.AutoSize = true;
blockedGamesFlowPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
blockedGamesFlowPanel.Controls.Add(blockedGamesCheckBox);
blockedGamesFlowPanel.Controls.Add(blockProtectedHelpButton);
blockedGamesFlowPanel.Location = new System.Drawing.Point(125, -1);
blockedGamesFlowPanel.Margin = new Padding(0);
blockedGamesFlowPanel.Name = "blockedGamesFlowPanel";
blockedGamesFlowPanel.Size = new System.Drawing.Size(170, 19);
blockedGamesFlowPanel.TabIndex = 1005;
blockedGamesFlowPanel.WrapContents = false;
//
// blockedGamesCheckBox
//
this.blockedGamesCheckBox.Checked = true;
this.blockedGamesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
this.blockedGamesCheckBox.Enabled = false;
this.blockedGamesCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.blockedGamesCheckBox.Location = new System.Drawing.Point(2, 0);
this.blockedGamesCheckBox.Margin = new System.Windows.Forms.Padding(2, 0, 0, 0);
this.blockedGamesCheckBox.Name = "blockedGamesCheckBox";
this.blockedGamesCheckBox.Size = new System.Drawing.Size(140, 20);
this.blockedGamesCheckBox.TabIndex = 1;
this.blockedGamesCheckBox.Text = "Block Protected Games";
this.blockedGamesCheckBox.UseVisualStyleBackColor = true;
this.blockedGamesCheckBox.CheckedChanged += new System.EventHandler(this.OnBlockProtectedGamesCheckBoxChanged);
blockedGamesCheckBox.AutoSize = true;
blockedGamesCheckBox.Checked = true;
blockedGamesCheckBox.CheckState = CheckState.Checked;
blockedGamesCheckBox.Enabled = false;
blockedGamesCheckBox.Location = new System.Drawing.Point(2, 0);
blockedGamesCheckBox.Margin = new Padding(2, 0, 0, 0);
blockedGamesCheckBox.Name = "blockedGamesCheckBox";
blockedGamesCheckBox.Size = new System.Drawing.Size(148, 19);
blockedGamesCheckBox.TabIndex = 1;
blockedGamesCheckBox.Text = "Block Protected Games";
blockedGamesCheckBox.UseVisualStyleBackColor = true;
blockedGamesCheckBox.CheckedChanged += OnBlockProtectedGamesCheckBoxChanged;
//
// blockProtectedHelpButton
//
this.blockProtectedHelpButton.Enabled = false;
this.blockProtectedHelpButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.blockProtectedHelpButton.Font = new System.Drawing.Font("Segoe UI", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.blockProtectedHelpButton.Location = new System.Drawing.Point(142, 0);
this.blockProtectedHelpButton.Margin = new System.Windows.Forms.Padding(0, 0, 1, 0);
this.blockProtectedHelpButton.Name = "blockProtectedHelpButton";
this.blockProtectedHelpButton.Size = new System.Drawing.Size(19, 19);
this.blockProtectedHelpButton.TabIndex = 2;
this.blockProtectedHelpButton.Text = "?";
this.blockProtectedHelpButton.UseVisualStyleBackColor = true;
this.blockProtectedHelpButton.Click += new System.EventHandler(this.OnBlockProtectedGamesHelpButtonClicked);
blockProtectedHelpButton.Enabled = false;
blockProtectedHelpButton.Font = new System.Drawing.Font("Segoe UI", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
blockProtectedHelpButton.Location = new System.Drawing.Point(150, 0);
blockProtectedHelpButton.Margin = new Padding(0, 0, 1, 0);
blockProtectedHelpButton.Name = "blockProtectedHelpButton";
blockProtectedHelpButton.Size = new System.Drawing.Size(19, 19);
blockProtectedHelpButton.TabIndex = 2;
blockProtectedHelpButton.Text = "?";
blockProtectedHelpButton.UseVisualStyleBackColor = true;
blockProtectedHelpButton.Click += OnBlockProtectedGamesHelpButtonClicked;
//
// 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.Enabled = false;
this.selectionTreeView.FullRowSelect = true;
this.selectionTreeView.Location = new System.Drawing.Point(3, 19);
this.selectionTreeView.Name = "selectionTreeView";
this.selectionTreeView.Size = new System.Drawing.Size(554, 187);
this.selectionTreeView.Sorted = true;
this.selectionTreeView.TabIndex = 1001;
selectionTreeView.BackColor = System.Drawing.SystemColors.Control;
selectionTreeView.BorderStyle = System.Windows.Forms.BorderStyle.None;
selectionTreeView.CheckBoxes = true;
selectionTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
selectionTreeView.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll;
selectionTreeView.Enabled = false;
selectionTreeView.FullRowSelect = true;
selectionTreeView.Location = new System.Drawing.Point(3, 19);
selectionTreeView.Name = "selectionTreeView";
selectionTreeView.Size = new System.Drawing.Size(554, 187);
selectionTreeView.Sorted = true;
selectionTreeView.TabIndex = 1001;
//
// allCheckBoxLayoutPanel
//
this.allCheckBoxLayoutPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.allCheckBoxLayoutPanel.AutoSize = true;
this.allCheckBoxLayoutPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.allCheckBoxLayoutPanel.Controls.Add(this.allCheckBox);
this.allCheckBoxLayoutPanel.Location = new System.Drawing.Point(520, -1);
this.allCheckBoxLayoutPanel.Margin = new System.Windows.Forms.Padding(0);
this.allCheckBoxLayoutPanel.Name = "allCheckBoxLayoutPanel";
this.allCheckBoxLayoutPanel.Size = new System.Drawing.Size(34, 19);
this.allCheckBoxLayoutPanel.TabIndex = 1006;
this.allCheckBoxLayoutPanel.WrapContents = false;
allCheckBoxLayoutPanel.Anchor = AnchorStyles.Top | AnchorStyles.Right;
allCheckBoxLayoutPanel.AutoSize = true;
allCheckBoxLayoutPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
allCheckBoxLayoutPanel.Controls.Add(allCheckBox);
allCheckBoxLayoutPanel.Location = new System.Drawing.Point(512, -1);
allCheckBoxLayoutPanel.Margin = new Padding(0);
allCheckBoxLayoutPanel.Name = "allCheckBoxLayoutPanel";
allCheckBoxLayoutPanel.Size = new System.Drawing.Size(42, 19);
allCheckBoxLayoutPanel.TabIndex = 1006;
allCheckBoxLayoutPanel.WrapContents = false;
//
// allCheckBox
//
this.allCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.allCheckBox.Checked = true;
this.allCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
this.allCheckBox.Enabled = false;
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 = 4;
this.allCheckBox.Text = "All";
this.allCheckBox.CheckedChanged += new System.EventHandler(this.OnAllCheckBoxChanged);
allCheckBox.Anchor = AnchorStyles.Top | AnchorStyles.Right;
allCheckBox.AutoSize = true;
allCheckBox.Checked = true;
allCheckBox.CheckState = CheckState.Checked;
allCheckBox.Enabled = false;
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(40, 19);
allCheckBox.TabIndex = 4;
allCheckBox.Text = "All";
allCheckBox.CheckedChanged += OnAllCheckBoxChanged;
//
// progressBar
//
this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.progressBar.Location = new System.Drawing.Point(12, 266);
this.progressBar.Name = "progressBar";
this.progressBar.Size = new System.Drawing.Size(560, 23);
this.progressBar.TabIndex = 9;
progressBar.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
progressBar.Location = new System.Drawing.Point(12, 266);
progressBar.Name = "progressBar";
progressBar.Size = new System.Drawing.Size(560, 23);
progressBar.TabIndex = 9;
//
// progressLabel
//
this.progressLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.progressLabel.Location = new System.Drawing.Point(12, 224);
this.progressLabel.Name = "progressLabel";
this.progressLabel.Size = new System.Drawing.Size(560, 15);
this.progressLabel.TabIndex = 10;
this.progressLabel.Text = "Gathering and caching your applicable games and their DLCs . . . 0%";
progressLabel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
progressLabel.Location = new System.Drawing.Point(12, 224);
progressLabel.Name = "progressLabel";
progressLabel.Size = new System.Drawing.Size(560, 15);
progressLabel.TabIndex = 10;
progressLabel.Text = "Gathering and caching your applicable games and their DLCs . . . 0%";
//
// scanButton
//
this.scanButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.scanButton.AutoSize = true;
this.scanButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.scanButton.Enabled = false;
this.scanButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.scanButton.Location = new System.Drawing.Point(238, 325);
this.scanButton.Name = "scanButton";
this.scanButton.Padding = new System.Windows.Forms.Padding(12, 0, 12, 0);
this.scanButton.Size = new System.Drawing.Size(82, 24);
this.scanButton.TabIndex = 10002;
this.scanButton.Text = "Rescan";
this.scanButton.UseVisualStyleBackColor = true;
this.scanButton.Click += new System.EventHandler(this.OnScan);
scanButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
scanButton.AutoSize = true;
scanButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
scanButton.Enabled = false;
scanButton.Location = new System.Drawing.Point(250, 326);
scanButton.Name = "scanButton";
scanButton.Padding = new Padding(12, 0, 12, 0);
scanButton.Size = new System.Drawing.Size(78, 25);
scanButton.TabIndex = 10002;
scanButton.Text = "Rescan";
scanButton.UseVisualStyleBackColor = true;
scanButton.Click += OnScan;
//
// uninstallButton
//
this.uninstallButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.uninstallButton.AutoSize = true;
this.uninstallButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.uninstallButton.Enabled = false;
this.uninstallButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.uninstallButton.Location = new System.Drawing.Point(326, 325);
this.uninstallButton.Name = "uninstallButton";
this.uninstallButton.Padding = new System.Windows.Forms.Padding(12, 0, 12, 0);
this.uninstallButton.Size = new System.Drawing.Size(91, 24);
this.uninstallButton.TabIndex = 10001;
this.uninstallButton.Text = "Uninstall";
this.uninstallButton.UseVisualStyleBackColor = true;
this.uninstallButton.Click += new System.EventHandler(this.OnUninstall);
uninstallButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
uninstallButton.AutoSize = true;
uninstallButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
uninstallButton.Enabled = false;
uninstallButton.Location = new System.Drawing.Point(334, 326);
uninstallButton.Name = "uninstallButton";
uninstallButton.Padding = new Padding(12, 0, 12, 0);
uninstallButton.Size = new System.Drawing.Size(87, 25);
uninstallButton.TabIndex = 10001;
uninstallButton.Text = "Uninstall";
uninstallButton.UseVisualStyleBackColor = true;
uninstallButton.Click += OnUninstall;
//
// progressLabelGames
//
this.progressLabelGames.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.progressLabelGames.Font = new System.Drawing.Font("Segoe UI", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.progressLabelGames.Location = new System.Drawing.Point(12, 239);
this.progressLabelGames.Name = "progressLabelGames";
this.progressLabelGames.Size = new System.Drawing.Size(560, 12);
this.progressLabelGames.TabIndex = 11;
this.progressLabelGames.Text = "Remaining games (2): Game 1, Game 2";
progressLabelGames.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
progressLabelGames.Font = new System.Drawing.Font("Segoe UI", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
progressLabelGames.Location = new System.Drawing.Point(12, 239);
progressLabelGames.Name = "progressLabelGames";
progressLabelGames.Size = new System.Drawing.Size(560, 12);
progressLabelGames.TabIndex = 11;
progressLabelGames.Text = "Remaining games (2): Game 1, Game 2";
//
// progressLabelDLCs
//
this.progressLabelDLCs.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.progressLabelDLCs.Font = new System.Drawing.Font("Segoe UI", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.progressLabelDLCs.Location = new System.Drawing.Point(12, 251);
this.progressLabelDLCs.Name = "progressLabelDLCs";
this.progressLabelDLCs.Size = new System.Drawing.Size(560, 12);
this.progressLabelDLCs.TabIndex = 12;
this.progressLabelDLCs.Text = "Remaining DLC (2): 123456, 654321";
progressLabelDLCs.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
progressLabelDLCs.Font = new System.Drawing.Font("Segoe UI", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
progressLabelDLCs.Location = new System.Drawing.Point(12, 251);
progressLabelDLCs.Name = "progressLabelDLCs";
progressLabelDLCs.Size = new System.Drawing.Size(560, 12);
progressLabelDLCs.TabIndex = 12;
progressLabelDLCs.Text = "Remaining DLC (2): 123456, 654321";
//
// sortCheckBox
//
this.sortCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.sortCheckBox.AutoSize = true;
this.sortCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.sortCheckBox.Location = new System.Drawing.Point(120, 328);
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 = 10003;
this.sortCheckBox.Text = "Sort By Name";
this.sortCheckBox.CheckedChanged += new System.EventHandler(this.OnSortCheckBoxChanged);
sortCheckBox.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
sortCheckBox.AutoSize = true;
sortCheckBox.Location = new System.Drawing.Point(125, 330);
sortCheckBox.Margin = new Padding(3, 0, 0, 0);
sortCheckBox.Name = "sortCheckBox";
sortCheckBox.Size = new System.Drawing.Size(98, 19);
sortCheckBox.TabIndex = 10003;
sortCheckBox.Text = "Sort By Name";
sortCheckBox.CheckedChanged += OnSortCheckBoxChanged;
//
// 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(424, 295);
this.saveButton.Name = "saveButton";
this.saveButton.Size = new System.Drawing.Size(70, 24);
this.saveButton.TabIndex = 10006;
this.saveButton.Text = "Save DLC";
this.saveButton.UseVisualStyleBackColor = true;
this.saveButton.Click += new System.EventHandler(this.OnSaveDlc);
saveButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
saveButton.AutoSize = true;
saveButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
saveButton.Enabled = false;
saveButton.Location = new System.Drawing.Point(432, 295);
saveButton.Name = "saveButton";
saveButton.Size = new System.Drawing.Size(66, 25);
saveButton.TabIndex = 10006;
saveButton.Text = "Save DLC";
saveButton.UseVisualStyleBackColor = true;
saveButton.Click += OnSaveDlc;
//
// 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(500, 295);
this.loadButton.Name = "loadButton";
this.loadButton.Size = new System.Drawing.Size(72, 24);
this.loadButton.TabIndex = 10005;
this.loadButton.Text = "Load DLC";
this.loadButton.UseVisualStyleBackColor = true;
this.loadButton.Click += new System.EventHandler(this.OnLoadDlc);
loadButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
loadButton.AutoSize = true;
loadButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
loadButton.Enabled = false;
loadButton.Location = new System.Drawing.Point(504, 295);
loadButton.Name = "loadButton";
loadButton.Size = new System.Drawing.Size(68, 25);
loadButton.TabIndex = 10005;
loadButton.Text = "Load DLC";
loadButton.UseVisualStyleBackColor = true;
loadButton.Click += OnLoadDlc;
//
// resetKoaloaderButton
//
this.resetKoaloaderButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.resetKoaloaderButton.AutoSize = true;
this.resetKoaloaderButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.resetKoaloaderButton.Enabled = false;
this.resetKoaloaderButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.resetKoaloaderButton.Location = new System.Drawing.Point(12, 295);
this.resetKoaloaderButton.Name = "resetKoaloaderButton";
this.resetKoaloaderButton.Size = new System.Drawing.Size(105, 24);
this.resetKoaloaderButton.TabIndex = 10010;
this.resetKoaloaderButton.Text = "Reset Koaloader";
this.resetKoaloaderButton.UseVisualStyleBackColor = true;
this.resetKoaloaderButton.Click += new System.EventHandler(this.OnResetKoaloader);
resetKoaloaderButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
resetKoaloaderButton.AutoSize = true;
resetKoaloaderButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
resetKoaloaderButton.Enabled = false;
resetKoaloaderButton.Location = new System.Drawing.Point(12, 295);
resetKoaloaderButton.Name = "resetKoaloaderButton";
resetKoaloaderButton.Size = new System.Drawing.Size(101, 25);
resetKoaloaderButton.TabIndex = 10010;
resetKoaloaderButton.Text = "Reset Koaloader";
resetKoaloaderButton.UseVisualStyleBackColor = true;
resetKoaloaderButton.Click += OnResetKoaloader;
//
// resetButton
//
this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.resetButton.AutoSize = true;
this.resetButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.resetButton.Enabled = false;
this.resetButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.resetButton.Location = new System.Drawing.Point(344, 295);
this.resetButton.Name = "resetButton";
this.resetButton.Size = new System.Drawing.Size(74, 24);
this.resetButton.TabIndex = 10007;
this.resetButton.Text = "Reset DLC";
this.resetButton.UseVisualStyleBackColor = true;
this.resetButton.Click += new System.EventHandler(this.OnResetDlc);
resetButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
resetButton.AutoSize = true;
resetButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
resetButton.Enabled = false;
resetButton.Location = new System.Drawing.Point(356, 295);
resetButton.Name = "resetButton";
resetButton.Size = new System.Drawing.Size(70, 25);
resetButton.TabIndex = 10007;
resetButton.Text = "Reset DLC";
resetButton.UseVisualStyleBackColor = true;
resetButton.Click += OnResetDlc;
//
// saveKoaloaderButton
//
this.saveKoaloaderButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.saveKoaloaderButton.AutoSize = true;
this.saveKoaloaderButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.saveKoaloaderButton.Enabled = false;
this.saveKoaloaderButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.saveKoaloaderButton.Location = new System.Drawing.Point(123, 295);
this.saveKoaloaderButton.Name = "saveKoaloaderButton";
this.saveKoaloaderButton.Size = new System.Drawing.Size(101, 24);
this.saveKoaloaderButton.TabIndex = 10009;
this.saveKoaloaderButton.Text = "Save Koaloader";
this.saveKoaloaderButton.UseVisualStyleBackColor = true;
this.saveKoaloaderButton.Click += new System.EventHandler(this.OnSaveKoaloader);
saveKoaloaderButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
saveKoaloaderButton.AutoSize = true;
saveKoaloaderButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
saveKoaloaderButton.Enabled = false;
saveKoaloaderButton.Location = new System.Drawing.Point(119, 295);
saveKoaloaderButton.Name = "saveKoaloaderButton";
saveKoaloaderButton.Size = new System.Drawing.Size(97, 25);
saveKoaloaderButton.TabIndex = 10009;
saveKoaloaderButton.Text = "Save Koaloader";
saveKoaloaderButton.UseVisualStyleBackColor = true;
saveKoaloaderButton.Click += OnSaveKoaloader;
//
// loadKoaloaderButton
//
this.loadKoaloaderButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.loadKoaloaderButton.AutoSize = true;
this.loadKoaloaderButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.loadKoaloaderButton.Enabled = false;
this.loadKoaloaderButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.loadKoaloaderButton.Location = new System.Drawing.Point(230, 295);
this.loadKoaloaderButton.Name = "loadKoaloaderButton";
this.loadKoaloaderButton.Size = new System.Drawing.Size(103, 24);
this.loadKoaloaderButton.TabIndex = 10008;
this.loadKoaloaderButton.Text = "Load Koaloader";
this.loadKoaloaderButton.UseVisualStyleBackColor = true;
this.loadKoaloaderButton.Click += new System.EventHandler(this.OnLoadKoaloader);
loadKoaloaderButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
loadKoaloaderButton.AutoSize = true;
loadKoaloaderButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
loadKoaloaderButton.Enabled = false;
loadKoaloaderButton.Location = new System.Drawing.Point(222, 295);
loadKoaloaderButton.Name = "loadKoaloaderButton";
loadKoaloaderButton.Size = new System.Drawing.Size(99, 25);
loadKoaloaderButton.TabIndex = 10008;
loadKoaloaderButton.Text = "Load Koaloader";
loadKoaloaderButton.UseVisualStyleBackColor = true;
loadKoaloaderButton.Click += OnLoadKoaloader;
//
// SelectForm
//
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(584, 361);
this.Controls.Add(this.loadKoaloaderButton);
this.Controls.Add(this.saveKoaloaderButton);
this.Controls.Add(this.resetButton);
this.Controls.Add(this.resetKoaloaderButton);
this.Controls.Add(this.loadButton);
this.Controls.Add(this.saveButton);
this.Controls.Add(this.sortCheckBox);
this.Controls.Add(this.progressLabelDLCs);
this.Controls.Add(this.progressLabelGames);
this.Controls.Add(this.uninstallButton);
this.Controls.Add(this.scanButton);
this.Controls.Add(this.programsGroupBox);
this.Controls.Add(this.progressBar);
this.Controls.Add(this.cancelButton);
this.Controls.Add(this.installButton);
this.Controls.Add(this.progressLabel);
this.DoubleBuffered = true;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "SelectForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.Text = "SelectForm";
this.Load += new System.EventHandler(this.OnLoad);
this.programsGroupBox.ResumeLayout(false);
this.programsGroupBox.PerformLayout();
this.koaloaderFlowPanel.ResumeLayout(false);
this.blockedGamesFlowPanel.ResumeLayout(false);
this.allCheckBoxLayoutPanel.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
ClientSize = new System.Drawing.Size(584, 361);
Controls.Add(loadKoaloaderButton);
Controls.Add(saveKoaloaderButton);
Controls.Add(resetButton);
Controls.Add(resetKoaloaderButton);
Controls.Add(loadButton);
Controls.Add(saveButton);
Controls.Add(sortCheckBox);
Controls.Add(progressLabelDLCs);
Controls.Add(progressLabelGames);
Controls.Add(uninstallButton);
Controls.Add(scanButton);
Controls.Add(programsGroupBox);
Controls.Add(progressBar);
Controls.Add(cancelButton);
Controls.Add(installButton);
Controls.Add(progressLabel);
DoubleBuffered = true;
FormBorderStyle = FormBorderStyle.FixedSingle;
MaximizeBox = false;
MinimizeBox = false;
Name = "SelectForm";
StartPosition = FormStartPosition.Manual;
Text = "SelectForm";
Load += OnLoad;
programsGroupBox.ResumeLayout(false);
programsGroupBox.PerformLayout();
koaloaderFlowPanel.ResumeLayout(false);
koaloaderFlowPanel.PerformLayout();
blockedGamesFlowPanel.ResumeLayout(false);
blockedGamesFlowPanel.PerformLayout();
allCheckBoxLayoutPanel.ResumeLayout(false);
allCheckBoxLayoutPanel.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
#endregion

View file

@ -58,7 +58,7 @@ internal sealed partial class SelectForm : CustomForm
{
if (Program.Canceled)
return;
progressLabelGames.Invoke(delegate
Invoke(delegate
{
if (Program.Canceled)
return;
@ -71,7 +71,7 @@ internal sealed partial class SelectForm : CustomForm
{
if (Program.Canceled)
return;
progressLabelGames.Invoke(delegate
Invoke(delegate
{
if (Program.Canceled)
return;
@ -86,7 +86,7 @@ internal sealed partial class SelectForm : CustomForm
{
if (Program.Canceled)
return;
progressLabelDLCs.Invoke(delegate
Invoke(delegate
{
if (Program.Canceled)
return;
@ -99,7 +99,7 @@ internal sealed partial class SelectForm : CustomForm
{
if (Program.Canceled)
return;
progressLabelDLCs.Invoke(delegate
Invoke(delegate
{
if (Program.Canceled)
return;
@ -270,7 +270,7 @@ internal sealed partial class SelectForm : CustomForm
return;
if (!string.IsNullOrWhiteSpace(fullGameName))
{
SelectionDLC fullGameDlc = SelectionDLC.GetOrCreate(fullGameOnSteamStore ? DLCType.Steam : DLCType.SteamHidden,
SelectionDLC fullGameDlc = SelectionDLC.GetOrCreate(fullGameOnSteamStore ? DLCType.Steam : DLCType.SteamHidden, appId,
fullGameAppId, fullGameName);
fullGameDlc.Icon = fullGameIcon;
_ = dlc.TryAdd(fullGameDlc, default);
@ -280,7 +280,7 @@ internal sealed partial class SelectForm : CustomForm
return;
if (string.IsNullOrWhiteSpace(dlcName))
dlcName = "Unknown";
SelectionDLC _dlc = SelectionDLC.GetOrCreate(onSteamStore ? DLCType.Steam : DLCType.SteamHidden, dlcAppId, dlcName);
SelectionDLC _dlc = SelectionDLC.GetOrCreate(onSteamStore ? DLCType.Steam : DLCType.SteamHidden, appId, dlcAppId, dlcName);
_dlc.Icon = dlcIcon;
_ = dlc.TryAdd(_dlc, default);
RemoveFromRemainingDLCs(dlcAppId);
@ -316,7 +316,7 @@ internal sealed partial class SelectForm : CustomForm
selection.Website = appData?.Website;
if (Program.Canceled)
return;
selectionTreeView.Invoke(delegate
Invoke(delegate
{
if (Program.Canceled)
return;
@ -385,7 +385,7 @@ internal sealed partial class SelectForm : CustomForm
{
if (Program.Canceled)
return;
SelectionDLC entitlement = SelectionDLC.GetOrCreate(DLCType.EpicEntitlement, id, name);
SelectionDLC entitlement = SelectionDLC.GetOrCreate(DLCType.EpicEntitlement, @namespace, id, name);
entitlement.Icon = icon;
entitlement.Product = product;
entitlement.Publisher = developer;
@ -419,7 +419,7 @@ internal sealed partial class SelectForm : CustomForm
}
if (Program.Canceled)
return;
selectionTreeView.Invoke(delegate
Invoke(delegate
{
if (Program.Canceled)
return;
@ -481,7 +481,7 @@ internal sealed partial class SelectForm : CustomForm
Selection selection = Selection.GetOrCreate(Platform.Ubisoft, gameId, name, gameDirectory, dllDirectories,
await gameDirectory.GetExecutableDirectories(true));
selection.Icon = IconGrabber.GetDomainFaviconUrl("store.ubi.com");
selectionTreeView.Invoke(delegate
Invoke(delegate
{
if (Program.Canceled)
return;
@ -734,10 +734,10 @@ internal sealed partial class SelectForm : CustomForm
ToolStripItemCollection items = contextMenuStrip.Items;
string id = node.Name;
Platform platform = (Platform)node.Tag;
Selection selection = Selection.FromPlatformId(platform, id);
Selection selection = Selection.FromId(platform, id);
SelectionDLC dlc = null;
if (selection is null)
dlc = SelectionDLC.FromTypeId((DLCType)node.Tag, id);
dlc = SelectionDLC.FromId((DLCType)node.Tag, node.Parent?.Name, id);
Selection dlcParentSelection = null;
if (dlc is not null)
dlcParentSelection = dlc.Selection;
@ -776,6 +776,9 @@ internal sealed partial class SelectForm : CustomForm
appInfoVDF.DeleteFile();
appInfoJSON.DeleteFile();
cooldown.DeleteFile();
selection?.Remove();
if (dlc is not null)
dlc.Selection = null;
OnLoad(true);
}));
}

View file

@ -1,4 +1,64 @@
<root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">

View file

@ -1,5 +1,6 @@
using System.ComponentModel;
using System.Windows.Forms;
using CreamInstaller.Components;
namespace CreamInstaller.Forms
@ -16,90 +17,86 @@ namespace CreamInstaller.Forms
/// </summary>
private void InitializeComponent()
{
this.progressLabel = new System.Windows.Forms.Label();
this.updateButton = new System.Windows.Forms.Button();
this.ignoreButton = new System.Windows.Forms.Button();
this.progressBar = new System.Windows.Forms.ProgressBar();
this.changelogTreeView = new CustomTreeView();
this.SuspendLayout();
progressLabel = new Label();
updateButton = new Button();
ignoreButton = new Button();
progressBar = new ProgressBar();
changelogTreeView = new CustomTreeView();
SuspendLayout();
//
// progressLabel
//
this.progressLabel.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.progressLabel.Location = new System.Drawing.Point(12, 16);
this.progressLabel.Margin = new System.Windows.Forms.Padding(3, 0, 3, 12);
this.progressLabel.Name = "progressLabel";
this.progressLabel.Size = new System.Drawing.Size(218, 15);
this.progressLabel.TabIndex = 0;
this.progressLabel.Text = "Checking for updates . . .";
progressLabel.Location = new System.Drawing.Point(12, 16);
progressLabel.Margin = new Padding(3, 0, 3, 12);
progressLabel.Name = "progressLabel";
progressLabel.Size = new System.Drawing.Size(218, 15);
progressLabel.TabIndex = 0;
progressLabel.Text = "Checking for updates . . .";
//
// updateButton
//
this.updateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.updateButton.Enabled = false;
this.updateButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.updateButton.Location = new System.Drawing.Point(317, 12);
this.updateButton.Margin = new System.Windows.Forms.Padding(3, 3, 3, 12);
this.updateButton.Name = "updateButton";
this.updateButton.Size = new System.Drawing.Size(75, 23);
this.updateButton.TabIndex = 2;
this.updateButton.Text = "Update";
this.updateButton.UseVisualStyleBackColor = true;
updateButton.Anchor = AnchorStyles.Top | AnchorStyles.Right;
updateButton.Enabled = false;
updateButton.Location = new System.Drawing.Point(317, 12);
updateButton.Margin = new Padding(3, 3, 3, 12);
updateButton.Name = "updateButton";
updateButton.Size = new System.Drawing.Size(75, 23);
updateButton.TabIndex = 2;
updateButton.Text = "Update";
updateButton.UseVisualStyleBackColor = true;
//
// ignoreButton
//
this.ignoreButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.ignoreButton.Enabled = false;
this.ignoreButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.ignoreButton.Location = new System.Drawing.Point(236, 12);
this.ignoreButton.Margin = new System.Windows.Forms.Padding(3, 3, 3, 12);
this.ignoreButton.Name = "ignoreButton";
this.ignoreButton.Size = new System.Drawing.Size(75, 23);
this.ignoreButton.TabIndex = 1;
this.ignoreButton.Text = "Ignore";
this.ignoreButton.UseVisualStyleBackColor = true;
this.ignoreButton.Click += new System.EventHandler(this.OnIgnore);
ignoreButton.Anchor = AnchorStyles.Top | AnchorStyles.Right;
ignoreButton.Enabled = false;
ignoreButton.Location = new System.Drawing.Point(236, 12);
ignoreButton.Margin = new Padding(3, 3, 3, 12);
ignoreButton.Name = "ignoreButton";
ignoreButton.Size = new System.Drawing.Size(75, 23);
ignoreButton.TabIndex = 1;
ignoreButton.Text = "Ignore";
ignoreButton.UseVisualStyleBackColor = true;
ignoreButton.Click += OnIgnore;
//
// progressBar
//
this.progressBar.Location = new System.Drawing.Point(12, 41);
this.progressBar.Name = "progressBar";
this.progressBar.Size = new System.Drawing.Size(380, 23);
this.progressBar.TabIndex = 4;
this.progressBar.Visible = false;
progressBar.Location = new System.Drawing.Point(12, 41);
progressBar.Name = "progressBar";
progressBar.Size = new System.Drawing.Size(380, 23);
progressBar.TabIndex = 4;
progressBar.Visible = false;
//
// changelogTreeView
//
this.changelogTreeView.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll;
this.changelogTreeView.Location = new System.Drawing.Point(12, 70);
this.changelogTreeView.Margin = new System.Windows.Forms.Padding(0, 0, 0, 12);
this.changelogTreeView.Name = "changelogTreeView";
this.changelogTreeView.Size = new System.Drawing.Size(380, 179);
this.changelogTreeView.Sorted = true;
this.changelogTreeView.TabIndex = 5;
changelogTreeView.DrawMode = TreeViewDrawMode.OwnerDrawAll;
changelogTreeView.Location = new System.Drawing.Point(12, 70);
changelogTreeView.Margin = new Padding(0, 0, 0, 12);
changelogTreeView.Name = "changelogTreeView";
changelogTreeView.Size = new System.Drawing.Size(380, 179);
changelogTreeView.Sorted = true;
changelogTreeView.TabIndex = 5;
//
// UpdateForm
//
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(404, 261);
this.Controls.Add(this.changelogTreeView);
this.Controls.Add(this.progressBar);
this.Controls.Add(this.ignoreButton);
this.Controls.Add(this.updateButton);
this.Controls.Add(this.progressLabel);
this.DoubleBuffered = true;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "UpdateForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "UpdateForm";
this.Load += new System.EventHandler(this.OnLoad);
this.ResumeLayout(false);
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
ClientSize = new System.Drawing.Size(404, 261);
Controls.Add(changelogTreeView);
Controls.Add(progressBar);
Controls.Add(ignoreButton);
Controls.Add(updateButton);
Controls.Add(progressLabel);
DoubleBuffered = true;
FormBorderStyle = FormBorderStyle.FixedSingle;
MaximizeBox = false;
MinimizeBox = false;
Name = "UpdateForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "UpdateForm";
Load += OnLoad;
ResumeLayout(false);
}
#endregion

View file

@ -86,7 +86,7 @@ internal sealed partial class UpdateForm : CustomForm
if (changelogTreeView.Nodes.Count > 0)
changelogTreeView.Nodes[0].EnsureVisible();
for (int i = release.Changes.Length - 1; i >= 0; i--)
changelogTreeView.Invoke(delegate
Invoke(delegate
{
string change = release.Changes[i];
TreeNode changeNode = new() { Text = change };

View file

@ -1,4 +1,64 @@
<root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">

View file

@ -28,7 +28,7 @@ internal static class ParadoxLauncher
private static void PopulateDlc(Selection paradoxLauncher = null)
{
paradoxLauncher ??= Selection.FromPlatformId(Platform.Paradox, "PL");
paradoxLauncher ??= Selection.FromId(Platform.Paradox, "PL");
if (paradoxLauncher is null)
return;
paradoxLauncher.ExtraSelections.Clear();
@ -42,7 +42,7 @@ internal static class ParadoxLauncher
internal static bool DlcDialog(Form form)
{
Selection paradoxLauncher = Selection.FromPlatformId(Platform.Paradox, "PL");
Selection paradoxLauncher = Selection.FromId(Platform.Paradox, "PL");
if (paradoxLauncher is null || !paradoxLauncher.Enabled)
return false;
PopulateDlc(paradoxLauncher);

View file

@ -491,7 +491,7 @@ internal static class Resources
{
e.path = Path.GetDirectoryName(e.path);
return e;
}).DistinctBy(e => e.path).ToList());
}).DistinctBy(e => e.path).ToList() ?? new());
internal static async Task<List<(string path, BinaryType binaryType)>> GetExecutables(this string rootDirectory, bool filterCommon = false,
Func<string, bool> validFunc = null)

View file

@ -65,9 +65,9 @@ internal sealed class Selection : IEquatable<Selection>
internal static Selection GetOrCreate(Platform platform, string id, string name, string rootDirectory, HashSet<string> dllDirectories,
List<(string directory, BinaryType binaryType)> executableDirectories)
=> FromPlatformId(platform, id) ?? new Selection(platform, id, name, rootDirectory, dllDirectories, executableDirectories);
=> FromId(platform, id) ?? new Selection(platform, id, name, rootDirectory, dllDirectories, executableDirectories);
private void Remove()
internal void Remove()
{
_ = All.TryRemove(this, out _);
TreeNode.Remove();
@ -103,7 +103,7 @@ internal sealed class Selection : IEquatable<Selection>
selection.Validate(programsToScan);
}
internal static Selection FromPlatformId(Platform platform, string gameId) => All.Keys.FirstOrDefault(s => s.Platform == platform && s.Id == gameId);
internal static Selection FromId(Platform platform, string gameId) => All.Keys.FirstOrDefault(s => s.Platform == platform && s.Id == gameId);
public override bool Equals(object obj) => ReferenceEquals(this, obj) || obj is Selection other && Equals(other);

View file

@ -56,13 +56,16 @@ internal sealed class SelectionDLC : IEquatable<SelectionDLC>
}
}
public bool Equals(SelectionDLC other) => other is not null && (ReferenceEquals(this, other) || Id == other.Id && Type == other.Type);
public bool Equals(SelectionDLC other)
=> other is not null && (ReferenceEquals(this, other) || Type == other.Type && Selection?.Id == other.Selection?.Id && Id == other.Id);
internal static SelectionDLC GetOrCreate(DLCType type, string id, string name) => FromTypeId(type, id) ?? new SelectionDLC(type, id, name);
internal static SelectionDLC GetOrCreate(DLCType type, string gameId, string id, string name)
=> FromId(type, gameId, id) ?? new SelectionDLC(type, id, name);
internal static SelectionDLC FromTypeId(DLCType Type, string dlcId) => All.Keys.FirstOrDefault(dlc => dlc.Type == Type && dlc.Id == dlcId);
internal static SelectionDLC FromId(DLCType type, string gameId, string dlcId)
=> All.Keys.FirstOrDefault(dlc => dlc.Type == type && dlc.Selection?.Id == gameId && dlc.Id == dlcId);
public override bool Equals(object obj) => ReferenceEquals(this, obj) || obj is SelectionDLC other && Equals(other);
public override int GetHashCode() => HashCode.Combine(Id, (int)Type);
public override int GetHashCode() => HashCode.Combine((int)Type, Selection?.Id, Id);
}