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();