Improve mod filters.

This commit is contained in:
Ottermandias 2024-08-29 21:13:33 +02:00
parent 2a7d2ef0d5
commit 176001195b
4 changed files with 41 additions and 35 deletions

@ -1 +1 @@
Subproject commit 17bd4b75b6d7750c92b65caf09715886d4df57cf Subproject commit 3e6b085749741f35dd6732c33d0720c6a51ebb97

View file

@ -204,7 +204,7 @@ public static class TexFileParser
TexFile.TextureFormat.BC1 => DXGIFormat.BC1UNorm, TexFile.TextureFormat.BC1 => DXGIFormat.BC1UNorm,
TexFile.TextureFormat.BC2 => DXGIFormat.BC2UNorm, TexFile.TextureFormat.BC2 => DXGIFormat.BC2UNorm,
TexFile.TextureFormat.BC3 => DXGIFormat.BC3UNorm, TexFile.TextureFormat.BC3 => DXGIFormat.BC3UNorm,
(TexFile.TextureFormat)0x6120 => DXGIFormat.BC4UNorm, // TODO: upstream to Lumina (TexFile.TextureFormat)0x6120 => DXGIFormat.BC4UNorm, // TODO: upstream to Lumina
TexFile.TextureFormat.BC5 => DXGIFormat.BC5UNorm, TexFile.TextureFormat.BC5 => DXGIFormat.BC5UNorm,
(TexFile.TextureFormat)0x6330 => DXGIFormat.BC6HUF16, // TODO: upstream to Lumina (TexFile.TextureFormat)0x6330 => DXGIFormat.BC6HUF16, // TODO: upstream to Lumina
TexFile.TextureFormat.BC7 => DXGIFormat.BC7UNorm, TexFile.TextureFormat.BC7 => DXGIFormat.BC7UNorm,

View file

@ -9,6 +9,8 @@ using OtterGui.Filesystem;
using OtterGui.FileSystem.Selector; using OtterGui.FileSystem.Selector;
using OtterGui.Raii; using OtterGui.Raii;
using OtterGui.Services; using OtterGui.Services;
using OtterGui.Text;
using OtterGui.Text.Widget;
using Penumbra.Api.Enums; using Penumbra.Api.Enums;
using Penumbra.Collections; using Penumbra.Collections;
using Penumbra.Collections.Manager; using Penumbra.Collections.Manager;
@ -84,8 +86,8 @@ public sealed class ModFileSystemSelector : FileSystemSelector<Mod, ModFileSyste
_communicator.ModDiscoveryFinished.Subscribe(RestoreLastSelection, ModDiscoveryFinished.Priority.ModFileSystemSelector); _communicator.ModDiscoveryFinished.Subscribe(RestoreLastSelection, ModDiscoveryFinished.Priority.ModFileSystemSelector);
SetFilterDirty(); SetFilterDirty();
SelectionChanged += OnSelectionChanged; SelectionChanged += OnSelectionChanged;
} }
public void SetRenameSearchPath(RenameField value) public void SetRenameSearchPath(RenameField value)
{ {
switch (value) switch (value)
@ -703,8 +705,6 @@ public sealed class ModFileSystemSelector : FileSystemSelector<Mod, ModFileSyste
using var style = ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, using var style = ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing,
ImGui.GetStyle().ItemSpacing with { Y = 3 * UiHelpers.Scale }); ImGui.GetStyle().ItemSpacing with { Y = 3 * UiHelpers.Scale });
var flags = (int)_stateFilter;
if (ImGui.Checkbox("Everything", ref everything)) if (ImGui.Checkbox("Everything", ref everything))
{ {
@ -713,12 +713,19 @@ public sealed class ModFileSystemSelector : FileSystemSelector<Mod, ModFileSyste
} }
ImGui.Dummy(new Vector2(0, 5 * UiHelpers.Scale)); ImGui.Dummy(new Vector2(0, 5 * UiHelpers.Scale));
foreach (ModFilter flag in Enum.GetValues(typeof(ModFilter))) foreach (var (onFlag, offFlag, name) in ModFilterExtensions.TriStatePairs)
{ {
if (ImGui.CheckboxFlags(flag.ToName(), ref flags, (int)flag)) if (TriStateCheckbox.Instance.Draw(name, ref _stateFilter, onFlag, offFlag))
{
_stateFilter = (ModFilter)flags;
SetFilterDirty(); SetFilterDirty();
}
foreach (var group in ModFilterExtensions.Groups)
{
ImGui.Separator();
foreach (var (flag, name) in group)
{
if (ImUtf8.Checkbox(name, ref _stateFilter, flag))
SetFilterDirty();
} }
} }

View file

@ -29,29 +29,28 @@ public static class ModFilterExtensions
{ {
public const ModFilter UnfilteredStateMods = (ModFilter)((1 << 20) - 1); public const ModFilter UnfilteredStateMods = (ModFilter)((1 << 20) - 1);
public static string ToName(this ModFilter filter) public static IReadOnlyList<(ModFilter On, ModFilter Off, string Name)> TriStatePairs =
=> filter switch [
{ (ModFilter.Enabled, ModFilter.Disabled, "Enabled"),
ModFilter.Enabled => "Enabled", (ModFilter.IsNew, ModFilter.NotNew, "Newly Imported"),
ModFilter.Disabled => "Disabled", (ModFilter.Favorite, ModFilter.NotFavorite, "Favorite"),
ModFilter.Favorite => "Favorite", (ModFilter.HasConfig, ModFilter.HasNoConfig, "Has Options"),
ModFilter.NotFavorite => "No Favorite", (ModFilter.HasFiles, ModFilter.HasNoFiles, "Has Redirections"),
ModFilter.NoConflict => "No Conflicts", (ModFilter.HasMetaManipulations, ModFilter.HasNoMetaManipulations, "Has Meta Manipulations"),
ModFilter.SolvedConflict => "Solved Conflicts", (ModFilter.HasFileSwaps, ModFilter.HasNoFileSwaps, "Has File Swaps"),
ModFilter.UnsolvedConflict => "Unsolved Conflicts", ];
ModFilter.HasNoMetaManipulations => "No Meta Manipulations",
ModFilter.HasMetaManipulations => "Meta Manipulations", public static IReadOnlyList<IReadOnlyList<(ModFilter Filter, string Name)>> Groups =
ModFilter.HasNoFileSwaps => "No File Swaps", [
ModFilter.HasFileSwaps => "File Swaps", [
ModFilter.HasNoConfig => "No Configuration", (ModFilter.NoConflict, "Has No Conflicts"),
ModFilter.HasConfig => "Configuration", (ModFilter.SolvedConflict, "Has Solved Conflicts"),
ModFilter.HasNoFiles => "No Files", (ModFilter.UnsolvedConflict, "Has Unsolved Conflicts"),
ModFilter.HasFiles => "Files", ],
ModFilter.IsNew => "Newly Imported", [
ModFilter.NotNew => "Not Newly Imported", (ModFilter.Undefined, "Not Configured"),
ModFilter.Inherited => "Inherited Configuration", (ModFilter.Inherited, "Inherited Configuration"),
ModFilter.Uninherited => "Own Configuration", (ModFilter.Uninherited, "Own Configuration"),
ModFilter.Undefined => "Not Configured", ],
_ => throw new ArgumentOutOfRangeException(nameof(filter), filter, null), ];
};
} }