From 262e146a69aac0a22d7fb70d54bdd0453a773755 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 10 Sep 2023 12:16:05 +0200 Subject: [PATCH] Improve search window --- ARDiscard/AutoDiscardPlogon.cs | 3 -- ARDiscard/ConfigWindow.cs | 68 +++++++++++++++++++++++++++------- 2 files changed, 54 insertions(+), 17 deletions(-) diff --git a/ARDiscard/AutoDiscardPlogon.cs b/ARDiscard/AutoDiscardPlogon.cs index a15c011..df9c060 100644 --- a/ARDiscard/AutoDiscardPlogon.cs +++ b/ARDiscard/AutoDiscardPlogon.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; using AutoRetainerAPI; using ClickLib.Clicks; using Dalamud.Data; diff --git a/ARDiscard/ConfigWindow.cs b/ARDiscard/ConfigWindow.cs index b9d881b..00022cf 100644 --- a/ARDiscard/ConfigWindow.cs +++ b/ARDiscard/ConfigWindow.cs @@ -20,6 +20,8 @@ public class ConfigWindow : Window private List<(uint ItemId, string Name)> _searchResults = new(); private List<(uint ItemId, string Name)> _discarding = new(); + private List<(uint ItemId, string Name)>? _allItems = null; + private bool _resetKeyboardFocus = true; public ConfigWindow(DalamudPluginInterface pluginInterface, Configuration configuration, DataManager dataManager) : base("Auto Discard###AutoDiscardConfig") @@ -37,8 +39,8 @@ public class ConfigWindow : Window MaximumSize = new Vector2(9999, 9999), }; - _discarding = _configuration.DiscardingItems - .Select(x => (x, dataManager.GetExcelSheet()?.GetRow(x)?.Name?.ToString() ?? x.ToString())).ToList(); + _discarding.AddRange(_configuration.DiscardingItems + .Select(x => (x, dataManager.GetExcelSheet()?.GetRow(x)?.Name?.ToString() ?? x.ToString())).ToList()); } public override void Draw() @@ -55,7 +57,33 @@ public class ConfigWindow : Window { ImGui.Text("Search"); ImGui.SetNextItemWidth(ws.X / 2 - 20); - if (ImGui.InputText("", ref _itemName, 256)) + if (_resetKeyboardFocus) + { + ImGui.SetKeyboardFocusHere(); + _resetKeyboardFocus = false; + } + + string previousName = _itemName; + if (ImGui.InputText("", ref _itemName, 256, ImGuiInputTextFlags.EnterReturnsTrue)) + { + _resetKeyboardFocus = true; + if (_searchResults.Count > 0) + { + var itemToAdd = _searchResults.FirstOrDefault(); + if (_discarding.All(x => x.ItemId != itemToAdd.ItemId)) + { + _discarding.Add(itemToAdd); + } + else + { + _discarding.Remove(itemToAdd); + } + + Save(); + } + } + + if (previousName != _itemName) UpdateResults(); ImGui.Separator(); @@ -79,8 +107,7 @@ public class ConfigWindow : Window _discarding.Remove((id, name)); } - _configuration.DiscardingItems = _discarding.Select(x => x.ItemId).ToList(); - _pluginInterface.SavePluginConfig(_configuration); + Save(); } } } @@ -105,8 +132,7 @@ public class ConfigWindow : Window foreach (var tr in toRemove) _discarding.Remove(tr); - _configuration.DiscardingItems = _discarding.Select(x => x.ItemId).ToList(); - _pluginInterface.SavePluginConfig(_configuration); + Save(); } } @@ -119,14 +145,28 @@ public class ConfigWindow : Window _searchResults = new(); else { - _searchResults = _dataManager.GetExcelSheet() - .Where(x => x.RowId != 0) - .Where(x => !x.IsUnique && !x.IsUntradable) - .Where(x => x.ItemUICategory?.Value?.Name?.ToString() != "Currency") - .Where(x => !string.IsNullOrEmpty(x.Name) && - x.Name.ToString().Contains(_itemName, StringComparison.CurrentCultureIgnoreCase)) - .Select(x => (x.RowId, x.Name.ToString())) + if (_allItems == null) + { + _allItems = _dataManager.GetExcelSheet()! + .Where(x => x.RowId != 0) + .Where(x => !x.IsUnique && !x.IsUntradable) + .Where(x => x.ItemUICategory?.Value?.Name?.ToString() != "Currency" && + x.ItemUICategory?.Value?.Name?.ToString() != "Crystal") + .Where(x => !string.IsNullOrEmpty(x.Name.ToString())) + .Select(x => (x.RowId, x.Name.ToString())) + .ToList(); + } + + _searchResults = _allItems.Where(x => x.Name.Contains(_itemName, StringComparison.CurrentCultureIgnoreCase) + || (uint.TryParse(_itemName, out uint itemId) && x.ItemId == itemId)) + .OrderBy(x => _itemName.EqualsIgnoreCase(x.Name) ? string.Empty : x.Name) .ToList(); } } + + private void Save() + { + _configuration.DiscardingItems = _discarding.Select(x => x.ItemId).ToList(); + _pluginInterface.SavePluginConfig(_configuration); + } }