mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-15 21:24:18 +01:00
ResourceTree: Adjustments on filtering
This commit is contained in:
parent
5e76ab3b84
commit
d05f369a94
2 changed files with 19 additions and 11 deletions
|
|
@ -47,10 +47,8 @@ public class ResourceTreeViewer
|
|||
|
||||
public void Draw()
|
||||
{
|
||||
if (ImGui.Button("Refresh Character List") || _task == null)
|
||||
_task = RefreshCharacterList();
|
||||
|
||||
DrawFilters();
|
||||
DrawControls();
|
||||
_task ??= RefreshCharacterList();
|
||||
|
||||
using var child = ImRaii.Child("##Data");
|
||||
if (!child)
|
||||
|
|
@ -73,7 +71,7 @@ public class ResourceTreeViewer
|
|||
foreach (var (tree, index) in _task.Result.WithIndex())
|
||||
{
|
||||
var category = Classify(tree);
|
||||
if (!_categoryFilter.HasFlag(category) || !tree.Name.Contains(_nameFilter))
|
||||
if (!_categoryFilter.HasFlag(category) || !tree.Name.Contains(_nameFilter, StringComparison.OrdinalIgnoreCase))
|
||||
continue;
|
||||
|
||||
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.Dummy(ImGuiHelpers.ScaledVector2(20, 0));
|
||||
|
||||
|
|
@ -134,7 +138,7 @@ public class ResourceTreeViewer
|
|||
ImGui.Dummy(ImGuiHelpers.ScaledVector2(20, 0));
|
||||
|
||||
ImGui.SameLine();
|
||||
_changedItemDrawer.DrawTypeFilter(ref _typeFilter);
|
||||
_changedItemDrawer.DrawTypeFilter(ref _typeFilter, -yOffset);
|
||||
|
||||
ImGui.InputTextWithHint("##TreeNameFilter", "Filter by Character/Entity Name...", ref _nameFilter, 128);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@ public class ChangedItemDrawer : IDisposable
|
|||
private readonly Dictionary<ChangedItemIcon, IDalamudTextureWrap> _icons = new(16);
|
||||
private float _smallestIconWidth;
|
||||
|
||||
public static Vector2 TypeFilterIconSize
|
||||
=> new(2 * ImGui.GetTextLineHeight());
|
||||
|
||||
public ChangedItemDrawer(UiBuilder uiBuilder, IDataManager gameData, ITextureProvider textureProvider, CommunicatorService communicator,
|
||||
Configuration config)
|
||||
{
|
||||
|
|
@ -146,7 +149,7 @@ public class ChangedItemDrawer : IDisposable
|
|||
return;
|
||||
|
||||
var typeFilter = _config.Ephemeral.ChangedItemFilter;
|
||||
if (DrawTypeFilter(ref typeFilter))
|
||||
if (DrawTypeFilter(ref typeFilter, 0.0f))
|
||||
{
|
||||
_config.Ephemeral.ChangedItemFilter = typeFilter;
|
||||
_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>
|
||||
public bool DrawTypeFilter(ref ChangedItemIcon typeFilter)
|
||||
public bool DrawTypeFilter(ref ChangedItemIcon typeFilter, float yOffset)
|
||||
{
|
||||
var ret = false;
|
||||
using var _ = ImRaii.PushId("ChangedItemIconFilter");
|
||||
var size = new Vector2(2 * ImGui.GetTextLineHeight());
|
||||
var size = TypeFilterIconSize;
|
||||
using var style = ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, Vector2.Zero);
|
||||
var order = new[]
|
||||
{
|
||||
|
|
@ -186,6 +189,7 @@ public class ChangedItemDrawer : IDisposable
|
|||
var ret = false;
|
||||
var icon = _icons[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));
|
||||
if (ImGui.IsItemClicked(ImGuiMouseButton.Left))
|
||||
{
|
||||
|
|
@ -219,7 +223,7 @@ public class ChangedItemDrawer : IDisposable
|
|||
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,
|
||||
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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue