ResourceTree: Adjustments on filtering

This commit is contained in:
Exter-N 2023-11-26 20:56:35 +01:00
parent 5e76ab3b84
commit d05f369a94
2 changed files with 19 additions and 11 deletions

View file

@ -47,10 +47,8 @@ public class ResourceTreeViewer
public void Draw() public void Draw()
{ {
if (ImGui.Button("Refresh Character List") || _task == null) DrawControls();
_task = RefreshCharacterList(); _task ??= RefreshCharacterList();
DrawFilters();
using var child = ImRaii.Child("##Data"); using var child = ImRaii.Child("##Data");
if (!child) if (!child)
@ -73,7 +71,7 @@ public class ResourceTreeViewer
foreach (var (tree, index) in _task.Result.WithIndex()) foreach (var (tree, index) in _task.Result.WithIndex())
{ {
var category = Classify(tree); var category = Classify(tree);
if (!_categoryFilter.HasFlag(category) || !tree.Name.Contains(_nameFilter)) if (!_categoryFilter.HasFlag(category) || !tree.Name.Contains(_nameFilter, StringComparison.OrdinalIgnoreCase))
continue; continue;
using (var c = ImRaii.PushColor(ImGuiCol.Text, CategoryColor(category).Value())) using (var c = ImRaii.PushColor(ImGuiCol.Text, CategoryColor(category).Value()))
@ -111,8 +109,14 @@ public class ResourceTreeViewer
} }
} }
private void DrawFilters() private void DrawControls()
{ {
var yOffset = (ChangedItemDrawer.TypeFilterIconSize.Y - ImGui.GetFrameHeight()) / 2f;
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + yOffset);
if (ImGui.Button("Refresh Character List"))
_task = RefreshCharacterList();
ImGui.SameLine(); ImGui.SameLine();
ImGui.Dummy(ImGuiHelpers.ScaledVector2(20, 0)); ImGui.Dummy(ImGuiHelpers.ScaledVector2(20, 0));
@ -134,7 +138,7 @@ public class ResourceTreeViewer
ImGui.Dummy(ImGuiHelpers.ScaledVector2(20, 0)); ImGui.Dummy(ImGuiHelpers.ScaledVector2(20, 0));
ImGui.SameLine(); ImGui.SameLine();
_changedItemDrawer.DrawTypeFilter(ref _typeFilter); _changedItemDrawer.DrawTypeFilter(ref _typeFilter, -yOffset);
ImGui.InputTextWithHint("##TreeNameFilter", "Filter by Character/Entity Name...", ref _nameFilter, 128); ImGui.InputTextWithHint("##TreeNameFilter", "Filter by Character/Entity Name...", ref _nameFilter, 128);
} }

View file

@ -52,6 +52,9 @@ public class ChangedItemDrawer : IDisposable
private readonly Dictionary<ChangedItemIcon, IDalamudTextureWrap> _icons = new(16); private readonly Dictionary<ChangedItemIcon, IDalamudTextureWrap> _icons = new(16);
private float _smallestIconWidth; private float _smallestIconWidth;
public static Vector2 TypeFilterIconSize
=> new(2 * ImGui.GetTextLineHeight());
public ChangedItemDrawer(UiBuilder uiBuilder, IDataManager gameData, ITextureProvider textureProvider, CommunicatorService communicator, public ChangedItemDrawer(UiBuilder uiBuilder, IDataManager gameData, ITextureProvider textureProvider, CommunicatorService communicator,
Configuration config) Configuration config)
{ {
@ -146,7 +149,7 @@ public class ChangedItemDrawer : IDisposable
return; return;
var typeFilter = _config.Ephemeral.ChangedItemFilter; var typeFilter = _config.Ephemeral.ChangedItemFilter;
if (DrawTypeFilter(ref typeFilter)) if (DrawTypeFilter(ref typeFilter, 0.0f))
{ {
_config.Ephemeral.ChangedItemFilter = typeFilter; _config.Ephemeral.ChangedItemFilter = typeFilter;
_config.Ephemeral.Save(); _config.Ephemeral.Save();
@ -154,11 +157,11 @@ public class ChangedItemDrawer : IDisposable
} }
/// <summary> Draw a header line with the different icon types to filter them. </summary> /// <summary> Draw a header line with the different icon types to filter them. </summary>
public bool DrawTypeFilter(ref ChangedItemIcon typeFilter) public bool DrawTypeFilter(ref ChangedItemIcon typeFilter, float yOffset)
{ {
var ret = false; var ret = false;
using var _ = ImRaii.PushId("ChangedItemIconFilter"); using var _ = ImRaii.PushId("ChangedItemIconFilter");
var size = new Vector2(2 * ImGui.GetTextLineHeight()); var size = TypeFilterIconSize;
using var style = ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, Vector2.Zero); using var style = ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, Vector2.Zero);
var order = new[] var order = new[]
{ {
@ -186,6 +189,7 @@ public class ChangedItemDrawer : IDisposable
var ret = false; var ret = false;
var icon = _icons[type]; var icon = _icons[type];
var flag = typeFilter.HasFlag(type); var flag = typeFilter.HasFlag(type);
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + yOffset);
ImGui.Image(icon.ImGuiHandle, size, Vector2.Zero, Vector2.One, flag ? Vector4.One : new Vector4(0.6f, 0.3f, 0.3f, 1f)); ImGui.Image(icon.ImGuiHandle, size, Vector2.Zero, Vector2.One, flag ? Vector4.One : new Vector4(0.6f, 0.3f, 0.3f, 1f));
if (ImGui.IsItemClicked(ImGuiMouseButton.Left)) if (ImGui.IsItemClicked(ImGuiMouseButton.Left))
{ {
@ -219,7 +223,7 @@ public class ChangedItemDrawer : IDisposable
ImGui.SameLine(); ImGui.SameLine();
} }
ImGui.SetCursorPosX(ImGui.GetContentRegionMax().X - size.X); ImGui.SetCursorPos(new(ImGui.GetContentRegionMax().X - size.X, ImGui.GetCursorPosY() + yOffset));
ImGui.Image(_icons[AllFlags].ImGuiHandle, size, Vector2.Zero, Vector2.One, ImGui.Image(_icons[AllFlags].ImGuiHandle, size, Vector2.Zero, Vector2.One,
typeFilter == 0 ? new Vector4(0.6f, 0.3f, 0.3f, 1f) : typeFilter == 0 ? new Vector4(0.6f, 0.3f, 0.3f, 1f) :
typeFilter == AllFlags ? new Vector4(0.75f, 0.75f, 0.75f, 1f) : new Vector4(0.5f, 0.5f, 1f, 1f)); typeFilter == AllFlags ? new Vector4(0.75f, 0.75f, 0.75f, 1f) : new Vector4(0.5f, 0.5f, 1f, 1f));