Files
XRLib/Assets/Scripts/UVC/UIToolkit/Property/Items/UTKBoolPropertyItem.cs

100 lines
2.6 KiB
C#
Raw Normal View History

2026-01-08 20:15:57 +09:00
#nullable enable
using UnityEngine.UIElements;
namespace UVC.UIToolkit.Property
{
/// <summary>
/// 불리언 속성 아이템
/// Toggle을 사용한 체크박스 형식
/// </summary>
public class UTKBoolPropertyItem : UTKPropertyItemBase<bool>
{
#region Fields
private Toggle? _toggle;
#endregion
#region Properties
public override UTKPropertyType PropertyType => UTKPropertyType.Bool;
#endregion
#region Constructor
public UTKBoolPropertyItem(string id, string name, bool initialValue = false)
: base(id, name, initialValue)
{
}
#endregion
#region Override Methods
public override VisualElement CreateUI()
{
var container = CreateContainer();
var label = CreateNameLabel();
container.Add(label);
var valueContainer = new VisualElement();
valueContainer.AddToClassList("utk-property-item__value");
_toggle = new Toggle();
_toggle.name = "value-field";
_toggle.value = Value;
valueContainer.Add(_toggle);
container.Add(valueContainer);
return container;
}
public override void BindUI(VisualElement element)
{
base.BindUI(element);
_toggle = element.Q<Toggle>("value-field");
if (_toggle != null)
{
_toggle.value = Value;
_toggle.SetEnabled(!IsReadOnly);
_toggle.RegisterValueChangedCallback(OnToggleChanged);
}
}
public override void UnbindUI(VisualElement element)
{
if (_toggle != null)
{
_toggle.UnregisterValueChangedCallback(OnToggleChanged);
_toggle = null;
}
base.UnbindUI(element);
}
public override void RefreshUI()
{
if (_toggle != null && _toggle.value != Value)
{
_toggle.SetValueWithoutNotify(Value);
}
}
protected override void UpdateReadOnlyState()
{
base.UpdateReadOnlyState();
if (_toggle != null)
{
_toggle.SetEnabled(!IsReadOnly);
}
}
#endregion
#region Private Methods
private void OnToggleChanged(ChangeEvent<bool> evt)
{
// Toggle은 디바운스 없이 즉시 적용
Value = evt.newValue;
}
#endregion
}
}