From 560fac4d1e079cbe1d75225e6319bc68b08f0181 Mon Sep 17 00:00:00 2001 From: FelisDiligens <47528453+FelisDiligens@users.noreply.github.com> Date: Fri, 28 May 2021 08:36:58 +0200 Subject: [PATCH] v1.9.4 --- Fo76ini/Fo76ini.csproj | 1 + .../ExceptionDialog/FormExceptionDialog.cs | 65 +- Fo76ini/Forms/Form1/Form1.cs | 52 +- Fo76ini/Forms/FormMods/FormMods.Designer.cs | 2014 ++++++++--------- Fo76ini/Forms/FormMods/FormMods.Details.cs | 7 +- Fo76ini/Forms/FormMods/FormMods.cs | 17 +- Fo76ini/Forms/FormMods/FormMods.resx | 51 +- .../FormSettings/FormSettings.Designer.cs | 34 +- Fo76ini/Forms/FormSettings/FormSettings.cs | 12 +- Fo76ini/Forms/FormSettings/FormSettings.resx | 69 +- .../Forms/FormWelcome/FormWelcome.Designer.cs | 6 +- Fo76ini/NexusAPI/NXMHandler.cs | 23 +- Fo76ini/Profiles/GameInstance.cs | 57 +- Fo76ini/Profiles/ProfileManager.cs | 2 +- Fo76ini/Properties/Resources.Designer.cs | 20 +- Fo76ini/Properties/Resources.resx | 6 +- Fo76ini/Resources/xbox.png | Bin 5409 -> 18938 bytes Fo76ini/Resources/xbox_24px.png | Bin 1352 -> 3266 bytes Fo76ini/Resources/xbox_hover.png | Bin 0 -> 17866 bytes Fo76ini/Shared.cs | 2 +- Fo76ini/Utilities/Utils.cs | 33 + Fo76ini/languages/de-DE.xml | 113 +- VERSION | 2 +- What's new.rtf | 255 ++- setup.iss | 2 +- 25 files changed, 1431 insertions(+), 1412 deletions(-) create mode 100644 Fo76ini/Resources/xbox_hover.png diff --git a/Fo76ini/Fo76ini.csproj b/Fo76ini/Fo76ini.csproj index 8b186da..480805b 100644 --- a/Fo76ini/Fo76ini.csproj +++ b/Fo76ini/Fo76ini.csproj @@ -404,6 +404,7 @@ + diff --git a/Fo76ini/Forms/ExceptionDialog/FormExceptionDialog.cs b/Fo76ini/Forms/ExceptionDialog/FormExceptionDialog.cs index 0c27718..765a3a6 100644 --- a/Fo76ini/Forms/ExceptionDialog/FormExceptionDialog.cs +++ b/Fo76ini/Forms/ExceptionDialog/FormExceptionDialog.cs @@ -24,75 +24,24 @@ public static FormExceptionDialog OpenDialog(Exception ex) { string currentIniPrefix = "Fallout76"; string currentGamePath = null; + GameEdition currentGameEdition = GameEdition.Unknown; if (ProfileManager.SelectedGame != null) { currentIniPrefix = ProfileManager.SelectedGame.IniPrefix; if (ProfileManager.SelectedGame.ValidateGamePath()) currentGamePath = ProfileManager.SelectedGame.GamePath; + currentGameEdition = ProfileManager.SelectedGame.Edition; } - form.textBoxDebugText.Text = "*********** System information ***********\r\n" + - $"Operating system: {Utils.GetOSName()} {Utils.GetOSArchitecture()}\r\n" + + form.textBoxDebugText.Text = $"Operating system: {Utils.GetOSName()} {Utils.GetOSArchitecture()}\r\n" + $"Program version: {Shared.VERSION}\r\n" + $"User agent: {Shared.AppUserAgent}\r\n" + + $"Running as admin: " + (Utils.HasAdminRights() ? "Yes" : "No") + "\r\n" + + $"Game edition: {currentGameEdition}" + $"System locale: {System.Globalization.CultureInfo.CurrentUICulture.Name}\r\n" + - "\r\n"; /*+ - "************ Available files ************\r\n" + - "config.ini: " + (File.Exists(IniFiles.ConfigPath) ? "Yes" : "No") + "\r\n" + - "profiles.xml: " + (File.Exists(ProfileManager.XMLPath) ? "Yes" : "No") + "\r\n"; - - if (currentGamePath != null) - { - form.textBoxDebugText.Text += "Mods\\managed.xml: " + (File.Exists(Path.Combine(currentGamePath, "Mods", "managed.xml")) ? "Yes" : "No") + "\r\n" + - "Mods\\manifest.xml: " + (File.Exists(Path.Combine(currentGamePath, "Mods", "manifest.xml")) ? "Yes" : "No") + "\r\n" + - "Mods\\resources.txt: " + (File.Exists(Path.Combine(currentGamePath, "Mods", "resources.txt")) ? "Yes" : "No") + "\r\n"; - } - - if (File.Exists(Path.Combine(IniFiles.ParentPath, $"Fallout76.ini"))) - form.textBoxDebugText.Text += "Fallout76.ini\r\n"; - - if (File.Exists(Path.Combine(IniFiles.ParentPath, $"Fallout76Prefs.ini"))) - form.textBoxDebugText.Text += "Fallout76Prefs.ini\r\n"; - - if (File.Exists(Path.Combine(IniFiles.ParentPath, $"Fallout76Custom.ini"))) - form.textBoxDebugText.Text += "Fallout76Custom.ini\r\n"; - - if (File.Exists(Path.Combine(IniFiles.ParentPath, $"Project76.ini"))) - form.textBoxDebugText.Text += "Project76.ini\r\n"; - - if (File.Exists(Path.Combine(IniFiles.ParentPath, $"Project76Prefs.ini"))) - form.textBoxDebugText.Text += "Project76Prefs.ini\r\n"; - - if (File.Exists(Path.Combine(IniFiles.ParentPath, $"Project76Custom.ini"))) - form.textBoxDebugText.Text += "Project76Custom.ini\r\n"; - - if (currentIniPrefix != "Fallout76" && currentIniPrefix != "Project76") - { - form.textBoxDebugText.Text += $"{currentIniPrefix}.ini: " + (File.Exists(Path.Combine(IniFiles.ParentPath, $"{currentIniPrefix}.ini")) ? "Yes" : "No") + "\r\n" + - $"{currentIniPrefix}Prefs.ini: " + (File.Exists(Path.Combine(IniFiles.ParentPath, $"{currentIniPrefix}Prefs.ini")) ? "Yes" : "No") + "\r\n" + - $"{currentIniPrefix}Custom.ini: " + (File.Exists(Path.Combine(IniFiles.ParentPath, $"{currentIniPrefix}Custom.ini")) ? "Yes" : "No") + "\r\n"; - }*/ - - /*form.textBoxDebugText.Text += "\r\n************* Game profiles *************"; - - int gameIndex = 0; - foreach (GameInstance game in ProfileManager.Games) - { - form.textBoxDebugText.Text += $"\r\nProfile #{gameIndex}" + (ProfileManager.SelectedGameIndex == gameIndex ? " (selected)" : "") + "\r\n" + - $" Edition: {game.Edition}\r\n" + - $" *.ini prefix: {game.IniPrefix}\r\n" + - $" Executable: {game.ExecutableName}\r\n" + - $" Game path: " + (game.ValidateGamePath() ? "valid" : "invalid") + "\r\n" + - $" Launch option: {game.PreferredLaunchOption}\r\n"; - - gameIndex++; - } - - if (gameIndex == 0) - form.textBoxDebugText.Text += "\r\nNone or not loaded yet\r\n"; - - form.textBoxDebugText.Text += "\r\n"; */ + $"App locale: {Localization.Locale}" + + "\r\n"; } catch { } diff --git a/Fo76ini/Forms/Form1/Form1.cs b/Fo76ini/Forms/Form1/Form1.cs index f9f1b68..1134783 100644 --- a/Fo76ini/Forms/Form1/Form1.cs +++ b/Fo76ini/Forms/Form1/Form1.cs @@ -412,27 +412,27 @@ private void OnProfileChanged(object sender, ProfileEventArgs e) switch (e.ActiveGameInstance.Edition) { case GameEdition.Steam: - this.pictureBoxGameEdition.Image = Resources.steam; + this.pictureBoxGameEdition.Image = GameInstance.Get128pxBitmap(GameEdition.Steam); this.toolStripStatusLabelEditionText.Text = "Steam"; this.labelGameEdition.Text = "Steam"; break; case GameEdition.BethesdaNet: - this.pictureBoxGameEdition.Image = Resources.bethesda; + this.pictureBoxGameEdition.Image = GameInstance.Get128pxBitmap(GameEdition.BethesdaNet); this.toolStripStatusLabelEditionText.Text = "Bethesda.net"; this.labelGameEdition.Text = "Bethesda"; break; case GameEdition.BethesdaNetPTS: - this.pictureBoxGameEdition.Image = Resources.bethesda_pts; + this.pictureBoxGameEdition.Image = GameInstance.Get128pxBitmap(GameEdition.BethesdaNetPTS); this.toolStripStatusLabelEditionText.Text = "Bethesda.net (PTS)"; this.labelGameEdition.Text = "Bethesda\n(PTS)"; break; case GameEdition.MSStore: - this.pictureBoxGameEdition.Image = Resources.msstore; - this.toolStripStatusLabelEditionText.Text = "Microsoft Store"; - this.labelGameEdition.Text = "Microsoft\nStore"; + this.pictureBoxGameEdition.Image = GameInstance.Get128pxBitmap(GameEdition.MSStore); + this.toolStripStatusLabelEditionText.Text = "Xbox / Microsoft Store"; + this.labelGameEdition.Text = "Xbox"; break; default: - this.pictureBoxGameEdition.Image = Resources.help_128; + this.pictureBoxGameEdition.Image = GameInstance.Get128pxBitmap(GameEdition.Unknown); this.toolStripStatusLabelEditionText.Text = Localization.GetString("unknown"); this.labelGameEdition.Text = Localization.GetString("unknown"); break; @@ -803,46 +803,12 @@ private void showProfiles_OnClick(object sender, EventArgs e) private void pictureBoxGameEdition_MouseEnter(object sender, EventArgs e) { - switch (this.game.Edition) - { - case GameEdition.Steam: - this.pictureBoxGameEdition.Image = Resources.steam_hover; - break; - case GameEdition.BethesdaNet: - this.pictureBoxGameEdition.Image = Resources.bethesda_hover; - break; - case GameEdition.BethesdaNetPTS: - this.pictureBoxGameEdition.Image = Resources.bethesda_pts_hover; - break; - case GameEdition.MSStore: - this.pictureBoxGameEdition.Image = Resources.msstore_hover; - break; - default: - this.pictureBoxGameEdition.Image = Resources.help_128_hover; - break; - } + this.pictureBoxGameEdition.Image = this.game.Get128pxHoverBitmap(); } private void pictureBoxGameEdition_MouseLeave(object sender, EventArgs e) { - switch (this.game.Edition) - { - case GameEdition.Steam: - this.pictureBoxGameEdition.Image = Resources.steam; - break; - case GameEdition.BethesdaNet: - this.pictureBoxGameEdition.Image = Resources.bethesda; - break; - case GameEdition.BethesdaNetPTS: - this.pictureBoxGameEdition.Image = Resources.bethesda_pts; - break; - case GameEdition.MSStore: - this.pictureBoxGameEdition.Image = Resources.msstore; - break; - default: - this.pictureBoxGameEdition.Image = Resources.help_128; - break; - } + this.pictureBoxGameEdition.Image = this.game.Get128pxBitmap(); } #endregion diff --git a/Fo76ini/Forms/FormMods/FormMods.Designer.cs b/Fo76ini/Forms/FormMods/FormMods.Designer.cs index c90c017..36a1342 100644 --- a/Fo76ini/Forms/FormMods/FormMods.Designer.cs +++ b/Fo76ini/Forms/FormMods/FormMods.Designer.cs @@ -60,96 +60,6 @@ private void InitializeComponent() this.progressBarMods = new System.Windows.Forms.ProgressBar(); this.buttonModsDeploy = new System.Windows.Forms.Button(); this.labelModsDeploy = new System.Windows.Forms.Label(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPageModOrder = new System.Windows.Forms.TabPage(); - this.pictureBoxCollapseDetails = new System.Windows.Forms.PictureBox(); - this.panelModDetails = new System.Windows.Forms.Panel(); - this.panelModDetailsHeader = new System.Windows.Forms.Panel(); - this.buttonModAbstain = new System.Windows.Forms.Button(); - this.buttonModEndorse = new System.Windows.Forms.Button(); - this.labelModEndorseStatus = new System.Windows.Forms.Label(); - this.labelModTitle = new System.Windows.Forms.Label(); - this.checkBoxModDetailsEnabled = new System.Windows.Forms.CheckBox(); - this.panelModDetailsInner = new System.Windows.Forms.Panel(); - this.groupBoxNotes = new System.Windows.Forms.GroupBox(); - this.textBoxNotes = new System.Windows.Forms.TextBox(); - this.groupBoxModReplace = new System.Windows.Forms.GroupBox(); - this.labelModDetailsReplace = new System.Windows.Forms.Label(); - this.linkLabelModDeleteFolderContents = new System.Windows.Forms.LinkLabel(); - this.panelModDetailsReplaceDragAndDrop = new System.Windows.Forms.Panel(); - this.linkLabelModReplaceFilesWithFolder = new System.Windows.Forms.LinkLabel(); - this.linkLabelModReplaceFilesWithArchive = new System.Windows.Forms.LinkLabel(); - this.groupBoxModDetailsInstallationOptions = new System.Windows.Forms.GroupBox(); - this.linkLabelModInvalidateFrozenArchive = new System.Windows.Forms.LinkLabel(); - this.linkLabelModAutoDetectInstallOptions = new System.Windows.Forms.LinkLabel(); - this.labelModInstallWarning = new System.Windows.Forms.Label(); - this.buttonModPickRootDir = new System.Windows.Forms.Button(); - this.labelModInstallAs = new System.Windows.Forms.Label(); - this.labelModArchivePreset = new System.Windows.Forms.Label(); - this.checkBoxFreezeArchive = new System.Windows.Forms.CheckBox(); - this.labelModInstallInto = new System.Windows.Forms.Label(); - this.comboBoxModInstallAs = new System.Windows.Forms.ComboBox(); - this.buttonModDetailsSuggestArchiveName = new System.Windows.Forms.Button(); - this.textBoxModRootDir = new System.Windows.Forms.TextBox(); - this.comboBoxModArchivePreset = new System.Windows.Forms.ComboBox(); - this.textBoxModArchiveName = new System.Windows.Forms.TextBox(); - this.labelModArchiveName = new System.Windows.Forms.Label(); - this.groupBoxModDetailsDetails = new System.Windows.Forms.GroupBox(); - this.textBoxModFolderName = new System.Windows.Forms.TextBox(); - this.labelModFolderName = new System.Windows.Forms.Label(); - this.buttonModOpenPage = new System.Windows.Forms.Button(); - this.panelModDetailsNexusMods = new System.Windows.Forms.Panel(); - this.linkLabelModSetLatestVersion = new System.Windows.Forms.LinkLabel(); - this.labelModAuthor = new System.Windows.Forms.Label(); - this.labelModLatestVersion = new System.Windows.Forms.Label(); - this.labelModLatestVersionDesc = new System.Windows.Forms.Label(); - this.labelModAuthorDesc = new System.Windows.Forms.Label(); - this.textBoxModVersion = new System.Windows.Forms.TextBox(); - this.labelModVersion = new System.Windows.Forms.Label(); - this.textBoxModURL = new System.Windows.Forms.TextBox(); - this.labelModName = new System.Windows.Forms.Label(); - this.labelModURL = new System.Windows.Forms.Label(); - this.textBoxModName = new System.Windows.Forms.TextBox(); - this.labelModSummary = new System.Windows.Forms.Label(); - this.pictureBoxModThumbnail = new System.Windows.Forms.PictureBox(); - this.toolStrip1 = new System.Windows.Forms.ToolStrip(); - this.toolStripButtonAddMod = 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.toolStripButtonModOpenFolder = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripButtonFreeze = new System.Windows.Forms.ToolStripButton(); - this.toolStripButtonModUnfreeze = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparator6 = 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.columnHeaderVersion = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeaderInstallAs = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeaderInstallInto = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeaderArchiveName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeaderArchivePreset = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeaderFrozenState = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.tabPageModsSettings = new System.Windows.Forms.TabPage(); - this.groupBoxModsBehavior = new System.Windows.Forms.GroupBox(); - this.checkBoxFreezeBundledArchives = new System.Windows.Forms.CheckBox(); - this.checkBoxModsUseHardlinks = new System.Windows.Forms.CheckBox(); - this.checkBoxAddArchivesAsBundled = new System.Windows.Forms.CheckBox(); - this.groupBoxLists = new System.Windows.Forms.GroupBox(); - this.buttonModsResetTextbox = new System.Windows.Forms.Button(); - this.buttonModsApplyTextBox = new System.Windows.Forms.Button(); - this.textBoxResourceList = new System.Windows.Forms.TextBox(); - this.buttonModsCleanList = new System.Windows.Forms.Button(); - this.labelsResourceIndexFileList = new System.Windows.Forms.Label(); - this.tabPageNexusMods = new System.Windows.Forms.TabPage(); - this.labelNexusModsMovedNotice2 = new System.Windows.Forms.Label(); - this.labelNexusModsMovedNotice = new System.Windows.Forms.Label(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.toolTip = new System.Windows.Forms.ToolTip(this.components); this.openFileDialogMod = new System.Windows.Forms.OpenFileDialog(); this.folderBrowserDialogMod = new System.Windows.Forms.FolderBrowserDialog(); @@ -167,28 +77,112 @@ private void InitializeComponent() this.toolStripStatusLabelDeploymentStatus = new System.Windows.Forms.ToolStripStatusLabel(); this.pictureBoxModsLoadingGIF = new System.Windows.Forms.PictureBox(); this.timerCheckForNXM = new System.Windows.Forms.Timer(this.components); + this.tabPageModsSettings = new System.Windows.Forms.TabPage(); + this.groupBoxLists = new System.Windows.Forms.GroupBox(); + this.labelsResourceIndexFileList = new System.Windows.Forms.Label(); + this.buttonModsCleanList = new System.Windows.Forms.Button(); + this.textBoxResourceList = new System.Windows.Forms.TextBox(); + this.buttonModsApplyTextBox = new System.Windows.Forms.Button(); + this.buttonModsResetTextbox = new System.Windows.Forms.Button(); + this.groupBoxModsBehavior = new System.Windows.Forms.GroupBox(); + this.checkBoxAddArchivesAsBundled = new System.Windows.Forms.CheckBox(); + this.checkBoxModsUseHardlinks = new System.Windows.Forms.CheckBox(); + this.checkBoxFreezeBundledArchives = new System.Windows.Forms.CheckBox(); + this.tabPageModOrder = new System.Windows.Forms.TabPage(); + this.listViewMods = new System.Windows.Forms.ListView(); + this.columnHeaderModTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderVersion = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderInstallAs = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderInstallInto = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderArchiveName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderArchivePreset = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderFrozenState = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.toolStripButtonAddMod = 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.toolStripButtonModOpenFolder = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButtonFreeze = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonModUnfreeze = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButtonDeleteMod = new System.Windows.Forms.ToolStripButton(); + this.panelModDetails = new System.Windows.Forms.Panel(); + this.pictureBoxModThumbnail = new System.Windows.Forms.PictureBox(); + this.panelModDetailsInner = new System.Windows.Forms.Panel(); + this.labelModSummary = new System.Windows.Forms.Label(); + this.groupBoxModDetailsDetails = new System.Windows.Forms.GroupBox(); + this.textBoxModName = new System.Windows.Forms.TextBox(); + this.labelModURL = new System.Windows.Forms.Label(); + this.labelModName = new System.Windows.Forms.Label(); + this.textBoxModURL = new System.Windows.Forms.TextBox(); + this.labelModVersion = new System.Windows.Forms.Label(); + this.textBoxModVersion = new System.Windows.Forms.TextBox(); + this.panelModDetailsNexusMods = new System.Windows.Forms.Panel(); + this.labelModAuthorDesc = new System.Windows.Forms.Label(); + this.labelModLatestVersionDesc = new System.Windows.Forms.Label(); + this.labelModLatestVersion = new System.Windows.Forms.Label(); + this.labelModAuthor = new System.Windows.Forms.Label(); + this.linkLabelModSetLatestVersion = new System.Windows.Forms.LinkLabel(); + this.buttonModOpenPage = new System.Windows.Forms.Button(); + this.labelModFolderName = new System.Windows.Forms.Label(); + this.textBoxModFolderName = new System.Windows.Forms.TextBox(); + this.groupBoxModDetailsInstallationOptions = new System.Windows.Forms.GroupBox(); + this.labelModArchiveName = new System.Windows.Forms.Label(); + this.textBoxModArchiveName = new System.Windows.Forms.TextBox(); + this.comboBoxModArchivePreset = new System.Windows.Forms.ComboBox(); + this.textBoxModRootDir = new System.Windows.Forms.TextBox(); + this.buttonModDetailsSuggestArchiveName = new System.Windows.Forms.Button(); + this.comboBoxModInstallAs = new System.Windows.Forms.ComboBox(); + this.labelModInstallInto = new System.Windows.Forms.Label(); + this.checkBoxFreezeArchive = new System.Windows.Forms.CheckBox(); + this.labelModArchivePreset = new System.Windows.Forms.Label(); + this.labelModInstallAs = new System.Windows.Forms.Label(); + this.buttonModPickRootDir = new System.Windows.Forms.Button(); + this.labelModInstallWarning = new System.Windows.Forms.Label(); + this.linkLabelModAutoDetectInstallOptions = new System.Windows.Forms.LinkLabel(); + this.linkLabelModInvalidateFrozenArchive = new System.Windows.Forms.LinkLabel(); + this.groupBoxModReplace = new System.Windows.Forms.GroupBox(); + this.linkLabelModReplaceFilesWithArchive = new System.Windows.Forms.LinkLabel(); + this.linkLabelModReplaceFilesWithFolder = new System.Windows.Forms.LinkLabel(); + this.panelModDetailsReplaceDragAndDrop = new System.Windows.Forms.Panel(); + this.linkLabelModDeleteFolderContents = new System.Windows.Forms.LinkLabel(); + this.labelModDetailsReplace = new System.Windows.Forms.Label(); + this.groupBoxNotes = new System.Windows.Forms.GroupBox(); + this.textBoxNotes = new System.Windows.Forms.TextBox(); + this.panelModDetailsHeader = new System.Windows.Forms.Panel(); + this.checkBoxModDetailsEnabled = new System.Windows.Forms.CheckBox(); + this.labelModTitle = new System.Windows.Forms.Label(); + this.labelModEndorseStatus = new System.Windows.Forms.Label(); + this.buttonModEndorse = new System.Windows.Forms.Button(); + this.buttonModAbstain = new System.Windows.Forms.Button(); + this.pictureBoxCollapseDetails = new System.Windows.Forms.PictureBox(); + this.tabControl1 = new System.Windows.Forms.TabControl(); this.menuStrip1.SuspendLayout(); - this.tabControl1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.statusStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxModsLoadingGIF)).BeginInit(); + this.tabPageModsSettings.SuspendLayout(); + this.groupBoxLists.SuspendLayout(); + this.groupBoxModsBehavior.SuspendLayout(); this.tabPageModOrder.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxCollapseDetails)).BeginInit(); + this.toolStrip1.SuspendLayout(); this.panelModDetails.SuspendLayout(); - this.panelModDetailsHeader.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxModThumbnail)).BeginInit(); this.panelModDetailsInner.SuspendLayout(); - this.groupBoxNotes.SuspendLayout(); - this.groupBoxModReplace.SuspendLayout(); - this.groupBoxModDetailsInstallationOptions.SuspendLayout(); this.groupBoxModDetailsDetails.SuspendLayout(); this.panelModDetailsNexusMods.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxModThumbnail)).BeginInit(); - this.toolStrip1.SuspendLayout(); - this.tabPageModsSettings.SuspendLayout(); - this.groupBoxModsBehavior.SuspendLayout(); - this.groupBoxLists.SuspendLayout(); - this.tabPageNexusMods.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.panel1.SuspendLayout(); - this.statusStrip1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxModsLoadingGIF)).BeginInit(); + this.groupBoxModDetailsInstallationOptions.SuspendLayout(); + this.groupBoxModReplace.SuspendLayout(); + this.groupBoxNotes.SuspendLayout(); + this.panelModDetailsHeader.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxCollapseDetails)).BeginInit(); + this.tabControl1.SuspendLayout(); this.SuspendLayout(); // // menuStrip1 @@ -445,622 +439,327 @@ private void InitializeComponent() this.labelModsDeploy.TabIndex = 52; this.labelModsDeploy.Text = "Ready"; // - // tabControl1 + // openFileDialogMod // - this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tabControl1.Controls.Add(this.tabPageModOrder); - this.tabControl1.Controls.Add(this.tabPageModsSettings); - this.tabControl1.Controls.Add(this.tabPageNexusMods); - this.tabControl1.Location = new System.Drawing.Point(12, 27); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(760, 490); - this.tabControl1.TabIndex = 54; + this.openFileDialogMod.Filter = "All Archives|*.zip;*.rar;*.7z;*.tar;*.ba2"; + this.openFileDialogMod.Title = "Add *.ba2 or any other archive."; // - // tabPageModOrder + // checkBoxDisableMods // - this.tabPageModOrder.Controls.Add(this.pictureBoxCollapseDetails); - this.tabPageModOrder.Controls.Add(this.panelModDetails); - this.tabPageModOrder.Controls.Add(this.toolStrip1); - this.tabPageModOrder.Controls.Add(this.listViewMods); - this.tabPageModOrder.Location = new System.Drawing.Point(4, 22); - this.tabPageModOrder.Name = "tabPageModOrder"; - this.tabPageModOrder.Padding = new System.Windows.Forms.Padding(3); - this.tabPageModOrder.Size = new System.Drawing.Size(752, 464); - this.tabPageModOrder.TabIndex = 0; - this.tabPageModOrder.Text = "Mod order"; - this.tabPageModOrder.UseVisualStyleBackColor = true; + this.checkBoxDisableMods.AutoSize = true; + this.checkBoxDisableMods.Location = new System.Drawing.Point(4, 3); + this.checkBoxDisableMods.Name = "checkBoxDisableMods"; + this.checkBoxDisableMods.Size = new System.Drawing.Size(89, 17); + this.checkBoxDisableMods.TabIndex = 55; + this.checkBoxDisableMods.Text = "Disable mods"; + this.checkBoxDisableMods.UseVisualStyleBackColor = true; + this.checkBoxDisableMods.CheckedChanged += new System.EventHandler(this.checkBoxDisableMods_CheckedChanged); // - // pictureBoxCollapseDetails + // openFileDialogGamePath // - this.pictureBoxCollapseDetails.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.pictureBoxCollapseDetails.BackColor = System.Drawing.SystemColors.ButtonShadow; - this.pictureBoxCollapseDetails.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pictureBoxCollapseDetails.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxCollapseDetails.Image"))); - this.pictureBoxCollapseDetails.Location = new System.Drawing.Point(333, 0); - this.pictureBoxCollapseDetails.Name = "pictureBoxCollapseDetails"; - this.pictureBoxCollapseDetails.Size = new System.Drawing.Size(24, 464); - this.pictureBoxCollapseDetails.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.pictureBoxCollapseDetails.TabIndex = 59; - this.pictureBoxCollapseDetails.TabStop = false; - this.pictureBoxCollapseDetails.Click += new System.EventHandler(this.pictureBoxCollapseDetails_Click); + this.openFileDialogGamePath.Filter = "Fallout 76 executable|Fallout76.exe,Project76_GamePass.exe"; // - // panelModDetails + // panel1 // - this.panelModDetails.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.panelModDetails.AutoScrollMargin = new System.Drawing.Size(0, 20); - this.panelModDetails.BackColor = System.Drawing.SystemColors.Window; - this.panelModDetails.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panelModDetails.Controls.Add(this.panelModDetailsHeader); - this.panelModDetails.Controls.Add(this.panelModDetailsInner); - this.panelModDetails.Controls.Add(this.pictureBoxModThumbnail); - this.panelModDetails.Location = new System.Drawing.Point(356, 0); - this.panelModDetails.Name = "panelModDetails"; - this.panelModDetails.Size = new System.Drawing.Size(396, 464); - this.panelModDetails.TabIndex = 58; + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.Controls.Add(this.buttonModsDeploy); + this.panel1.Controls.Add(this.checkBoxDisableMods); + this.panel1.Location = new System.Drawing.Point(618, 521); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(166, 51); + this.panel1.TabIndex = 56; // - // panelModDetailsHeader + // openFileDialogBA2 // - this.panelModDetailsHeader.Controls.Add(this.buttonModAbstain); - this.panelModDetailsHeader.Controls.Add(this.buttonModEndorse); - this.panelModDetailsHeader.Controls.Add(this.labelModEndorseStatus); - this.panelModDetailsHeader.Controls.Add(this.labelModTitle); - this.panelModDetailsHeader.Controls.Add(this.checkBoxModDetailsEnabled); - this.panelModDetailsHeader.Location = new System.Drawing.Point(0, 157); - this.panelModDetailsHeader.Name = "panelModDetailsHeader"; - this.panelModDetailsHeader.Size = new System.Drawing.Size(395, 62); - this.panelModDetailsHeader.TabIndex = 77; + this.openFileDialogBA2.DefaultExt = "ba2"; + this.openFileDialogBA2.Filter = "Archive2|*.ba2"; + this.openFileDialogBA2.Title = "Add *.ba2 archive."; // - // buttonModAbstain + // statusStrip1 // - this.buttonModAbstain.BackColor = System.Drawing.Color.Transparent; - this.buttonModAbstain.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); - this.buttonModAbstain.FlatAppearance.BorderSize = 0; - this.buttonModAbstain.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonModAbstain.Image = global::Fo76ini.Properties.Resources.dislike; - this.buttonModAbstain.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.buttonModAbstain.Location = new System.Drawing.Point(356, 1); - this.buttonModAbstain.Name = "buttonModAbstain"; - this.buttonModAbstain.Size = new System.Drawing.Size(36, 40); - this.buttonModAbstain.TabIndex = 73; - this.toolTip.SetToolTip(this.buttonModAbstain, "Abstain from endorsing this mod."); - this.buttonModAbstain.UseVisualStyleBackColor = false; - this.buttonModAbstain.Click += new System.EventHandler(this.buttonModAbstain_Click); + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabelDescModCount, + this.toolStripStatusLabelModCount, + this.toolStripStatusLabelDescEnabledCount, + this.toolStripStatusLabelEnabledCount, + this.toolStripStatusLabelSpacer, + this.toolStripStatusLabelDeploymentStatus}); + this.statusStrip1.Location = new System.Drawing.Point(0, 579); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(784, 22); + this.statusStrip1.TabIndex = 57; + this.statusStrip1.Text = "statusStrip1"; // - // buttonModEndorse + // toolStripStatusLabelDescModCount // - this.buttonModEndorse.BackColor = System.Drawing.Color.Transparent; - this.buttonModEndorse.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128))))); - this.buttonModEndorse.FlatAppearance.BorderSize = 0; - this.buttonModEndorse.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonModEndorse.Image = global::Fo76ini.Properties.Resources.like; - this.buttonModEndorse.ImageAlign = System.Drawing.ContentAlignment.TopCenter; - this.buttonModEndorse.Location = new System.Drawing.Point(316, 1); - this.buttonModEndorse.Name = "buttonModEndorse"; - this.buttonModEndorse.Size = new System.Drawing.Size(36, 40); - this.buttonModEndorse.TabIndex = 72; - this.toolTip.SetToolTip(this.buttonModEndorse, "Endorse this mod."); - this.buttonModEndorse.UseVisualStyleBackColor = false; - this.buttonModEndorse.Click += new System.EventHandler(this.buttonModEndorse_Click); + this.toolStripStatusLabelDescModCount.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.toolStripStatusLabelDescModCount.Margin = new System.Windows.Forms.Padding(8, 3, 3, 2); + this.toolStripStatusLabelDescModCount.Name = "toolStripStatusLabelDescModCount"; + this.toolStripStatusLabelDescModCount.Size = new System.Drawing.Size(70, 17); + this.toolStripStatusLabelDescModCount.Text = "Mod count:"; // - // labelModEndorseStatus + // toolStripStatusLabelModCount // - this.labelModEndorseStatus.Location = new System.Drawing.Point(145, 41); - this.labelModEndorseStatus.Name = "labelModEndorseStatus"; - this.labelModEndorseStatus.Size = new System.Drawing.Size(246, 13); - this.labelModEndorseStatus.TabIndex = 71; - this.labelModEndorseStatus.Text = "< Whether or not the user has endorsed this mod >"; - this.labelModEndorseStatus.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolStripStatusLabelModCount.Name = "toolStripStatusLabelModCount"; + this.toolStripStatusLabelModCount.Size = new System.Drawing.Size(13, 17); + this.toolStripStatusLabelModCount.Text = "0"; // - // labelModTitle + // toolStripStatusLabelDescEnabledCount // - this.labelModTitle.AutoEllipsis = true; - this.labelModTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelModTitle.Location = new System.Drawing.Point(-12, 2); - this.labelModTitle.Name = "labelModTitle"; - this.labelModTitle.Padding = new System.Windows.Forms.Padding(16, 2, 0, 2); - this.labelModTitle.Size = new System.Drawing.Size(322, 25); - this.labelModTitle.TabIndex = 75; - this.labelModTitle.Text = "< Mod name goes here >"; + this.toolStripStatusLabelDescEnabledCount.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.toolStripStatusLabelDescEnabledCount.Margin = new System.Windows.Forms.Padding(50, 3, 3, 2); + this.toolStripStatusLabelDescEnabledCount.Name = "toolStripStatusLabelDescEnabledCount"; + this.toolStripStatusLabelDescEnabledCount.Size = new System.Drawing.Size(53, 17); + this.toolStripStatusLabelDescEnabledCount.Text = "Enabled:"; // - // checkBoxModDetailsEnabled + // toolStripStatusLabelEnabledCount // - this.checkBoxModDetailsEnabled.AutoSize = true; - this.checkBoxModDetailsEnabled.Location = new System.Drawing.Point(8, 30); - this.checkBoxModDetailsEnabled.Name = "checkBoxModDetailsEnabled"; - this.checkBoxModDetailsEnabled.Size = new System.Drawing.Size(101, 17); - this.checkBoxModDetailsEnabled.TabIndex = 74; - this.checkBoxModDetailsEnabled.Text = "Enable this mod"; - this.checkBoxModDetailsEnabled.UseVisualStyleBackColor = true; - this.checkBoxModDetailsEnabled.CheckedChanged += new System.EventHandler(this.checkBoxModDetailsEnabled_CheckedChanged); + this.toolStripStatusLabelEnabledCount.Name = "toolStripStatusLabelEnabledCount"; + this.toolStripStatusLabelEnabledCount.Size = new System.Drawing.Size(13, 17); + this.toolStripStatusLabelEnabledCount.Text = "0"; // - // panelModDetailsInner + // toolStripStatusLabelSpacer // - this.panelModDetailsInner.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.panelModDetailsInner.AutoScroll = true; - this.panelModDetailsInner.AutoScrollMargin = new System.Drawing.Size(0, 8); - this.panelModDetailsInner.BackColor = System.Drawing.SystemColors.Window; - this.panelModDetailsInner.Controls.Add(this.groupBoxNotes); - this.panelModDetailsInner.Controls.Add(this.groupBoxModReplace); - this.panelModDetailsInner.Controls.Add(this.groupBoxModDetailsInstallationOptions); - this.panelModDetailsInner.Controls.Add(this.groupBoxModDetailsDetails); - this.panelModDetailsInner.Controls.Add(this.labelModSummary); - this.panelModDetailsInner.Location = new System.Drawing.Point(0, 218); - this.panelModDetailsInner.Name = "panelModDetailsInner"; - this.panelModDetailsInner.Size = new System.Drawing.Size(394, 246); - this.panelModDetailsInner.TabIndex = 76; + this.toolStripStatusLabelSpacer.Name = "toolStripStatusLabelSpacer"; + this.toolStripStatusLabelSpacer.Size = new System.Drawing.Size(423, 17); + this.toolStripStatusLabelSpacer.Spring = true; + this.toolStripStatusLabelSpacer.Text = " "; // - // groupBoxNotes + // toolStripStatusLabelDeploymentStatus // - this.groupBoxNotes.Controls.Add(this.textBoxNotes); - this.groupBoxNotes.Location = new System.Drawing.Point(7, 257); - this.groupBoxNotes.Name = "groupBoxNotes"; - this.groupBoxNotes.Size = new System.Drawing.Size(364, 151); - this.groupBoxNotes.TabIndex = 76; - this.groupBoxNotes.TabStop = false; - this.groupBoxNotes.Text = "Notes"; + this.toolStripStatusLabelDeploymentStatus.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.toolStripStatusLabelDeploymentStatus.ForeColor = System.Drawing.Color.Crimson; + this.toolStripStatusLabelDeploymentStatus.Name = "toolStripStatusLabelDeploymentStatus"; + this.toolStripStatusLabelDeploymentStatus.Size = new System.Drawing.Size(133, 17); + this.toolStripStatusLabelDeploymentStatus.Text = "Deployment necessary"; // - // textBoxNotes + // pictureBoxModsLoadingGIF // - this.textBoxNotes.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxNotes.Font = new System.Drawing.Font("Lucida Console", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBoxNotes.Location = new System.Drawing.Point(6, 19); - this.textBoxNotes.Multiline = true; - this.textBoxNotes.Name = "textBoxNotes"; - this.textBoxNotes.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.textBoxNotes.Size = new System.Drawing.Size(351, 120); - this.textBoxNotes.TabIndex = 0; - this.textBoxNotes.TextChanged += new System.EventHandler(this.textBoxNotes_TextChanged); + this.pictureBoxModsLoadingGIF.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.pictureBoxModsLoadingGIF.BackColor = System.Drawing.Color.White; + this.pictureBoxModsLoadingGIF.Image = global::Fo76ini.Properties.Resources.Spinner_200; + this.pictureBoxModsLoadingGIF.Location = new System.Drawing.Point(0, 27); + this.pictureBoxModsLoadingGIF.Name = "pictureBoxModsLoadingGIF"; + this.pictureBoxModsLoadingGIF.Size = new System.Drawing.Size(16, 490); + this.pictureBoxModsLoadingGIF.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pictureBoxModsLoadingGIF.TabIndex = 57; + this.pictureBoxModsLoadingGIF.TabStop = false; + this.pictureBoxModsLoadingGIF.Visible = false; // - // groupBoxModReplace + // timerCheckForNXM // - this.groupBoxModReplace.Controls.Add(this.labelModDetailsReplace); - this.groupBoxModReplace.Controls.Add(this.linkLabelModDeleteFolderContents); - this.groupBoxModReplace.Controls.Add(this.panelModDetailsReplaceDragAndDrop); - this.groupBoxModReplace.Controls.Add(this.linkLabelModReplaceFilesWithFolder); - this.groupBoxModReplace.Controls.Add(this.linkLabelModReplaceFilesWithArchive); - this.groupBoxModReplace.Location = new System.Drawing.Point(7, 667); - this.groupBoxModReplace.Name = "groupBoxModReplace"; - this.groupBoxModReplace.Size = new System.Drawing.Size(364, 136); - this.groupBoxModReplace.TabIndex = 75; - this.groupBoxModReplace.TabStop = false; - this.groupBoxModReplace.Text = "Add / replace mod files"; + this.timerCheckForNXM.Interval = 1000; + this.timerCheckForNXM.Tick += new System.EventHandler(this.timerCheckForNXM_Tick); // - // labelModDetailsReplace + // tabPageModsSettings // - this.labelModDetailsReplace.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.labelModDetailsReplace.ForeColor = System.Drawing.Color.Gray; - this.labelModDetailsReplace.Location = new System.Drawing.Point(175, 76); - this.labelModDetailsReplace.Name = "labelModDetailsReplace"; - this.labelModDetailsReplace.Size = new System.Drawing.Size(167, 52); - this.labelModDetailsReplace.TabIndex = 0; - this.labelModDetailsReplace.Text = "Drag-and-drop files/folders into the left box to add/replace files."; - this.labelModDetailsReplace.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.tabPageModsSettings.Controls.Add(this.groupBoxModsBehavior); + this.tabPageModsSettings.Controls.Add(this.groupBoxLists); + this.tabPageModsSettings.Location = new System.Drawing.Point(4, 22); + this.tabPageModsSettings.Name = "tabPageModsSettings"; + this.tabPageModsSettings.Padding = new System.Windows.Forms.Padding(3); + this.tabPageModsSettings.Size = new System.Drawing.Size(752, 464); + this.tabPageModsSettings.TabIndex = 1; + this.tabPageModsSettings.Text = "Settings"; + this.tabPageModsSettings.UseVisualStyleBackColor = true; // - // linkLabelModDeleteFolderContents + // groupBoxLists // - this.linkLabelModDeleteFolderContents.AutoSize = true; - this.linkLabelModDeleteFolderContents.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; - this.linkLabelModDeleteFolderContents.Location = new System.Drawing.Point(173, 60); - this.linkLabelModDeleteFolderContents.Name = "linkLabelModDeleteFolderContents"; - this.linkLabelModDeleteFolderContents.Size = new System.Drawing.Size(111, 13); - this.linkLabelModDeleteFolderContents.TabIndex = 5; - this.linkLabelModDeleteFolderContents.TabStop = true; - this.linkLabelModDeleteFolderContents.Text = "Delete folder contents"; - this.linkLabelModDeleteFolderContents.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModDeleteFolderContents_LinkClicked); + this.groupBoxLists.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxLists.Controls.Add(this.buttonModsResetTextbox); + this.groupBoxLists.Controls.Add(this.buttonModsApplyTextBox); + this.groupBoxLists.Controls.Add(this.textBoxResourceList); + this.groupBoxLists.Controls.Add(this.buttonModsCleanList); + this.groupBoxLists.Controls.Add(this.labelsResourceIndexFileList); + this.groupBoxLists.Location = new System.Drawing.Point(6, 107); + this.groupBoxLists.Name = "groupBoxLists"; + this.groupBoxLists.Size = new System.Drawing.Size(740, 351); + this.groupBoxLists.TabIndex = 59; + this.groupBoxLists.TabStop = false; + this.groupBoxLists.Text = "Lists"; // - // panelModDetailsReplaceDragAndDrop + // labelsResourceIndexFileList // - this.panelModDetailsReplaceDragAndDrop.AllowDrop = true; - this.panelModDetailsReplaceDragAndDrop.BackgroundImage = global::Fo76ini.Properties.Resources.download_2_48; - this.panelModDetailsReplaceDragAndDrop.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.panelModDetailsReplaceDragAndDrop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panelModDetailsReplaceDragAndDrop.Location = new System.Drawing.Point(6, 19); - this.panelModDetailsReplaceDragAndDrop.Name = "panelModDetailsReplaceDragAndDrop"; - this.panelModDetailsReplaceDragAndDrop.Size = new System.Drawing.Size(159, 108); - this.panelModDetailsReplaceDragAndDrop.TabIndex = 4; + this.labelsResourceIndexFileList.AutoSize = true; + this.labelsResourceIndexFileList.Location = new System.Drawing.Point(3, 21); + this.labelsResourceIndexFileList.Name = "labelsResourceIndexFileList"; + this.labelsResourceIndexFileList.Size = new System.Drawing.Size(71, 13); + this.labelsResourceIndexFileList.TabIndex = 55; + this.labelsResourceIndexFileList.Text = "Resource list:"; // - // linkLabelModReplaceFilesWithFolder + // buttonModsCleanList // - this.linkLabelModReplaceFilesWithFolder.AutoSize = true; - this.linkLabelModReplaceFilesWithFolder.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; - this.linkLabelModReplaceFilesWithFolder.Location = new System.Drawing.Point(173, 39); - this.linkLabelModReplaceFilesWithFolder.Name = "linkLabelModReplaceFilesWithFolder"; - this.linkLabelModReplaceFilesWithFolder.Size = new System.Drawing.Size(65, 13); - this.linkLabelModReplaceFilesWithFolder.TabIndex = 1; - this.linkLabelModReplaceFilesWithFolder.TabStop = true; - this.linkLabelModReplaceFilesWithFolder.Text = "Import folder"; - this.linkLabelModReplaceFilesWithFolder.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModReplaceFilesWithFolder_LinkClicked); - // - // linkLabelModReplaceFilesWithArchive - // - this.linkLabelModReplaceFilesWithArchive.AutoSize = true; - this.linkLabelModReplaceFilesWithArchive.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; - this.linkLabelModReplaceFilesWithArchive.Location = new System.Drawing.Point(173, 19); - this.linkLabelModReplaceFilesWithArchive.Name = "linkLabelModReplaceFilesWithArchive"; - this.linkLabelModReplaceFilesWithArchive.Size = new System.Drawing.Size(74, 13); - this.linkLabelModReplaceFilesWithArchive.TabIndex = 0; - this.linkLabelModReplaceFilesWithArchive.TabStop = true; - this.linkLabelModReplaceFilesWithArchive.Text = "Import archive"; - this.linkLabelModReplaceFilesWithArchive.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModReplaceFilesWithArchive_LinkClicked); - // - // groupBoxModDetailsInstallationOptions - // - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.linkLabelModInvalidateFrozenArchive); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.linkLabelModAutoDetectInstallOptions); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.labelModInstallWarning); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.buttonModPickRootDir); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.labelModInstallAs); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.labelModArchivePreset); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.checkBoxFreezeArchive); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.labelModInstallInto); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.comboBoxModInstallAs); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.buttonModDetailsSuggestArchiveName); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.textBoxModRootDir); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.comboBoxModArchivePreset); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.textBoxModArchiveName); - this.groupBoxModDetailsInstallationOptions.Controls.Add(this.labelModArchiveName); - this.groupBoxModDetailsInstallationOptions.Location = new System.Drawing.Point(7, 414); - this.groupBoxModDetailsInstallationOptions.Name = "groupBoxModDetailsInstallationOptions"; - this.groupBoxModDetailsInstallationOptions.Size = new System.Drawing.Size(364, 247); - this.groupBoxModDetailsInstallationOptions.TabIndex = 74; - this.groupBoxModDetailsInstallationOptions.TabStop = false; - this.groupBoxModDetailsInstallationOptions.Text = "Installation options"; - // - // linkLabelModInvalidateFrozenArchive - // - this.linkLabelModInvalidateFrozenArchive.AutoSize = true; - this.linkLabelModInvalidateFrozenArchive.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; - this.linkLabelModInvalidateFrozenArchive.Location = new System.Drawing.Point(110, 131); - this.linkLabelModInvalidateFrozenArchive.Name = "linkLabelModInvalidateFrozenArchive"; - this.linkLabelModInvalidateFrozenArchive.Size = new System.Drawing.Size(123, 13); - this.linkLabelModInvalidateFrozenArchive.TabIndex = 51; - this.linkLabelModInvalidateFrozenArchive.TabStop = true; - this.linkLabelModInvalidateFrozenArchive.Text = "Invalidate frozen archive"; - this.linkLabelModInvalidateFrozenArchive.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModInvalidateFrozenArchive_LinkClicked); - // - // linkLabelModAutoDetectInstallOptions - // - this.linkLabelModAutoDetectInstallOptions.AutoSize = true; - this.linkLabelModAutoDetectInstallOptions.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; - this.linkLabelModAutoDetectInstallOptions.Location = new System.Drawing.Point(7, 220); - this.linkLabelModAutoDetectInstallOptions.Name = "linkLabelModAutoDetectInstallOptions"; - this.linkLabelModAutoDetectInstallOptions.Size = new System.Drawing.Size(189, 13); - this.linkLabelModAutoDetectInstallOptions.TabIndex = 50; - this.linkLabelModAutoDetectInstallOptions.TabStop = true; - this.linkLabelModAutoDetectInstallOptions.Text = "Attempt auto-detect installation options"; - this.linkLabelModAutoDetectInstallOptions.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModAutoDetectInstallOptions_LinkClicked); - // - // labelModInstallWarning - // - this.labelModInstallWarning.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.labelModInstallWarning.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(147)))), ((int)(((byte)(107)))), ((int)(((byte)(8))))); - this.labelModInstallWarning.Location = new System.Drawing.Point(7, 154); - this.labelModInstallWarning.Name = "labelModInstallWarning"; - this.labelModInstallWarning.Size = new System.Drawing.Size(351, 66); - this.labelModInstallWarning.TabIndex = 49; - this.labelModInstallWarning.Text = "< Warning here >"; - // - // buttonModPickRootDir - // - this.buttonModPickRootDir.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonModPickRootDir.Location = new System.Drawing.Point(332, 44); - this.buttonModPickRootDir.Name = "buttonModPickRootDir"; - this.buttonModPickRootDir.Size = new System.Drawing.Size(26, 24); - this.buttonModPickRootDir.TabIndex = 5; - this.buttonModPickRootDir.Text = "..."; - this.buttonModPickRootDir.UseVisualStyleBackColor = true; - this.buttonModPickRootDir.Click += new System.EventHandler(this.buttonModPickRootDir_Click); - // - // labelModInstallAs - // - this.labelModInstallAs.AutoSize = true; - this.labelModInstallAs.Location = new System.Drawing.Point(6, 24); - this.labelModInstallAs.Name = "labelModInstallAs"; - this.labelModInstallAs.Size = new System.Drawing.Size(51, 13); - this.labelModInstallAs.TabIndex = 41; - this.labelModInstallAs.Text = "Install as:"; - // - // labelModArchivePreset - // - this.labelModArchivePreset.AutoSize = true; - this.labelModArchivePreset.Location = new System.Drawing.Point(6, 75); - this.labelModArchivePreset.Name = "labelModArchivePreset"; - this.labelModArchivePreset.Size = new System.Drawing.Size(40, 13); - this.labelModArchivePreset.TabIndex = 43; - this.labelModArchivePreset.Text = "Preset:"; - // - // checkBoxFreezeArchive - // - this.checkBoxFreezeArchive.AutoSize = true; - this.checkBoxFreezeArchive.Location = new System.Drawing.Point(10, 130); - this.checkBoxFreezeArchive.Name = "checkBoxFreezeArchive"; - this.checkBoxFreezeArchive.Size = new System.Drawing.Size(58, 17); - this.checkBoxFreezeArchive.TabIndex = 9; - this.checkBoxFreezeArchive.Text = "Freeze"; - this.toolTip.SetToolTip(this.checkBoxFreezeArchive, "If you \'freeze\' an archive, it does not get recreated when deploying.\r\nThis will " + - "speed up deployment.\r\n\r\nThis is especially useful, if the archive is HUGE (1GiB " + - "or more) and the files aren\'t changing."); - this.checkBoxFreezeArchive.UseVisualStyleBackColor = true; - this.checkBoxFreezeArchive.CheckedChanged += new System.EventHandler(this.checkBoxFreezeArchive_CheckedChanged); - // - // labelModInstallInto - // - this.labelModInstallInto.AutoSize = true; - this.labelModInstallInto.Location = new System.Drawing.Point(6, 51); - this.labelModInstallInto.Name = "labelModInstallInto"; - this.labelModInstallInto.Size = new System.Drawing.Size(57, 13); - this.labelModInstallInto.TabIndex = 38; - this.labelModInstallInto.Text = "Install into:"; - // - // comboBoxModInstallAs - // - this.comboBoxModInstallAs.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.comboBoxModInstallAs.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBoxModInstallAs.FormattingEnabled = true; - this.comboBoxModInstallAs.Location = new System.Drawing.Point(113, 21); - this.comboBoxModInstallAs.Name = "comboBoxModInstallAs"; - this.comboBoxModInstallAs.Size = new System.Drawing.Size(245, 21); - this.comboBoxModInstallAs.TabIndex = 3; - this.comboBoxModInstallAs.SelectedIndexChanged += new System.EventHandler(this.comboBoxModInstallAs_SelectedIndexChanged); - // - // buttonModDetailsSuggestArchiveName - // - this.buttonModDetailsSuggestArchiveName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonModDetailsSuggestArchiveName.Location = new System.Drawing.Point(289, 99); - this.buttonModDetailsSuggestArchiveName.Name = "buttonModDetailsSuggestArchiveName"; - this.buttonModDetailsSuggestArchiveName.Size = new System.Drawing.Size(69, 23); - this.buttonModDetailsSuggestArchiveName.TabIndex = 48; - this.buttonModDetailsSuggestArchiveName.Text = "Suggest"; - this.buttonModDetailsSuggestArchiveName.UseVisualStyleBackColor = true; - this.buttonModDetailsSuggestArchiveName.Click += new System.EventHandler(this.buttonModDetailsSuggestArchiveName_Click); - // - // textBoxModRootDir - // - this.textBoxModRootDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxModRootDir.Location = new System.Drawing.Point(113, 48); - this.textBoxModRootDir.Name = "textBoxModRootDir"; - this.textBoxModRootDir.Size = new System.Drawing.Size(213, 20); - this.textBoxModRootDir.TabIndex = 4; - this.textBoxModRootDir.TextChanged += new System.EventHandler(this.textBoxModRootDir_TextChanged); - // - // comboBoxModArchivePreset - // - this.comboBoxModArchivePreset.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.comboBoxModArchivePreset.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBoxModArchivePreset.FormattingEnabled = true; - this.comboBoxModArchivePreset.Location = new System.Drawing.Point(113, 74); - this.comboBoxModArchivePreset.Name = "comboBoxModArchivePreset"; - this.comboBoxModArchivePreset.Size = new System.Drawing.Size(245, 21); - this.comboBoxModArchivePreset.TabIndex = 6; - this.comboBoxModArchivePreset.SelectedIndexChanged += new System.EventHandler(this.comboBoxModArchivePreset_SelectedIndexChanged); - // - // textBoxModArchiveName - // - this.textBoxModArchiveName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxModArchiveName.Location = new System.Drawing.Point(113, 101); - this.textBoxModArchiveName.Name = "textBoxModArchiveName"; - this.textBoxModArchiveName.Size = new System.Drawing.Size(170, 20); - this.textBoxModArchiveName.TabIndex = 7; - this.textBoxModArchiveName.TextChanged += new System.EventHandler(this.textBoxModArchiveName_TextChanged); - // - // labelModArchiveName - // - this.labelModArchiveName.AutoSize = true; - this.labelModArchiveName.Location = new System.Drawing.Point(7, 104); - this.labelModArchiveName.Name = "labelModArchiveName"; - this.labelModArchiveName.Size = new System.Drawing.Size(75, 13); - this.labelModArchiveName.TabIndex = 41; - this.labelModArchiveName.Text = "Archive name:"; - // - // groupBoxModDetailsDetails - // - this.groupBoxModDetailsDetails.Controls.Add(this.textBoxModFolderName); - this.groupBoxModDetailsDetails.Controls.Add(this.labelModFolderName); - this.groupBoxModDetailsDetails.Controls.Add(this.buttonModOpenPage); - this.groupBoxModDetailsDetails.Controls.Add(this.panelModDetailsNexusMods); - this.groupBoxModDetailsDetails.Controls.Add(this.textBoxModVersion); - this.groupBoxModDetailsDetails.Controls.Add(this.labelModVersion); - this.groupBoxModDetailsDetails.Controls.Add(this.textBoxModURL); - this.groupBoxModDetailsDetails.Controls.Add(this.labelModName); - this.groupBoxModDetailsDetails.Controls.Add(this.labelModURL); - this.groupBoxModDetailsDetails.Controls.Add(this.textBoxModName); - this.groupBoxModDetailsDetails.Location = new System.Drawing.Point(6, 63); - this.groupBoxModDetailsDetails.Name = "groupBoxModDetailsDetails"; - this.groupBoxModDetailsDetails.Size = new System.Drawing.Size(365, 188); - this.groupBoxModDetailsDetails.TabIndex = 73; - this.groupBoxModDetailsDetails.TabStop = false; - this.groupBoxModDetailsDetails.Text = "Details"; + this.buttonModsCleanList.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonModsCleanList.Location = new System.Drawing.Point(6, 322); + this.buttonModsCleanList.Name = "buttonModsCleanList"; + this.buttonModsCleanList.Size = new System.Drawing.Size(98, 23); + this.buttonModsCleanList.TabIndex = 58; + this.buttonModsCleanList.Text = "Clean list"; + this.buttonModsCleanList.UseVisualStyleBackColor = true; + this.buttonModsCleanList.Click += new System.EventHandler(this.buttonModsCleanList_Click); // - // textBoxModFolderName + // textBoxResourceList // - this.textBoxModFolderName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.textBoxResourceList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxModFolderName.Location = new System.Drawing.Point(142, 97); - this.textBoxModFolderName.Name = "textBoxModFolderName"; - this.textBoxModFolderName.Size = new System.Drawing.Size(217, 20); - this.textBoxModFolderName.TabIndex = 56; - this.textBoxModFolderName.TextChanged += new System.EventHandler(this.textBoxModFolderName_TextChanged); + this.textBoxResourceList.Location = new System.Drawing.Point(6, 37); + this.textBoxResourceList.Multiline = true; + this.textBoxResourceList.Name = "textBoxResourceList"; + this.textBoxResourceList.Size = new System.Drawing.Size(728, 279); + this.textBoxResourceList.TabIndex = 54; // - // labelModFolderName + // buttonModsApplyTextBox // - this.labelModFolderName.AutoSize = true; - this.labelModFolderName.Location = new System.Drawing.Point(7, 100); - this.labelModFolderName.Name = "labelModFolderName"; - this.labelModFolderName.Size = new System.Drawing.Size(68, 13); - this.labelModFolderName.TabIndex = 55; - this.labelModFolderName.Text = "Folder name:"; + this.buttonModsApplyTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonModsApplyTextBox.Location = new System.Drawing.Point(607, 322); + this.buttonModsApplyTextBox.Name = "buttonModsApplyTextBox"; + this.buttonModsApplyTextBox.Size = new System.Drawing.Size(127, 23); + this.buttonModsApplyTextBox.TabIndex = 59; + this.buttonModsApplyTextBox.Text = "Apply changes"; + this.buttonModsApplyTextBox.UseVisualStyleBackColor = true; + this.buttonModsApplyTextBox.Click += new System.EventHandler(this.buttonModsApplyTextBox_Click); // - // buttonModOpenPage + // buttonModsResetTextbox // - this.buttonModOpenPage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonModOpenPage.BackColor = System.Drawing.Color.Transparent; - this.buttonModOpenPage.Cursor = System.Windows.Forms.Cursors.Hand; - this.buttonModOpenPage.FlatAppearance.BorderSize = 0; - this.buttonModOpenPage.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); - this.buttonModOpenPage.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonModOpenPage.Image = global::Fo76ini.Properties.Resources.external_link_16; - this.buttonModOpenPage.Location = new System.Drawing.Point(331, 41); - this.buttonModOpenPage.Name = "buttonModOpenPage"; - this.buttonModOpenPage.Size = new System.Drawing.Size(28, 28); - this.buttonModOpenPage.TabIndex = 54; - this.buttonModOpenPage.UseVisualStyleBackColor = false; - this.buttonModOpenPage.Click += new System.EventHandler(this.buttonModOpenPage_Click); + this.buttonModsResetTextbox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonModsResetTextbox.Location = new System.Drawing.Point(503, 322); + this.buttonModsResetTextbox.Name = "buttonModsResetTextbox"; + this.buttonModsResetTextbox.Size = new System.Drawing.Size(98, 23); + this.buttonModsResetTextbox.TabIndex = 60; + this.buttonModsResetTextbox.Text = "Reset"; + this.buttonModsResetTextbox.UseVisualStyleBackColor = true; + this.buttonModsResetTextbox.Click += new System.EventHandler(this.buttonModsResetTextbox_Click); // - // panelModDetailsNexusMods + // groupBoxModsBehavior // - this.panelModDetailsNexusMods.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.groupBoxModsBehavior.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.panelModDetailsNexusMods.Controls.Add(this.linkLabelModSetLatestVersion); - this.panelModDetailsNexusMods.Controls.Add(this.labelModAuthor); - this.panelModDetailsNexusMods.Controls.Add(this.labelModLatestVersion); - this.panelModDetailsNexusMods.Controls.Add(this.labelModLatestVersionDesc); - this.panelModDetailsNexusMods.Controls.Add(this.labelModAuthorDesc); - this.panelModDetailsNexusMods.Location = new System.Drawing.Point(1, 123); - this.panelModDetailsNexusMods.Name = "panelModDetailsNexusMods"; - this.panelModDetailsNexusMods.Size = new System.Drawing.Size(363, 57); - this.panelModDetailsNexusMods.TabIndex = 53; - // - // linkLabelModSetLatestVersion - // - this.linkLabelModSetLatestVersion.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.linkLabelModSetLatestVersion.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; - this.linkLabelModSetLatestVersion.Location = new System.Drawing.Point(220, 5); - this.linkLabelModSetLatestVersion.Name = "linkLabelModSetLatestVersion"; - this.linkLabelModSetLatestVersion.Size = new System.Drawing.Size(137, 13); - this.linkLabelModSetLatestVersion.TabIndex = 2; - this.linkLabelModSetLatestVersion.TabStop = true; - this.linkLabelModSetLatestVersion.Text = "Set latest version"; - this.linkLabelModSetLatestVersion.TextAlign = System.Drawing.ContentAlignment.TopRight; - this.linkLabelModSetLatestVersion.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModSetLatestVersion_LinkClicked); + this.groupBoxModsBehavior.Controls.Add(this.checkBoxFreezeBundledArchives); + this.groupBoxModsBehavior.Controls.Add(this.checkBoxModsUseHardlinks); + this.groupBoxModsBehavior.Controls.Add(this.checkBoxAddArchivesAsBundled); + this.groupBoxModsBehavior.Location = new System.Drawing.Point(6, 6); + this.groupBoxModsBehavior.Name = "groupBoxModsBehavior"; + this.groupBoxModsBehavior.Size = new System.Drawing.Size(740, 95); + this.groupBoxModsBehavior.TabIndex = 60; + this.groupBoxModsBehavior.TabStop = false; + this.groupBoxModsBehavior.Text = "Behavior"; // - // labelModAuthor + // checkBoxAddArchivesAsBundled // - this.labelModAuthor.AutoSize = true; - this.labelModAuthor.Location = new System.Drawing.Point(138, 31); - this.labelModAuthor.Name = "labelModAuthor"; - this.labelModAuthor.Size = new System.Drawing.Size(135, 13); - this.labelModAuthor.TabIndex = 57; - this.labelModAuthor.Text = "< Author name goes here >"; + this.checkBoxAddArchivesAsBundled.AutoSize = true; + this.checkBoxAddArchivesAsBundled.Location = new System.Drawing.Point(6, 65); + this.checkBoxAddArchivesAsBundled.Name = "checkBoxAddArchivesAsBundled"; + this.checkBoxAddArchivesAsBundled.Size = new System.Drawing.Size(167, 17); + this.checkBoxAddArchivesAsBundled.TabIndex = 0; + this.checkBoxAddArchivesAsBundled.Text = "Unfreeze *.ba2 files by default"; + this.checkBoxAddArchivesAsBundled.UseVisualStyleBackColor = true; + this.checkBoxAddArchivesAsBundled.CheckedChanged += new System.EventHandler(this.checkBoxAddArchivesAsBundled_CheckedChanged); // - // labelModLatestVersion + // checkBoxModsUseHardlinks // - this.labelModLatestVersion.AutoSize = true; - this.labelModLatestVersion.Location = new System.Drawing.Point(138, 5); - this.labelModLatestVersion.Name = "labelModLatestVersion"; - this.labelModLatestVersion.Size = new System.Drawing.Size(22, 13); - this.labelModLatestVersion.TabIndex = 56; - this.labelModLatestVersion.Text = "1.0"; + this.checkBoxModsUseHardlinks.AutoSize = true; + this.checkBoxModsUseHardlinks.Location = new System.Drawing.Point(6, 19); + this.checkBoxModsUseHardlinks.Name = "checkBoxModsUseHardlinks"; + this.checkBoxModsUseHardlinks.Size = new System.Drawing.Size(331, 17); + this.checkBoxModsUseHardlinks.TabIndex = 1; + this.checkBoxModsUseHardlinks.Text = "Make hard links instead of copying files manually (recommended)"; + this.toolTip.SetToolTip(this.checkBoxModsUseHardlinks, "Reduces disk space and deployment time."); + this.checkBoxModsUseHardlinks.UseVisualStyleBackColor = true; + this.checkBoxModsUseHardlinks.CheckedChanged += new System.EventHandler(this.checkBoxModsUseHardlinks_CheckedChanged); // - // labelModLatestVersionDesc + // checkBoxFreezeBundledArchives // - this.labelModLatestVersionDesc.AutoSize = true; - this.labelModLatestVersionDesc.Location = new System.Drawing.Point(6, 5); - this.labelModLatestVersionDesc.Name = "labelModLatestVersionDesc"; - this.labelModLatestVersionDesc.Size = new System.Drawing.Size(76, 13); - this.labelModLatestVersionDesc.TabIndex = 54; - this.labelModLatestVersionDesc.Text = "Latest version:"; + this.checkBoxFreezeBundledArchives.AutoSize = true; + this.checkBoxFreezeBundledArchives.Location = new System.Drawing.Point(6, 42); + this.checkBoxFreezeBundledArchives.Name = "checkBoxFreezeBundledArchives"; + this.checkBoxFreezeBundledArchives.Size = new System.Drawing.Size(211, 17); + this.checkBoxFreezeBundledArchives.TabIndex = 2; + this.checkBoxFreezeBundledArchives.Text = "[Experimental] Freeze bundled archives"; + this.toolTip.SetToolTip(this.checkBoxFreezeBundledArchives, "Instead of rebuilding bundled archives, it will save a bundled copy and ask you i" + + "f you want to update it on deploy."); + this.checkBoxFreezeBundledArchives.UseVisualStyleBackColor = true; + this.checkBoxFreezeBundledArchives.CheckedChanged += new System.EventHandler(this.checkBoxFreezeBundledArchives_CheckedChanged); // - // labelModAuthorDesc + // tabPageModOrder // - this.labelModAuthorDesc.AutoSize = true; - this.labelModAuthorDesc.Location = new System.Drawing.Point(6, 31); - this.labelModAuthorDesc.Name = "labelModAuthorDesc"; - this.labelModAuthorDesc.Size = new System.Drawing.Size(41, 13); - this.labelModAuthorDesc.TabIndex = 53; - this.labelModAuthorDesc.Text = "Author:"; + this.tabPageModOrder.Controls.Add(this.pictureBoxCollapseDetails); + this.tabPageModOrder.Controls.Add(this.panelModDetails); + this.tabPageModOrder.Controls.Add(this.toolStrip1); + this.tabPageModOrder.Controls.Add(this.listViewMods); + this.tabPageModOrder.Location = new System.Drawing.Point(4, 22); + this.tabPageModOrder.Name = "tabPageModOrder"; + this.tabPageModOrder.Padding = new System.Windows.Forms.Padding(3); + this.tabPageModOrder.Size = new System.Drawing.Size(752, 464); + this.tabPageModOrder.TabIndex = 0; + this.tabPageModOrder.Text = "Mod order"; + this.tabPageModOrder.UseVisualStyleBackColor = true; // - // textBoxModVersion + // listViewMods // - this.textBoxModVersion.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.listViewMods.AllowDrop = true; + this.listViewMods.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxModVersion.Location = new System.Drawing.Point(142, 71); - this.textBoxModVersion.Name = "textBoxModVersion"; - this.textBoxModVersion.Size = new System.Drawing.Size(217, 20); - this.textBoxModVersion.TabIndex = 52; - this.textBoxModVersion.TextChanged += new System.EventHandler(this.textBoxModVersion_TextChanged); - // - // labelModVersion - // - this.labelModVersion.AutoSize = true; - this.labelModVersion.Location = new System.Drawing.Point(7, 74); - this.labelModVersion.Name = "labelModVersion"; - this.labelModVersion.Size = new System.Drawing.Size(86, 13); - this.labelModVersion.TabIndex = 51; - this.labelModVersion.Text = "Installed version:"; + this.listViewMods.CausesValidation = false; + this.listViewMods.CheckBoxes = true; + this.listViewMods.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderModTitle, + this.columnHeaderVersion, + this.columnHeaderInstallAs, + this.columnHeaderInstallInto, + this.columnHeaderArchiveName, + this.columnHeaderArchivePreset, + this.columnHeaderFrozenState}); + this.listViewMods.FullRowSelect = true; + this.listViewMods.GridLines = true; + this.listViewMods.HideSelection = false; + this.listViewMods.LabelWrap = false; + this.listViewMods.Location = new System.Drawing.Point(39, 0); + this.listViewMods.Name = "listViewMods"; + this.listViewMods.Size = new System.Drawing.Size(300, 464); + this.listViewMods.TabIndex = 41; + this.listViewMods.TabStop = false; + this.listViewMods.UseCompatibleStateImageBehavior = false; + this.listViewMods.View = System.Windows.Forms.View.Details; + this.listViewMods.SelectedIndexChanged += new System.EventHandler(this.listViewMods_SelectedIndexChanged); // - // textBoxModURL + // columnHeaderModTitle // - this.textBoxModURL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxModURL.Location = new System.Drawing.Point(142, 45); - this.textBoxModURL.Name = "textBoxModURL"; - this.textBoxModURL.Size = new System.Drawing.Size(186, 20); - this.textBoxModURL.TabIndex = 50; - this.textBoxModURL.TextChanged += new System.EventHandler(this.textBoxModURL_TextChanged); + this.columnHeaderModTitle.Text = "Mod name"; + this.columnHeaderModTitle.Width = 350; // - // labelModName + // columnHeaderVersion // - this.labelModName.AutoSize = true; - this.labelModName.Location = new System.Drawing.Point(6, 22); - this.labelModName.Name = "labelModName"; - this.labelModName.Size = new System.Drawing.Size(60, 13); - this.labelModName.TabIndex = 25; - this.labelModName.Text = "Mod name:"; + this.columnHeaderVersion.Text = "Version"; + this.columnHeaderVersion.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.columnHeaderVersion.Width = 50; // - // labelModURL + // columnHeaderInstallAs // - this.labelModURL.AutoSize = true; - this.labelModURL.Location = new System.Drawing.Point(6, 48); - this.labelModURL.Name = "labelModURL"; - this.labelModURL.Size = new System.Drawing.Size(88, 13); - this.labelModURL.TabIndex = 49; - this.labelModURL.Text = "Webpage (URL):"; + this.columnHeaderInstallAs.Text = "Type"; // - // textBoxModName + // columnHeaderInstallInto // - this.textBoxModName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxModName.Location = new System.Drawing.Point(142, 19); - this.textBoxModName.Name = "textBoxModName"; - this.textBoxModName.Size = new System.Drawing.Size(217, 20); - this.textBoxModName.TabIndex = 1; - this.textBoxModName.TextChanged += new System.EventHandler(this.textBoxModName_TextChanged); + this.columnHeaderInstallInto.Text = "Install into"; // - // labelModSummary + // columnHeaderArchiveName // - this.labelModSummary.ForeColor = System.Drawing.SystemColors.ControlDarkDark; - this.labelModSummary.Location = new System.Drawing.Point(6, 5); - this.labelModSummary.Name = "labelModSummary"; - this.labelModSummary.Size = new System.Drawing.Size(365, 55); - this.labelModSummary.TabIndex = 55; - this.labelModSummary.Text = "< Summary goes here >"; + this.columnHeaderArchiveName.Text = "Archive name"; + this.columnHeaderArchiveName.Width = 100; // - // pictureBoxModThumbnail + // columnHeaderArchivePreset // - this.pictureBoxModThumbnail.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.pictureBoxModThumbnail.BackColor = System.Drawing.Color.Black; - this.pictureBoxModThumbnail.Image = global::Fo76ini.Properties.Resources.bg; - this.pictureBoxModThumbnail.Location = new System.Drawing.Point(-2, -2); - this.pictureBoxModThumbnail.Name = "pictureBoxModThumbnail"; - this.pictureBoxModThumbnail.Size = new System.Drawing.Size(400, 160); - this.pictureBoxModThumbnail.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pictureBoxModThumbnail.TabIndex = 71; - this.pictureBoxModThumbnail.TabStop = false; + this.columnHeaderArchivePreset.Text = "Archive preset"; + this.columnHeaderArchivePreset.Width = 200; + // + // columnHeaderFrozenState + // + this.columnHeaderFrozenState.Text = "Frozen?"; + this.columnHeaderFrozenState.Width = 50; // // toolStrip1 // @@ -1228,362 +927,607 @@ private void InitializeComponent() this.toolStripButtonDeleteMod.Text = "Delete mod"; this.toolStripButtonDeleteMod.Click += new System.EventHandler(this.toolStripButtonDeleteMod_Click); // - // listViewMods + // panelModDetails // - this.listViewMods.AllowDrop = true; - this.listViewMods.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.panelModDetails.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Right))); - this.listViewMods.CausesValidation = false; - this.listViewMods.CheckBoxes = true; - this.listViewMods.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeaderModTitle, - this.columnHeaderVersion, - this.columnHeaderInstallAs, - this.columnHeaderInstallInto, - this.columnHeaderArchiveName, - this.columnHeaderArchivePreset, - this.columnHeaderFrozenState}); - this.listViewMods.FullRowSelect = true; - this.listViewMods.GridLines = true; - this.listViewMods.HideSelection = false; - this.listViewMods.LabelWrap = false; - this.listViewMods.Location = new System.Drawing.Point(39, 0); - this.listViewMods.Name = "listViewMods"; - this.listViewMods.Size = new System.Drawing.Size(300, 464); - this.listViewMods.TabIndex = 41; - this.listViewMods.TabStop = false; - this.listViewMods.UseCompatibleStateImageBehavior = false; - this.listViewMods.View = System.Windows.Forms.View.Details; - this.listViewMods.SelectedIndexChanged += new System.EventHandler(this.listViewMods_SelectedIndexChanged); + this.panelModDetails.AutoScrollMargin = new System.Drawing.Size(0, 20); + this.panelModDetails.BackColor = System.Drawing.SystemColors.Window; + this.panelModDetails.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panelModDetails.Controls.Add(this.panelModDetailsHeader); + this.panelModDetails.Controls.Add(this.panelModDetailsInner); + this.panelModDetails.Controls.Add(this.pictureBoxModThumbnail); + this.panelModDetails.Location = new System.Drawing.Point(356, 0); + this.panelModDetails.Name = "panelModDetails"; + this.panelModDetails.Size = new System.Drawing.Size(396, 464); + this.panelModDetails.TabIndex = 58; // - // columnHeaderModTitle + // pictureBoxModThumbnail // - this.columnHeaderModTitle.Text = "Mod name"; - this.columnHeaderModTitle.Width = 350; + this.pictureBoxModThumbnail.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pictureBoxModThumbnail.BackColor = System.Drawing.Color.Black; + this.pictureBoxModThumbnail.Image = global::Fo76ini.Properties.Resources.bg; + this.pictureBoxModThumbnail.Location = new System.Drawing.Point(-2, -2); + this.pictureBoxModThumbnail.Name = "pictureBoxModThumbnail"; + this.pictureBoxModThumbnail.Size = new System.Drawing.Size(400, 160); + this.pictureBoxModThumbnail.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBoxModThumbnail.TabIndex = 71; + this.pictureBoxModThumbnail.TabStop = false; + // + // panelModDetailsInner + // + this.panelModDetailsInner.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.panelModDetailsInner.AutoScroll = true; + this.panelModDetailsInner.AutoScrollMargin = new System.Drawing.Size(0, 8); + this.panelModDetailsInner.BackColor = System.Drawing.SystemColors.Window; + this.panelModDetailsInner.Controls.Add(this.groupBoxNotes); + this.panelModDetailsInner.Controls.Add(this.groupBoxModReplace); + this.panelModDetailsInner.Controls.Add(this.groupBoxModDetailsInstallationOptions); + this.panelModDetailsInner.Controls.Add(this.groupBoxModDetailsDetails); + this.panelModDetailsInner.Controls.Add(this.labelModSummary); + this.panelModDetailsInner.Location = new System.Drawing.Point(0, 218); + this.panelModDetailsInner.Name = "panelModDetailsInner"; + this.panelModDetailsInner.Size = new System.Drawing.Size(394, 246); + this.panelModDetailsInner.TabIndex = 76; + // + // labelModSummary + // + this.labelModSummary.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.labelModSummary.Location = new System.Drawing.Point(6, 5); + this.labelModSummary.Name = "labelModSummary"; + this.labelModSummary.Size = new System.Drawing.Size(365, 55); + this.labelModSummary.TabIndex = 55; + this.labelModSummary.Text = "< Summary goes here >"; + // + // groupBoxModDetailsDetails + // + this.groupBoxModDetailsDetails.Controls.Add(this.textBoxModFolderName); + this.groupBoxModDetailsDetails.Controls.Add(this.labelModFolderName); + this.groupBoxModDetailsDetails.Controls.Add(this.buttonModOpenPage); + this.groupBoxModDetailsDetails.Controls.Add(this.panelModDetailsNexusMods); + this.groupBoxModDetailsDetails.Controls.Add(this.textBoxModVersion); + this.groupBoxModDetailsDetails.Controls.Add(this.labelModVersion); + this.groupBoxModDetailsDetails.Controls.Add(this.textBoxModURL); + this.groupBoxModDetailsDetails.Controls.Add(this.labelModName); + this.groupBoxModDetailsDetails.Controls.Add(this.labelModURL); + this.groupBoxModDetailsDetails.Controls.Add(this.textBoxModName); + this.groupBoxModDetailsDetails.Location = new System.Drawing.Point(6, 63); + this.groupBoxModDetailsDetails.Name = "groupBoxModDetailsDetails"; + this.groupBoxModDetailsDetails.Size = new System.Drawing.Size(365, 188); + this.groupBoxModDetailsDetails.TabIndex = 73; + this.groupBoxModDetailsDetails.TabStop = false; + this.groupBoxModDetailsDetails.Text = "Details"; + // + // textBoxModName + // + this.textBoxModName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxModName.Location = new System.Drawing.Point(142, 19); + this.textBoxModName.Name = "textBoxModName"; + this.textBoxModName.Size = new System.Drawing.Size(217, 20); + this.textBoxModName.TabIndex = 1; + this.textBoxModName.TextChanged += new System.EventHandler(this.textBoxModName_TextChanged); + // + // labelModURL + // + this.labelModURL.AutoSize = true; + this.labelModURL.Location = new System.Drawing.Point(6, 48); + this.labelModURL.Name = "labelModURL"; + this.labelModURL.Size = new System.Drawing.Size(88, 13); + this.labelModURL.TabIndex = 49; + this.labelModURL.Text = "Webpage (URL):"; + // + // labelModName + // + this.labelModName.AutoSize = true; + this.labelModName.Location = new System.Drawing.Point(6, 22); + this.labelModName.Name = "labelModName"; + this.labelModName.Size = new System.Drawing.Size(60, 13); + this.labelModName.TabIndex = 25; + this.labelModName.Text = "Mod name:"; + // + // textBoxModURL + // + this.textBoxModURL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxModURL.Location = new System.Drawing.Point(142, 45); + this.textBoxModURL.Name = "textBoxModURL"; + this.textBoxModURL.Size = new System.Drawing.Size(186, 20); + this.textBoxModURL.TabIndex = 50; + this.textBoxModURL.TextChanged += new System.EventHandler(this.textBoxModURL_TextChanged); + // + // labelModVersion + // + this.labelModVersion.AutoSize = true; + this.labelModVersion.Location = new System.Drawing.Point(7, 74); + this.labelModVersion.Name = "labelModVersion"; + this.labelModVersion.Size = new System.Drawing.Size(86, 13); + this.labelModVersion.TabIndex = 51; + this.labelModVersion.Text = "Installed version:"; + // + // textBoxModVersion + // + this.textBoxModVersion.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxModVersion.Location = new System.Drawing.Point(142, 71); + this.textBoxModVersion.Name = "textBoxModVersion"; + this.textBoxModVersion.Size = new System.Drawing.Size(217, 20); + this.textBoxModVersion.TabIndex = 52; + this.textBoxModVersion.TextChanged += new System.EventHandler(this.textBoxModVersion_TextChanged); + // + // panelModDetailsNexusMods + // + this.panelModDetailsNexusMods.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panelModDetailsNexusMods.Controls.Add(this.linkLabelModSetLatestVersion); + this.panelModDetailsNexusMods.Controls.Add(this.labelModAuthor); + this.panelModDetailsNexusMods.Controls.Add(this.labelModLatestVersion); + this.panelModDetailsNexusMods.Controls.Add(this.labelModLatestVersionDesc); + this.panelModDetailsNexusMods.Controls.Add(this.labelModAuthorDesc); + this.panelModDetailsNexusMods.Location = new System.Drawing.Point(1, 123); + this.panelModDetailsNexusMods.Name = "panelModDetailsNexusMods"; + this.panelModDetailsNexusMods.Size = new System.Drawing.Size(363, 57); + this.panelModDetailsNexusMods.TabIndex = 53; + // + // labelModAuthorDesc + // + this.labelModAuthorDesc.AutoSize = true; + this.labelModAuthorDesc.Location = new System.Drawing.Point(6, 31); + this.labelModAuthorDesc.Name = "labelModAuthorDesc"; + this.labelModAuthorDesc.Size = new System.Drawing.Size(41, 13); + this.labelModAuthorDesc.TabIndex = 53; + this.labelModAuthorDesc.Text = "Author:"; + // + // labelModLatestVersionDesc + // + this.labelModLatestVersionDesc.AutoSize = true; + this.labelModLatestVersionDesc.Location = new System.Drawing.Point(6, 5); + this.labelModLatestVersionDesc.Name = "labelModLatestVersionDesc"; + this.labelModLatestVersionDesc.Size = new System.Drawing.Size(76, 13); + this.labelModLatestVersionDesc.TabIndex = 54; + this.labelModLatestVersionDesc.Text = "Latest version:"; + // + // labelModLatestVersion + // + this.labelModLatestVersion.AutoSize = true; + this.labelModLatestVersion.Location = new System.Drawing.Point(138, 5); + this.labelModLatestVersion.Name = "labelModLatestVersion"; + this.labelModLatestVersion.Size = new System.Drawing.Size(22, 13); + this.labelModLatestVersion.TabIndex = 56; + this.labelModLatestVersion.Text = "1.0"; // - // columnHeaderVersion + // labelModAuthor // - this.columnHeaderVersion.Text = "Version"; - this.columnHeaderVersion.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.columnHeaderVersion.Width = 50; + this.labelModAuthor.AutoSize = true; + this.labelModAuthor.Location = new System.Drawing.Point(138, 31); + this.labelModAuthor.Name = "labelModAuthor"; + this.labelModAuthor.Size = new System.Drawing.Size(135, 13); + this.labelModAuthor.TabIndex = 57; + this.labelModAuthor.Text = "< Author name goes here >"; // - // columnHeaderInstallAs + // linkLabelModSetLatestVersion // - this.columnHeaderInstallAs.Text = "Type"; + this.linkLabelModSetLatestVersion.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.linkLabelModSetLatestVersion.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkLabelModSetLatestVersion.Location = new System.Drawing.Point(220, 5); + this.linkLabelModSetLatestVersion.Name = "linkLabelModSetLatestVersion"; + this.linkLabelModSetLatestVersion.Size = new System.Drawing.Size(137, 13); + this.linkLabelModSetLatestVersion.TabIndex = 2; + this.linkLabelModSetLatestVersion.TabStop = true; + this.linkLabelModSetLatestVersion.Text = "Set latest version"; + this.linkLabelModSetLatestVersion.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.linkLabelModSetLatestVersion.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModSetLatestVersion_LinkClicked); // - // columnHeaderInstallInto + // buttonModOpenPage // - this.columnHeaderInstallInto.Text = "Install into"; + this.buttonModOpenPage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonModOpenPage.BackColor = System.Drawing.Color.Transparent; + this.buttonModOpenPage.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonModOpenPage.FlatAppearance.BorderSize = 0; + this.buttonModOpenPage.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.buttonModOpenPage.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonModOpenPage.Image = global::Fo76ini.Properties.Resources.external_link_16; + this.buttonModOpenPage.Location = new System.Drawing.Point(331, 41); + this.buttonModOpenPage.Name = "buttonModOpenPage"; + this.buttonModOpenPage.Size = new System.Drawing.Size(28, 28); + this.buttonModOpenPage.TabIndex = 54; + this.buttonModOpenPage.UseVisualStyleBackColor = false; + this.buttonModOpenPage.Click += new System.EventHandler(this.buttonModOpenPage_Click); // - // columnHeaderArchiveName + // labelModFolderName // - this.columnHeaderArchiveName.Text = "Archive name"; - this.columnHeaderArchiveName.Width = 100; + this.labelModFolderName.AutoSize = true; + this.labelModFolderName.Location = new System.Drawing.Point(7, 100); + this.labelModFolderName.Name = "labelModFolderName"; + this.labelModFolderName.Size = new System.Drawing.Size(68, 13); + this.labelModFolderName.TabIndex = 55; + this.labelModFolderName.Text = "Folder name:"; // - // columnHeaderArchivePreset + // textBoxModFolderName // - this.columnHeaderArchivePreset.Text = "Archive preset"; - this.columnHeaderArchivePreset.Width = 200; + this.textBoxModFolderName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxModFolderName.Location = new System.Drawing.Point(142, 97); + this.textBoxModFolderName.Name = "textBoxModFolderName"; + this.textBoxModFolderName.Size = new System.Drawing.Size(217, 20); + this.textBoxModFolderName.TabIndex = 56; + this.textBoxModFolderName.TextChanged += new System.EventHandler(this.textBoxModFolderName_TextChanged); // - // columnHeaderFrozenState + // groupBoxModDetailsInstallationOptions // - this.columnHeaderFrozenState.Text = "Frozen?"; - this.columnHeaderFrozenState.Width = 50; + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.linkLabelModInvalidateFrozenArchive); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.linkLabelModAutoDetectInstallOptions); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.labelModInstallWarning); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.buttonModPickRootDir); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.labelModInstallAs); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.labelModArchivePreset); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.checkBoxFreezeArchive); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.labelModInstallInto); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.comboBoxModInstallAs); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.buttonModDetailsSuggestArchiveName); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.textBoxModRootDir); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.comboBoxModArchivePreset); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.textBoxModArchiveName); + this.groupBoxModDetailsInstallationOptions.Controls.Add(this.labelModArchiveName); + this.groupBoxModDetailsInstallationOptions.Location = new System.Drawing.Point(7, 414); + this.groupBoxModDetailsInstallationOptions.Name = "groupBoxModDetailsInstallationOptions"; + this.groupBoxModDetailsInstallationOptions.Size = new System.Drawing.Size(364, 247); + this.groupBoxModDetailsInstallationOptions.TabIndex = 74; + this.groupBoxModDetailsInstallationOptions.TabStop = false; + this.groupBoxModDetailsInstallationOptions.Text = "Installation options"; // - // tabPageModsSettings + // labelModArchiveName // - this.tabPageModsSettings.Controls.Add(this.groupBoxModsBehavior); - this.tabPageModsSettings.Controls.Add(this.groupBoxLists); - this.tabPageModsSettings.Location = new System.Drawing.Point(4, 22); - this.tabPageModsSettings.Name = "tabPageModsSettings"; - this.tabPageModsSettings.Padding = new System.Windows.Forms.Padding(3); - this.tabPageModsSettings.Size = new System.Drawing.Size(752, 464); - this.tabPageModsSettings.TabIndex = 1; - this.tabPageModsSettings.Text = "Settings"; - this.tabPageModsSettings.UseVisualStyleBackColor = true; + this.labelModArchiveName.AutoSize = true; + this.labelModArchiveName.Location = new System.Drawing.Point(7, 104); + this.labelModArchiveName.Name = "labelModArchiveName"; + this.labelModArchiveName.Size = new System.Drawing.Size(75, 13); + this.labelModArchiveName.TabIndex = 41; + this.labelModArchiveName.Text = "Archive name:"; // - // groupBoxModsBehavior + // textBoxModArchiveName // - this.groupBoxModsBehavior.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.textBoxModArchiveName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.groupBoxModsBehavior.Controls.Add(this.checkBoxFreezeBundledArchives); - this.groupBoxModsBehavior.Controls.Add(this.checkBoxModsUseHardlinks); - this.groupBoxModsBehavior.Controls.Add(this.checkBoxAddArchivesAsBundled); - this.groupBoxModsBehavior.Location = new System.Drawing.Point(6, 6); - this.groupBoxModsBehavior.Name = "groupBoxModsBehavior"; - this.groupBoxModsBehavior.Size = new System.Drawing.Size(740, 95); - this.groupBoxModsBehavior.TabIndex = 60; - this.groupBoxModsBehavior.TabStop = false; - this.groupBoxModsBehavior.Text = "Behavior"; + this.textBoxModArchiveName.Location = new System.Drawing.Point(113, 101); + this.textBoxModArchiveName.Name = "textBoxModArchiveName"; + this.textBoxModArchiveName.Size = new System.Drawing.Size(170, 20); + this.textBoxModArchiveName.TabIndex = 7; + this.textBoxModArchiveName.TextChanged += new System.EventHandler(this.textBoxModArchiveName_TextChanged); // - // checkBoxFreezeBundledArchives + // comboBoxModArchivePreset // - this.checkBoxFreezeBundledArchives.AutoSize = true; - this.checkBoxFreezeBundledArchives.Location = new System.Drawing.Point(6, 42); - this.checkBoxFreezeBundledArchives.Name = "checkBoxFreezeBundledArchives"; - this.checkBoxFreezeBundledArchives.Size = new System.Drawing.Size(211, 17); - this.checkBoxFreezeBundledArchives.TabIndex = 2; - this.checkBoxFreezeBundledArchives.Text = "[Experimental] Freeze bundled archives"; - this.toolTip.SetToolTip(this.checkBoxFreezeBundledArchives, "Instead of rebuilding bundled archives, it will save a bundled copy and ask you i" + - "f you want to update it on deploy."); - this.checkBoxFreezeBundledArchives.UseVisualStyleBackColor = true; - this.checkBoxFreezeBundledArchives.CheckedChanged += new System.EventHandler(this.checkBoxFreezeBundledArchives_CheckedChanged); + this.comboBoxModArchivePreset.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.comboBoxModArchivePreset.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxModArchivePreset.FormattingEnabled = true; + this.comboBoxModArchivePreset.Location = new System.Drawing.Point(113, 74); + this.comboBoxModArchivePreset.Name = "comboBoxModArchivePreset"; + this.comboBoxModArchivePreset.Size = new System.Drawing.Size(245, 21); + this.comboBoxModArchivePreset.TabIndex = 6; + this.comboBoxModArchivePreset.SelectedIndexChanged += new System.EventHandler(this.comboBoxModArchivePreset_SelectedIndexChanged); // - // checkBoxModsUseHardlinks + // textBoxModRootDir // - this.checkBoxModsUseHardlinks.AutoSize = true; - this.checkBoxModsUseHardlinks.Location = new System.Drawing.Point(6, 19); - this.checkBoxModsUseHardlinks.Name = "checkBoxModsUseHardlinks"; - this.checkBoxModsUseHardlinks.Size = new System.Drawing.Size(331, 17); - this.checkBoxModsUseHardlinks.TabIndex = 1; - this.checkBoxModsUseHardlinks.Text = "Make hard links instead of copying files manually (recommended)"; - this.toolTip.SetToolTip(this.checkBoxModsUseHardlinks, "Reduces disk space and deployment time."); - this.checkBoxModsUseHardlinks.UseVisualStyleBackColor = true; - this.checkBoxModsUseHardlinks.CheckedChanged += new System.EventHandler(this.checkBoxModsUseHardlinks_CheckedChanged); + this.textBoxModRootDir.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxModRootDir.Location = new System.Drawing.Point(113, 48); + this.textBoxModRootDir.Name = "textBoxModRootDir"; + this.textBoxModRootDir.Size = new System.Drawing.Size(213, 20); + this.textBoxModRootDir.TabIndex = 4; + this.textBoxModRootDir.TextChanged += new System.EventHandler(this.textBoxModRootDir_TextChanged); // - // checkBoxAddArchivesAsBundled + // buttonModDetailsSuggestArchiveName // - this.checkBoxAddArchivesAsBundled.AutoSize = true; - this.checkBoxAddArchivesAsBundled.Location = new System.Drawing.Point(6, 65); - this.checkBoxAddArchivesAsBundled.Name = "checkBoxAddArchivesAsBundled"; - this.checkBoxAddArchivesAsBundled.Size = new System.Drawing.Size(167, 17); - this.checkBoxAddArchivesAsBundled.TabIndex = 0; - this.checkBoxAddArchivesAsBundled.Text = "Unfreeze *.ba2 files by default"; - this.checkBoxAddArchivesAsBundled.UseVisualStyleBackColor = true; - this.checkBoxAddArchivesAsBundled.CheckedChanged += new System.EventHandler(this.checkBoxAddArchivesAsBundled_CheckedChanged); + this.buttonModDetailsSuggestArchiveName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonModDetailsSuggestArchiveName.Location = new System.Drawing.Point(289, 99); + this.buttonModDetailsSuggestArchiveName.Name = "buttonModDetailsSuggestArchiveName"; + this.buttonModDetailsSuggestArchiveName.Size = new System.Drawing.Size(69, 23); + this.buttonModDetailsSuggestArchiveName.TabIndex = 48; + this.buttonModDetailsSuggestArchiveName.Text = "Suggest"; + this.buttonModDetailsSuggestArchiveName.UseVisualStyleBackColor = true; + this.buttonModDetailsSuggestArchiveName.Click += new System.EventHandler(this.buttonModDetailsSuggestArchiveName_Click); // - // groupBoxLists + // comboBoxModInstallAs // - this.groupBoxLists.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.comboBoxModInstallAs.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.groupBoxLists.Controls.Add(this.buttonModsResetTextbox); - this.groupBoxLists.Controls.Add(this.buttonModsApplyTextBox); - this.groupBoxLists.Controls.Add(this.textBoxResourceList); - this.groupBoxLists.Controls.Add(this.buttonModsCleanList); - this.groupBoxLists.Controls.Add(this.labelsResourceIndexFileList); - this.groupBoxLists.Location = new System.Drawing.Point(6, 107); - this.groupBoxLists.Name = "groupBoxLists"; - this.groupBoxLists.Size = new System.Drawing.Size(740, 351); - this.groupBoxLists.TabIndex = 59; - this.groupBoxLists.TabStop = false; - this.groupBoxLists.Text = "Lists"; + this.comboBoxModInstallAs.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxModInstallAs.FormattingEnabled = true; + this.comboBoxModInstallAs.Location = new System.Drawing.Point(113, 21); + this.comboBoxModInstallAs.Name = "comboBoxModInstallAs"; + this.comboBoxModInstallAs.Size = new System.Drawing.Size(245, 21); + this.comboBoxModInstallAs.TabIndex = 3; + this.comboBoxModInstallAs.SelectedIndexChanged += new System.EventHandler(this.comboBoxModInstallAs_SelectedIndexChanged); // - // buttonModsResetTextbox + // labelModInstallInto // - this.buttonModsResetTextbox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonModsResetTextbox.Location = new System.Drawing.Point(503, 322); - this.buttonModsResetTextbox.Name = "buttonModsResetTextbox"; - this.buttonModsResetTextbox.Size = new System.Drawing.Size(98, 23); - this.buttonModsResetTextbox.TabIndex = 60; - this.buttonModsResetTextbox.Text = "Reset"; - this.buttonModsResetTextbox.UseVisualStyleBackColor = true; - this.buttonModsResetTextbox.Click += new System.EventHandler(this.buttonModsResetTextbox_Click); + this.labelModInstallInto.AutoSize = true; + this.labelModInstallInto.Location = new System.Drawing.Point(6, 51); + this.labelModInstallInto.Name = "labelModInstallInto"; + this.labelModInstallInto.Size = new System.Drawing.Size(57, 13); + this.labelModInstallInto.TabIndex = 38; + this.labelModInstallInto.Text = "Install into:"; // - // buttonModsApplyTextBox + // checkBoxFreezeArchive // - this.buttonModsApplyTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonModsApplyTextBox.Location = new System.Drawing.Point(607, 322); - this.buttonModsApplyTextBox.Name = "buttonModsApplyTextBox"; - this.buttonModsApplyTextBox.Size = new System.Drawing.Size(127, 23); - this.buttonModsApplyTextBox.TabIndex = 59; - this.buttonModsApplyTextBox.Text = "Apply changes"; - this.buttonModsApplyTextBox.UseVisualStyleBackColor = true; - this.buttonModsApplyTextBox.Click += new System.EventHandler(this.buttonModsApplyTextBox_Click); + this.checkBoxFreezeArchive.AutoSize = true; + this.checkBoxFreezeArchive.Location = new System.Drawing.Point(10, 130); + this.checkBoxFreezeArchive.Name = "checkBoxFreezeArchive"; + this.checkBoxFreezeArchive.Size = new System.Drawing.Size(58, 17); + this.checkBoxFreezeArchive.TabIndex = 9; + this.checkBoxFreezeArchive.Text = "Freeze"; + this.toolTip.SetToolTip(this.checkBoxFreezeArchive, "If you \'freeze\' an archive, it does not get recreated when deploying.\r\nThis will " + + "speed up deployment.\r\n\r\nThis is especially useful, if the archive is HUGE (1GiB " + + "or more) and the files aren\'t changing."); + this.checkBoxFreezeArchive.UseVisualStyleBackColor = true; + this.checkBoxFreezeArchive.CheckedChanged += new System.EventHandler(this.checkBoxFreezeArchive_CheckedChanged); // - // textBoxResourceList + // labelModArchivePreset // - this.textBoxResourceList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxResourceList.Location = new System.Drawing.Point(6, 37); - this.textBoxResourceList.Multiline = true; - this.textBoxResourceList.Name = "textBoxResourceList"; - this.textBoxResourceList.Size = new System.Drawing.Size(728, 279); - this.textBoxResourceList.TabIndex = 54; + this.labelModArchivePreset.AutoSize = true; + this.labelModArchivePreset.Location = new System.Drawing.Point(6, 75); + this.labelModArchivePreset.Name = "labelModArchivePreset"; + this.labelModArchivePreset.Size = new System.Drawing.Size(40, 13); + this.labelModArchivePreset.TabIndex = 43; + this.labelModArchivePreset.Text = "Preset:"; + // + // labelModInstallAs + // + this.labelModInstallAs.AutoSize = true; + this.labelModInstallAs.Location = new System.Drawing.Point(6, 24); + this.labelModInstallAs.Name = "labelModInstallAs"; + this.labelModInstallAs.Size = new System.Drawing.Size(51, 13); + this.labelModInstallAs.TabIndex = 41; + this.labelModInstallAs.Text = "Install as:"; // - // buttonModsCleanList + // buttonModPickRootDir // - this.buttonModsCleanList.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.buttonModsCleanList.Location = new System.Drawing.Point(6, 322); - this.buttonModsCleanList.Name = "buttonModsCleanList"; - this.buttonModsCleanList.Size = new System.Drawing.Size(98, 23); - this.buttonModsCleanList.TabIndex = 58; - this.buttonModsCleanList.Text = "Clean list"; - this.buttonModsCleanList.UseVisualStyleBackColor = true; - this.buttonModsCleanList.Click += new System.EventHandler(this.buttonModsCleanList_Click); + this.buttonModPickRootDir.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonModPickRootDir.Location = new System.Drawing.Point(332, 44); + this.buttonModPickRootDir.Name = "buttonModPickRootDir"; + this.buttonModPickRootDir.Size = new System.Drawing.Size(26, 24); + this.buttonModPickRootDir.TabIndex = 5; + this.buttonModPickRootDir.Text = "..."; + this.buttonModPickRootDir.UseVisualStyleBackColor = true; + this.buttonModPickRootDir.Click += new System.EventHandler(this.buttonModPickRootDir_Click); // - // labelsResourceIndexFileList + // labelModInstallWarning // - this.labelsResourceIndexFileList.AutoSize = true; - this.labelsResourceIndexFileList.Location = new System.Drawing.Point(3, 21); - this.labelsResourceIndexFileList.Name = "labelsResourceIndexFileList"; - this.labelsResourceIndexFileList.Size = new System.Drawing.Size(71, 13); - this.labelsResourceIndexFileList.TabIndex = 55; - this.labelsResourceIndexFileList.Text = "Resource list:"; + this.labelModInstallWarning.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.labelModInstallWarning.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(147)))), ((int)(((byte)(107)))), ((int)(((byte)(8))))); + this.labelModInstallWarning.Location = new System.Drawing.Point(7, 154); + this.labelModInstallWarning.Name = "labelModInstallWarning"; + this.labelModInstallWarning.Size = new System.Drawing.Size(351, 66); + this.labelModInstallWarning.TabIndex = 49; + this.labelModInstallWarning.Text = "< Warning here >"; // - // tabPageNexusMods + // linkLabelModAutoDetectInstallOptions // - this.tabPageNexusMods.Controls.Add(this.labelNexusModsMovedNotice2); - this.tabPageNexusMods.Controls.Add(this.labelNexusModsMovedNotice); - this.tabPageNexusMods.Controls.Add(this.pictureBox1); - this.tabPageNexusMods.Location = new System.Drawing.Point(4, 22); - this.tabPageNexusMods.Name = "tabPageNexusMods"; - this.tabPageNexusMods.Padding = new System.Windows.Forms.Padding(3); - this.tabPageNexusMods.Size = new System.Drawing.Size(752, 464); - this.tabPageNexusMods.TabIndex = 2; - this.tabPageNexusMods.Text = "NexusMods"; - this.tabPageNexusMods.UseVisualStyleBackColor = true; + this.linkLabelModAutoDetectInstallOptions.AutoSize = true; + this.linkLabelModAutoDetectInstallOptions.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkLabelModAutoDetectInstallOptions.Location = new System.Drawing.Point(7, 220); + this.linkLabelModAutoDetectInstallOptions.Name = "linkLabelModAutoDetectInstallOptions"; + this.linkLabelModAutoDetectInstallOptions.Size = new System.Drawing.Size(189, 13); + this.linkLabelModAutoDetectInstallOptions.TabIndex = 50; + this.linkLabelModAutoDetectInstallOptions.TabStop = true; + this.linkLabelModAutoDetectInstallOptions.Text = "Attempt auto-detect installation options"; + this.linkLabelModAutoDetectInstallOptions.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModAutoDetectInstallOptions_LinkClicked); // - // labelNexusModsMovedNotice2 + // linkLabelModInvalidateFrozenArchive // - this.labelNexusModsMovedNotice2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.labelNexusModsMovedNotice2.Location = new System.Drawing.Point(6, 346); - this.labelNexusModsMovedNotice2.Name = "labelNexusModsMovedNotice2"; - this.labelNexusModsMovedNotice2.Size = new System.Drawing.Size(740, 23); - this.labelNexusModsMovedNotice2.TabIndex = 93; - this.labelNexusModsMovedNotice2.Text = "Other options such as \"Update mod information\" can be found in the menu under Too" + - "ls → NexusMods API."; - this.labelNexusModsMovedNotice2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.linkLabelModInvalidateFrozenArchive.AutoSize = true; + this.linkLabelModInvalidateFrozenArchive.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkLabelModInvalidateFrozenArchive.Location = new System.Drawing.Point(110, 131); + this.linkLabelModInvalidateFrozenArchive.Name = "linkLabelModInvalidateFrozenArchive"; + this.linkLabelModInvalidateFrozenArchive.Size = new System.Drawing.Size(123, 13); + this.linkLabelModInvalidateFrozenArchive.TabIndex = 51; + this.linkLabelModInvalidateFrozenArchive.TabStop = true; + this.linkLabelModInvalidateFrozenArchive.Text = "Invalidate frozen archive"; + this.linkLabelModInvalidateFrozenArchive.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModInvalidateFrozenArchive_LinkClicked); // - // labelNexusModsMovedNotice + // groupBoxModReplace // - this.labelNexusModsMovedNotice.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.labelNexusModsMovedNotice.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelNexusModsMovedNotice.Location = new System.Drawing.Point(5, 91); - this.labelNexusModsMovedNotice.Name = "labelNexusModsMovedNotice"; - this.labelNexusModsMovedNotice.Size = new System.Drawing.Size(741, 102); - this.labelNexusModsMovedNotice.TabIndex = 91; - this.labelNexusModsMovedNotice.Text = "The NexusMods tab has been moved into the settings window."; - this.labelNexusModsMovedNotice.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.groupBoxModReplace.Controls.Add(this.labelModDetailsReplace); + this.groupBoxModReplace.Controls.Add(this.linkLabelModDeleteFolderContents); + this.groupBoxModReplace.Controls.Add(this.panelModDetailsReplaceDragAndDrop); + this.groupBoxModReplace.Controls.Add(this.linkLabelModReplaceFilesWithFolder); + this.groupBoxModReplace.Controls.Add(this.linkLabelModReplaceFilesWithArchive); + this.groupBoxModReplace.Location = new System.Drawing.Point(7, 667); + this.groupBoxModReplace.Name = "groupBoxModReplace"; + this.groupBoxModReplace.Size = new System.Drawing.Size(364, 136); + this.groupBoxModReplace.TabIndex = 75; + this.groupBoxModReplace.TabStop = false; + this.groupBoxModReplace.Text = "Add / replace mod files"; // - // pictureBox1 + // linkLabelModReplaceFilesWithArchive // - this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.pictureBox1.Image = global::Fo76ini.Properties.Resources.Fo76ini_LDu4jzf2p3; - this.pictureBox1.Location = new System.Drawing.Point(8, 196); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(737, 147); - this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.pictureBox1.TabIndex = 92; - this.pictureBox1.TabStop = false; + this.linkLabelModReplaceFilesWithArchive.AutoSize = true; + this.linkLabelModReplaceFilesWithArchive.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkLabelModReplaceFilesWithArchive.Location = new System.Drawing.Point(173, 19); + this.linkLabelModReplaceFilesWithArchive.Name = "linkLabelModReplaceFilesWithArchive"; + this.linkLabelModReplaceFilesWithArchive.Size = new System.Drawing.Size(74, 13); + this.linkLabelModReplaceFilesWithArchive.TabIndex = 0; + this.linkLabelModReplaceFilesWithArchive.TabStop = true; + this.linkLabelModReplaceFilesWithArchive.Text = "Import archive"; + this.linkLabelModReplaceFilesWithArchive.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModReplaceFilesWithArchive_LinkClicked); // - // openFileDialogMod + // linkLabelModReplaceFilesWithFolder // - this.openFileDialogMod.Filter = "All Archives|*.zip;*.rar;*.7z;*.tar;*.ba2"; - this.openFileDialogMod.Title = "Add *.ba2 or any other archive."; + this.linkLabelModReplaceFilesWithFolder.AutoSize = true; + this.linkLabelModReplaceFilesWithFolder.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkLabelModReplaceFilesWithFolder.Location = new System.Drawing.Point(173, 39); + this.linkLabelModReplaceFilesWithFolder.Name = "linkLabelModReplaceFilesWithFolder"; + this.linkLabelModReplaceFilesWithFolder.Size = new System.Drawing.Size(65, 13); + this.linkLabelModReplaceFilesWithFolder.TabIndex = 1; + this.linkLabelModReplaceFilesWithFolder.TabStop = true; + this.linkLabelModReplaceFilesWithFolder.Text = "Import folder"; + this.linkLabelModReplaceFilesWithFolder.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModReplaceFilesWithFolder_LinkClicked); // - // checkBoxDisableMods + // panelModDetailsReplaceDragAndDrop // - this.checkBoxDisableMods.AutoSize = true; - this.checkBoxDisableMods.Location = new System.Drawing.Point(4, 3); - this.checkBoxDisableMods.Name = "checkBoxDisableMods"; - this.checkBoxDisableMods.Size = new System.Drawing.Size(89, 17); - this.checkBoxDisableMods.TabIndex = 55; - this.checkBoxDisableMods.Text = "Disable mods"; - this.checkBoxDisableMods.UseVisualStyleBackColor = true; - this.checkBoxDisableMods.CheckedChanged += new System.EventHandler(this.checkBoxDisableMods_CheckedChanged); + this.panelModDetailsReplaceDragAndDrop.AllowDrop = true; + this.panelModDetailsReplaceDragAndDrop.BackgroundImage = global::Fo76ini.Properties.Resources.download_2_48; + this.panelModDetailsReplaceDragAndDrop.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.panelModDetailsReplaceDragAndDrop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panelModDetailsReplaceDragAndDrop.Location = new System.Drawing.Point(6, 19); + this.panelModDetailsReplaceDragAndDrop.Name = "panelModDetailsReplaceDragAndDrop"; + this.panelModDetailsReplaceDragAndDrop.Size = new System.Drawing.Size(159, 108); + this.panelModDetailsReplaceDragAndDrop.TabIndex = 4; // - // openFileDialogGamePath + // linkLabelModDeleteFolderContents // - this.openFileDialogGamePath.Filter = "Fallout 76 executable|Fallout76.exe,Project76_GamePass.exe"; + this.linkLabelModDeleteFolderContents.AutoSize = true; + this.linkLabelModDeleteFolderContents.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkLabelModDeleteFolderContents.Location = new System.Drawing.Point(173, 60); + this.linkLabelModDeleteFolderContents.Name = "linkLabelModDeleteFolderContents"; + this.linkLabelModDeleteFolderContents.Size = new System.Drawing.Size(111, 13); + this.linkLabelModDeleteFolderContents.TabIndex = 5; + this.linkLabelModDeleteFolderContents.TabStop = true; + this.linkLabelModDeleteFolderContents.Text = "Delete folder contents"; + this.linkLabelModDeleteFolderContents.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelModDeleteFolderContents_LinkClicked); // - // panel1 + // labelModDetailsReplace // - this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.panel1.Controls.Add(this.buttonModsDeploy); - this.panel1.Controls.Add(this.checkBoxDisableMods); - this.panel1.Location = new System.Drawing.Point(618, 521); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(166, 51); - this.panel1.TabIndex = 56; + this.labelModDetailsReplace.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.labelModDetailsReplace.ForeColor = System.Drawing.Color.Gray; + this.labelModDetailsReplace.Location = new System.Drawing.Point(175, 76); + this.labelModDetailsReplace.Name = "labelModDetailsReplace"; + this.labelModDetailsReplace.Size = new System.Drawing.Size(167, 52); + this.labelModDetailsReplace.TabIndex = 0; + this.labelModDetailsReplace.Text = "Drag-and-drop files/folders into the left box to add/replace files."; + this.labelModDetailsReplace.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // - // openFileDialogBA2 + // groupBoxNotes // - this.openFileDialogBA2.DefaultExt = "ba2"; - this.openFileDialogBA2.Filter = "Archive2|*.ba2"; - this.openFileDialogBA2.Title = "Add *.ba2 archive."; + this.groupBoxNotes.Controls.Add(this.textBoxNotes); + this.groupBoxNotes.Location = new System.Drawing.Point(7, 257); + this.groupBoxNotes.Name = "groupBoxNotes"; + this.groupBoxNotes.Size = new System.Drawing.Size(364, 151); + this.groupBoxNotes.TabIndex = 76; + this.groupBoxNotes.TabStop = false; + this.groupBoxNotes.Text = "Notes"; // - // statusStrip1 + // textBoxNotes // - this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripStatusLabelDescModCount, - this.toolStripStatusLabelModCount, - this.toolStripStatusLabelDescEnabledCount, - this.toolStripStatusLabelEnabledCount, - this.toolStripStatusLabelSpacer, - this.toolStripStatusLabelDeploymentStatus}); - this.statusStrip1.Location = new System.Drawing.Point(0, 579); - this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Size = new System.Drawing.Size(784, 22); - this.statusStrip1.TabIndex = 57; - this.statusStrip1.Text = "statusStrip1"; + this.textBoxNotes.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxNotes.Font = new System.Drawing.Font("Lucida Console", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBoxNotes.Location = new System.Drawing.Point(6, 19); + this.textBoxNotes.Multiline = true; + this.textBoxNotes.Name = "textBoxNotes"; + this.textBoxNotes.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBoxNotes.Size = new System.Drawing.Size(351, 120); + this.textBoxNotes.TabIndex = 0; + this.textBoxNotes.TextChanged += new System.EventHandler(this.textBoxNotes_TextChanged); // - // toolStripStatusLabelDescModCount + // panelModDetailsHeader // - this.toolStripStatusLabelDescModCount.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.toolStripStatusLabelDescModCount.Margin = new System.Windows.Forms.Padding(8, 3, 3, 2); - this.toolStripStatusLabelDescModCount.Name = "toolStripStatusLabelDescModCount"; - this.toolStripStatusLabelDescModCount.Size = new System.Drawing.Size(70, 17); - this.toolStripStatusLabelDescModCount.Text = "Mod count:"; + this.panelModDetailsHeader.Controls.Add(this.buttonModAbstain); + this.panelModDetailsHeader.Controls.Add(this.buttonModEndorse); + this.panelModDetailsHeader.Controls.Add(this.labelModEndorseStatus); + this.panelModDetailsHeader.Controls.Add(this.labelModTitle); + this.panelModDetailsHeader.Controls.Add(this.checkBoxModDetailsEnabled); + this.panelModDetailsHeader.Location = new System.Drawing.Point(0, 157); + this.panelModDetailsHeader.Name = "panelModDetailsHeader"; + this.panelModDetailsHeader.Size = new System.Drawing.Size(395, 62); + this.panelModDetailsHeader.TabIndex = 77; // - // toolStripStatusLabelModCount + // checkBoxModDetailsEnabled // - this.toolStripStatusLabelModCount.Name = "toolStripStatusLabelModCount"; - this.toolStripStatusLabelModCount.Size = new System.Drawing.Size(13, 17); - this.toolStripStatusLabelModCount.Text = "0"; + this.checkBoxModDetailsEnabled.AutoSize = true; + this.checkBoxModDetailsEnabled.Location = new System.Drawing.Point(8, 30); + this.checkBoxModDetailsEnabled.Name = "checkBoxModDetailsEnabled"; + this.checkBoxModDetailsEnabled.Size = new System.Drawing.Size(101, 17); + this.checkBoxModDetailsEnabled.TabIndex = 74; + this.checkBoxModDetailsEnabled.Text = "Enable this mod"; + this.checkBoxModDetailsEnabled.UseVisualStyleBackColor = true; + this.checkBoxModDetailsEnabled.CheckedChanged += new System.EventHandler(this.checkBoxModDetailsEnabled_CheckedChanged); // - // toolStripStatusLabelDescEnabledCount + // labelModTitle // - this.toolStripStatusLabelDescEnabledCount.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.toolStripStatusLabelDescEnabledCount.Margin = new System.Windows.Forms.Padding(50, 3, 3, 2); - this.toolStripStatusLabelDescEnabledCount.Name = "toolStripStatusLabelDescEnabledCount"; - this.toolStripStatusLabelDescEnabledCount.Size = new System.Drawing.Size(53, 17); - this.toolStripStatusLabelDescEnabledCount.Text = "Enabled:"; + this.labelModTitle.AutoEllipsis = true; + this.labelModTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelModTitle.Location = new System.Drawing.Point(-12, 2); + this.labelModTitle.Name = "labelModTitle"; + this.labelModTitle.Padding = new System.Windows.Forms.Padding(16, 2, 0, 2); + this.labelModTitle.Size = new System.Drawing.Size(322, 25); + this.labelModTitle.TabIndex = 75; + this.labelModTitle.Text = "< Mod name goes here >"; // - // toolStripStatusLabelEnabledCount + // labelModEndorseStatus // - this.toolStripStatusLabelEnabledCount.Name = "toolStripStatusLabelEnabledCount"; - this.toolStripStatusLabelEnabledCount.Size = new System.Drawing.Size(13, 17); - this.toolStripStatusLabelEnabledCount.Text = "0"; + this.labelModEndorseStatus.Location = new System.Drawing.Point(145, 41); + this.labelModEndorseStatus.Name = "labelModEndorseStatus"; + this.labelModEndorseStatus.Size = new System.Drawing.Size(246, 13); + this.labelModEndorseStatus.TabIndex = 71; + this.labelModEndorseStatus.Text = "< Whether or not the user has endorsed this mod >"; + this.labelModEndorseStatus.TextAlign = System.Drawing.ContentAlignment.TopRight; // - // toolStripStatusLabelSpacer + // buttonModEndorse // - this.toolStripStatusLabelSpacer.Name = "toolStripStatusLabelSpacer"; - this.toolStripStatusLabelSpacer.Size = new System.Drawing.Size(423, 17); - this.toolStripStatusLabelSpacer.Spring = true; - this.toolStripStatusLabelSpacer.Text = " "; + this.buttonModEndorse.BackColor = System.Drawing.Color.Transparent; + this.buttonModEndorse.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128))))); + this.buttonModEndorse.FlatAppearance.BorderSize = 0; + this.buttonModEndorse.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonModEndorse.Image = global::Fo76ini.Properties.Resources.like; + this.buttonModEndorse.ImageAlign = System.Drawing.ContentAlignment.TopCenter; + this.buttonModEndorse.Location = new System.Drawing.Point(316, 1); + this.buttonModEndorse.Name = "buttonModEndorse"; + this.buttonModEndorse.Size = new System.Drawing.Size(36, 40); + this.buttonModEndorse.TabIndex = 72; + this.toolTip.SetToolTip(this.buttonModEndorse, "Endorse this mod."); + this.buttonModEndorse.UseVisualStyleBackColor = false; + this.buttonModEndorse.Click += new System.EventHandler(this.buttonModEndorse_Click); // - // toolStripStatusLabelDeploymentStatus + // buttonModAbstain // - this.toolStripStatusLabelDeploymentStatus.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.toolStripStatusLabelDeploymentStatus.ForeColor = System.Drawing.Color.Crimson; - this.toolStripStatusLabelDeploymentStatus.Name = "toolStripStatusLabelDeploymentStatus"; - this.toolStripStatusLabelDeploymentStatus.Size = new System.Drawing.Size(133, 17); - this.toolStripStatusLabelDeploymentStatus.Text = "Deployment necessary"; + this.buttonModAbstain.BackColor = System.Drawing.Color.Transparent; + this.buttonModAbstain.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); + this.buttonModAbstain.FlatAppearance.BorderSize = 0; + this.buttonModAbstain.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonModAbstain.Image = global::Fo76ini.Properties.Resources.dislike; + this.buttonModAbstain.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.buttonModAbstain.Location = new System.Drawing.Point(356, 1); + this.buttonModAbstain.Name = "buttonModAbstain"; + this.buttonModAbstain.Size = new System.Drawing.Size(36, 40); + this.buttonModAbstain.TabIndex = 73; + this.toolTip.SetToolTip(this.buttonModAbstain, "Abstain from endorsing this mod."); + this.buttonModAbstain.UseVisualStyleBackColor = false; + this.buttonModAbstain.Click += new System.EventHandler(this.buttonModAbstain_Click); // - // pictureBoxModsLoadingGIF + // pictureBoxCollapseDetails // - this.pictureBoxModsLoadingGIF.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.pictureBoxModsLoadingGIF.BackColor = System.Drawing.Color.White; - this.pictureBoxModsLoadingGIF.Image = global::Fo76ini.Properties.Resources.Spinner_200; - this.pictureBoxModsLoadingGIF.Location = new System.Drawing.Point(0, 27); - this.pictureBoxModsLoadingGIF.Name = "pictureBoxModsLoadingGIF"; - this.pictureBoxModsLoadingGIF.Size = new System.Drawing.Size(16, 490); - this.pictureBoxModsLoadingGIF.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.pictureBoxModsLoadingGIF.TabIndex = 57; - this.pictureBoxModsLoadingGIF.TabStop = false; - this.pictureBoxModsLoadingGIF.Visible = false; + this.pictureBoxCollapseDetails.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.pictureBoxCollapseDetails.BackColor = System.Drawing.SystemColors.ButtonShadow; + this.pictureBoxCollapseDetails.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxCollapseDetails.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxCollapseDetails.Image"))); + this.pictureBoxCollapseDetails.Location = new System.Drawing.Point(333, 0); + this.pictureBoxCollapseDetails.Name = "pictureBoxCollapseDetails"; + this.pictureBoxCollapseDetails.Size = new System.Drawing.Size(24, 464); + this.pictureBoxCollapseDetails.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pictureBoxCollapseDetails.TabIndex = 59; + this.pictureBoxCollapseDetails.TabStop = false; + this.pictureBoxCollapseDetails.Click += new System.EventHandler(this.pictureBoxCollapseDetails_Click); // - // timerCheckForNXM + // tabControl1 // - this.timerCheckForNXM.Interval = 1000; - this.timerCheckForNXM.Tick += new System.EventHandler(this.timerCheckForNXM_Tick); + this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl1.Controls.Add(this.tabPageModOrder); + this.tabControl1.Controls.Add(this.tabPageModsSettings); + this.tabControl1.Location = new System.Drawing.Point(12, 27); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(760, 490); + this.tabControl1.TabIndex = 54; // // FormMods // @@ -1606,39 +1550,37 @@ private void InitializeComponent() this.Load += new System.EventHandler(this.FormMods_Load); this.menuStrip1.ResumeLayout(false); this.menuStrip1.PerformLayout(); - this.tabControl1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxModsLoadingGIF)).EndInit(); + this.tabPageModsSettings.ResumeLayout(false); + this.groupBoxLists.ResumeLayout(false); + this.groupBoxLists.PerformLayout(); + this.groupBoxModsBehavior.ResumeLayout(false); + this.groupBoxModsBehavior.PerformLayout(); this.tabPageModOrder.ResumeLayout(false); this.tabPageModOrder.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxCollapseDetails)).EndInit(); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); this.panelModDetails.ResumeLayout(false); - this.panelModDetailsHeader.ResumeLayout(false); - this.panelModDetailsHeader.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxModThumbnail)).EndInit(); this.panelModDetailsInner.ResumeLayout(false); - this.groupBoxNotes.ResumeLayout(false); - this.groupBoxNotes.PerformLayout(); - this.groupBoxModReplace.ResumeLayout(false); - this.groupBoxModReplace.PerformLayout(); - this.groupBoxModDetailsInstallationOptions.ResumeLayout(false); - this.groupBoxModDetailsInstallationOptions.PerformLayout(); this.groupBoxModDetailsDetails.ResumeLayout(false); this.groupBoxModDetailsDetails.PerformLayout(); this.panelModDetailsNexusMods.ResumeLayout(false); this.panelModDetailsNexusMods.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxModThumbnail)).EndInit(); - this.toolStrip1.ResumeLayout(false); - this.toolStrip1.PerformLayout(); - this.tabPageModsSettings.ResumeLayout(false); - this.groupBoxModsBehavior.ResumeLayout(false); - this.groupBoxModsBehavior.PerformLayout(); - this.groupBoxLists.ResumeLayout(false); - this.groupBoxLists.PerformLayout(); - this.tabPageNexusMods.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.statusStrip1.ResumeLayout(false); - this.statusStrip1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxModsLoadingGIF)).EndInit(); + this.groupBoxModDetailsInstallationOptions.ResumeLayout(false); + this.groupBoxModDetailsInstallationOptions.PerformLayout(); + this.groupBoxModReplace.ResumeLayout(false); + this.groupBoxModReplace.PerformLayout(); + this.groupBoxNotes.ResumeLayout(false); + this.groupBoxNotes.PerformLayout(); + this.panelModDetailsHeader.ResumeLayout(false); + this.panelModDetailsHeader.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxCollapseDetails)).EndInit(); + this.tabControl1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -1660,88 +1602,30 @@ private void InitializeComponent() private System.Windows.Forms.ProgressBar progressBarMods; private System.Windows.Forms.Button buttonModsDeploy; private System.Windows.Forms.Label labelModsDeploy; - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPageModOrder; - private System.Windows.Forms.TabPage tabPageModsSettings; - public System.Windows.Forms.ListView listViewMods; public System.Windows.Forms.ToolTip toolTip; - public System.Windows.Forms.ToolStrip toolStrip1; - private System.Windows.Forms.ToolStripButton toolStripButtonMoveUp; - private System.Windows.Forms.ToolStripButton toolStripButtonMoveDown; - private System.Windows.Forms.ToolStripButton toolStripButtonModOpenFolder; - private System.Windows.Forms.ToolStripButton toolStripButtonAddModFolder; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; - private System.Windows.Forms.ColumnHeader columnHeaderModTitle; - private System.Windows.Forms.ColumnHeader columnHeaderInstallAs; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; - private System.Windows.Forms.ToolStripButton toolStripButtonAddMod; - private System.Windows.Forms.ToolStripButton toolStripButtonCheckAll; - private System.Windows.Forms.ToolStripButton toolStripButtonDeleteMod; private System.Windows.Forms.OpenFileDialog openFileDialogMod; private System.Windows.Forms.FolderBrowserDialog folderBrowserDialogMod; private System.Windows.Forms.CheckBox checkBoxDisableMods; private System.Windows.Forms.OpenFileDialog openFileDialogGamePath; - private System.Windows.Forms.ColumnHeader columnHeaderInstallInto; - private System.Windows.Forms.ColumnHeader columnHeaderArchiveName; private System.Windows.Forms.Panel panel1; private System.Windows.Forms.ToolStripMenuItem showConflictingFilesToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem reloadUIToolStripMenuItem; - private System.Windows.Forms.ColumnHeader columnHeaderFrozenState; private System.Windows.Forms.OpenFileDialog openFileDialogBA2; private System.Windows.Forms.ToolStripMenuItem fromba2ArchivefrozenToolStripMenuItem; - private System.Windows.Forms.GroupBox groupBoxLists; - private System.Windows.Forms.TextBox textBoxResourceList; - private System.Windows.Forms.Button buttonModsCleanList; - private System.Windows.Forms.Label labelsResourceIndexFileList; - private System.Windows.Forms.Button buttonModsResetTextbox; - private System.Windows.Forms.Button buttonModsApplyTextBox; - private System.Windows.Forms.GroupBox groupBoxModsBehavior; - private System.Windows.Forms.CheckBox checkBoxAddArchivesAsBundled; - private System.Windows.Forms.CheckBox checkBoxModsUseHardlinks; private System.Windows.Forms.ToolStripMenuItem archive2ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem openArchive2ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem exploreba2ArchiveToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem logFilesToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem showModmanagerlogtxtToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem showArchive2logtxtToolStripMenuItem; - private System.Windows.Forms.CheckBox checkBoxFreezeBundledArchives; private System.Windows.Forms.PictureBox pictureBoxModsLoadingGIF; - private System.Windows.Forms.Panel panelModDetails; - private System.Windows.Forms.Label labelModInstallAs; - private System.Windows.Forms.Label labelModInstallInto; - private System.Windows.Forms.TextBox textBoxModRootDir; - private System.Windows.Forms.CheckBox checkBoxFreezeArchive; - private System.Windows.Forms.ComboBox comboBoxModInstallAs; - private System.Windows.Forms.Label labelModArchivePreset; - private System.Windows.Forms.Button buttonModPickRootDir; - private System.Windows.Forms.ComboBox comboBoxModArchivePreset; - private System.Windows.Forms.TextBox textBoxModName; - private System.Windows.Forms.Label labelModName; - private System.Windows.Forms.TextBox textBoxModArchiveName; - private System.Windows.Forms.Label labelModArchiveName; - private System.Windows.Forms.PictureBox pictureBoxCollapseDetails; private System.Windows.Forms.FolderBrowserDialog folderBrowserDialogPickRootDir; - private System.Windows.Forms.Button buttonModDetailsSuggestArchiveName; - private System.Windows.Forms.TextBox textBoxModURL; - private System.Windows.Forms.Label labelModURL; - private System.Windows.Forms.PictureBox pictureBoxModThumbnail; - private System.Windows.Forms.TabPage tabPageNexusMods; - private System.Windows.Forms.GroupBox groupBoxModDetailsInstallationOptions; - private System.Windows.Forms.GroupBox groupBoxModDetailsDetails; - private System.Windows.Forms.TextBox textBoxModVersion; - private System.Windows.Forms.Label labelModVersion; - private System.Windows.Forms.ColumnHeader columnHeaderVersion; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem nexusModsAPIToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem updateModInformationToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem endorseModsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem checkForUpdatesToolStripMenuItem; - private System.Windows.Forms.Label labelNexusModsMovedNotice; - private System.Windows.Forms.PictureBox pictureBox1; - private System.Windows.Forms.Label labelNexusModsMovedNotice2; private System.Windows.Forms.StatusStrip statusStrip1; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelDescModCount; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelModCount; @@ -1749,39 +1633,93 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelDeploymentStatus; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelDescEnabledCount; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelEnabledCount; - private System.Windows.Forms.Panel panelModDetailsNexusMods; - private System.Windows.Forms.Label labelModSummary; - private System.Windows.Forms.Label labelModLatestVersionDesc; - private System.Windows.Forms.Label labelModAuthorDesc; - private System.Windows.Forms.Label labelModLatestVersion; - private System.Windows.Forms.Label labelModAuthor; - private System.Windows.Forms.Panel panelModDetailsInner; - private System.Windows.Forms.Label labelModInstallWarning; - private System.Windows.Forms.GroupBox groupBoxModReplace; - private System.Windows.Forms.LinkLabel linkLabelModReplaceFilesWithFolder; - private System.Windows.Forms.LinkLabel linkLabelModReplaceFilesWithArchive; - private System.Windows.Forms.Label labelModDetailsReplace; - private System.Windows.Forms.LinkLabel linkLabelModDeleteFolderContents; - private System.Windows.Forms.LinkLabel linkLabelModSetLatestVersion; - private System.Windows.Forms.Panel panelModDetailsReplaceDragAndDrop; private System.Windows.Forms.ToolStripMenuItem emptyModToolStripMenuItem; - private System.Windows.Forms.LinkLabel linkLabelModAutoDetectInstallOptions; - private System.Windows.Forms.LinkLabel linkLabelModInvalidateFrozenArchive; - private System.Windows.Forms.Button buttonModOpenPage; + private System.Windows.Forms.Timer timerCheckForNXM; + private System.Windows.Forms.TabPage tabPageModsSettings; + private System.Windows.Forms.GroupBox groupBoxModsBehavior; + private System.Windows.Forms.CheckBox checkBoxFreezeBundledArchives; + private System.Windows.Forms.CheckBox checkBoxModsUseHardlinks; + private System.Windows.Forms.CheckBox checkBoxAddArchivesAsBundled; + private System.Windows.Forms.GroupBox groupBoxLists; + private System.Windows.Forms.Button buttonModsResetTextbox; + private System.Windows.Forms.Button buttonModsApplyTextBox; + private System.Windows.Forms.TextBox textBoxResourceList; + private System.Windows.Forms.Button buttonModsCleanList; + private System.Windows.Forms.Label labelsResourceIndexFileList; + private System.Windows.Forms.TabPage tabPageModOrder; + private System.Windows.Forms.PictureBox pictureBoxCollapseDetails; + private System.Windows.Forms.Panel panelModDetails; private System.Windows.Forms.Panel panelModDetailsHeader; private System.Windows.Forms.Button buttonModAbstain; private System.Windows.Forms.Button buttonModEndorse; private System.Windows.Forms.Label labelModEndorseStatus; private System.Windows.Forms.Label labelModTitle; private System.Windows.Forms.CheckBox checkBoxModDetailsEnabled; + private System.Windows.Forms.Panel panelModDetailsInner; private System.Windows.Forms.GroupBox groupBoxNotes; private System.Windows.Forms.TextBox textBoxNotes; + private System.Windows.Forms.GroupBox groupBoxModReplace; + private System.Windows.Forms.Label labelModDetailsReplace; + private System.Windows.Forms.LinkLabel linkLabelModDeleteFolderContents; + private System.Windows.Forms.Panel panelModDetailsReplaceDragAndDrop; + private System.Windows.Forms.LinkLabel linkLabelModReplaceFilesWithFolder; + private System.Windows.Forms.LinkLabel linkLabelModReplaceFilesWithArchive; + private System.Windows.Forms.GroupBox groupBoxModDetailsInstallationOptions; + private System.Windows.Forms.LinkLabel linkLabelModInvalidateFrozenArchive; + private System.Windows.Forms.LinkLabel linkLabelModAutoDetectInstallOptions; + private System.Windows.Forms.Label labelModInstallWarning; + private System.Windows.Forms.Button buttonModPickRootDir; + private System.Windows.Forms.Label labelModInstallAs; + private System.Windows.Forms.Label labelModArchivePreset; + private System.Windows.Forms.CheckBox checkBoxFreezeArchive; + private System.Windows.Forms.Label labelModInstallInto; + private System.Windows.Forms.ComboBox comboBoxModInstallAs; + private System.Windows.Forms.Button buttonModDetailsSuggestArchiveName; + private System.Windows.Forms.TextBox textBoxModRootDir; + private System.Windows.Forms.ComboBox comboBoxModArchivePreset; + private System.Windows.Forms.TextBox textBoxModArchiveName; + private System.Windows.Forms.Label labelModArchiveName; + private System.Windows.Forms.GroupBox groupBoxModDetailsDetails; private System.Windows.Forms.TextBox textBoxModFolderName; private System.Windows.Forms.Label labelModFolderName; - private System.Windows.Forms.ColumnHeader columnHeaderArchivePreset; - private System.Windows.Forms.ToolStripButton toolStripButtonModUnfreeze; + private System.Windows.Forms.Button buttonModOpenPage; + private System.Windows.Forms.Panel panelModDetailsNexusMods; + private System.Windows.Forms.LinkLabel linkLabelModSetLatestVersion; + private System.Windows.Forms.Label labelModAuthor; + private System.Windows.Forms.Label labelModLatestVersion; + private System.Windows.Forms.Label labelModLatestVersionDesc; + private System.Windows.Forms.Label labelModAuthorDesc; + private System.Windows.Forms.TextBox textBoxModVersion; + private System.Windows.Forms.Label labelModVersion; + private System.Windows.Forms.TextBox textBoxModURL; + private System.Windows.Forms.Label labelModName; + private System.Windows.Forms.Label labelModURL; + private System.Windows.Forms.TextBox textBoxModName; + private System.Windows.Forms.Label labelModSummary; + private System.Windows.Forms.PictureBox pictureBoxModThumbnail; + public System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton toolStripButtonAddMod; + private System.Windows.Forms.ToolStripButton toolStripButtonAddModFolder; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripButton toolStripButtonCheckAll; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripButton toolStripButtonMoveUp; + private System.Windows.Forms.ToolStripButton toolStripButtonMoveDown; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripButton toolStripButtonModOpenFolder; private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; private System.Windows.Forms.ToolStripButton toolStripButtonFreeze; - private System.Windows.Forms.Timer timerCheckForNXM; + private System.Windows.Forms.ToolStripButton toolStripButtonModUnfreeze; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripButton toolStripButtonDeleteMod; + public System.Windows.Forms.ListView listViewMods; + private System.Windows.Forms.ColumnHeader columnHeaderModTitle; + private System.Windows.Forms.ColumnHeader columnHeaderVersion; + private System.Windows.Forms.ColumnHeader columnHeaderInstallAs; + private System.Windows.Forms.ColumnHeader columnHeaderInstallInto; + private System.Windows.Forms.ColumnHeader columnHeaderArchiveName; + private System.Windows.Forms.ColumnHeader columnHeaderArchivePreset; + private System.Windows.Forms.ColumnHeader columnHeaderFrozenState; + private System.Windows.Forms.TabControl tabControl1; } } \ No newline at end of file diff --git a/Fo76ini/Forms/FormMods/FormMods.Details.cs b/Fo76ini/Forms/FormMods/FormMods.Details.cs index d795920..fd0081f 100644 --- a/Fo76ini/Forms/FormMods/FormMods.Details.cs +++ b/Fo76ini/Forms/FormMods/FormMods.Details.cs @@ -233,6 +233,7 @@ private void UpdateSidePanelOneMod() this.checkBoxModDetailsEnabled.Visible = true; this.groupBoxModDetailsDetails.Visible = true; this.groupBoxModReplace.Visible = true; + this.groupBoxNotes.Visible = true; // Update thumbnail: if (this.editedMod.RemoteInfo != null && @@ -378,12 +379,16 @@ private void UpdateSidePanelOneMod() private void UpdateSidePanelBulk() { + this.labelModTitle.Text = string.Format(Localization.localizedStrings["modDetailsTitleBulkSelected"], this.editedModCount); + this.checkBoxModDetailsEnabled.Visible = false; this.groupBoxModDetailsDetails.Visible = false; this.groupBoxModReplace.Visible = false; + this.groupBoxNotes.Visible = false; + // No thumbnail for us: this.pictureBoxModThumbnail.Image = Resources.bg; - this.labelModTitle.Text = string.Format(Localization.localizedStrings["modDetailsTitleBulkSelected"], this.editedModCount); + this.pictureBoxModThumbnail.Visible = false; // Install into visible this.labelModInstallInto.Visible = true; diff --git a/Fo76ini/Forms/FormMods/FormMods.cs b/Fo76ini/Forms/FormMods/FormMods.cs index 6351456..d970488 100644 --- a/Fo76ini/Forms/FormMods/FormMods.cs +++ b/Fo76ini/Forms/FormMods/FormMods.cs @@ -111,6 +111,7 @@ private void LoadMods(string GamePath) Mods.Load(); } + private void ReloadModManager() { if (!IniFiles.IsLoaded()) @@ -132,7 +133,20 @@ private void ReloadModManager() } catch (Exception exc) { - MsgBox.Popup("Failed to load mods", $"Failed to load mods.\n{exc.GetType()}: {exc.Message}", MessageBoxIcon.Error); + if (exc is UnauthorizedAccessException && !Utils.HasAdminRights()) + { + MsgBox.Popup("Failed to load mods", + $"Try to start the program with admin rights.\n" + + $"Right-click on the desktop icon or *.exe file and click on 'Run as administrator'.\n\n" + + $"{exc.GetType()}: {exc.Message}", + MessageBoxIcon.Error); + } + else + { + MsgBox.Popup("Failed to load mods", $"Failed to load mods.\n" + + $"{exc.GetType()}: {exc.Message}", MessageBoxIcon.Error); + } + this.DisableUI(); this.preventClosing = false; } @@ -728,6 +742,7 @@ private void timerCheckForNXM_Tick(object sender, EventArgs e) { string nxmLink = File.ReadAllText(txtPath); File.Delete(txtPath); + OpenUI(); DownloadModThreaded(nxmLink, UpdateProgress); } } diff --git a/Fo76ini/Forms/FormMods/FormMods.resx b/Fo76ini/Forms/FormMods/FormMods.resx index 971d3b4..815298a 100644 --- a/Fo76ini/Forms/FormMods/FormMods.resx +++ b/Fo76ini/Forms/FormMods/FormMods.resx @@ -120,6 +120,30 @@ 6, 11 + + 643, 16 + + + 484, 16 + + + 291, 55 + + + 733, 16 + + + 137, 16 + + + 479, 55 + + + 175, 55 + + + 17, 55 + @@ -137,9 +161,6 @@ DyeKoO97KVuAZVVVzlLXNZ0JoWFMaBgP727vyC4kjhEWfQAAAABJRU5ErkJggg== - - 643, 16 - 379, 16 @@ -157,30 +178,6 @@ Yy7JZ6QAAAAASUVORK5CYII= - - 643, 16 - - - 484, 16 - - - 291, 55 - - - 733, 16 - - - 137, 16 - - - 479, 55 - - - 175, 55 - - - 17, 55 - 346 diff --git a/Fo76ini/Forms/FormSettings/FormSettings.Designer.cs b/Fo76ini/Forms/FormSettings/FormSettings.Designer.cs index df7524f..7fb51d3 100644 --- a/Fo76ini/Forms/FormSettings/FormSettings.Designer.cs +++ b/Fo76ini/Forms/FormSettings/FormSettings.Designer.cs @@ -29,12 +29,12 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("Default", 0); - System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem(new string[] { + System.Windows.Forms.ListViewItem listViewItem6 = new System.Windows.Forms.ListViewItem("Default", 0); + System.Windows.Forms.ListViewItem listViewItem7 = new System.Windows.Forms.ListViewItem(new string[] { "Steam"}, 2, System.Drawing.Color.Empty, System.Drawing.SystemColors.Window, null); - System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("Bethesda.net", 1); - System.Windows.Forms.ListViewItem listViewItem4 = new System.Windows.Forms.ListViewItem("Bethesda.net PTS", 1); - System.Windows.Forms.ListViewItem listViewItem5 = new System.Windows.Forms.ListViewItem("Microsoft Store", 3); + System.Windows.Forms.ListViewItem listViewItem8 = new System.Windows.Forms.ListViewItem("Bethesda.net", 1); + System.Windows.Forms.ListViewItem listViewItem9 = new System.Windows.Forms.ListViewItem("Bethesda.net PTS", 1); + System.Windows.Forms.ListViewItem listViewItem10 = new System.Windows.Forms.ListViewItem("Xbox", 3); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSettings)); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPageGeneral = new System.Windows.Forms.TabPage(); @@ -358,12 +358,11 @@ private void InitializeComponent() // // linkLabelEnableDangerZone // - this.linkLabelEnableDangerZone.AutoSize = true; this.linkLabelEnableDangerZone.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; this.linkLabelEnableDangerZone.LinkColor = System.Drawing.Color.Red; - this.linkLabelEnableDangerZone.Location = new System.Drawing.Point(7, 20); + this.linkLabelEnableDangerZone.Location = new System.Drawing.Point(7, 16); this.linkLabelEnableDangerZone.Name = "linkLabelEnableDangerZone"; - this.linkLabelEnableDangerZone.Size = new System.Drawing.Size(121, 13); + this.linkLabelEnableDangerZone.Size = new System.Drawing.Size(342, 15); this.linkLabelEnableDangerZone.TabIndex = 44; this.linkLabelEnableDangerZone.TabStop = true; this.linkLabelEnableDangerZone.Text = "⚠️ Enable Danger Zone"; @@ -883,7 +882,7 @@ private void InitializeComponent() // pictureBoxMSStore // this.pictureBoxMSStore.BackColor = System.Drawing.Color.Transparent; - this.pictureBoxMSStore.Image = global::Fo76ini.Properties.Resources.msstore_24; + this.pictureBoxMSStore.Image = global::Fo76ini.Properties.Resources.xbox_24; this.pictureBoxMSStore.Location = new System.Drawing.Point(11, 109); this.pictureBoxMSStore.Name = "pictureBoxMSStore"; this.pictureBoxMSStore.Size = new System.Drawing.Size(24, 24); @@ -925,9 +924,9 @@ private void InitializeComponent() this.radioButtonEditionMSStore.AutoSize = true; this.radioButtonEditionMSStore.Location = new System.Drawing.Point(43, 112); this.radioButtonEditionMSStore.Name = "radioButtonEditionMSStore"; - this.radioButtonEditionMSStore.Size = new System.Drawing.Size(188, 17); + this.radioButtonEditionMSStore.Size = new System.Drawing.Size(194, 17); this.radioButtonEditionMSStore.TabIndex = 3; - this.radioButtonEditionMSStore.Text = "Microsoft Store / Xbox Game Pass"; + this.radioButtonEditionMSStore.Text = "Xbox (Game Pass) / Microsoft Store"; this.radioButtonEditionMSStore.UseVisualStyleBackColor = true; this.radioButtonEditionMSStore.CheckedChanged += new System.EventHandler(this.radioButtonEditionMSStore_CheckedChanged); // @@ -987,11 +986,11 @@ private void InitializeComponent() this.listViewGameInstances.FullRowSelect = true; this.listViewGameInstances.HideSelection = false; this.listViewGameInstances.Items.AddRange(new System.Windows.Forms.ListViewItem[] { - listViewItem1, - listViewItem2, - listViewItem3, - listViewItem4, - listViewItem5}); + listViewItem6, + listViewItem7, + listViewItem8, + listViewItem9, + listViewItem10}); this.listViewGameInstances.LabelWrap = false; this.listViewGameInstances.LargeImageList = this.imageList1; this.listViewGameInstances.Location = new System.Drawing.Point(3, 18); @@ -1065,7 +1064,7 @@ private void InitializeComponent() this.imageList1.Images.SetKeyName(0, "help-24.png"); this.imageList1.Images.SetKeyName(1, "bethesda_24px.png"); this.imageList1.Images.SetKeyName(2, "steam_24px.png"); - this.imageList1.Images.SetKeyName(3, "msstore_24px.png"); + this.imageList1.Images.SetKeyName(3, "xbox_24px.png"); // // labelTip // @@ -1551,7 +1550,6 @@ private void InitializeComponent() this.groupBoxPaths.ResumeLayout(false); this.groupBoxPaths.PerformLayout(); this.groupBoxActions.ResumeLayout(false); - this.groupBoxActions.PerformLayout(); this.groupBoxOptions.ResumeLayout(false); this.groupBoxOptions.PerformLayout(); this.groupBoxNuclearWinterMode.ResumeLayout(false); diff --git a/Fo76ini/Forms/FormSettings/FormSettings.cs b/Fo76ini/Forms/FormSettings/FormSettings.cs index d115964..d223cc5 100644 --- a/Fo76ini/Forms/FormSettings/FormSettings.cs +++ b/Fo76ini/Forms/FormSettings/FormSettings.cs @@ -994,14 +994,20 @@ private void checkBoxHandleNXMLinks_CheckedChanged(object sender, EventArgs e) else NXMHandler.Register(); } - catch (System.UnauthorizedAccessException ex) + catch (UnauthorizedAccessException ex) { - MsgBox.Show("Access denied", "Start the tool as admin and try again.", MessageBoxIcon.Error); + if (!Utils.HasAdminRights()) + MsgBox.Show("Access denied", "Start the tool as admin and try again.", MessageBoxIcon.Error); + else + MsgBox.Show(ex.GetType().ToString(), ex.ToString(), MessageBoxIcon.Error); checkBoxHandleNXMLinks.Checked = isRegistered; } catch (Exception ex) { - MsgBox.Show("Unknown error", "Start the tool as admin and try again.", MessageBoxIcon.Error); + if (!Utils.HasAdminRights()) + MsgBox.Show("Unknown error", "Start the tool as admin and try again.", MessageBoxIcon.Error); + else + MsgBox.Show(ex.GetType().ToString(), ex.ToString(), MessageBoxIcon.Error); checkBoxHandleNXMLinks.Checked = isRegistered; } } diff --git a/Fo76ini/Forms/FormSettings/FormSettings.resx b/Fo76ini/Forms/FormSettings/FormSettings.resx index fbc58b7..8d248c2 100644 --- a/Fo76ini/Forms/FormSettings/FormSettings.resx +++ b/Fo76ini/Forms/FormSettings/FormSettings.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + 107, 17 @@ -130,8 +133,8 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADI - DAAAAk1TRnQBSQFMAgEBBAEAAUABAQFAAQEBGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB6 + DgAAAk1TRnQBSQFMAgEBBAEAAUgBAQFIAQEBGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABYAMAATADAAEBAQABCAYAARIYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -160,32 +163,39 @@ AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8A/wD/AP8A - /wD/ABEAAf8B3QG1AbQCzwG0AbUB3QH/JgAB/wHwAbsDswG0AboB8AH/BwAB9BbzAfQFAAH/AQkBzwit - Ac8BCQH/IgAB/wG7AYsIigGLAbsB/wUAGPMEAAHzAc8MrQHPAfMgAAHyAYsMigGLAfMEABjzAwAB3RCt - Ad0eAAG8EIoB8AMAB/ME8gLzBBsH8wIAAfMIrQK1CK0B8xwAAfIDigG0AvABCQGLCooB8wIAB/ME0wHb - AXoEOAfzAQAB/wHPB60BCQL/AQkHrQHPAf8GAA7/BgAB/wGLAooBtAG7ArQBiwHwAYsJigGLAf8BAAfz - BNMB2wF6BDgH8wEAAQkIrQHzAgABGQitAQkGAA7/BgABtQJlAYsB8wP/AfEBkQG1CmUB7wEAB/ME0wHb - AXoEOAfzAf8BzwitAbUC/wG1CK0BzwH/BQAO/wUAAf8BZgGuAbwG/wGLAfABZgllAWYB/wfzBNMB2wF6 - BDgH8wHxCq0CzwqtAd0FAA7/BQAB8AHzB/8BBwG0Af8B8wGLCWUB8AfzBNsBCQGaBHoH8wG1Cq0BzwG0 - Cq0BtQUADv8FAAHzBv8B8wKRBP8B9whlAZEH8wR1AZQBmQR4AfIG8wG0Cq0B3QHzCq0BtAUABf8EAAX/ - BQAE/wH0AfcBiwG1AfEG/wHwAZIBiwVlAa4H8wRNAXUBeAQ1AfIG8wHPCq0BCQH/AQkJrQHPBQAF/wQA - Bf8FAAL/AbwBrgRlAWYB9Aj/AbwBZgNlAWYH8wRNAXUBeAQ1AfIG8wHPC60B9AH/AfEIrQHPBQAF/wQA - Bf8FAAHvAWYHZQGuA/8B9AGuAmwBkQH/AQcDZQFmB/METQF1AXgENQHyBvMBtAutAbUC/wEJB60BtAUA - Bf8EAAX/BQABbAkNAe8C/wGuAe8C/wH3Ae0B/wFmAg0B6gfzBE0BdQF4BDUB8gbzAQkMrQH0AQAB/wHP - Bq0BtQUADv8FAAHsCQ0BZQHzAf8B6gT/AWwB/wGRAg0B7AzzBfIH8wEZCK0B3QG1Aq0B3QIAAbUGrQHx - BQAO/wUAAbwKDQH3Af8B6gT/AWwB/wHsAg0BvBjzAf8BzwatAbQBAAH0Aq0B3QEAAf8BtAWtAc8B/wUA - Dv8FAAH/Cg0BrgH/Aa4BBwL/AfcB7AH/AWYCDQH/GPMBAAEJBq0BzwL/ArQB9AEAAfQGrQEJBgAO/wYA - Ae0KDQHwAfQB6wJsAewB/wEHAg0B9wEAB/MB8gjzAfIH8wEAAf8BtAatAbUB9AP/AfMBzwWtAbQB/wYA - Dv8GAAH/AUMJDQFmAfAE/wEHAg0BQwH/CAAB8wH0AfMB9AQAAfQD8wcAAfMIrQK0Ac8HrQHzHAAB8QsN - AW0C7QESAw0B8gkAAfMB9ALzBAAB9ALzAfQIAAEZEK0B8R4AAbwQDQG8CgAB9AHzAf8B8wH/AwAB8wH0 - AfMB/wkAAfMBtAytAbQB8yAAAfEBQwwNAUMB8gsAAf8B8wH/AfQB8wH0Af8B9AHzAf8B9AsAAf8BCQHP - CK0BzwEJAf8iAAH0AfcBEAgNARAB9wH/DQAB9AHzAfQB/wH0AvMB9AH/DgAB/wEZAQkBtALPAbQBCQEZ - Af8mAAH0AbwB7AESAkMBEgHsAbwB/xAAAf8E8wH/CQABQgFNAT4HAAE+AwABKAMAAWADAAEwAwABAQEA - AQEFAAFAAQIWAAP//wAiAAH+AQABfwMAAf4BAAF/AwAB+AEAAR8DAAH4AQABHwMAAfABAAEPAwAB8AEA - AQ8DAAHgAQABBwMAAeABAAEHAwABwAEAAQMDAAHAAQABAwMAAYABAAEBAwABgAEAAQEDAAGAARgBAQMA - AYABAAEBWAABAgsAAQMLAAFCCgABgAECAQEDAAGAAQABAQMAAYABAAEBAwABgAEAAQEB/gEeAR8BwAEA - AQMDAAHAAQABAwH+AR4BHwHgAQABBwMAAeABAAEHAf4BDgEfAfABAAEPAwAB8AEAAQ8B/gEAAT8B+AEA - AR8DAAH4AQABHwH/AQABfwH+AQABfwMAAf4BAAF/Af8BgQH/Cw== + /wD/ABEAAf8B3QG1AbQCzwG0AbUB3QH/JgAB/wHwAbsDswG0AboB8AH/DgAB/wH0AvMC8gLzAfQB/wwA + Af8BCQHPCK0BzwEJAf8iAAH/AbsBiwiKAYsBuwH/CgAB/wH0AwcHvAH0Af8JAAHzAc8MrQHPAfMgAAHy + AYsMigGLAfMIAAH0AfAEBwHuBLwB8AK8AfEB/wcAAd0QrQHdHgABvBCKAfAGAAH/Ae8JBwO8AfACvAH0 + BQAB8witArUIrQHzHAAB8gOKAbQC8AEJAYsKigHzBAAB9AFQAe8LBwHuAbwB8AG8AZcB/wMAAf8Bzwet + AQkC/wEJB60BzwH/BgAO/wYAAf8BiwKKAbQBuwK0AYsB8AGLCYoBiwH/AgAB/wGYAS0Bcw0HAbwBmAEt + AQcB/wIAAQkIrQHzAgABGQitAQkGAA7/BgABtQJlAYsB8wP/AfEBkQG1CmUB7wIAAfMB7QEtAU8CBwa8 + BgcBTwEtAe8B8wEAAf8BzwitAbUC/wG1CK0BzwH/BQAO/wUAAf8BZgGuAbwG/wGLAfABZgllAWYC/wEH + Ae8CLgGYAbwD8ALxAvABvAMHAXgBLgFPAe4B8QH/AfEKrQLPCq0B3QUADv8FAAHwAfMH/wEHAbQB/wHz + AYsJZQHwAfQBBwHuAU8BLgFPAZgC8QTyAfEB8AG8AQcBmAFPAS4BTwK8Af8BtQqtAc8BtAqtAbUFAA7/ + BQAB8wb/AfMCkQT/AfcIZQGRAfQBBwHwAe8BLQEuAVYB8AXzAfIB8QHwAQcBVgEuAS0BmAHwAbwB9AG0 + Cq0B3QHzCq0BtAUABf8EAAX/BQAE/wH0AfcBiwG1AfEG/wHwAZIBiwVlAa4B8wHuAfAB8QFQAi4BVgEb + BPQC8wHwAVYCLgFPAQcCvAHzAc8KrQEJAf8BCQmtAc8FAAX/BAAF/wUAAv8BvAGuBGUBZgH0CP8BvAFm + A2UBZgHyAbwB8AHxAZgCLgFPAXgB9AP/AfQBGwFWAU8CLgHvAe4CvAHyAc8LrQH0Af8B8QitAc8FAAX/ + BAAF/wUAAe8BZgdlAa4D/wH0Aa4CbAGRAf8BBwNlAWYB8gG8AfEC8gGXAi4BVgF4ARsC/wHzAXgBVQIu + AXIBBwHuAbwBBwHyAbQLrQG1Av8BCQetAbQFAAX/BAAF/wUAAWwJDQHvAv8BrgHvAv8B9wHtAf8BZgIN + AeoB8wG8AfEB8gLzAU8CLgFWAVcB9AEbAVcBVgMuAQcD7gEHAfMBCQytAfQBAAH/Ac8GrQG1BQAO/wUA + AewJDQFlAfMB/wHqBP8BbAH/AZECDQHsAfQBvAHxAfIB8wH0AZgCLgFPBFcBTwIuAZgDvAIHAfQBGQit + Ad0BtQKtAd0CAAG1Bq0B8QUADv8FAAG8Cg0B9wH/AeoE/wFsAf8B7AINAbwB9AHuAfEB8gHzAfQB/wGX + AS0BUARWAVABLQFyAfADvAIHAv8BzwatAbQBAAH0Aq0B3QEAAf8BtAWtAc8B/wUADv8FAAH/Cg0BrgH/ + Aa4BBwL/AfcB7AH/AWYCDQL/AbwB8AHyAfMB9AH/AfQBlwZWAU8C8AO8AQcBvAH/AQABCQatAc8C/wK0 + AfQBAAH0Bq0BCQYADv8GAAHtCg0B8AH0AesCbAHsAf8BBwINAfcCAAHzAbwB8QHzAfQC/wGZAlYBVQFP + AlYBmQHxAvABvAEHAe8B8wIAAf8BtAatAbUB9AP/AfMBzwWtAbQB/wYADv8GAAH/AUMJDQFmAfAE/wEH + Ag0BQwH/AgAB/wHxAfAB8gL0AZgBVgFVAU8CLgFPAVUBVgF4AvAB7gEHAbwB/wMAAfMIrQK0Ac8HrQHz + HAAB8QsNAW0C7QESAw0B8gQAAf8BvAHwAfEBlwFVAU8GLgFPAVUBVgMHAf8FAAEZEK0B8R4AAbwQDQG8 + BgAB9AGYAU8ELgFPApgBTwQuAU8BmAH0BwAB8wG0DK0BtAHzIAAB8QFDDA0BQwHyCAAB/wGXAS4BLQFP + AZgB9AH/AvQBmAFPAS0BLgGXAf8JAAH/AQkBzwitAc8BCQH/IgAB9AH3ARAIDQEQAfcB/woAAf8B8wHw + AfEC8gHzAvIB8AK8AfMB/wwAAf8BGQEJAbQCzwG0AQkBGQH/JgAB9AG8AewBEgJDARIB7AG8Af8PAAH/ + AfQB8wPyAfQB/wgAAUIBTQE+BwABPgMAASgDAAFgAwABMAMAAQEBAAEBBQABQAECFgAD//8AIgAB/gEA + AX8DAAH+AQABfwH+AQABfwH4AQABHwMAAfgBAAEfAfgBAAEfAfABAAEPAwAB8AEAAQ8B8AEAAQ8B4AEA + AQcDAAHgAQABBwHgAQABBwHAAQABAwMAAcABAAEDAcABAAEDAYABAAEBAwABgAEAAQEBgAEAAQEBgAEY + AQEDAAGAAQABAQGAAQABAVUAAQILAAEDCwABQgoAAYABAgEBAwABgAEAAQEBgAEAAQEBgAEAAQEDAAGA + AQABAQGAAQABAQHAAQABAwMAAcABAAEDAcABAAEDAeABAAEHAwAB4AEAAQcB4AEAAQcB8AEAAQ8DAAHw + AQABDwHwAQABDwH4AQABHwMAAfgBAAEfAfgBAAEfAf4BAAF/AwAB/gEAAX8B/wEAAf8L @@ -236,6 +246,9 @@ McYYY0w/GDHiH4RSOYX/ZZhxAAAAAElFTkSuQmCC + + 107, 17 + 17, 60 diff --git a/Fo76ini/Forms/FormWelcome/FormWelcome.Designer.cs b/Fo76ini/Forms/FormWelcome/FormWelcome.Designer.cs index 5db5a25..b96dbb4 100644 --- a/Fo76ini/Forms/FormWelcome/FormWelcome.Designer.cs +++ b/Fo76ini/Forms/FormWelcome/FormWelcome.Designer.cs @@ -203,7 +203,7 @@ private void InitializeComponent() // pictureBoxMSStore // this.pictureBoxMSStore.BackColor = System.Drawing.Color.Transparent; - this.pictureBoxMSStore.Image = global::Fo76ini.Properties.Resources.msstore_24; + this.pictureBoxMSStore.Image = global::Fo76ini.Properties.Resources.xbox_24; this.pictureBoxMSStore.Location = new System.Drawing.Point(11, 109); this.pictureBoxMSStore.Name = "pictureBoxMSStore"; this.pictureBoxMSStore.Size = new System.Drawing.Size(24, 24); @@ -245,9 +245,9 @@ private void InitializeComponent() this.radioButtonEditionMSStore.AutoSize = true; this.radioButtonEditionMSStore.Location = new System.Drawing.Point(43, 112); this.radioButtonEditionMSStore.Name = "radioButtonEditionMSStore"; - this.radioButtonEditionMSStore.Size = new System.Drawing.Size(188, 17); + this.radioButtonEditionMSStore.Size = new System.Drawing.Size(194, 17); this.radioButtonEditionMSStore.TabIndex = 3; - this.radioButtonEditionMSStore.Text = "Microsoft Store / Xbox Game Pass"; + this.radioButtonEditionMSStore.Text = "Xbox (Game Pass) / Microsoft Store"; this.radioButtonEditionMSStore.UseVisualStyleBackColor = true; this.radioButtonEditionMSStore.CheckedChanged += new System.EventHandler(this.radioButtonEditionMSStore_CheckedChanged); // diff --git a/Fo76ini/NexusAPI/NXMHandler.cs b/Fo76ini/NexusAPI/NXMHandler.cs index b84f663..038e9fe 100644 --- a/Fo76ini/NexusAPI/NXMHandler.cs +++ b/Fo76ini/NexusAPI/NXMHandler.cs @@ -62,6 +62,27 @@ private static string GetCommand() } public static NXMLink ParseLink(string nxmLink) + { + // nxm://fallout76/mods//files/?key=...&expires=1621492286&user_id=41275740 + + if (!nxmLink.StartsWith("nxm://")) + throw new ArgumentException("Invalid nxm link: " + nxmLink); + + Uri uri = new Uri(nxmLink); + var query = uri.Query.Trim('?').Split('&') + .ToDictionary(c => c.Split('=')[0], + c => Uri.UnescapeDataString(c.Split('=')[1])); + + NXMLink parsed = new NXMLink(); + parsed.modId = Utils.ToInt(uri.Segments[2].Trim('/')); + parsed.fileId = Utils.ToInt(uri.Segments[4].Trim('/')); + parsed.key = query["key"]; + parsed.expires = Utils.ToInt(query["expires"]); + + return parsed; + } + + /*public static NXMLink ParseLink(string nxmLink) { // nxm://fallout76/mods//files/?key=...&expires=1621492286&user_id=41275740 if (!nxmLink.StartsWith("nxm://")) @@ -98,6 +119,6 @@ public static NXMLink ParseLink(string nxmLink) parsed.expires = Utils.ToInt(expires); return parsed; - } + }*/ } } diff --git a/Fo76ini/Profiles/GameInstance.cs b/Fo76ini/Profiles/GameInstance.cs index c7dfdde..c0bf649 100644 --- a/Fo76ini/Profiles/GameInstance.cs +++ b/Fo76ini/Profiles/GameInstance.cs @@ -1,8 +1,10 @@ using Fo76ini.Interface; +using Fo76ini.Properties; using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; +using System.Drawing; using System.IO; using System.Windows.Forms; using System.Xml.Linq; @@ -76,7 +78,7 @@ public void SetDefaultSettings(GameEdition edition) * * Enter in PowerShell: * PS C:\> Get-StartApps - * ^ The above will list every UWP (Win10) AppID, like so: + * ^ The above will return a list: * * Name AppID * ---- ----- @@ -185,7 +187,12 @@ public void LaunchGame(LaunchOption option) /// public static bool ValidateGamePath(string path) { - return path != null && path.Trim().Length > 0 && Directory.Exists(path) && Directory.Exists(Path.Combine(path, "Data")); + return + path != null && + path.Trim().Length > 0 && + Directory.Exists(path) && + Directory.Exists(Path.Combine(path, "Data")) && + File.Exists(Path.Combine(path, "Data", "SeventySix.esm")); } /// @@ -195,5 +202,51 @@ public bool ValidateGamePath() { return ValidateGamePath(GamePath); } + + public Bitmap Get128pxBitmap() + { + return Get128pxBitmap(this.Edition); + } + + public static Bitmap Get128pxBitmap(GameEdition edition) + { + switch (edition) + { + case GameEdition.Steam: + return Resources.steam; + case GameEdition.BethesdaNet: + return Resources.bethesda; + case GameEdition.BethesdaNetPTS: + return Resources.bethesda_pts; + case GameEdition.MSStore: + //return Resources.msstore; + return Resources.xbox; + default: + return Resources.help_128; + } + } + + public Bitmap Get128pxHoverBitmap() + { + return Get128pxHoverBitmap(this.Edition); + } + + public static Bitmap Get128pxHoverBitmap(GameEdition edition) + { + switch (edition) + { + case GameEdition.Steam: + return Resources.steam_hover; + case GameEdition.BethesdaNet: + return Resources.bethesda_hover; + case GameEdition.BethesdaNetPTS: + return Resources.bethesda_pts_hover; + case GameEdition.MSStore: + //return Resources.msstore_hover; + return Resources.xbox_hover; + default: + return Resources.help_128_hover; + } + } } } diff --git a/Fo76ini/Profiles/ProfileManager.cs b/Fo76ini/Profiles/ProfileManager.cs index 35668e2..d8d75e4 100644 --- a/Fo76ini/Profiles/ProfileManager.cs +++ b/Fo76ini/Profiles/ProfileManager.cs @@ -240,7 +240,7 @@ private static void ConvertLegacyFormat() game.Title = "Steam"; break; case GameEdition.MSStore: - game.Title = "Microsoft Store"; + game.Title = "Xbox / Microsoft Store"; break; } diff --git a/Fo76ini/Properties/Resources.Designer.cs b/Fo76ini/Properties/Resources.Designer.cs index 8ab5d0e..6a52725 100644 --- a/Fo76ini/Properties/Resources.Designer.cs +++ b/Fo76ini/Properties/Resources.Designer.cs @@ -380,16 +380,6 @@ internal static System.Drawing.Bitmap fire { } } - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Fo76ini_LDu4jzf2p3 { - get { - object obj = ResourceManager.GetObject("Fo76ini_LDu4jzf2p3", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -759,5 +749,15 @@ internal static System.Drawing.Bitmap xbox_24 { return ((System.Drawing.Bitmap)(obj)); } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap xbox_hover { + get { + object obj = ResourceManager.GetObject("xbox_hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/Fo76ini/Properties/Resources.resx b/Fo76ini/Properties/Resources.resx index 654bd39..475936f 100644 --- a/Fo76ini/Properties/Resources.resx +++ b/Fo76ini/Properties/Resources.resx @@ -229,9 +229,6 @@ ..\Resources\thaw-24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Fo76ini_LDu4jzf2p3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\fire-2-24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -328,4 +325,7 @@ ..\Resources\steam_hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\xbox_hover.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/Resources/xbox.png b/Fo76ini/Resources/xbox.png index b5b2403ee3a6bc6d41aa72c4ddfd765aae305b27..8b61e936eebcd6de46b8c81a8415bfe83ac11b6d 100644 GIT binary patch literal 18938 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 Bux$VU literal 5409 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

