Add UI/sorting options

pull/3/head v2.4
Liza 2023-10-17 12:50:17 +02:00
parent 297544128d
commit 65af6814df
Signed by: liza
GPG Key ID: 7199F8D727D55F67
4 changed files with 125 additions and 53 deletions

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-windows</TargetFramework>
<Version>2.3</Version>
<Version>2.4</Version>
<LangVersion>11.0</LangVersion>
<Nullable>enable</Nullable>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>

View File

@ -12,6 +12,7 @@ internal sealed class Configuration : IPluginConfiguration
public List<CharacterConfiguration> Characters { get; set; } = new();
public List<ItemList> ItemLists { get; set; } = new();
public List<CharacterGroup> CharacterGroups { get; set; } = new();
public ConfigWindowUiOptions ConfigUiOptions { get; set; } = new();
public sealed class ItemList
{
@ -23,6 +24,9 @@ internal sealed class Configuration : IPluginConfiguration
public string GetIcon()
{
if (Id == Guid.Empty)
return string.Empty;
return Type switch
{
ListType.CollectOneTime => SeIconChar.BoxedNumber1.ToIconString(),
@ -102,4 +106,12 @@ internal sealed class Configuration : IPluginConfiguration
public int Gathering { get; set; }
public int Perception { get; set; }
}
public sealed class ConfigWindowUiOptions
{
public bool ShowVentureListContents { get; set; } = true;
public bool CheckGatheredItemsPerCharacter { get; set; }
public bool OnlyShowMissingGatheredItems { get; set; }
public bool WrapAroundWhenReordering { get; set; }
}
}

View File

@ -50,9 +50,6 @@ internal sealed class ConfigWindow : Window
ListPriority = Configuration.ListPriority.InOrder
};
private bool _checkPerCharacter = true;
private bool _onlyShowMissing = true;
public ConfigWindow(
DalamudPluginInterface pluginInterface,
Configuration configuration,
@ -88,6 +85,7 @@ internal sealed class ConfigWindow : Window
DrawCharacterGroups();
DrawCharacters();
DrawGatheredItemsToCheck();
DrawUiTab();
ImGui.EndTabBar();
}
}
@ -340,27 +338,39 @@ internal sealed class ConfigWindow : Window
Save();
}
ImGui.SameLine(windowX - 30);
ImGui.BeginDisabled(i == 0);
if (ImGuiComponents.IconButton($"##Up{i}", FontAwesomeIcon.ArrowUp))
if (list.Items.Count > 1)
{
itemToAdd = item;
indexToAdd = i - 1;
bool wrap = _configuration.ConfigUiOptions.WrapAroundWhenReordering;
ImGui.SameLine(windowX - 31);
ImGui.BeginDisabled(i == 0 && !wrap);
if (ImGuiComponents.IconButton($"##Up{i}", FontAwesomeIcon.ArrowUp))
{
itemToAdd = item;
if (i > 0)
indexToAdd = i - 1;
else
indexToAdd = list.Items.Count - 1;
}
ImGui.EndDisabled();
ImGui.SameLine(0, 0);
ImGui.BeginDisabled(i == list.Items.Count - 1 && !wrap);
if (ImGuiComponents.IconButton($"##Down{i}", FontAwesomeIcon.ArrowDown))
{
itemToAdd = item;
if (i < list.Items.Count - 1)
indexToAdd = i + 1;
else
indexToAdd = 0;
}
ImGui.EndDisabled();
ImGui.SameLine();
}
else
ImGui.SameLine(windowX + 19);
ImGui.EndDisabled();
ImGui.SameLine(0, 0);
ImGui.BeginDisabled(i == list.Items.Count - 1);
if (ImGuiComponents.IconButton($"##Down{i}", FontAwesomeIcon.ArrowDown))
{
itemToAdd = item;
indexToAdd = i + 1;
}
ImGui.EndDisabled();
ImGui.SameLine();
if (ImGuiComponents.IconButton($"##Remove{i}", FontAwesomeIcon.Times))
itemToRemove = item;
@ -744,8 +754,20 @@ internal sealed class ConfigWindow : Window
{
if (ImGui.BeginTabItem("Locked Items"))
{
ImGui.Checkbox("Group by character", ref _checkPerCharacter);
ImGui.Checkbox("Only show missing items", ref _onlyShowMissing);
bool checkPerCharacter = _configuration.ConfigUiOptions.CheckGatheredItemsPerCharacter;
if (ImGui.Checkbox("Group by character", ref checkPerCharacter))
{
_configuration.ConfigUiOptions.CheckGatheredItemsPerCharacter = checkPerCharacter;
Save();
}
bool onlyShowMissing = _configuration.ConfigUiOptions.OnlyShowMissingGatheredItems;
if (ImGui.Checkbox("Only show missing items", ref onlyShowMissing))
{
_configuration.ConfigUiOptions.OnlyShowMissingGatheredItems = onlyShowMissing;
Save();
}
ImGui.Separator();
var itemsToCheck =
@ -774,9 +796,9 @@ internal sealed class ConfigWindow : Window
.Select(x => new CheckedCharacter(_configuration, x, itemsToCheck))
.ToList();
if (_checkPerCharacter)
if (checkPerCharacter)
{
foreach (var ch in charactersToCheck.Where(x => x.ToCheck(_onlyShowMissing).Any()))
foreach (var ch in charactersToCheck.Where(x => x.ToCheck(onlyShowMissing).Any()))
{
bool currentCharacter = _clientState.LocalContentId == ch.Character.LocalContentId;
ImGui.BeginDisabled(currentCharacter);
@ -801,7 +823,7 @@ internal sealed class ConfigWindow : Window
{
ImGui.Indent(30);
foreach (var item in itemsToCheck.Where(x =>
ch.ToCheck(_onlyShowMissing).ContainsKey(x.ItemId)))
ch.ToCheck(onlyShowMissing).ContainsKey(x.ItemId)))
{
var color = ch.Items[item.ItemId];
if (color != ColorGrey)
@ -839,7 +861,7 @@ internal sealed class ConfigWindow : Window
else
{
foreach (var item in itemsToCheck.Where(x =>
charactersToCheck.Any(y => y.ToCheck(_onlyShowMissing).ContainsKey(x.ItemId))))
charactersToCheck.Any(y => y.ToCheck(onlyShowMissing).ContainsKey(x.ItemId))))
{
if (ImGui.CollapsingHeader($"{item.GatheredItem.Name}##Gathered{item.GatheredItem.ItemId}"))
{
@ -847,7 +869,7 @@ internal sealed class ConfigWindow : Window
foreach (var ch in charactersToCheck)
{
var color = ch.Items[item.ItemId];
if (color == ColorRed || (color == ColorGreen && !_onlyShowMissing))
if (color == ColorRed || (color == ColorGreen && !onlyShowMissing))
ImGui.TextColored(color, ch.Character.ToString());
}
@ -866,7 +888,7 @@ internal sealed class ConfigWindow : Window
List<(Guid Id, string Name, Configuration.ItemList List)> itemLists = new List<Configuration.ItemList>
{
new Configuration.ItemList
new()
{
Id = Guid.Empty,
Name = "---",
@ -874,7 +896,7 @@ internal sealed class ConfigWindow : Window
Priority = Configuration.ListPriority.InOrder,
}
}.Concat(_configuration.ItemLists)
.Select(x => (x.Id, x.Name, x)).ToList();
.Select(x => (x.Id, $"{x.Name} {x.GetIcon()}".TrimEnd(), x)).ToList();
int? itemToRemove = null;
int? itemToAdd = null;
int indexToAdd = 0;
@ -892,27 +914,42 @@ internal sealed class ConfigWindow : Window
Save();
}
ImGui.SameLine();
ImGui.BeginDisabled(i == 0);
if (ImGuiComponents.IconButton($"##Up{i}", FontAwesomeIcon.ArrowUp))
if (selectedLists.Count > 1)
{
itemToAdd = i;
indexToAdd = i - 1;
bool wrap = _configuration.ConfigUiOptions.WrapAroundWhenReordering;
ImGui.SameLine();
ImGui.BeginDisabled(i == 0 && !wrap);
if (ImGuiComponents.IconButton($"##Up{i}", FontAwesomeIcon.ArrowUp))
{
itemToAdd = i;
if (i > 0)
indexToAdd = i - 1;
else
indexToAdd = selectedLists.Count - 1;
}
ImGui.EndDisabled();
ImGui.SameLine(0, 0);
ImGui.BeginDisabled(i == selectedLists.Count - 1 && !wrap);
if (ImGuiComponents.IconButton($"##Down{i}", FontAwesomeIcon.ArrowDown))
{
itemToAdd = i;
if (i < selectedLists.Count - 1)
indexToAdd = i + 1;
else
indexToAdd = 0;
}
ImGui.EndDisabled();
ImGui.SameLine();
}
else
{
ImGui.SameLine(0, 58);
}
ImGui.EndDisabled();
ImGui.SameLine(0, 0);
ImGui.BeginDisabled(i == selectedLists.Count - 1);
if (ImGuiComponents.IconButton($"##Down{i}", FontAwesomeIcon.ArrowDown))
{
itemToAdd = i;
indexToAdd = i + 1;
}
ImGui.EndDisabled();
ImGui.SameLine();
if (ImGuiComponents.IconButton($"##Remove{i}", FontAwesomeIcon.Times))
itemToRemove = i;
@ -924,13 +961,13 @@ internal sealed class ConfigWindow : Window
ImGui.TextColored(ImGuiColors.DalamudYellow, "This entry is a duplicate and will be ignored.");
ImGui.Unindent(30);
}
else
else if (_configuration.ConfigUiOptions.ShowVentureListContents)
{
var list = itemLists[listIndex].List;
ImGui.Indent(30);
ImGui.Text(list.Type == Configuration.ListType.CollectOneTime
? $"{list.GetIcon()} Items on this list will be collected once."
: $"{list.GetIcon()} Items on this list will be kept in stock on each character.");
? "Items on this list will be collected once."
: "Items on this list will be kept in stock on each character.");
ImGui.Spacing();
foreach (var item in list.Items)
{
@ -983,6 +1020,29 @@ internal sealed class ConfigWindow : Window
ImGui.PopID();
}
private void DrawUiTab()
{
if (ImGui.BeginTabItem("UI"))
{
bool showContents = _configuration.ConfigUiOptions.ShowVentureListContents;
if (ImGui.Checkbox("Show Venture List preview in Groups/Retainer tabs", ref showContents))
{
_configuration.ConfigUiOptions.ShowVentureListContents = showContents;
Save();
}
bool wrapAroundWhenReordering = _configuration.ConfigUiOptions.WrapAroundWhenReordering;
if (ImGui.Checkbox("Allow sorting with up/down arrows to wrap around", ref wrapAroundWhenReordering))
{
_configuration.ConfigUiOptions.WrapAroundWhenReordering = wrapAroundWhenReordering;
Save();
}
ImGuiComponents.HelpMarker("When enabled:\n- Clicking the Up-Arrow for the first item in a list, that item will be moved to the bottom.\n- Clicking the Down-Arrow for the last item in the list, that item will be moved to the top.");
ImGui.EndTabItem();
}
}
private void Save()
{
_pluginInterface.SavePluginConfig(_configuration);

2
LLib

@ -1 +1 @@
Subproject commit e59d291f04473eae0b76712397733e2e25349953
Subproject commit 2f6ef354c401a9f1bb9b807327acad7e98662a2e