Improve search window

This commit is contained in:
Liza 2023-09-10 12:16:05 +02:00
parent ac9de53c7f
commit 262e146a69
Signed by: liza
GPG Key ID: 7199F8D727D55F67
2 changed files with 54 additions and 17 deletions

View File

@ -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;

View File

@ -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<Item>()?.GetRow(x)?.Name?.ToString() ?? x.ToString())).ToList();
_discarding.AddRange(_configuration.DiscardingItems
.Select(x => (x, dataManager.GetExcelSheet<Item>()?.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<Item>()
if (_allItems == null)
{
_allItems = _dataManager.GetExcelSheet<Item>()!
.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))
.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);
}
}