-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 XHQEV4PP%g+00000NkvXXu0mjf7B2E7 literal 0 HcmV?d00001 diff --git a/Fo76ini/Shared.cs b/Fo76ini/Shared.cs index ad82601..40abec2 100644 --- a/Fo76ini/Shared.cs +++ b/Fo76ini/Shared.cs @@ -8,7 +8,7 @@ namespace Fo76ini { public class Shared { - public const string VERSION = "1.9.4-dev"; + public const string VERSION = "1.9.4"; public static string LatestVersion = null; public static readonly string AppInstallationFolder = Directory.GetParent(Application.ExecutablePath).ToString(); diff --git a/Fo76ini/Utilities/Utils.cs b/Fo76ini/Utilities/Utils.cs index f37dceb..a4d8a23 100644 --- a/Fo76ini/Utilities/Utils.cs +++ b/Fo76ini/Utilities/Utils.cs @@ -8,6 +8,7 @@ using System.IO; using System.Linq; using System.Runtime.InteropServices; +using System.Security.Principal; using System.Threading; using System.Windows.Forms; using Tulpep.NotificationWindow; @@ -546,6 +547,8 @@ public static PopupNotifier CreatePopup(string title, string text) GraphicsUnit.Pixel ); popup.TitlePadding = new Padding(4); + + popup.Click += Popup_Click; return popup; } @@ -568,6 +571,18 @@ public static PopupNotifier CreatePopup(string title, string text, MessageBoxIco return popup; } + // Copy text: + private static void Popup_Click(object sender, EventArgs e) + { + if (sender is PopupNotifier) + { + string text = + ((PopupNotifier)sender).TitleText + "\n\n" + + ((PopupNotifier)sender).ContentText; + Clipboard.SetText(text); + } + } + // https://stackoverflow.com/a/4722300 public static bool IsProcessRunning(string name) { @@ -852,5 +867,23 @@ subControl is GroupBox || PreventChangeOnMouseWheelForAllElements(subControl); } } + + ///

