Use EquipItem in item management and add filters to changed item types.

This commit is contained in:
Ottermandias 2023-06-09 16:10:02 +02:00
parent 5fcb07487e
commit d9c5c053cf
19 changed files with 641 additions and 375 deletions

View file

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using ImGuiNET;
using OtterGui;
@ -14,6 +15,8 @@ public class ModPanelChangedItemsTab : ITab
private readonly ModFileSystemSelector _selector;
private readonly ChangedItemDrawer _drawer;
private ChangedItemDrawer.ChangedItemIcon _filter = Enum.GetValues<ChangedItemDrawer.ChangedItemIcon>().Aggregate((a, b) => a | b);
public ReadOnlySpan<byte> Label
=> "Changed Items"u8;
@ -28,12 +31,30 @@ public class ModPanelChangedItemsTab : ITab
public void DrawContent()
{
using var list = ImRaii.ListBox("##changedItems", -Vector2.One);
if (!list)
_drawer.DrawTypeFilter();
ImGui.Separator();
using var table = ImRaii.Table("##changedItems", 1, ImGuiTableFlags.RowBg | ImGuiTableFlags.ScrollY,
new Vector2(ImGui.GetContentRegionAvail().X, -1));
if (!table)
return;
var zipList = ZipList.FromSortedList((SortedList<string, object?>)_selector.Selected!.ChangedItems);
var height = ImGui.GetFrameHeight();
ImGuiClip.ClippedDraw(zipList, kvp => _drawer.DrawChangedItem(kvp.Item1, kvp.Item2, true), height);
var height = ImGui.GetFrameHeightWithSpacing();
ImGui.TableNextColumn();
var skips = ImGuiClip.GetNecessarySkips(height);
var remainder = ImGuiClip.FilteredClippedDraw(zipList, skips, CheckFilter, DrawChangedItem);
ImGuiClip.DrawEndDummy(remainder, height);
}
private bool CheckFilter((string Name, object? Data) kvp)
=> _drawer.FilterChangedItem(kvp.Name, kvp.Data, LowerString.Empty);
private void DrawChangedItem((string Name, object? Data) kvp)
{
ImGui.TableNextColumn();
_drawer.DrawCategoryIcon(kvp.Name, kvp.Data);
ImGui.SameLine();
_drawer.DrawChangedItem(kvp.Name, kvp.Data);
_drawer.DrawModelData(kvp.Data);
}
}