Files
AetherBags/AetherBags/Nodes/Input/LabeledEnumDropdownNode.cs
T
2026-01-23 18:46:45 +01:00

82 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using FFXIVClientStructs.FFXIV.Component.GUI;
using KamiToolKit.Nodes;
using Lumina.Text.ReadOnly;
namespace AetherBags.Nodes.Input;
public class LabeledEnumDropdownNode<T> : SimpleComponentNode where T : Enum {
private readonly GridNode _gridNode;
private readonly TextNode _labelNode;
private readonly EnumDropDownNode<T> _dropDownNode;
public LabeledEnumDropdownNode() {
_gridNode = new GridNode {
GridSize = new GridSize(2, 1),
};
_gridNode.AttachNode(this);
_labelNode = new LabelTextNode {
String = string.Empty,
};
_labelNode.AttachNode(_gridNode[0, 0]);
_dropDownNode = new EnumDropDownNode<T> {
Options = new List<T>(),
};
_dropDownNode.AttachNode(_gridNode[1, 0]);
}
protected override void OnSizeChanged() {
base.OnSizeChanged();
_gridNode.Size = Size;
_labelNode.Size = _gridNode[0, 0].Size;
_dropDownNode.Size = _gridNode[1, 0].Size;
}
public required ReadOnlySeString LabelText
{
get => _labelNode.String;
set => _labelNode.String = value;
}
public Action<T>? OnOptionSelected
{
get => _dropDownNode.OnOptionSelected;
set => _dropDownNode.OnOptionSelected = value;
}
public T? SelectedOption
{
get => _dropDownNode.OptionListNode.SelectedOption;
set
{
_dropDownNode.OptionListNode.SelectedOption = value;
if (value != null)
{
_dropDownNode.LabelNode.String = value.Description;
}
}
}
public int MaxListOptions
{
get => _dropDownNode.MaxListOptions;
set => _dropDownNode.MaxListOptions = value;
}
public required List<T> Options
{
get => _dropDownNode.Options!;
set => _dropDownNode.Options = value;
}
public TextFlags LabelTextFlags
{
get => _labelNode.TextFlags;
set => _labelNode.TextFlags = value;
}
}