+ /// Checks whether the user has administrator rights. + /// + public static bool HasAdminRights() + { + try + { + WindowsIdentity user = WindowsIdentity.GetCurrent(); + WindowsPrincipal principal = new WindowsPrincipal(user); + return principal.IsInRole(WindowsBuiltInRole.Administrator); + } + catch + { + return false; + } + return false; + } } } diff --git a/Fo76ini/languages/de-DE.xml b/Fo76ini/languages/de-DE.xml index 008067f..1418ef4 100644 --- a/Fo76ini/languages/de-DE.xml +++ b/Fo76ini/languages/de-DE.xml @@ -6,7 +6,7 @@ If you need help with translating, you can find a guide here: https://github.com/FelisDiligens/Fallout76-QuickConfiguration/wiki/Translations --> - + - Mindestens eines der *.ini Dateien ist beschädigt oder enthält einen Syntaxfehler. - -Du könntest: - -> die Fehlermeldung lesen und den Fehler beheben, oder - -> die ungültige *.ini Datei löschen, Fallout 76 erneut starten, um eine neue, gültige Datei zu generieren - -> und es dann noch einmal versuchen. - -FEHLERMELDUNG: -{0} Deine Änderungen wurden gespeichert. Du kannst das Spiel jetzt starten. Heruntergeladene Sprachdateien: {0} *.ini Deteien wurden modifiziert, während das Tool läuft. Beachte: Alle Änderungen werden überschrieben, wenn auf "Anwenden" gedrückt oder Mods verwaltet werden. Bitte starten Sie das Tool neu, um mit den neuen Werten zu arbeiten. + Couldn't set *.ini files to read-only. Try to start the tool with admin rights. +{0} + Mindestens ein Spielprofil wird benötigt. + Es konnte keines der üblichen Spielpfade gefunden werden. Bitte wähle den Pfad zum Spiel manuell aus. + Möchtest du diesen Pfad anwenden? +Gefunden: {0} + +Drücke "Ja", um den Pfad zu übernehmen; "Nein", um mit der Suche fortzufahren; und "Abbrechen", um die Suche zu unterbrechen. Möchtest du die Thumbnails wirklich löschen? Wenn du das nächste Mal auf "Galerie aktualisieren" klickst, wird es erheblich länger dauern, da alle Thumbnails neu generiert werden. Du kannst jetzt den Abenteuermodus spielen. @@ -284,8 +284,15 @@ Fehler: {0} {0} {0} {0} - Mindestens ein Spielprofil wird benötigt. - Es konnte keines der üblichen Spielpfade gefunden werden. Bitte wähle den Pfad zum Spiel manuell aus. + Mindestens eines der *.ini Dateien ist beschädigt oder enthält einen Syntaxfehler. + +Du könntest: + -> die Fehlermeldung lesen und den Fehler beheben, oder + -> die ungültige *.ini Datei löschen, Fallout 76 erneut starten, um eine neue, gültige Datei zu generieren + -> und es dann noch einmal versuchen. + +FEHLERMELDUNG: +{0} Möchtest du ein Backup machen bevor deine Änderungen gespeichert werden? Drücke "Ja", um ein Backup zu erstellen und zu speichern. @@ -501,12 +508,14 @@ Funktioniert jedoch nur, wenn das Spiel über das Tool gestartet wird.Wenn diese Option aktiviert ist, werden Mods entfernt, wenn der Nuclear Winter-Modus aktiviert wird. Speichert den Pfad, von dem Archive2 geladen wird. Speichert den Pfad, von dem aus 7-Zip geladen wird. + Wenn du Mods mit dem 'Vortex' / 'Mod Manager Download' Knopf auf NexusMods herunterlädst, +wird das Tool die Datei in diesen Ordner speichern.