From 07a3a3b22ebce495769aaa5192956d875c334dfe Mon Sep 17 00:00:00 2001 From: FelisDiligens <47528453+FelisDiligens@users.noreply.github.com> Date: Sun, 7 Jun 2020 13:57:01 +0200 Subject: [PATCH] v1.6.2 --- Fo76ini/Fo76ini.csproj | 28 ++ Fo76ini/Fo76ini.csproj.user | 13 + Fo76ini/Form1.Colors.cs | 2 +- Fo76ini/Form1.Designer.cs | 186 ++++++++++-- Fo76ini/Form1.cs | 131 +++++++-- Fo76ini/Form1.resx | 3 + Fo76ini/FormMods.Designer.cs | 358 ++++++++++------------- Fo76ini/FormMods.cs | 93 ++++-- Fo76ini/FormMods.resx | 3 - Fo76ini/IniFiles.cs | 2 +- Fo76ini/Mods.cs | 31 +- Fo76ini/Properties/AssemblyInfo.cs | 12 +- Fo76ini/Properties/Resources.Designer.cs | 60 ++-- Fo76ini/Properties/Resources.resx | 3 + Fo76ini/icons/defrost.png | Bin 0 -> 7534 bytes Fo76ini/icons/freeze.png | Bin 0 -> 7158 bytes Fo76ini/languages/de-DE.xml | 114 ++++---- Fo76ini/make_archives.bat | 10 +- Fo76ini/msgbox.cs | 1 + setup.iss | 2 +- 20 files changed, 694 insertions(+), 358 deletions(-) create mode 100644 Fo76ini/Fo76ini.csproj.user create mode 100644 Fo76ini/icons/defrost.png create mode 100644 Fo76ini/icons/freeze.png diff --git a/Fo76ini/Fo76ini.csproj b/Fo76ini/Fo76ini.csproj index 450d5c3..b989f19 100644 --- a/Fo76ini/Fo76ini.csproj +++ b/Fo76ini/Fo76ini.csproj @@ -12,6 +12,21 @@ 512 true true + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true AnyCPU @@ -187,7 +202,20 @@ + + + + False + Microsoft .NET Framework 4.7.2 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + \ No newline at end of file diff --git a/Fo76ini/Fo76ini.csproj.user b/Fo76ini/Fo76ini.csproj.user new file mode 100644 index 0000000..51f6223 --- /dev/null +++ b/Fo76ini/Fo76ini.csproj.user @@ -0,0 +1,13 @@ + + + + publish\ + + + + + + en-US + false + + \ No newline at end of file diff --git a/Fo76ini/Form1.Colors.cs b/Fo76ini/Form1.Colors.cs index 91d6006..f6cf158 100644 --- a/Fo76ini/Form1.Colors.cs +++ b/Fo76ini/Form1.Colors.cs @@ -74,7 +74,7 @@ public Color PipboyColor { get { - float r = IniFiles.Instance.GetFloat("Pipboy", "fPipboyEffectColorR", 1.0f); + float r = IniFiles.Instance.GetFloat("Pipboy", "fPipboyEffectColorR", 0.1f); float g = IniFiles.Instance.GetFloat("Pipboy", "fPipboyEffectColorG", 1.0f); float b = IniFiles.Instance.GetFloat("Pipboy", "fPipboyEffectColorB", 0.5f); return Color.FromArgb( diff --git a/Fo76ini/Form1.Designer.cs b/Fo76ini/Form1.Designer.cs index d1adc87..b3f0e86 100644 --- a/Fo76ini/Form1.Designer.cs +++ b/Fo76ini/Form1.Designer.cs @@ -94,8 +94,8 @@ private void InitializeComponent() this.checkBoxQuitOnGameLaunch = new System.Windows.Forms.CheckBox(); this.checkBoxNWMode = new System.Windows.Forms.CheckBox(); this.checkBoxSkipBackupQuestion = new System.Windows.Forms.CheckBox(); - this.checkBoxIgnoreUpdates = new System.Windows.Forms.CheckBox(); this.checkBoxMultipleGameEditionsUsed = new System.Windows.Forms.CheckBox(); + this.checkBoxIgnoreUpdates = new System.Windows.Forms.CheckBox(); this.checkBoxOpenManageModsOnLaunch = new System.Windows.Forms.CheckBox(); this.buttonLaunchGame = new System.Windows.Forms.Button(); this.colorDialog = new System.Windows.Forms.ColorDialog(); @@ -188,6 +188,14 @@ private void InitializeComponent() this.buttonManageMods = new System.Windows.Forms.Button(); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPageSettings = new System.Windows.Forms.TabPage(); + this.groupBoxLaunchOptions = new System.Windows.Forms.GroupBox(); + this.labelLaunchOptionTip = new System.Windows.Forms.Label(); + this.radioButtonLaunchViaExecutable = new System.Windows.Forms.RadioButton(); + this.radioButtonLaunchViaLink = new System.Windows.Forms.RadioButton(); + this.groupBoxGamePaths = new System.Windows.Forms.GroupBox(); + this.labelGamePath = new System.Windows.Forms.Label(); + this.textBoxGamePath = new System.Windows.Forms.TextBox(); + this.buttonPickGamePath = new System.Windows.Forms.Button(); this.buttonForceUpdate = new System.Windows.Forms.Button(); this.groupBoxBehavior = new System.Windows.Forms.GroupBox(); this.groupBoxLocalization = new System.Windows.Forms.GroupBox(); @@ -198,6 +206,7 @@ private void InitializeComponent() this.groupBoxOptions = new System.Windows.Forms.GroupBox(); this.buttonFixIssuesEarlierVersion = new System.Windows.Forms.Button(); this.timerCheckFiles = new System.Windows.Forms.Timer(this.components); + this.openFileDialogGamePath = new System.Windows.Forms.OpenFileDialog(); ((System.ComponentModel.ISupportInitialize)(this.numPipboyTargetWidth)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numPipboyTargetHeight)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numCustomResW)).BeginInit(); @@ -245,6 +254,8 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); this.tabControl1.SuspendLayout(); this.tabPageSettings.SuspendLayout(); + this.groupBoxLaunchOptions.SuspendLayout(); + this.groupBoxGamePaths.SuspendLayout(); this.groupBoxBehavior.SuspendLayout(); this.groupBoxLocalization.SuspendLayout(); this.groupBoxOptions.SuspendLayout(); @@ -647,7 +658,7 @@ private void InitializeComponent() this.sliderLODObjects.Location = new System.Drawing.Point(103, 41); this.sliderLODObjects.Maximum = 600; this.sliderLODObjects.Name = "sliderLODObjects"; - this.sliderLODObjects.Size = new System.Drawing.Size(209, 23); + this.sliderLODObjects.Size = new System.Drawing.Size(210, 23); this.sliderLODObjects.SmallChange = 5; this.sliderLODObjects.TabIndex = 29; this.sliderLODObjects.Text = "metroTrackBar1"; @@ -681,7 +692,7 @@ private void InitializeComponent() this.sliderLODActors.Location = new System.Drawing.Point(103, 99); this.sliderLODActors.Maximum = 600; this.sliderLODActors.Name = "sliderLODActors"; - this.sliderLODActors.Size = new System.Drawing.Size(209, 23); + this.sliderLODActors.Size = new System.Drawing.Size(210, 23); this.sliderLODActors.SmallChange = 5; this.sliderLODActors.TabIndex = 32; this.sliderLODActors.Text = "metroTrackBar3"; @@ -1087,17 +1098,6 @@ private void InitializeComponent() this.checkBoxSkipBackupQuestion.UseVisualStyleBackColor = true; this.checkBoxSkipBackupQuestion.CheckedChanged += new System.EventHandler(this.checkBoxSkipBackupQuestion_CheckedChanged); // - // checkBoxIgnoreUpdates - // - this.checkBoxIgnoreUpdates.AutoSize = true; - this.checkBoxIgnoreUpdates.Location = new System.Drawing.Point(9, 111); - this.checkBoxIgnoreUpdates.Name = "checkBoxIgnoreUpdates"; - this.checkBoxIgnoreUpdates.Size = new System.Drawing.Size(143, 17); - this.checkBoxIgnoreUpdates.TabIndex = 24; - this.checkBoxIgnoreUpdates.Text = "Don\'t check for updates."; - this.checkBoxIgnoreUpdates.UseVisualStyleBackColor = true; - this.checkBoxIgnoreUpdates.CheckedChanged += new System.EventHandler(this.checkBoxIgnoreUpdates_CheckedChanged); - // // checkBoxMultipleGameEditionsUsed // this.checkBoxMultipleGameEditionsUsed.AutoSize = true; @@ -1110,6 +1110,17 @@ private void InitializeComponent() "ndexFileList will be saved for every game edition separately."); this.checkBoxMultipleGameEditionsUsed.UseVisualStyleBackColor = true; // + // checkBoxIgnoreUpdates + // + this.checkBoxIgnoreUpdates.AutoSize = true; + this.checkBoxIgnoreUpdates.Location = new System.Drawing.Point(9, 111); + this.checkBoxIgnoreUpdates.Name = "checkBoxIgnoreUpdates"; + this.checkBoxIgnoreUpdates.Size = new System.Drawing.Size(143, 17); + this.checkBoxIgnoreUpdates.TabIndex = 24; + this.checkBoxIgnoreUpdates.Text = "Don\'t check for updates."; + this.checkBoxIgnoreUpdates.UseVisualStyleBackColor = true; + this.checkBoxIgnoreUpdates.CheckedChanged += new System.EventHandler(this.checkBoxIgnoreUpdates_CheckedChanged); + // // checkBoxOpenManageModsOnLaunch // this.checkBoxOpenManageModsOnLaunch.AutoSize = true; @@ -2085,7 +2096,7 @@ private void InitializeComponent() this.groupBoxGameEdition.Controls.Add(this.radioButtonEditionBethesdaNet); this.groupBoxGameEdition.Location = new System.Drawing.Point(6, 123); this.groupBoxGameEdition.Name = "groupBoxGameEdition"; - this.groupBoxGameEdition.Size = new System.Drawing.Size(146, 93); + this.groupBoxGameEdition.Size = new System.Drawing.Size(376, 93); this.groupBoxGameEdition.TabIndex = 12; this.groupBoxGameEdition.TabStop = false; this.groupBoxGameEdition.Text = "Game edition"; @@ -2153,7 +2164,7 @@ private void InitializeComponent() this.groupBoxUpdate.Controls.Add(this.linkLabelManualDownloadPage); this.groupBoxUpdate.Location = new System.Drawing.Point(93, 215); this.groupBoxUpdate.Name = "groupBoxUpdate"; - this.groupBoxUpdate.Size = new System.Drawing.Size(281, 94); + this.groupBoxUpdate.Size = new System.Drawing.Size(279, 94); this.groupBoxUpdate.TabIndex = 20; this.groupBoxUpdate.TabStop = false; this.groupBoxUpdate.Text = "Update available"; @@ -2175,7 +2186,7 @@ private void InitializeComponent() | System.Windows.Forms.AnchorStyles.Right))); this.buttonUpdateNow.Location = new System.Drawing.Point(9, 39); this.buttonUpdateNow.Name = "buttonUpdateNow"; - this.buttonUpdateNow.Size = new System.Drawing.Size(266, 23); + this.buttonUpdateNow.Size = new System.Drawing.Size(264, 23); this.buttonUpdateNow.TabIndex = 19; this.buttonUpdateNow.Text = "Update now!"; this.buttonUpdateNow.UseVisualStyleBackColor = true; @@ -2321,6 +2332,9 @@ private void InitializeComponent() // // tabPageSettings // + this.tabPageSettings.AutoScroll = true; + this.tabPageSettings.Controls.Add(this.groupBoxLaunchOptions); + this.tabPageSettings.Controls.Add(this.groupBoxGamePaths); this.tabPageSettings.Controls.Add(this.buttonForceUpdate); this.tabPageSettings.Controls.Add(this.groupBoxBehavior); this.tabPageSettings.Controls.Add(this.groupBoxLocalization); @@ -2335,13 +2349,105 @@ private void InitializeComponent() this.tabPageSettings.Text = "Settings"; this.tabPageSettings.UseVisualStyleBackColor = true; // + // groupBoxLaunchOptions + // + this.groupBoxLaunchOptions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxLaunchOptions.Controls.Add(this.labelLaunchOptionTip); + this.groupBoxLaunchOptions.Controls.Add(this.radioButtonLaunchViaExecutable); + this.groupBoxLaunchOptions.Controls.Add(this.radioButtonLaunchViaLink); + this.groupBoxLaunchOptions.Location = new System.Drawing.Point(6, 366); + this.groupBoxLaunchOptions.Name = "groupBoxLaunchOptions"; + this.groupBoxLaunchOptions.Size = new System.Drawing.Size(376, 93); + this.groupBoxLaunchOptions.TabIndex = 25; + this.groupBoxLaunchOptions.TabStop = false; + this.groupBoxLaunchOptions.Text = "Launch options"; + // + // labelLaunchOptionTip + // + this.labelLaunchOptionTip.AutoSize = true; + this.labelLaunchOptionTip.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.labelLaunchOptionTip.Location = new System.Drawing.Point(10, 67); + this.labelLaunchOptionTip.Name = "labelLaunchOptionTip"; + this.labelLaunchOptionTip.Size = new System.Drawing.Size(274, 13); + this.labelLaunchOptionTip.TabIndex = 2; + this.labelLaunchOptionTip.Text = "Tip: Enter your login credentials under the \"General\" tab."; + this.labelLaunchOptionTip.Visible = false; + // + // radioButtonLaunchViaExecutable + // + this.radioButtonLaunchViaExecutable.AutoSize = true; + this.radioButtonLaunchViaExecutable.Location = new System.Drawing.Point(10, 43); + this.radioButtonLaunchViaExecutable.Name = "radioButtonLaunchViaExecutable"; + this.radioButtonLaunchViaExecutable.Size = new System.Drawing.Size(157, 17); + this.radioButtonLaunchViaExecutable.TabIndex = 1; + this.radioButtonLaunchViaExecutable.TabStop = true; + this.radioButtonLaunchViaExecutable.Text = "Run \"Fallout76.exe\" directly"; + this.radioButtonLaunchViaExecutable.UseVisualStyleBackColor = true; + this.radioButtonLaunchViaExecutable.CheckedChanged += new System.EventHandler(this.radioButtonLaunchViaExecutable_CheckedChanged); + // + // radioButtonLaunchViaLink + // + this.radioButtonLaunchViaLink.AutoSize = true; + this.radioButtonLaunchViaLink.Location = new System.Drawing.Point(10, 20); + this.radioButtonLaunchViaLink.Name = "radioButtonLaunchViaLink"; + this.radioButtonLaunchViaLink.Size = new System.Drawing.Size(261, 17); + this.radioButtonLaunchViaLink.TabIndex = 0; + this.radioButtonLaunchViaLink.TabStop = true; + this.radioButtonLaunchViaLink.Text = "Launch via Steam / Bethesda.net (recommended)"; + this.radioButtonLaunchViaLink.UseVisualStyleBackColor = true; + // + // groupBoxGamePaths + // + this.groupBoxGamePaths.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxGamePaths.Controls.Add(this.labelGamePath); + this.groupBoxGamePaths.Controls.Add(this.textBoxGamePath); + this.groupBoxGamePaths.Controls.Add(this.buttonPickGamePath); + this.groupBoxGamePaths.Location = new System.Drawing.Point(6, 218); + this.groupBoxGamePaths.Name = "groupBoxGamePaths"; + this.groupBoxGamePaths.Size = new System.Drawing.Size(376, 45); + this.groupBoxGamePaths.TabIndex = 24; + this.groupBoxGamePaths.TabStop = false; + this.groupBoxGamePaths.Text = "Paths"; + // + // labelGamePath + // + this.labelGamePath.AutoSize = true; + this.labelGamePath.Location = new System.Drawing.Point(7, 19); + this.labelGamePath.Name = "labelGamePath"; + this.labelGamePath.Size = new System.Drawing.Size(78, 13); + this.labelGamePath.TabIndex = 17; + this.labelGamePath.Text = "Game location:"; + // + // textBoxGamePath + // + this.textBoxGamePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxGamePath.Location = new System.Drawing.Point(111, 16); + this.textBoxGamePath.Name = "textBoxGamePath"; + this.textBoxGamePath.Size = new System.Drawing.Size(224, 20); + this.textBoxGamePath.TabIndex = 18; + this.textBoxGamePath.TextChanged += new System.EventHandler(this.textBoxGamePath_TextChanged); + // + // buttonPickGamePath + // + this.buttonPickGamePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonPickGamePath.Location = new System.Drawing.Point(341, 14); + this.buttonPickGamePath.Name = "buttonPickGamePath"; + this.buttonPickGamePath.Size = new System.Drawing.Size(28, 23); + this.buttonPickGamePath.TabIndex = 19; + this.buttonPickGamePath.Text = "..."; + this.buttonPickGamePath.UseVisualStyleBackColor = true; + this.buttonPickGamePath.Click += new System.EventHandler(this.buttonPickGamePath_Click); + // // buttonForceUpdate // this.buttonForceUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.buttonForceUpdate.Location = new System.Drawing.Point(6, 415); + this.buttonForceUpdate.Location = new System.Drawing.Point(6, 603); this.buttonForceUpdate.Name = "buttonForceUpdate"; - this.buttonForceUpdate.Size = new System.Drawing.Size(380, 23); + this.buttonForceUpdate.Size = new System.Drawing.Size(376, 23); this.buttonForceUpdate.TabIndex = 23; this.buttonForceUpdate.Text = "Force auto-update"; this.buttonForceUpdate.UseVisualStyleBackColor = true; @@ -2349,14 +2455,16 @@ private void InitializeComponent() // // groupBoxBehavior // + this.groupBoxBehavior.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.groupBoxBehavior.Controls.Add(this.checkBoxIgnoreUpdates); this.groupBoxBehavior.Controls.Add(this.checkBoxOpenManageModsOnLaunch); this.groupBoxBehavior.Controls.Add(this.checkBoxQuitOnGameLaunch); this.groupBoxBehavior.Controls.Add(this.checkBoxSkipBackupQuestion); this.groupBoxBehavior.Controls.Add(this.checkBoxAutoApply); - this.groupBoxBehavior.Location = new System.Drawing.Point(6, 222); + this.groupBoxBehavior.Location = new System.Drawing.Point(6, 465); this.groupBoxBehavior.Name = "groupBoxBehavior"; - this.groupBoxBehavior.Size = new System.Drawing.Size(380, 139); + this.groupBoxBehavior.Size = new System.Drawing.Size(376, 132); this.groupBoxBehavior.TabIndex = 22; this.groupBoxBehavior.TabStop = false; this.groupBoxBehavior.Text = "Behavior"; @@ -2371,7 +2479,7 @@ private void InitializeComponent() this.groupBoxLocalization.Controls.Add(this.comboBoxLanguage); this.groupBoxLocalization.Location = new System.Drawing.Point(6, 6); this.groupBoxLocalization.Name = "groupBoxLocalization"; - this.groupBoxLocalization.Size = new System.Drawing.Size(380, 111); + this.groupBoxLocalization.Size = new System.Drawing.Size(376, 111); this.groupBoxLocalization.TabIndex = 21; this.groupBoxLocalization.TabStop = false; this.groupBoxLocalization.Text = "Localization"; @@ -2397,11 +2505,13 @@ private void InitializeComponent() // // buttonDownloadLanguages // + this.buttonDownloadLanguages.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.buttonDownloadLanguages.Location = new System.Drawing.Point(98, 49); this.buttonDownloadLanguages.Name = "buttonDownloadLanguages"; - this.buttonDownloadLanguages.Size = new System.Drawing.Size(276, 23); + this.buttonDownloadLanguages.Size = new System.Drawing.Size(271, 23); this.buttonDownloadLanguages.TabIndex = 20; - this.buttonDownloadLanguages.Text = "Download / update languages"; + this.buttonDownloadLanguages.Text = "Download / update language files"; this.buttonDownloadLanguages.UseVisualStyleBackColor = true; this.buttonDownloadLanguages.Click += new System.EventHandler(this.buttonDownloadLanguages_Click); // @@ -2413,7 +2523,7 @@ private void InitializeComponent() this.comboBoxLanguage.FormattingEnabled = true; this.comboBoxLanguage.Location = new System.Drawing.Point(98, 22); this.comboBoxLanguage.Name = "comboBoxLanguage"; - this.comboBoxLanguage.Size = new System.Drawing.Size(276, 21); + this.comboBoxLanguage.Size = new System.Drawing.Size(271, 21); this.comboBoxLanguage.TabIndex = 17; this.comboBoxLanguage.SelectedIndexChanged += new System.EventHandler(this.comboBoxLanguage_SelectedIndexChanged); // @@ -2424,9 +2534,9 @@ private void InitializeComponent() this.groupBoxOptions.Controls.Add(this.checkBoxMultipleGameEditionsUsed); this.groupBoxOptions.Controls.Add(this.checkBoxNWMode); this.groupBoxOptions.Controls.Add(this.checkBoxReadOnly); - this.groupBoxOptions.Location = new System.Drawing.Point(158, 123); + this.groupBoxOptions.Location = new System.Drawing.Point(6, 269); this.groupBoxOptions.Name = "groupBoxOptions"; - this.groupBoxOptions.Size = new System.Drawing.Size(228, 93); + this.groupBoxOptions.Size = new System.Drawing.Size(376, 91); this.groupBoxOptions.TabIndex = 15; this.groupBoxOptions.TabStop = false; this.groupBoxOptions.Text = "Options"; @@ -2435,9 +2545,9 @@ private void InitializeComponent() // this.buttonFixIssuesEarlierVersion.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.buttonFixIssuesEarlierVersion.Location = new System.Drawing.Point(6, 444); + this.buttonFixIssuesEarlierVersion.Location = new System.Drawing.Point(6, 632); this.buttonFixIssuesEarlierVersion.Name = "buttonFixIssuesEarlierVersion"; - this.buttonFixIssuesEarlierVersion.Size = new System.Drawing.Size(380, 23); + this.buttonFixIssuesEarlierVersion.Size = new System.Drawing.Size(376, 23); this.buttonFixIssuesEarlierVersion.TabIndex = 19; this.buttonFixIssuesEarlierVersion.Text = "Fix settings from v1.3.1 and earlier"; this.buttonFixIssuesEarlierVersion.UseVisualStyleBackColor = true; @@ -2448,6 +2558,11 @@ private void InitializeComponent() this.timerCheckFiles.Interval = 5000; this.timerCheckFiles.Tick += new System.EventHandler(this.timerCheckFiles_Tick); // + // openFileDialogGamePath + // + this.openFileDialogGamePath.FileName = "Fallout76.exe"; + this.openFileDialogGamePath.Filter = "Fallout76.exe|Fallout76.exe"; + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -2533,6 +2648,10 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); this.tabControl1.ResumeLayout(false); this.tabPageSettings.ResumeLayout(false); + this.groupBoxLaunchOptions.ResumeLayout(false); + this.groupBoxLaunchOptions.PerformLayout(); + this.groupBoxGamePaths.ResumeLayout(false); + this.groupBoxGamePaths.PerformLayout(); this.groupBoxBehavior.ResumeLayout(false); this.groupBoxBehavior.PerformLayout(); this.groupBoxLocalization.ResumeLayout(false); @@ -2712,6 +2831,15 @@ private void InitializeComponent() private System.Windows.Forms.RadioButton radioButtonEditionBethesdaNetPTS; private System.Windows.Forms.CheckBox checkBoxMultipleGameEditionsUsed; private System.Windows.Forms.Button buttonForceUpdate; + private System.Windows.Forms.GroupBox groupBoxGamePaths; + private System.Windows.Forms.Label labelGamePath; + private System.Windows.Forms.TextBox textBoxGamePath; + private System.Windows.Forms.Button buttonPickGamePath; + private System.Windows.Forms.GroupBox groupBoxLaunchOptions; + private System.Windows.Forms.RadioButton radioButtonLaunchViaExecutable; + private System.Windows.Forms.RadioButton radioButtonLaunchViaLink; + private System.Windows.Forms.Label labelLaunchOptionTip; + private System.Windows.Forms.OpenFileDialog openFileDialogGamePath; } } diff --git a/Fo76ini/Form1.cs b/Fo76ini/Form1.cs index 5f7b6f5..df4d143 100644 --- a/Fo76ini/Form1.cs +++ b/Fo76ini/Form1.cs @@ -15,7 +15,7 @@ namespace Fo76ini { public partial class Form1 : Form { - public const String VERSION = "1.6.1"; + public const String VERSION = "1.6.2"; protected System.Globalization.CultureInfo enUS = System.Globalization.CultureInfo.CreateSpecificCulture("en-US"); @@ -306,6 +306,14 @@ private void AddAllEventHandler() "0" ); + // Launch options + uiLoader.LinkList( + new RadioButton[] { this.radioButtonLaunchViaLink, this.radioButtonLaunchViaExecutable }, + new String[] { "1", "2" }, + IniFile.Config, "Preferences", "uLaunchOption", + "1" + ); + // Nuclear winter mode uiLoader.LinkBool(this.checkBoxNWMode, IniFile.Config, "Preferences", "bNWMode", false); @@ -808,27 +816,43 @@ private void checkBoxReadOnly_CheckedChanged(object sender, EventArgs e) private void buttonLaunchGame_Click(object sender, EventArgs e) { uint uGameEdition = IniFiles.Instance.GetUInt(IniFile.Config, "Preferences", "uGameEdition", 0); + uint uLaunchOption = IniFiles.Instance.GetUInt(IniFile.Config, "Preferences", "uLaunchOption", 1); String process = null; - switch (uGameEdition) + if (uLaunchOption == 1) + { + switch (uGameEdition) + { + case (uint)GameEdition.BethesdaNet: + process = "bethesdanet://run/20"; + break; + case (uint)GameEdition.Steam: + process = "steam://run/1151340"; // "steam://runappid/1151340" + break; + case (uint)GameEdition.BethesdaNetPTS: + process = "bethesdanet://run/57"; + break; + default: + MsgBox.Get("chooseGameEdition").Show(MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + } + else if (uLaunchOption == 2) { - case (uint)GameEdition.BethesdaNet: - process = "bethesdanet://run/20"; - break; - case (uint)GameEdition.Steam: - process = "steam://run/1151340"; // "steam://runappid/1151340" - break; - case (uint)GameEdition.BethesdaNetPTS: - process = "bethesdanet://run/57"; - break; - default: - MsgBox.Get("chooseGameEdition").Show(MessageBoxButtons.OK, MessageBoxIcon.Information); + if (!ManagedMods.Instance.ValidateGamePath()) + { + MsgBox.Get("modsGamePathNotSet").Show(MessageBoxButtons.OK, MessageBoxIcon.Information); return; + } + process = Path.GetFullPath(Path.Combine(ManagedMods.Instance.GamePath, "Fallout76.exe")); + } + if (process != null) + { + if (IniFiles.Instance.GetBool(IniFile.Config, "Preferences", "bAutoApply", false)) + ApplyChanges(); + System.Diagnostics.Process.Start(process); + if (IniFiles.Instance.GetBool(IniFile.Config, "Preferences", "bQuitOnLaunch", false)) + this.Close(); } - if (IniFiles.Instance.GetBool(IniFile.Config, "Preferences", "bAutoApply", false)) - ApplyChanges(); - System.Diagnostics.Process.Start(process); - if (IniFiles.Instance.GetBool(IniFile.Config, "Preferences", "bQuitOnLaunch", false)) - this.Close(); } // "Get the latest version from NexusMods" link: @@ -865,6 +889,7 @@ private void buttonManageMods_Click(object sender, EventArgs e) formModsBackupCreated = true; } Utils.SetFormPosition(this.formMods, this.Location.X + this.Width, this.Location.Y); + this.formMods.UpdateUI(); this.formMods.Show(); } @@ -904,19 +929,28 @@ private void buttonFixIssuesEarlierVersion_Click(object sender, EventArgs e) private void radioButtonEditionSteam_CheckedChanged(object sender, EventArgs e) { if (this.radioButtonEditionSteam.Checked) + { this.formMods.ChangeGameEdition(GameEdition.Steam); + this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; + } } private void radioButtonEditionBethesdaNet_CheckedChanged(object sender, EventArgs e) { if (this.radioButtonEditionBethesdaNet.Checked) + { this.formMods.ChangeGameEdition(GameEdition.BethesdaNet); + this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; + } } private void radioButtonEditionBethesdaNetPTS_CheckedChanged(object sender, EventArgs e) { if (this.radioButtonEditionBethesdaNetPTS.Checked) + { this.formMods.ChangeGameEdition(GameEdition.BethesdaNetPTS); + this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; + } } // Nuclear Winter mode @@ -1044,5 +1078,66 @@ private void checkBoxIgnoreUpdates_CheckedChanged(object sender, EventArgs e) IniFiles.Instance.Set(IniFile.Config, "Preferences", "bIgnoreUpdates", this.checkBoxIgnoreUpdates.Checked); this.CheckVersion(); } + + /* + * Game path + */ + + // Pick game path + private void buttonPickGamePath_Click(object sender, EventArgs e) + { + if (ManagedMods.Instance.isDeploymentNecessary()) + { + MsgBox.ShowID("modsDeploymentNecessary"); + return; + } + if (this.openFileDialogGamePath.ShowDialog() == DialogResult.OK) + { + String path = Path.GetDirectoryName(this.openFileDialogGamePath.FileName); // We want the path where Fallout76.exe resides. + if (Directory.Exists(Path.Combine(path, "Data"))) + { + this.textBoxGamePath.Text = path; + ManagedMods.Instance.GamePath = path; + IniFiles.Instance.Set(IniFile.Config, "Preferences", ManagedMods.Instance.GamePathKey, path); + IniFiles.Instance.SaveConfig(); + ManagedMods.Instance.Load(); + } + else + MsgBox.ShowID("modsGamePathInvalid"); + } + } + + // Game path textbox changed + private void textBoxGamePath_TextChanged(object sender, EventArgs e) + { + if (this.textBoxGamePath.Focused) + { + if (ManagedMods.Instance.isDeploymentNecessary()) + { + if (this.textBoxGamePath.Text != ManagedMods.Instance.GamePath) + this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; + return; + } + else if (Directory.Exists(Path.Combine(this.textBoxGamePath.Text, "Data"))) + { + ManagedMods.Instance.GamePath = this.textBoxGamePath.Text; + IniFiles.Instance.Set(IniFile.Config, "Preferences", ManagedMods.Instance.GamePathKey, this.textBoxGamePath.Text); + IniFiles.Instance.SaveConfig(); + ManagedMods.Instance.Load(); + this.textBoxGamePath.ForeColor = Color.Black; + this.textBoxGamePath.BackColor = Color.White; + } + else + { + this.textBoxGamePath.ForeColor = Color.White; + this.textBoxGamePath.BackColor = Color.Red; + } + } + } + + private void radioButtonLaunchViaExecutable_CheckedChanged(object sender, EventArgs e) + { + this.labelLaunchOptionTip.Visible = this.radioButtonLaunchViaExecutable.Checked; + } } } diff --git a/Fo76ini/Form1.resx b/Fo76ini/Form1.resx index fa86cde..1b5c2ba 100644 --- a/Fo76ini/Form1.resx +++ b/Fo76ini/Form1.resx @@ -272,6 +272,9 @@ Affected files: Fallout76Custom.ini 221, 17 + + 864, 17 + 82 diff --git a/Fo76ini/FormMods.Designer.cs b/Fo76ini/FormMods.Designer.cs index a6f5420..09fb290 100644 --- a/Fo76ini/FormMods.Designer.cs +++ b/Fo76ini/FormMods.Designer.cs @@ -52,19 +52,10 @@ private void InitializeComponent() this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPageModOrder = new System.Windows.Forms.TabPage(); this.toolStrip1 = new System.Windows.Forms.ToolStrip(); - this.toolStripButtonAddMod = new System.Windows.Forms.ToolStripButton(); - this.toolStripButtonAddModFrozen = new System.Windows.Forms.ToolStripButton(); - this.toolStripButtonAddModFolder = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripButtonCheckAll = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripButtonMoveUp = new System.Windows.Forms.ToolStripButton(); - this.toolStripButtonMoveDown = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripButtonModEdit = new System.Windows.Forms.ToolStripButton(); - this.toolStripButtonModOpenFolder = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripButtonDeleteMod = new System.Windows.Forms.ToolStripButton(); this.listViewMods = new System.Windows.Forms.ListView(); this.columnHeaderModTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeaderInstallAs = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -75,15 +66,13 @@ private void InitializeComponent() this.columnHeaderFrozenState = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.tabPageModsSettings = new System.Windows.Forms.TabPage(); this.groupBoxLists = new System.Windows.Forms.GroupBox(); + this.buttonModsResetTextboxes = new System.Windows.Forms.Button(); + this.buttonModsApplyTextBoxes = new System.Windows.Forms.Button(); this.textBoxsResourceIndexFileList = new System.Windows.Forms.TextBox(); this.buttonModsCleanLists = new System.Windows.Forms.Button(); this.labelsResourceIndexFileList = new System.Windows.Forms.Label(); this.textBoxsResourceArchive2List = new System.Windows.Forms.TextBox(); this.labelsResourceArchive2List = new System.Windows.Forms.Label(); - this.groupBoxGamePaths = new System.Windows.Forms.GroupBox(); - this.labelGamePath = new System.Windows.Forms.Label(); - this.textBoxGamePath = new System.Windows.Forms.TextBox(); - this.buttonPickGamePath = new System.Windows.Forms.Button(); this.toolTip = new System.Windows.Forms.ToolTip(this.components); this.openFileDialogMod = new System.Windows.Forms.OpenFileDialog(); this.folderBrowserDialogMod = new System.Windows.Forms.FolderBrowserDialog(); @@ -91,15 +80,22 @@ private void InitializeComponent() this.openFileDialogGamePath = new System.Windows.Forms.OpenFileDialog(); this.panel1 = new System.Windows.Forms.Panel(); this.openFileDialogBA2 = new System.Windows.Forms.OpenFileDialog(); - this.buttonModsApplyTextBoxes = new System.Windows.Forms.Button(); - this.buttonModsResetTextboxes = new System.Windows.Forms.Button(); + this.toolStripButtonAddMod = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonAddModFrozen = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonAddModFolder = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonCheckAll = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonMoveUp = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonMoveDown = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonModEdit = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonModOpenFolder = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonDeleteMod = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonUnfreeze = new System.Windows.Forms.ToolStripButton(); this.menuStrip1.SuspendLayout(); this.tabControl1.SuspendLayout(); this.tabPageModOrder.SuspendLayout(); this.toolStrip1.SuspendLayout(); this.tabPageModsSettings.SuspendLayout(); this.groupBoxLists.SuspendLayout(); - this.groupBoxGamePaths.SuspendLayout(); this.panel1.SuspendLayout(); this.SuspendLayout(); // @@ -303,148 +299,41 @@ private void InitializeComponent() this.toolStripButtonMoveDown, this.toolStripSeparator3, this.toolStripButtonModEdit, + this.toolStripButtonUnfreeze, this.toolStripButtonModOpenFolder, this.toolStripSeparator5, this.toolStripButtonDeleteMod}); this.toolStrip1.Location = new System.Drawing.Point(3, 3); this.toolStrip1.Name = "toolStrip1"; this.toolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System; - this.toolStrip1.Size = new System.Drawing.Size(31, 438); + this.toolStrip1.Size = new System.Drawing.Size(32, 438); this.toolStrip1.TabIndex = 44; this.toolStrip1.Text = "toolStrip1"; // - // toolStripButtonAddMod - // - this.toolStripButtonAddMod.AutoSize = false; - this.toolStripButtonAddMod.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripButtonAddMod.Image = global::Fo76ini.Properties.Resources.plus; - this.toolStripButtonAddMod.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripButtonAddMod.ImageTransparentColor = System.Drawing.Color.Magenta; - this.toolStripButtonAddMod.Name = "toolStripButtonAddMod"; - this.toolStripButtonAddMod.Size = new System.Drawing.Size(30, 30); - this.toolStripButtonAddMod.Text = "Add mod (from archive)"; - this.toolStripButtonAddMod.Click += new System.EventHandler(this.toolStripButtonAddMod_Click); - // - // toolStripButtonAddModFrozen - // - this.toolStripButtonAddModFrozen.AutoSize = false; - this.toolStripButtonAddModFrozen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripButtonAddModFrozen.Image = global::Fo76ini.Properties.Resources.frozen_plus; - this.toolStripButtonAddModFrozen.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripButtonAddModFrozen.ImageTransparentColor = System.Drawing.Color.Magenta; - this.toolStripButtonAddModFrozen.Name = "toolStripButtonAddModFrozen"; - this.toolStripButtonAddModFrozen.Size = new System.Drawing.Size(30, 30); - this.toolStripButtonAddModFrozen.Text = "Add mod (from *.ba2 archive)"; - this.toolStripButtonAddModFrozen.Click += new System.EventHandler(this.toolStripButtonAddModFrozen_Click); - // - // toolStripButtonAddModFolder - // - this.toolStripButtonAddModFolder.AutoSize = false; - this.toolStripButtonAddModFolder.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripButtonAddModFolder.Image = global::Fo76ini.Properties.Resources.folder_plus; - this.toolStripButtonAddModFolder.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripButtonAddModFolder.ImageTransparentColor = System.Drawing.Color.Magenta; - this.toolStripButtonAddModFolder.Name = "toolStripButtonAddModFolder"; - this.toolStripButtonAddModFolder.Size = new System.Drawing.Size(30, 30); - this.toolStripButtonAddModFolder.Text = "Add mod (from folder)"; - this.toolStripButtonAddModFolder.Click += new System.EventHandler(this.toolStripButtonAddModFolder_Click); - // // toolStripSeparator4 // this.toolStripSeparator4.Margin = new System.Windows.Forms.Padding(0, 8, 0, 8); this.toolStripSeparator4.Name = "toolStripSeparator4"; this.toolStripSeparator4.Size = new System.Drawing.Size(28, 6); // - // toolStripButtonCheckAll - // - this.toolStripButtonCheckAll.AutoSize = false; - this.toolStripButtonCheckAll.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripButtonCheckAll.Image = global::Fo76ini.Properties.Resources.checkbox_checked; - this.toolStripButtonCheckAll.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripButtonCheckAll.ImageTransparentColor = System.Drawing.Color.Magenta; - this.toolStripButtonCheckAll.Name = "toolStripButtonCheckAll"; - this.toolStripButtonCheckAll.Size = new System.Drawing.Size(30, 30); - this.toolStripButtonCheckAll.Text = "Check/uncheck all"; - this.toolStripButtonCheckAll.Click += new System.EventHandler(this.toolStripButtonCheckAll_Click); - // // toolStripSeparator2 // this.toolStripSeparator2.Margin = new System.Windows.Forms.Padding(0, 8, 0, 8); this.toolStripSeparator2.Name = "toolStripSeparator2"; this.toolStripSeparator2.Size = new System.Drawing.Size(28, 6); // - // toolStripButtonMoveUp - // - this.toolStripButtonMoveUp.AutoSize = false; - this.toolStripButtonMoveUp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripButtonMoveUp.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonMoveUp.Image"))); - this.toolStripButtonMoveUp.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripButtonMoveUp.ImageTransparentColor = System.Drawing.Color.Magenta; - this.toolStripButtonMoveUp.Name = "toolStripButtonMoveUp"; - this.toolStripButtonMoveUp.Size = new System.Drawing.Size(30, 30); - this.toolStripButtonMoveUp.Text = "Move up"; - this.toolStripButtonMoveUp.Click += new System.EventHandler(this.toolStripButtonMoveUp_Click); - // - // toolStripButtonMoveDown - // - this.toolStripButtonMoveDown.AutoSize = false; - this.toolStripButtonMoveDown.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripButtonMoveDown.Image = global::Fo76ini.Properties.Resources.arrow_down; - this.toolStripButtonMoveDown.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripButtonMoveDown.ImageTransparentColor = System.Drawing.Color.Magenta; - this.toolStripButtonMoveDown.Name = "toolStripButtonMoveDown"; - this.toolStripButtonMoveDown.Size = new System.Drawing.Size(30, 30); - this.toolStripButtonMoveDown.Text = "Move down"; - this.toolStripButtonMoveDown.Click += new System.EventHandler(this.toolStripButtonMoveDown_Click); - // // toolStripSeparator3 // this.toolStripSeparator3.Margin = new System.Windows.Forms.Padding(0, 8, 0, 8); this.toolStripSeparator3.Name = "toolStripSeparator3"; this.toolStripSeparator3.Size = new System.Drawing.Size(28, 6); // - // toolStripButtonModEdit - // - this.toolStripButtonModEdit.AutoSize = false; - this.toolStripButtonModEdit.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripButtonModEdit.Image = global::Fo76ini.Properties.Resources.pencil; - this.toolStripButtonModEdit.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripButtonModEdit.ImageTransparentColor = System.Drawing.Color.Magenta; - this.toolStripButtonModEdit.Name = "toolStripButtonModEdit"; - this.toolStripButtonModEdit.Size = new System.Drawing.Size(30, 30); - this.toolStripButtonModEdit.Text = "Edit mod details"; - this.toolStripButtonModEdit.Click += new System.EventHandler(this.toolStripButtonModEdit_Click); - // - // toolStripButtonModOpenFolder - // - this.toolStripButtonModOpenFolder.AutoSize = false; - this.toolStripButtonModOpenFolder.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripButtonModOpenFolder.Image = global::Fo76ini.Properties.Resources.folder_open; - this.toolStripButtonModOpenFolder.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripButtonModOpenFolder.ImageTransparentColor = System.Drawing.Color.Magenta; - this.toolStripButtonModOpenFolder.Name = "toolStripButtonModOpenFolder"; - this.toolStripButtonModOpenFolder.Size = new System.Drawing.Size(30, 30); - this.toolStripButtonModOpenFolder.Text = "Open mod folder"; - this.toolStripButtonModOpenFolder.Click += new System.EventHandler(this.toolStripButtonModOpenFolder_Click); - // // toolStripSeparator5 // this.toolStripSeparator5.Margin = new System.Windows.Forms.Padding(0, 8, 0, 8); this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(28, 6); // - // toolStripButtonDeleteMod - // - this.toolStripButtonDeleteMod.AutoSize = false; - this.toolStripButtonDeleteMod.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.toolStripButtonDeleteMod.Image = global::Fo76ini.Properties.Resources.bin; - this.toolStripButtonDeleteMod.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripButtonDeleteMod.ImageTransparentColor = System.Drawing.Color.Magenta; - this.toolStripButtonDeleteMod.Name = "toolStripButtonDeleteMod"; - this.toolStripButtonDeleteMod.Size = new System.Drawing.Size(30, 30); - this.toolStripButtonDeleteMod.Text = "Delete mod"; - this.toolStripButtonDeleteMod.Click += new System.EventHandler(this.toolStripButtonDeleteMod_Click); - // // listViewMods // this.listViewMods.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -509,7 +398,6 @@ private void InitializeComponent() // tabPageModsSettings // this.tabPageModsSettings.Controls.Add(this.groupBoxLists); - this.tabPageModsSettings.Controls.Add(this.groupBoxGamePaths); this.tabPageModsSettings.Location = new System.Drawing.Point(4, 22); this.tabPageModsSettings.Name = "tabPageModsSettings"; this.tabPageModsSettings.Padding = new System.Windows.Forms.Padding(3); @@ -530,13 +418,35 @@ private void InitializeComponent() this.groupBoxLists.Controls.Add(this.labelsResourceIndexFileList); this.groupBoxLists.Controls.Add(this.textBoxsResourceArchive2List); this.groupBoxLists.Controls.Add(this.labelsResourceArchive2List); - this.groupBoxLists.Location = new System.Drawing.Point(6, 64); + this.groupBoxLists.Location = new System.Drawing.Point(6, 6); this.groupBoxLists.Name = "groupBoxLists"; - this.groupBoxLists.Size = new System.Drawing.Size(480, 374); + this.groupBoxLists.Size = new System.Drawing.Size(480, 432); this.groupBoxLists.TabIndex = 59; this.groupBoxLists.TabStop = false; this.groupBoxLists.Text = "Lists"; // + // buttonModsResetTextboxes + // + this.buttonModsResetTextboxes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonModsResetTextboxes.Location = new System.Drawing.Point(243, 403); + this.buttonModsResetTextboxes.Name = "buttonModsResetTextboxes"; + this.buttonModsResetTextboxes.Size = new System.Drawing.Size(98, 23); + this.buttonModsResetTextboxes.TabIndex = 60; + this.buttonModsResetTextboxes.Text = "Reset"; + this.buttonModsResetTextboxes.UseVisualStyleBackColor = true; + this.buttonModsResetTextboxes.Click += new System.EventHandler(this.buttonModsResetTextboxes_Click); + // + // buttonModsApplyTextBoxes + // + this.buttonModsApplyTextBoxes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonModsApplyTextBoxes.Location = new System.Drawing.Point(347, 403); + this.buttonModsApplyTextBoxes.Name = "buttonModsApplyTextBoxes"; + this.buttonModsApplyTextBoxes.Size = new System.Drawing.Size(127, 23); + this.buttonModsApplyTextBoxes.TabIndex = 59; + this.buttonModsApplyTextBoxes.Text = "Apply changes"; + this.buttonModsApplyTextBoxes.UseVisualStyleBackColor = true; + this.buttonModsApplyTextBoxes.Click += new System.EventHandler(this.buttonModsApplyTextBoxes_Click); + // // textBoxsResourceIndexFileList // this.textBoxsResourceIndexFileList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -545,13 +455,13 @@ private void InitializeComponent() this.textBoxsResourceIndexFileList.Location = new System.Drawing.Point(210, 37); this.textBoxsResourceIndexFileList.Multiline = true; this.textBoxsResourceIndexFileList.Name = "textBoxsResourceIndexFileList"; - this.textBoxsResourceIndexFileList.Size = new System.Drawing.Size(264, 302); + this.textBoxsResourceIndexFileList.Size = new System.Drawing.Size(264, 360); this.textBoxsResourceIndexFileList.TabIndex = 54; // // buttonModsCleanLists // this.buttonModsCleanLists.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.buttonModsCleanLists.Location = new System.Drawing.Point(6, 345); + this.buttonModsCleanLists.Location = new System.Drawing.Point(6, 403); this.buttonModsCleanLists.Name = "buttonModsCleanLists"; this.buttonModsCleanLists.Size = new System.Drawing.Size(98, 23); this.buttonModsCleanLists.TabIndex = 58; @@ -575,7 +485,7 @@ private void InitializeComponent() this.textBoxsResourceArchive2List.Location = new System.Drawing.Point(6, 37); this.textBoxsResourceArchive2List.Multiline = true; this.textBoxsResourceArchive2List.Name = "textBoxsResourceArchive2List"; - this.textBoxsResourceArchive2List.Size = new System.Drawing.Size(198, 302); + this.textBoxsResourceArchive2List.Size = new System.Drawing.Size(198, 360); this.textBoxsResourceArchive2List.TabIndex = 57; // // labelsResourceArchive2List @@ -587,50 +497,6 @@ private void InitializeComponent() this.labelsResourceArchive2List.TabIndex = 56; this.labelsResourceArchive2List.Text = "sResourceArchive2List"; // - // groupBoxGamePaths - // - this.groupBoxGamePaths.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBoxGamePaths.Controls.Add(this.labelGamePath); - this.groupBoxGamePaths.Controls.Add(this.textBoxGamePath); - this.groupBoxGamePaths.Controls.Add(this.buttonPickGamePath); - this.groupBoxGamePaths.Location = new System.Drawing.Point(6, 6); - this.groupBoxGamePaths.Name = "groupBoxGamePaths"; - this.groupBoxGamePaths.Size = new System.Drawing.Size(480, 52); - this.groupBoxGamePaths.TabIndex = 53; - this.groupBoxGamePaths.TabStop = false; - this.groupBoxGamePaths.Text = "Paths"; - // - // labelGamePath - // - this.labelGamePath.AutoSize = true; - this.labelGamePath.Location = new System.Drawing.Point(6, 20); - this.labelGamePath.Name = "labelGamePath"; - this.labelGamePath.Size = new System.Drawing.Size(78, 13); - this.labelGamePath.TabIndex = 14; - this.labelGamePath.Text = "Game location:"; - // - // textBoxGamePath - // - this.textBoxGamePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxGamePath.Location = new System.Drawing.Point(123, 17); - this.textBoxGamePath.Name = "textBoxGamePath"; - this.textBoxGamePath.Size = new System.Drawing.Size(319, 20); - this.textBoxGamePath.TabIndex = 15; - this.textBoxGamePath.TextChanged += new System.EventHandler(this.textBoxGamePath_TextChanged); - // - // buttonPickGamePath - // - this.buttonPickGamePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonPickGamePath.Location = new System.Drawing.Point(448, 15); - this.buttonPickGamePath.Name = "buttonPickGamePath"; - this.buttonPickGamePath.Size = new System.Drawing.Size(26, 23); - this.buttonPickGamePath.TabIndex = 16; - this.buttonPickGamePath.Text = "..."; - this.buttonPickGamePath.UseVisualStyleBackColor = true; - this.buttonPickGamePath.Click += new System.EventHandler(this.buttonPickGamePath_Click); - // // openFileDialogMod // this.openFileDialogMod.Filter = "All Archives|*.zip;*.rar;*.7z;*.tar;*.tar.gz;*.gz;*.xz;*.lz;*.bz2|Archive2|*.ba2"; @@ -668,27 +534,125 @@ private void InitializeComponent() this.openFileDialogBA2.Filter = "Archive2|*.ba2"; this.openFileDialogBA2.Title = "Add *.ba2 archive."; // - // buttonModsApplyTextBoxes + // toolStripButtonAddMod // - this.buttonModsApplyTextBoxes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonModsApplyTextBoxes.Location = new System.Drawing.Point(347, 345); - this.buttonModsApplyTextBoxes.Name = "buttonModsApplyTextBoxes"; - this.buttonModsApplyTextBoxes.Size = new System.Drawing.Size(127, 23); - this.buttonModsApplyTextBoxes.TabIndex = 59; - this.buttonModsApplyTextBoxes.Text = "Apply changes"; - this.buttonModsApplyTextBoxes.UseVisualStyleBackColor = true; - this.buttonModsApplyTextBoxes.Click += new System.EventHandler(this.buttonModsApplyTextBoxes_Click); + this.toolStripButtonAddMod.AutoSize = false; + this.toolStripButtonAddMod.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonAddMod.Image = global::Fo76ini.Properties.Resources.plus; + this.toolStripButtonAddMod.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonAddMod.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonAddMod.Name = "toolStripButtonAddMod"; + this.toolStripButtonAddMod.Size = new System.Drawing.Size(30, 30); + this.toolStripButtonAddMod.Text = "Add mod (from archive)"; + this.toolStripButtonAddMod.Click += new System.EventHandler(this.toolStripButtonAddMod_Click); // - // buttonModsResetTextboxes + // toolStripButtonAddModFrozen // - this.buttonModsResetTextboxes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonModsResetTextboxes.Location = new System.Drawing.Point(243, 345); - this.buttonModsResetTextboxes.Name = "buttonModsResetTextboxes"; - this.buttonModsResetTextboxes.Size = new System.Drawing.Size(98, 23); - this.buttonModsResetTextboxes.TabIndex = 60; - this.buttonModsResetTextboxes.Text = "Reset"; - this.buttonModsResetTextboxes.UseVisualStyleBackColor = true; - this.buttonModsResetTextboxes.Click += new System.EventHandler(this.buttonModsResetTextboxes_Click); + this.toolStripButtonAddModFrozen.AutoSize = false; + this.toolStripButtonAddModFrozen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonAddModFrozen.Image = global::Fo76ini.Properties.Resources.frozen_plus; + this.toolStripButtonAddModFrozen.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonAddModFrozen.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonAddModFrozen.Name = "toolStripButtonAddModFrozen"; + this.toolStripButtonAddModFrozen.Size = new System.Drawing.Size(30, 30); + this.toolStripButtonAddModFrozen.Text = "Add mod (from *.ba2 archive)"; + this.toolStripButtonAddModFrozen.Click += new System.EventHandler(this.toolStripButtonAddModFrozen_Click); + // + // toolStripButtonAddModFolder + // + this.toolStripButtonAddModFolder.AutoSize = false; + this.toolStripButtonAddModFolder.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonAddModFolder.Image = global::Fo76ini.Properties.Resources.folder_plus; + this.toolStripButtonAddModFolder.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonAddModFolder.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonAddModFolder.Name = "toolStripButtonAddModFolder"; + this.toolStripButtonAddModFolder.Size = new System.Drawing.Size(30, 30); + this.toolStripButtonAddModFolder.Text = "Add mod (from folder)"; + this.toolStripButtonAddModFolder.Click += new System.EventHandler(this.toolStripButtonAddModFolder_Click); + // + // toolStripButtonCheckAll + // + this.toolStripButtonCheckAll.AutoSize = false; + this.toolStripButtonCheckAll.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonCheckAll.Image = global::Fo76ini.Properties.Resources.checkbox_checked; + this.toolStripButtonCheckAll.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonCheckAll.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonCheckAll.Name = "toolStripButtonCheckAll"; + this.toolStripButtonCheckAll.Size = new System.Drawing.Size(30, 30); + this.toolStripButtonCheckAll.Text = "Check/uncheck all"; + this.toolStripButtonCheckAll.Click += new System.EventHandler(this.toolStripButtonCheckAll_Click); + // + // toolStripButtonMoveUp + // + this.toolStripButtonMoveUp.AutoSize = false; + this.toolStripButtonMoveUp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonMoveUp.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonMoveUp.Image"))); + this.toolStripButtonMoveUp.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonMoveUp.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonMoveUp.Name = "toolStripButtonMoveUp"; + this.toolStripButtonMoveUp.Size = new System.Drawing.Size(30, 30); + this.toolStripButtonMoveUp.Text = "Move up"; + this.toolStripButtonMoveUp.Click += new System.EventHandler(this.toolStripButtonMoveUp_Click); + // + // toolStripButtonMoveDown + // + this.toolStripButtonMoveDown.AutoSize = false; + this.toolStripButtonMoveDown.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonMoveDown.Image = global::Fo76ini.Properties.Resources.arrow_down; + this.toolStripButtonMoveDown.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonMoveDown.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonMoveDown.Name = "toolStripButtonMoveDown"; + this.toolStripButtonMoveDown.Size = new System.Drawing.Size(30, 30); + this.toolStripButtonMoveDown.Text = "Move down"; + this.toolStripButtonMoveDown.Click += new System.EventHandler(this.toolStripButtonMoveDown_Click); + // + // toolStripButtonModEdit + // + this.toolStripButtonModEdit.AutoSize = false; + this.toolStripButtonModEdit.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonModEdit.Image = global::Fo76ini.Properties.Resources.pencil; + this.toolStripButtonModEdit.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonModEdit.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonModEdit.Name = "toolStripButtonModEdit"; + this.toolStripButtonModEdit.Size = new System.Drawing.Size(30, 30); + this.toolStripButtonModEdit.Text = "Edit mod details"; + this.toolStripButtonModEdit.Click += new System.EventHandler(this.toolStripButtonModEdit_Click); + // + // toolStripButtonModOpenFolder + // + this.toolStripButtonModOpenFolder.AutoSize = false; + this.toolStripButtonModOpenFolder.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonModOpenFolder.Image = global::Fo76ini.Properties.Resources.folder_open; + this.toolStripButtonModOpenFolder.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonModOpenFolder.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonModOpenFolder.Name = "toolStripButtonModOpenFolder"; + this.toolStripButtonModOpenFolder.Size = new System.Drawing.Size(30, 30); + this.toolStripButtonModOpenFolder.Text = "Open mod folder"; + this.toolStripButtonModOpenFolder.Click += new System.EventHandler(this.toolStripButtonModOpenFolder_Click); + // + // toolStripButtonDeleteMod + // + this.toolStripButtonDeleteMod.AutoSize = false; + this.toolStripButtonDeleteMod.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonDeleteMod.Image = global::Fo76ini.Properties.Resources.bin; + this.toolStripButtonDeleteMod.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonDeleteMod.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonDeleteMod.Name = "toolStripButtonDeleteMod"; + this.toolStripButtonDeleteMod.Size = new System.Drawing.Size(30, 30); + this.toolStripButtonDeleteMod.Text = "Delete mod"; + this.toolStripButtonDeleteMod.Click += new System.EventHandler(this.toolStripButtonDeleteMod_Click); + // + // toolStripButtonUnfreeze + // + this.toolStripButtonUnfreeze.AutoSize = false; + this.toolStripButtonUnfreeze.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonUnfreeze.Image = global::Fo76ini.Properties.Resources.defrost; + this.toolStripButtonUnfreeze.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonUnfreeze.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonUnfreeze.Name = "toolStripButtonUnfreeze"; + this.toolStripButtonUnfreeze.Size = new System.Drawing.Size(30, 30); + this.toolStripButtonUnfreeze.Text = "Unfreeze"; + this.toolStripButtonUnfreeze.Click += new System.EventHandler(this.toolStripButtonUnfreeze_Click); // // FormMods // @@ -701,6 +665,7 @@ private void InitializeComponent() this.Controls.Add(this.labelModsDeploy); this.Controls.Add(this.menuStrip1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; this.MinimumSize = new System.Drawing.Size(540, 600); this.Name = "FormMods"; this.Text = "Manage mods"; @@ -715,8 +680,6 @@ private void InitializeComponent() this.tabPageModsSettings.ResumeLayout(false); this.groupBoxLists.ResumeLayout(false); this.groupBoxLists.PerformLayout(); - this.groupBoxGamePaths.ResumeLayout(false); - this.groupBoxGamePaths.PerformLayout(); this.panel1.ResumeLayout(false); this.panel1.PerformLayout(); this.ResumeLayout(false); @@ -765,10 +728,6 @@ private void InitializeComponent() private System.Windows.Forms.FolderBrowserDialog folderBrowserDialogMod; private System.Windows.Forms.CheckBox checkBoxDisableMods; private System.Windows.Forms.OpenFileDialog openFileDialogGamePath; - private System.Windows.Forms.GroupBox groupBoxGamePaths; - private System.Windows.Forms.Label labelGamePath; - private System.Windows.Forms.TextBox textBoxGamePath; - private System.Windows.Forms.Button buttonPickGamePath; private System.Windows.Forms.ColumnHeader columnHeaderInstallInto; private System.Windows.Forms.ColumnHeader columnHeaderArchiveName; private System.Windows.Forms.Panel panel1; @@ -789,5 +748,6 @@ private void InitializeComponent() private System.Windows.Forms.Label labelsResourceArchive2List; private System.Windows.Forms.Button buttonModsResetTextboxes; private System.Windows.Forms.Button buttonModsApplyTextBoxes; + private System.Windows.Forms.ToolStripButton toolStripButtonUnfreeze; } } \ No newline at end of file diff --git a/Fo76ini/FormMods.cs b/Fo76ini/FormMods.cs index a36abb7..2cae481 100644 --- a/Fo76ini/FormMods.cs +++ b/Fo76ini/FormMods.cs @@ -38,6 +38,7 @@ public FormMods() this.FormClosing += this.FormMods_FormClosing; + this.KeyDown += this.FormMods_KeyDown; this.listViewMods.ItemCheck += this.listViewMods_ItemCheck; /* @@ -255,7 +256,7 @@ private void UpdateSettings() if (!IniFiles.Instance.IsLoaded()) return; this.checkBoxDisableMods.Checked = ManagedMods.Instance.nuclearWinterMode; - this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; + //this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; this.textBoxsResourceArchive2List.Text = String.Join(Environment.NewLine, IniFiles.Instance.GetString(IniFile.F76Custom, "Archive", "sResourceArchive2List", "").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); this.textBoxsResourceIndexFileList.Text = String.Join(Environment.NewLine, IniFiles.Instance.GetString(IniFile.F76Custom, "Archive", "sResourceIndexFileList", "").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); @@ -348,6 +349,45 @@ private void FormMods_FormClosing(object sender, FormClosingEventArgs e) } } + private void FormMods_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.F1) + { + // Open README + showREADMEToolStripMenuItem_Click(sender, e); + } + else if (e.KeyCode == Keys.F5) + { + // Reload UI: + reloadUIToolStripMenuItem_Click(sender, e); + } + + // These shortcuts only apply to the mod list: + if (this.listViewMods.Focused) + { + if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back) + { + // Delete mods: + toolStripButtonDeleteMod_Click(sender, e); + } + else if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) + { + // Edit mods: + toolStripButtonModEdit_Click(sender, e); + } + else if (e.Control && e.KeyCode == Keys.Up) + { + // Move mods up: + toolStripButtonMoveUp_Click(sender, e); + } + else if (e.Control && e.KeyCode == Keys.Down) + { + // Move mods down: + toolStripButtonMoveDown_Click(sender, e); + } + } + } + private void listViewMods_SelectedIndexChanged(object sender, EventArgs e) { if (this.listViewMods.SelectedItems.Count > 0) @@ -669,6 +709,22 @@ private void toolStripButtonAddModFrozen_Click(object sender, EventArgs e) } } + // Unfreeze + private void toolStripButtonUnfreeze_Click(object sender, EventArgs e) + { + if (!ManagedMods.Instance.ValidateGamePath()) + { + MsgBox.ShowID("modsGamePathNotSet", MessageBoxIcon.Information); + return; + } + List indices = new List(); + foreach (ListViewItem item in this.listViewMods.SelectedItems) + indices.Add(item.Index); + Thread thread = new Thread(() => UnfreezeBulkMods(indices)); + thread.IsBackground = true; + thread.Start(); + } + /* @@ -774,7 +830,7 @@ private void repairddsFilesToolStripMenuItem_Click(object sender, EventArgs e) */ // Pick game path - private void buttonPickGamePath_Click(object sender, EventArgs e) + /*private void buttonPickGamePath_Click(object sender, EventArgs e) { if (ManagedMods.Instance.isDeploymentNecessary()) { @@ -825,7 +881,7 @@ private void textBoxGamePath_TextChanged(object sender, EventArgs e) this.textBoxGamePath.BackColor = Color.Red; } } - } + }*/ // Clean lists private void buttonModsCleanLists_Click(object sender, EventArgs e) @@ -871,19 +927,6 @@ private void buttonModsResetTextboxes_Click(object sender, EventArgs e) this.textBoxsResourceIndexFileList.Text = String.Join(Environment.NewLine, IniFiles.Instance.GetString(IniFile.F76Custom, "Archive", "sResourceIndexFileList", "").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); } - // Bethesda.net picked - /*private void radioButtonEditionBethesdaNet_CheckedChanged(object sender, EventArgs e) - { - if (this.radioButtonEditionBethesdaNet.Checked) - ChangeGameEdition(GameEdition.BethesdaNet); - } - - // Steam picked - private void radioButtonEditionSteam_CheckedChanged(object sender, EventArgs e) - { - if (this.radioButtonEditionSteam.Checked) - ChangeGameEdition(GameEdition.Steam); - }*/ public void ChangeGameEdition(GameEdition gameEdition) { @@ -892,7 +935,7 @@ public void ChangeGameEdition(GameEdition gameEdition) IniFiles.Instance.Set(IniFile.Config, "Preferences", "uGameEdition", (uint)gameEdition); ManagedMods.Instance.GameEdition = gameEdition; ManagedMods.Instance.GamePath = IniFiles.Instance.GetString(IniFile.Config, "Preferences", ManagedMods.Instance.GamePathKey, ""); - this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; + //this.textBoxGamePath.Text = ManagedMods.Instance.GamePath; ManagedMods.Instance.Load(); UpdateUI(); } @@ -985,6 +1028,22 @@ private void InstallBulk(String[] files) } } + private void UnfreezeBulkMods(List indices) + { + Invoke(DisableUI); + ManagedMods.Instance.UnfreezeMods(indices, + (text, percent) => { + Invoke(() => Display(text)); + Invoke(() => { if (percent >= 0) { ProgressBarContinuous(percent); } else { ProgressBarMarquee(); } }); + }, + () => { + Invoke(() => EnableUI()); + Invoke(() => UpdateModList()); + Invoke(() => UpdateLabel()); + } + ); + } + private void DeleteMod(int index) { Invoke(() => DisableUI()); diff --git a/Fo76ini/FormMods.resx b/Fo76ini/FormMods.resx index 84143c3..1f5172f 100644 --- a/Fo76ini/FormMods.resx +++ b/Fo76ini/FormMods.resx @@ -123,9 +123,6 @@ 222, 17 - - 222, 17 - diff --git a/Fo76ini/IniFiles.cs b/Fo76ini/IniFiles.cs index 2111341..606b067 100644 --- a/Fo76ini/IniFiles.cs +++ b/Fo76ini/IniFiles.cs @@ -97,7 +97,7 @@ private IniFiles() iniParserConfig.AllowCreateSectionsOnFly = true; iniParserConfig.AssigmentSpacer = ""; iniParserConfig.CaseInsensitive = true; - iniParserConfig.CommentRegex = new System.Text.RegularExpressions.Regex(@";.*"); + iniParserConfig.CommentRegex = new System.Text.RegularExpressions.Regex(@"^;.*"); // Be very generous, allow everything: iniParserConfig.AllowDuplicateKeys = true; diff --git a/Fo76ini/Mods.cs b/Fo76ini/Mods.cs index df2d4c4..ed87851 100644 --- a/Fo76ini/Mods.cs +++ b/Fo76ini/Mods.cs @@ -512,6 +512,19 @@ public void DeleteMods(List indices, Action done = null) done(); } + public void UnfreezeMods(List indices, Action updateProgress = null, Action done = null) + { + foreach (int index in indices) + { + Mod mod = this.Mods[index]; + if (updateProgress != null) + updateProgress($"Unfreezing {mod.Title}...", (index + 1) / indices.Count() * 100); + mod.Unfreeze(); + } + if (done != null) + done(); + } + public bool ValidateGamePath(String path) { return path != null && path.Trim().Length > 0 && Directory.Exists(path) && Directory.Exists(Path.Combine(path, "Data")); @@ -1192,7 +1205,7 @@ public List GetConflictingFiles() foreach (String filePath in upperFiles) { String relUpperPath = Utils.MakeRelativePath(upperPath, filePath); - if (lowerRelPaths.Contains(relUpperPath)) + if (!relUpperPath.Contains("frozen.ba2") && lowerRelPaths.Contains(relUpperPath)) { if (!conflict.conflictingFiles.Contains(relUpperPath)) conflict.conflictingFiles.Add(relUpperPath); @@ -1831,6 +1844,7 @@ public void CopyINILists() { if (!IniFiles.Instance.GetBool(IniFile.Config, "Preferences", "bMultipleGameEditionsUsed", false)) return; + String suffix = ManagedMods.GetEditionSuffix(this.GameEdition); IniFiles.Instance.Set(IniFile.Config, "Mods", "sResourceIndexFileList" + suffix, String.Join(",", IniFiles.Instance.GetString(IniFile.F76Custom, "Archive", "sResourceIndexFileList", ""))); IniFiles.Instance.Set(IniFile.Config, "Mods", "sResourceArchive2List" + suffix, String.Join(",", IniFiles.Instance.GetString(IniFile.F76Custom, "Archive", "sResourceArchive2List", ""))); @@ -1842,16 +1856,25 @@ public void LoadINILists() { if (!IniFiles.Instance.GetBool(IniFile.Config, "Preferences", "bMultipleGameEditionsUsed", false)) return; + String suffix = ManagedMods.GetEditionSuffix(this.GameEdition); String sResourceIndexFileList = IniFiles.Instance.GetString(IniFile.Config, "Mods", "sResourceIndexFileList" + suffix, ""); String sResourceArchive2List = IniFiles.Instance.GetString(IniFile.Config, "Mods", "sResourceArchive2List" + suffix, ""); String sResourceDataDirsFinal = IniFiles.Instance.GetString(IniFile.Config, "Mods", "sResourceDataDirsFinal" + suffix, ""); - if (IniFiles.Instance.Exists(IniFile.Config, "Mods", "sResourceIndexFileList" + suffix)) + + if (sResourceIndexFileList.Length > 0 || IniFiles.Instance.Exists(IniFile.F76Custom, "Mods", "sResourceIndexFileList")) IniFiles.Instance.Set(IniFile.F76Custom, "Archive", "sResourceIndexFileList", sResourceIndexFileList); - if (IniFiles.Instance.Exists(IniFile.Config, "Mods", "sResourceArchive2List" + suffix)) + if (sResourceArchive2List.Length > 0 || IniFiles.Instance.Exists(IniFile.F76Custom, "Mods", "sResourceArchive2List")) IniFiles.Instance.Set(IniFile.F76Custom, "Archive", "sResourceArchive2List", sResourceArchive2List); - if (sResourceDataDirsFinal.Length > 0) + if (sResourceDataDirsFinal.Length > 0 || IniFiles.Instance.Exists(IniFile.F76Custom, "Mods", "sResourceDataDirsFinal")) IniFiles.Instance.Set(IniFile.F76Custom, "Archive", "sResourceDataDirsFinal", sResourceDataDirsFinal); + + if (IniFiles.Instance.GetString(IniFile.F76Custom, "Mods", "sResourceIndexFileList", "").Trim().Length == 0) + IniFiles.Instance.Remove(IniFile.F76Custom, "Mods", "sResourceIndexFileList"); + if (IniFiles.Instance.GetString(IniFile.F76Custom, "Mods", "sResourceArchive2List", "").Trim().Length == 0) + IniFiles.Instance.Remove(IniFile.F76Custom, "Mods", "sResourceArchive2List"); + if (IniFiles.Instance.GetString(IniFile.F76Custom, "Mods", "sResourceDataDirsFinal", "").Trim().Length == 0) + IniFiles.Instance.Remove(IniFile.F76Custom, "Mods", "sResourceDataDirsFinal"); } } diff --git a/Fo76ini/Properties/AssemblyInfo.cs b/Fo76ini/Properties/AssemblyInfo.cs index c17ec21..4e9cfde 100644 --- a/Fo76ini/Properties/AssemblyInfo.cs +++ b/Fo76ini/Properties/AssemblyInfo.cs @@ -1,16 +1,17 @@ -using System.Reflection; +using System.Resources; +using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // Allgemeine Informationen über eine Assembly werden über die folgenden // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, // die einer Assembly zugeordnet sind. -[assembly: AssemblyTitle("Fo76ini")] -[assembly: AssemblyDescription("")] +[assembly: AssemblyTitle("Fallout 76 Quick Configuration")] +[assembly: AssemblyDescription("This tool allows you to tweak INI settings and install mods.")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Fo76ini")] -[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyProduct("Fallout 76 Quick Configuration")] +[assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -34,3 +35,4 @@ // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: NeutralResourcesLanguage("en-US")] diff --git a/Fo76ini/Properties/Resources.Designer.cs b/Fo76ini/Properties/Resources.Designer.cs index 143f1b6..38f81b0 100644 --- a/Fo76ini/Properties/Resources.Designer.cs +++ b/Fo76ini/Properties/Resources.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// Dieser Code wurde von einem Tool generiert. -// Laufzeitversion:4.0.30319.42000 +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 // -// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -// der Code erneut generiert wird. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -13,12 +13,12 @@ namespace Fo76ini.Properties { /// - /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// A strongly-typed resource class, for looking up localized strings, etc. /// - // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert - // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. - // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen - // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] @@ -33,7 +33,7 @@ internal Resources() { } /// - /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ internal Resources() { } /// - /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -61,7 +61,7 @@ internal Resources() { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap arrow_down { get { @@ -71,7 +71,7 @@ internal static System.Drawing.Bitmap arrow_down { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap arrow_up { get { @@ -81,7 +81,7 @@ internal static System.Drawing.Bitmap arrow_up { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap bin { get { @@ -91,7 +91,7 @@ internal static System.Drawing.Bitmap bin { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap checkbox_checked { get { @@ -101,7 +101,17 @@ internal static System.Drawing.Bitmap checkbox_checked { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap defrost { + get { + object obj = ResourceManager.GetObject("defrost", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap error { get { @@ -111,7 +121,7 @@ internal static System.Drawing.Bitmap error { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap folder_open { get { @@ -121,7 +131,7 @@ internal static System.Drawing.Bitmap folder_open { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap folder_plus { get { @@ -131,7 +141,7 @@ internal static System.Drawing.Bitmap folder_plus { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap frozen_plus { get { @@ -141,7 +151,7 @@ internal static System.Drawing.Bitmap frozen_plus { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap icon { get { @@ -151,7 +161,7 @@ internal static System.Drawing.Bitmap icon { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap info { get { @@ -161,7 +171,7 @@ internal static System.Drawing.Bitmap info { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap pencil { get { @@ -171,7 +181,7 @@ internal static System.Drawing.Bitmap pencil { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap plus { get { @@ -181,7 +191,7 @@ internal static System.Drawing.Bitmap plus { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap warning { get { diff --git a/Fo76ini/Properties/Resources.resx b/Fo76ini/Properties/Resources.resx index 79e1f68..2dac1b0 100644 --- a/Fo76ini/Properties/Resources.resx +++ b/Fo76ini/Properties/Resources.resx @@ -157,4 +157,7 @@ ..\icons\frozen-plus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\icons\defrost.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Fo76ini/icons/defrost.png b/Fo76ini/icons/defrost.png new file mode 100644 index 0000000000000000000000000000000000000000..fcad0f3efe533ea7e7f888440349cd6114dccc14 GIT binary patch literal 7534 zcmV-!9g*URP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3*rcI3F0t^Z>bJp_0&9N4vb250!9mEw{aWUy@GtSa+@HozwcSoq zzU;JvpXr+OWaSta-E!R>x9{V0lO;yKJvs5-Pap1Ul^iuc$&w3EKkoQK##X50a{6sT z;AQ{07I)9v?)fHFzwB~+)H@F5_{xtz=5KHQCqL$#sSr6^KV!wZyy}`|D0BMFr$~r9 zZ{E@k@W;=ae*2|~=hd7|H#rt#I=k_*~-gX(4CIdJjN|ICo+(E|3A6 zT}UoFTf8sM5ywh`IxF`f`auR0O zk`-g3eoCy=P){Mnlu}M5Rg+rkIpmmA&befPTrZ)-l1eV6)Y3|?p~jkOuBF!6YHz*; zFfg^;N~^84-o5FZsB^5&=R2&hPB`(TlTSJIw9`Mc_Ga~upZ_3h?#-INnbPOVXV!Stl=5*1 zCpbyU85#4@k@2DoP|#jEv(?4ul{w|iHcwL|&mxm@W0q6KNMYR0r{g|z_bYS%tGt<1 z|5thQ|CTwU)cya+oFR38=ItM{w#0MuX6)%g#ngr)C_KA%<7*eG_5bv7^)w`+ltlgomn|Ju>5Bfeg`?<^ZX79a(K`=frXuMo%BhzL5?7ZO%yXns%ICa>~XI7Ft5 ze4jCU@-RZzx>jtJsJ7Wwb8{}LXz#uf2dY46qmo7rWUP_mK+UH6k9_1c*A75JDv`Bn zx!%3cME&oh`Td3e>*L3PN=jRN)a;%&kZI4Q$L{vYwOgGGiid{}wRK+xOwb+@| zW4Q@AIh$Ltw&k(FtF${TbZRb?6PM}h;L5_jxw;v3Z$`(H(LhK%4dRBO1?&V>28G;! zq2L$7p?6!S1sx(C?+HEql}DU0y15$)J|5!VIWm*B1QU^qs_u4zJ zo<=Pt#~?XFM>w+R)KR9VypjX=KtMkyD3e@@?SQFX_3@NP9C2k<$I0pV9>l!4$QrW2w5IYaz+7jY>*2w=A@fBIEP!F^gW~DCvG=NrnL2JFB<+k;I zNdd8jau3KAlro!9hb|bHXQ$eBxupfF?tWteuBzI~8vI5#-jfHNoRd9gf6gtqfV@eW)Rp=@N1T+|li%xxq_w zf&OZk4inrbXzbq~K^p4N-*Vo2B-2|gC1m)HBcq0?G7m`G9i0Ft@EKT;Z$q7ynt_cu zS>A2ztcaw`GP|2`Y36CZCm^DkFCm%#kPZdKrTWBV6vf262mLwBbZ;NDNq3RMx{rTa7ZFI?s(sJXx)hHV zJIybMPl9-VR|sm|C^?vcvwLwGe+77g$FkHsFn{K^?^rkh&WuFT+JV}2h_T&0bM2i& z^qqWY2~F7Du9H;{hzeAqfKEw$aV@kp`i)C-Nd6!x+Nr*#&ff9r8GSHNhJ3IK&IpUD zFtwYD;MSy{DCCU=p9Oheh z`{Z=YDKn_>Qko|b41jH@Kq82FzzJ{_^$H7J2BNNMKR(~7BKqGdn-ubLW_$<(>t7Dr zQfbI+e8HqC9TzJ}U@Kg8vwC24-0G9zibbO9A2kyA5TcjLK9m#3Lnr(yZTuI-!tT^iD$VzO)&3eBVg`jyDTx#4Ylu-d}$Od>unQK z%nAGWi$?n{C(JKB@kLJXFU7|TNw<1fDjx>nZp=;^;1N-@is@epF5dwCSZ_^>H;_o3>hqP-!_>VY z*?-466#lCV911mCohskeHRWLsGq)h^3F!U~uscsBPUXR6If&}5Y+otv-wcic9NdS) z`8R{pz8jqO)!>+~4(G$*(C|V2X5}O`geXK;z@S_Wv9JHAMh(C!(KA6#h5MWAA*2

V2zO8l&ASR#xZhr)x9@y+U$vQOcC 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 literal 0 HcmV?d00001 diff --git a/Fo76ini/languages/de-DE.xml b/Fo76ini/languages/de-DE.xml index f6cb28b..7a5fde5 100644 --- a/Fo76ini/languages/de-DE.xml +++ b/Fo76ini/languages/de-DE.xml @@ -1,5 +1,5 @@  - + @@ -149,9 +149,9 @@ Bitte wähle Archive2.exe