From 0959a9ea482a09277958a0485fe9fffbd4360ad2 Mon Sep 17 00:00:00 2001 From: Jerric <58122205+Ivinedra@users.noreply.github.com> Date: Thu, 25 Dec 2025 01:46:25 -0500 Subject: [PATCH 1/3] Additional installed plugin categories Introduces new plugin categories for enabled, disabled, and incompatible plugins in PluginCategoryManager and PluginInstallerWindow. Updates filtering logic, UI strings, and groupings to support these new categories, allowing users to view plugins by their enabled/disabled/incompatible status. --- .../Internal/PluginCategoryManager.cs | 26 ++++++++++++++- .../PluginInstaller/PluginInstallerWindow.cs | 33 +++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/Dalamud/Interface/Internal/PluginCategoryManager.cs b/Dalamud/Interface/Internal/PluginCategoryManager.cs index d3aea7f57..c25f55634 100644 --- a/Dalamud/Interface/Internal/PluginCategoryManager.cs +++ b/Dalamud/Interface/Internal/PluginCategoryManager.cs @@ -30,6 +30,9 @@ internal class PluginCategoryManager new(CategoryKind.PluginChangelogs, "special.plugins", () => Locs.Category_Plugins), new(CategoryKind.PluginProfiles, "special.profiles", () => Locs.Category_PluginProfiles), new(CategoryKind.UpdateablePlugins, "special.updateable", () => Locs.Category_UpdateablePlugins), + new(CategoryKind.EnabledPlugins, "special.enabled", () => Locs.Category_EnabledPlugins), + new(CategoryKind.DisabledPlugins, "special.disabled", () => Locs.Category_DisabledPlugins), + new(CategoryKind.IncompatiblePlugins, "special.incompatible", () => Locs.Category_IncompatiblePlugins), // Tag-driven categories new(CategoryKind.Other, "other", () => Locs.Category_Other), @@ -47,7 +50,7 @@ internal class PluginCategoryManager private GroupInfo[] groupList = [ new(GroupKind.DevTools, () => Locs.Group_DevTools, CategoryKind.DevInstalled, CategoryKind.IconTester), - new(GroupKind.Installed, () => Locs.Group_Installed, CategoryKind.All, CategoryKind.IsTesting, CategoryKind.UpdateablePlugins, CategoryKind.PluginProfiles), + new(GroupKind.Installed, () => Locs.Group_Installed, CategoryKind.All, CategoryKind.IsTesting, CategoryKind.UpdateablePlugins, CategoryKind.PluginProfiles, CategoryKind.EnabledPlugins, CategoryKind.DisabledPlugins, CategoryKind.IncompatiblePlugins), new(GroupKind.Available, () => Locs.Group_Available, CategoryKind.All), new(GroupKind.Changelog, () => Locs.Group_Changelog, CategoryKind.All, CategoryKind.DalamudChangelogs, CategoryKind.PluginChangelogs) @@ -142,6 +145,21 @@ internal class PluginCategoryManager /// UpdateablePlugins = 15, + /// + /// Enabled plugins. + /// + EnabledPlugins = 16, + + /// + /// Disabled plugins. + /// + DisabledPlugins = 17, + + /// + /// Incompatible plugins. + /// + IncompatiblePlugins = 18, + /// /// Plugins tagged as "other". /// @@ -555,6 +573,12 @@ internal class PluginCategoryManager public static string Category_PluginProfiles => Loc.Localize("InstallerCategoryPluginProfiles", "Plugin Collections"); public static string Category_UpdateablePlugins => Loc.Localize("InstallerCategoryCanBeUpdated", "Can be updated"); + + public static string Category_EnabledPlugins => Loc.Localize("InstallerCategoryEnabledPlugins", "Enabled"); + + public static string Category_DisabledPlugins => Loc.Localize("InstallerCategoryDisabledPlugins", "Disabled"); + + public static string Category_IncompatiblePlugins => Loc.Localize("InstallerCategoryIncompatiblePlugins", "Incompatible"); public static string Category_Other => Loc.Localize("InstallerCategoryOther", "Other"); diff --git a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs index 3241015fc..72fed787d 100644 --- a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs +++ b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs @@ -235,6 +235,9 @@ internal class PluginInstallerWindow : Window, IDisposable Testing, Updateable, Dev, + Enabled, + Disabled, + Incompatible, } private bool AnyOperationInProgress => this.installStatus == OperationStatus.InProgress || @@ -1453,6 +1456,15 @@ internal class PluginInstallerWindow : Window, IDisposable if (filter == InstalledPluginListFilter.Testing && !manager.HasTestingOptIn(plugin.Manifest)) continue; + if (filter == InstalledPluginListFilter.Enabled && (!plugin.IsWantedByAnyProfile || plugin.IsOutdated || plugin.IsBanned || plugin.IsOrphaned || plugin.IsDecommissioned)) + continue; + + if (filter == InstalledPluginListFilter.Disabled && (plugin.IsWantedByAnyProfile || plugin.IsOutdated || plugin.IsBanned || plugin.IsOrphaned || plugin.IsDecommissioned)) + continue; + + if (filter == InstalledPluginListFilter.Incompatible && !(plugin.IsOutdated || plugin.IsBanned || plugin.IsOrphaned || plugin.IsDecommissioned)) + continue; + // Find applicable update and manifest, if we have them AvailablePluginUpdate? update = null; RemotePluginManifest? remoteManifest = null; @@ -1485,6 +1497,9 @@ internal class PluginInstallerWindow : Window, IDisposable InstalledPluginListFilter.Testing => Locs.TabBody_NoPluginsTesting, InstalledPluginListFilter.Updateable => Locs.TabBody_NoPluginsUpdateable, InstalledPluginListFilter.Dev => Locs.TabBody_NoPluginsDev, + InstalledPluginListFilter.Enabled => Locs.TabBody_NoPluginsEnabled, + InstalledPluginListFilter.Disabled => Locs.TabBody_NoPluginsDisabled, + InstalledPluginListFilter.Incompatible => Locs.TabBody_NoPluginsIncompatible, _ => throw new ArgumentException(null, nameof(filter)), }; @@ -1725,6 +1740,18 @@ internal class PluginInstallerWindow : Window, IDisposable this.DrawInstalledPluginList(InstalledPluginListFilter.Updateable); break; + case PluginCategoryManager.CategoryKind.EnabledPlugins: + this.DrawInstalledPluginList(InstalledPluginListFilter.Enabled); + break; + + case PluginCategoryManager.CategoryKind.DisabledPlugins: + this.DrawInstalledPluginList(InstalledPluginListFilter.Disabled); + break; + + case PluginCategoryManager.CategoryKind.IncompatiblePlugins: + this.DrawInstalledPluginList(InstalledPluginListFilter.Incompatible); + break; + case PluginCategoryManager.CategoryKind.PluginProfiles: this.profileManagerWidget.Draw(); break; @@ -4097,6 +4124,12 @@ internal class PluginInstallerWindow : Window, IDisposable public static string TabBody_NoPluginsDev => Loc.Localize("InstallerNoPluginsDev", "You don't have any dev plugins. Add them from the settings."); + public static string TabBody_NoPluginsEnabled => Loc.Localize("InstallerNoPluginsEnabled", "You don't have any enabled plugins."); + + public static string TabBody_NoPluginsDisabled => Loc.Localize("InstallerNoPluginsDisabled", "You don't have any disabled plugins."); + + public static string TabBody_NoPluginsIncompatible => Loc.Localize("InstallerNoPluginsIncompatible", "You don't have any incompatible plugins."); + #endregion #region Search text From 902795d6f963526b2e33fc55c151bb265f37e3da Mon Sep 17 00:00:00 2001 From: Jerric <58122205+Ivinedra@users.noreply.github.com> Date: Thu, 25 Dec 2025 01:46:25 -0500 Subject: [PATCH 2/3] Additional installed plugin categories Introduces new plugin categories for enabled, disabled, and incompatible plugins in PluginCategoryManager and PluginInstallerWindow. Updates filtering logic, UI strings, and groupings to support these new categories, allowing users to view plugins by their enabled/disabled/incompatible status. --- .../Internal/PluginCategoryManager.cs | 26 ++++++++++++++- .../PluginInstaller/PluginInstallerWindow.cs | 33 +++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/Dalamud/Interface/Internal/PluginCategoryManager.cs b/Dalamud/Interface/Internal/PluginCategoryManager.cs index d3aea7f57..c25f55634 100644 --- a/Dalamud/Interface/Internal/PluginCategoryManager.cs +++ b/Dalamud/Interface/Internal/PluginCategoryManager.cs @@ -30,6 +30,9 @@ internal class PluginCategoryManager new(CategoryKind.PluginChangelogs, "special.plugins", () => Locs.Category_Plugins), new(CategoryKind.PluginProfiles, "special.profiles", () => Locs.Category_PluginProfiles), new(CategoryKind.UpdateablePlugins, "special.updateable", () => Locs.Category_UpdateablePlugins), + new(CategoryKind.EnabledPlugins, "special.enabled", () => Locs.Category_EnabledPlugins), + new(CategoryKind.DisabledPlugins, "special.disabled", () => Locs.Category_DisabledPlugins), + new(CategoryKind.IncompatiblePlugins, "special.incompatible", () => Locs.Category_IncompatiblePlugins), // Tag-driven categories new(CategoryKind.Other, "other", () => Locs.Category_Other), @@ -47,7 +50,7 @@ internal class PluginCategoryManager private GroupInfo[] groupList = [ new(GroupKind.DevTools, () => Locs.Group_DevTools, CategoryKind.DevInstalled, CategoryKind.IconTester), - new(GroupKind.Installed, () => Locs.Group_Installed, CategoryKind.All, CategoryKind.IsTesting, CategoryKind.UpdateablePlugins, CategoryKind.PluginProfiles), + new(GroupKind.Installed, () => Locs.Group_Installed, CategoryKind.All, CategoryKind.IsTesting, CategoryKind.UpdateablePlugins, CategoryKind.PluginProfiles, CategoryKind.EnabledPlugins, CategoryKind.DisabledPlugins, CategoryKind.IncompatiblePlugins), new(GroupKind.Available, () => Locs.Group_Available, CategoryKind.All), new(GroupKind.Changelog, () => Locs.Group_Changelog, CategoryKind.All, CategoryKind.DalamudChangelogs, CategoryKind.PluginChangelogs) @@ -142,6 +145,21 @@ internal class PluginCategoryManager /// UpdateablePlugins = 15, + /// + /// Enabled plugins. + /// + EnabledPlugins = 16, + + /// + /// Disabled plugins. + /// + DisabledPlugins = 17, + + /// + /// Incompatible plugins. + /// + IncompatiblePlugins = 18, + /// /// Plugins tagged as "other". /// @@ -555,6 +573,12 @@ internal class PluginCategoryManager public static string Category_PluginProfiles => Loc.Localize("InstallerCategoryPluginProfiles", "Plugin Collections"); public static string Category_UpdateablePlugins => Loc.Localize("InstallerCategoryCanBeUpdated", "Can be updated"); + + public static string Category_EnabledPlugins => Loc.Localize("InstallerCategoryEnabledPlugins", "Enabled"); + + public static string Category_DisabledPlugins => Loc.Localize("InstallerCategoryDisabledPlugins", "Disabled"); + + public static string Category_IncompatiblePlugins => Loc.Localize("InstallerCategoryIncompatiblePlugins", "Incompatible"); public static string Category_Other => Loc.Localize("InstallerCategoryOther", "Other"); diff --git a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs index 3241015fc..72fed787d 100644 --- a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs +++ b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs @@ -235,6 +235,9 @@ internal class PluginInstallerWindow : Window, IDisposable Testing, Updateable, Dev, + Enabled, + Disabled, + Incompatible, } private bool AnyOperationInProgress => this.installStatus == OperationStatus.InProgress || @@ -1453,6 +1456,15 @@ internal class PluginInstallerWindow : Window, IDisposable if (filter == InstalledPluginListFilter.Testing && !manager.HasTestingOptIn(plugin.Manifest)) continue; + if (filter == InstalledPluginListFilter.Enabled && (!plugin.IsWantedByAnyProfile || plugin.IsOutdated || plugin.IsBanned || plugin.IsOrphaned || plugin.IsDecommissioned)) + continue; + + if (filter == InstalledPluginListFilter.Disabled && (plugin.IsWantedByAnyProfile || plugin.IsOutdated || plugin.IsBanned || plugin.IsOrphaned || plugin.IsDecommissioned)) + continue; + + if (filter == InstalledPluginListFilter.Incompatible && !(plugin.IsOutdated || plugin.IsBanned || plugin.IsOrphaned || plugin.IsDecommissioned)) + continue; + // Find applicable update and manifest, if we have them AvailablePluginUpdate? update = null; RemotePluginManifest? remoteManifest = null; @@ -1485,6 +1497,9 @@ internal class PluginInstallerWindow : Window, IDisposable InstalledPluginListFilter.Testing => Locs.TabBody_NoPluginsTesting, InstalledPluginListFilter.Updateable => Locs.TabBody_NoPluginsUpdateable, InstalledPluginListFilter.Dev => Locs.TabBody_NoPluginsDev, + InstalledPluginListFilter.Enabled => Locs.TabBody_NoPluginsEnabled, + InstalledPluginListFilter.Disabled => Locs.TabBody_NoPluginsDisabled, + InstalledPluginListFilter.Incompatible => Locs.TabBody_NoPluginsIncompatible, _ => throw new ArgumentException(null, nameof(filter)), }; @@ -1725,6 +1740,18 @@ internal class PluginInstallerWindow : Window, IDisposable this.DrawInstalledPluginList(InstalledPluginListFilter.Updateable); break; + case PluginCategoryManager.CategoryKind.EnabledPlugins: + this.DrawInstalledPluginList(InstalledPluginListFilter.Enabled); + break; + + case PluginCategoryManager.CategoryKind.DisabledPlugins: + this.DrawInstalledPluginList(InstalledPluginListFilter.Disabled); + break; + + case PluginCategoryManager.CategoryKind.IncompatiblePlugins: + this.DrawInstalledPluginList(InstalledPluginListFilter.Incompatible); + break; + case PluginCategoryManager.CategoryKind.PluginProfiles: this.profileManagerWidget.Draw(); break; @@ -4097,6 +4124,12 @@ internal class PluginInstallerWindow : Window, IDisposable public static string TabBody_NoPluginsDev => Loc.Localize("InstallerNoPluginsDev", "You don't have any dev plugins. Add them from the settings."); + public static string TabBody_NoPluginsEnabled => Loc.Localize("InstallerNoPluginsEnabled", "You don't have any enabled plugins."); + + public static string TabBody_NoPluginsDisabled => Loc.Localize("InstallerNoPluginsDisabled", "You don't have any disabled plugins."); + + public static string TabBody_NoPluginsIncompatible => Loc.Localize("InstallerNoPluginsIncompatible", "You don't have any incompatible plugins."); + #endregion #region Search text From f95dde1fcbc73f8278e695a8a34d60d3b5ccafaa Mon Sep 17 00:00:00 2001 From: Jerric <58122205+Ivinedra@users.noreply.github.com> Date: Sat, 10 Jan 2026 07:56:43 -0500 Subject: [PATCH 3/3] Update PluginCategoryManager.cs --- Dalamud/Interface/Internal/PluginCategoryManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dalamud/Interface/Internal/PluginCategoryManager.cs b/Dalamud/Interface/Internal/PluginCategoryManager.cs index 8a3db3bcd..9fdcfe4c1 100644 --- a/Dalamud/Interface/Internal/PluginCategoryManager.cs +++ b/Dalamud/Interface/Internal/PluginCategoryManager.cs @@ -51,7 +51,7 @@ internal class PluginCategoryManager private GroupInfo[] groupList = [ new(GroupKind.DevTools, () => Locs.Group_DevTools, CategoryKind.DevInstalled, CategoryKind.IconTester), - new(GroupKind.Installed, () => Locs.Group_Installed, CategoryKind.All, CategoryKind.IsTesting, CategoryKind.UpdateablePlugins, CategoryKind.PluginProfiles, CategoryKind.EnabledPlugins, CategoryKind.DisabledPlugins, CategoryKind.IncompatiblePlugins), + new(GroupKind.Installed, () => Locs.Group_Installed, CategoryKind.All, CategoryKind.IsTesting, CategoryKind.UpdateablePlugins, CategoryKind.EnabledPlugins, CategoryKind.DisabledPlugins, CategoryKind.IncompatiblePlugins, CategoryKind.PluginProfiles), new(GroupKind.Available, () => Locs.Group_Available, CategoryKind.All), new(GroupKind.Changelog, () => Locs.Group_Changelog, CategoryKind.All, CategoryKind.DalamudChangelogs, CategoryKind.PluginChangelogs)