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