From 9875a7ea313d96e7b343e46145f127b87ca8eef1 Mon Sep 17 00:00:00 2001 From: goat Date: Wed, 25 Oct 2023 17:32:42 +0200 Subject: [PATCH] feat: allow configuring the default page the installer opens to --- .../Internal/DalamudConfiguration.cs | 6 ++ Dalamud/Game/ChatHandlers.cs | 3 +- Dalamud/Game/Internal/DalamudAtkTweaks.cs | 2 +- Dalamud/Interface/Internal/DalamudCommands.cs | 3 +- .../Interface/Internal/DalamudInterface.cs | 16 +--- .../Interface/Internal/InterfaceManager.cs | 3 +- .../Internal/PluginCategoryManager.cs | 2 +- .../PluginInstaller/PluginInstallerWindow.cs | 94 ++++++++++++++----- .../Windows/Settings/Tabs/SettingsTabLook.cs | 7 ++ Dalamud/Plugin/DalamudPluginInterface.cs | 2 +- Dalamud/Plugin/Internal/PluginManager.cs | 3 +- 11 files changed, 98 insertions(+), 43 deletions(-) diff --git a/Dalamud/Configuration/Internal/DalamudConfiguration.cs b/Dalamud/Configuration/Internal/DalamudConfiguration.cs index 65f10c4ba..dbe95ea23 100644 --- a/Dalamud/Configuration/Internal/DalamudConfiguration.cs +++ b/Dalamud/Configuration/Internal/DalamudConfiguration.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using Dalamud.Game.Text; +using Dalamud.Interface.Internal.Windows.PluginInstaller; using Dalamud.Interface.Style; using Dalamud.IoC.Internal; using Dalamud.Plugin.Internal.Profiles; @@ -424,6 +425,11 @@ internal sealed class DalamudConfiguration : IServiceType, IDisposable /// public double UiBuilderHitch { get; set; } = 100; + /// + /// Gets or sets the page of the plugin installer that is shown by default when opened. + /// + public PluginInstallerWindow.PluginInstallerOpenKind PluginInstallerOpen { get; set; } = PluginInstallerWindow.PluginInstallerOpenKind.AllPlugins; + /// /// Load a configuration from the provided path. /// diff --git a/Dalamud/Game/ChatHandlers.cs b/Dalamud/Game/ChatHandlers.cs index a41a66fa1..90a399d4c 100644 --- a/Dalamud/Game/ChatHandlers.cs +++ b/Dalamud/Game/ChatHandlers.cs @@ -13,6 +13,7 @@ using Dalamud.Game.Text.SeStringHandling.Payloads; using Dalamud.Interface.Internal; using Dalamud.Interface.Internal.Notifications; using Dalamud.Interface.Internal.Windows; +using Dalamud.Interface.Internal.Windows.PluginInstaller; using Dalamud.Plugin.Internal; using Dalamud.Utility; using Serilog; @@ -118,7 +119,7 @@ internal class ChatHandlers : IServiceType this.openInstallerWindowLink = chatGui.AddChatLinkHandler("Dalamud", 1001, (i, m) => { - Service.GetNullable()?.OpenPluginInstaller(); + Service.GetNullable()?.OpenPluginInstallerTo(PluginInstallerWindow.PluginInstallerOpenKind.InstalledPlugins); }); } diff --git a/Dalamud/Game/Internal/DalamudAtkTweaks.cs b/Dalamud/Game/Internal/DalamudAtkTweaks.cs index b45b35c4d..9dc27e545 100644 --- a/Dalamud/Game/Internal/DalamudAtkTweaks.cs +++ b/Dalamud/Game/Internal/DalamudAtkTweaks.cs @@ -222,7 +222,7 @@ internal sealed unsafe partial class DalamudAtkTweaks : IServiceType switch (commandId) { case 69420: - dalamudInterface?.TogglePluginInstallerWindow(); + dalamudInterface?.TogglePluginInstallerWindowTo(this.configuration.PluginInstallerOpen); break; case 69421: dalamudInterface?.ToggleSettingsWindow(); diff --git a/Dalamud/Interface/Internal/DalamudCommands.cs b/Dalamud/Interface/Internal/DalamudCommands.cs index 307f79436..4654a019d 100644 --- a/Dalamud/Interface/Internal/DalamudCommands.cs +++ b/Dalamud/Interface/Internal/DalamudCommands.cs @@ -351,7 +351,8 @@ internal class DalamudCommands : IServiceType private void OnOpenInstallerCommand(string command, string arguments) { - Service.Get().TogglePluginInstallerWindow(); + var configuration = Service.Get(); + Service.Get().TogglePluginInstallerWindowTo(configuration.PluginInstallerOpen); } private void OnSetLanguageCommand(string command, string arguments) diff --git a/Dalamud/Interface/Internal/DalamudInterface.cs b/Dalamud/Interface/Internal/DalamudInterface.cs index fc11f3f4b..189baab4d 100644 --- a/Dalamud/Interface/Internal/DalamudInterface.cs +++ b/Dalamud/Interface/Internal/DalamudInterface.cs @@ -254,18 +254,10 @@ internal class DalamudInterface : IDisposable, IServiceType /// /// Opens the on the plugin installed. /// - public void OpenPluginInstallerPluginInstalled() + /// The page of the installer to open. + public void OpenPluginInstallerTo(PluginInstallerWindow.PluginInstallerOpenKind kind) { - this.pluginWindow.OpenInstalledPlugins(); - this.pluginWindow.BringToFront(); - } - - /// - /// Opens the on the plugin changelogs. - /// - public void OpenPluginInstallerPluginChangelogs() - { - this.pluginWindow.OpenPluginChangelogs(); + this.pluginWindow.OpenTo(kind); this.pluginWindow.BringToFront(); } @@ -397,7 +389,7 @@ internal class DalamudInterface : IDisposable, IServiceType /// /// Toggles the . /// - public void TogglePluginInstallerWindow() => this.pluginWindow.Toggle(); + public void TogglePluginInstallerWindowTo(PluginInstallerWindow.PluginInstallerOpenKind kind) => this.pluginWindow.ToggleTo(kind); /// /// Toggles the . diff --git a/Dalamud/Interface/Internal/InterfaceManager.cs b/Dalamud/Interface/Internal/InterfaceManager.cs index 93d9bb1dd..72b3bd6c8 100644 --- a/Dalamud/Interface/Internal/InterfaceManager.cs +++ b/Dalamud/Interface/Internal/InterfaceManager.cs @@ -1242,7 +1242,8 @@ internal class InterfaceManager : IDisposable, IServiceType if (gamepadState.Pressed(GamepadButtons.R3) > 0) { - dalamudInterface.TogglePluginInstallerWindow(); + var configuration = Service.Get(); + dalamudInterface.TogglePluginInstallerWindowTo(configuration.PluginInstallerOpen); } } } diff --git a/Dalamud/Interface/Internal/PluginCategoryManager.cs b/Dalamud/Interface/Internal/PluginCategoryManager.cs index 28d0cddbd..ddfcff6bc 100644 --- a/Dalamud/Interface/Internal/PluginCategoryManager.cs +++ b/Dalamud/Interface/Internal/PluginCategoryManager.cs @@ -129,7 +129,7 @@ internal class PluginCategoryManager /// /// Gets a value indicating whether current group + category selection changed recently. - /// Changes in Available group should be followed with , everythine else can use . + /// Changes in Available group should be followed with , everything else can use . /// public bool IsContentDirty => this.isContentDirty; diff --git a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs index 13db3509d..9ecc0c056 100644 --- a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs +++ b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs @@ -173,6 +173,27 @@ internal class PluginInstallerWindow : Window, IDisposable this.profileManagerWidget = new(this); } + /// + /// Enum describing pages the plugin installer can be opened to. + /// + public enum PluginInstallerOpenKind + { + /// + /// Open to the "All Plugins" page. + /// + AllPlugins, + + /// + /// Open to the "Installed Plugins" page. + /// + InstalledPlugins, + + /// + /// Open to the "Changelogs" page. + /// + Changelogs, + } + private enum OperationStatus { Idle, @@ -220,6 +241,28 @@ internal class PluginInstallerWindow : Window, IDisposable } } + /// + /// Open to the installer to the page specified by . + /// + /// The page of the installer to open. + public void OpenTo(PluginInstallerOpenKind kind) + { + this.IsOpen = true; + this.SetOpenPage(kind); + } + + /// + /// Toggle to the installer to the page specified by . + /// + /// The page of the installer to open. + public void ToggleTo(PluginInstallerOpenKind kind) + { + this.Toggle(); + + if (this.IsOpen) + this.SetOpenPage(kind); + } + /// public override void OnOpen() { @@ -278,30 +321,6 @@ internal class PluginInstallerWindow : Window, IDisposable this.imageCache.ClearIconCache(); } - /// - /// Open the window on the plugin changelogs. - /// - public void OpenInstalledPlugins() - { - // Installed group - this.categoryManager.CurrentGroupIdx = 1; - // All category - this.categoryManager.CurrentCategoryIdx = 0; - this.IsOpen = true; - } - - /// - /// Open the window on the plugin changelogs. - /// - public void OpenPluginChangelogs() - { - // Changelog group - this.categoryManager.CurrentGroupIdx = 3; - // Plugins category - this.categoryManager.CurrentCategoryIdx = 2; - this.IsOpen = true; - } - /// /// Sets the current search text and marks it as prefilled. /// @@ -386,6 +405,33 @@ internal class PluginInstallerWindow : Window, IDisposable return true; } + private void SetOpenPage(PluginInstallerOpenKind kind) + { + switch (kind) + { + case PluginInstallerOpenKind.AllPlugins: + // Plugins group + this.categoryManager.CurrentGroupIdx = 0; + // All category + this.categoryManager.CurrentCategoryIdx = 0; + break; + case PluginInstallerOpenKind.InstalledPlugins: + // Installed group + this.categoryManager.CurrentGroupIdx = 2; + // All category + this.categoryManager.CurrentCategoryIdx = 0; + break; + case PluginInstallerOpenKind.Changelogs: + // Changelog group + this.categoryManager.CurrentGroupIdx = 3; + // Plugins category + this.categoryManager.CurrentCategoryIdx = 2; + break; + default: + throw new ArgumentOutOfRangeException(nameof(kind), kind, null); + } + } + private void DrawProgressOverlay() { var pluginManager = Service.Get(); diff --git a/Dalamud/Interface/Internal/Windows/Settings/Tabs/SettingsTabLook.cs b/Dalamud/Interface/Internal/Windows/Settings/Tabs/SettingsTabLook.cs index b34a13cc5..7a6f894c1 100644 --- a/Dalamud/Interface/Internal/Windows/Settings/Tabs/SettingsTabLook.cs +++ b/Dalamud/Interface/Internal/Windows/Settings/Tabs/SettingsTabLook.cs @@ -4,6 +4,7 @@ using System.Diagnostics.CodeAnalysis; using CheapLoc; using Dalamud.Configuration.Internal; using Dalamud.Interface.Colors; +using Dalamud.Interface.Internal.Windows.PluginInstaller; using Dalamud.Interface.Internal.Windows.Settings.Widgets; using Dalamud.Interface.Utility; using Dalamud.Utility; @@ -120,6 +121,12 @@ public class SettingsTabLook : SettingsTab Loc.Localize("DalamudSettingToggleTsmHint", "This will allow you to access certain Dalamud and Plugin functionality from the title screen."), c => c.ShowTsm, (v, c) => c.ShowTsm = v), + + new SettingsEntry( + Loc.Localize("DalamudSettingInstallerOpenDefault", "Open the Plugin Installer to the \"Installed Plugins\" tab by default"), + Loc.Localize("DalamudSettingInstallerOpenDefaultHint", "This will allow you to open the Plugin Installer to the \"Installed Plugins\" tab by default, instead of the \"Available Plugins\" tab."), + c => c.PluginInstallerOpen == PluginInstallerWindow.PluginInstallerOpenKind.InstalledPlugins, + (v, c) => c.PluginInstallerOpen = v ? PluginInstallerWindow.PluginInstallerOpenKind.InstalledPlugins : PluginInstallerWindow.PluginInstallerOpenKind.AllPlugins), }; public override string Title => Loc.Localize("DalamudSettingsVisual", "Look & Feel"); diff --git a/Dalamud/Plugin/DalamudPluginInterface.cs b/Dalamud/Plugin/DalamudPluginInterface.cs index 004b7196c..82f19aa49 100644 --- a/Dalamud/Plugin/DalamudPluginInterface.cs +++ b/Dalamud/Plugin/DalamudPluginInterface.cs @@ -223,7 +223,7 @@ public sealed class DalamudPluginInterface : IDisposable return false; } - dalamudInterface.OpenPluginInstallerPluginInstalled(); + dalamudInterface.OpenPluginInstallerTo(PluginInstallerWindow.PluginInstallerOpenKind.InstalledPlugins); dalamudInterface.SetPluginInstallerSearchText(this.plugin.InternalName); return true; diff --git a/Dalamud/Plugin/Internal/PluginManager.cs b/Dalamud/Plugin/Internal/PluginManager.cs index 664406157..04698947e 100644 --- a/Dalamud/Plugin/Internal/PluginManager.cs +++ b/Dalamud/Plugin/Internal/PluginManager.cs @@ -19,6 +19,7 @@ using Dalamud.Game.Text; using Dalamud.Game.Text.SeStringHandling; using Dalamud.Game.Text.SeStringHandling.Payloads; using Dalamud.Interface.Internal; +using Dalamud.Interface.Internal.Windows.PluginInstaller; using Dalamud.IoC.Internal; using Dalamud.Logging.Internal; using Dalamud.Networking.Http; @@ -130,7 +131,7 @@ internal partial class PluginManager : IDisposable, IServiceType this.openInstallerWindowPluginChangelogsLink = Service.Get().AddChatLinkHandler("Dalamud", 1003, (_, _) => { - Service.GetNullable()?.OpenPluginInstallerPluginChangelogs(); + Service.GetNullable()?.OpenPluginInstallerTo(PluginInstallerWindow.PluginInstallerOpenKind.Changelogs); }); this.configuration.PluginTestingOptIns ??= new List();