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

View file

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

View file

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

View file

@ -72,7 +72,7 @@ internal sealed partial class DebugForm : CustomForm
internal void Log(string text, Color color) internal void Log(string text, Color color)
{ {
if (!debugTextBox.Disposing && !debugTextBox.IsDisposed) if (!debugTextBox.Disposing && !debugTextBox.IsDisposed)
debugTextBox.Invoke(() => Invoke(() =>
{ {
if (debugTextBox.Text.Length > 0) if (debugTextBox.Text.Length > 0)
debugTextBox.AppendText(Environment.NewLine, color, true); 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: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:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">

View file

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

View file

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

View file

@ -32,7 +32,7 @@ internal sealed partial class InstallForm : CustomForm
private void UpdateProgress(int progress) private void UpdateProgress(int progress)
{ {
if (!userProgressBar.Disposing && !userProgressBar.IsDisposed) if (!userProgressBar.Disposing && !userProgressBar.IsDisposed)
userProgressBar.Invoke(() => Invoke(() =>
{ {
int value = (int)((float)completeOperationsCount / operationsCount * 100) + progress / operationsCount; int value = (int)((float)completeOperationsCount / operationsCount * 100) + progress / operationsCount;
if (value < userProgressBar.Value) 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) internal void UpdateUser(string text, Color color, bool info = true, bool log = true)
{ {
if (info) if (info)
_ = userInfoLabel.Invoke(() => userInfoLabel.Text = text); _ = Invoke(() => userInfoLabel.Text = text);
if (log && !logTextBox.Disposing && !logTextBox.IsDisposed) if (log && !logTextBox.Disposing && !logTextBox.IsDisposed)
logTextBox.Invoke(() => Invoke(() =>
{ {
if (logTextBox.Text.Length > 0) if (logTextBox.Text.Length > 0)
logTextBox.AppendText(Environment.NewLine, color); 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: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:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">

View file

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

View file

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

View file

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

View file

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

View file

@ -86,7 +86,7 @@ internal sealed partial class UpdateForm : CustomForm
if (changelogTreeView.Nodes.Count > 0) if (changelogTreeView.Nodes.Count > 0)
changelogTreeView.Nodes[0].EnsureVisible(); changelogTreeView.Nodes[0].EnsureVisible();
for (int i = release.Changes.Length - 1; i >= 0; i--) for (int i = release.Changes.Length - 1; i >= 0; i--)
changelogTreeView.Invoke(delegate Invoke(delegate
{ {
string change = release.Changes[i]; string change = release.Changes[i];
TreeNode changeNode = new() { Text = change }; 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: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:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">

View file

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

View file

@ -491,7 +491,7 @@ internal static class Resources
{ {
e.path = Path.GetDirectoryName(e.path); e.path = Path.GetDirectoryName(e.path);
return e; 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, internal static async Task<List<(string path, BinaryType binaryType)>> GetExecutables(this string rootDirectory, bool filterCommon = false,
Func<string, bool> validFunc = null) 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, internal static Selection GetOrCreate(Platform platform, string id, string name, string rootDirectory, HashSet<string> dllDirectories,
List<(string directory, BinaryType binaryType)> executableDirectories) 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 _); _ = All.TryRemove(this, out _);
TreeNode.Remove(); TreeNode.Remove();
@ -103,7 +103,7 @@ internal sealed class Selection : IEquatable<Selection>
selection.Validate(programsToScan); 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); 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 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);
} }