100 lines
2.5 KiB
C#
100 lines
2.5 KiB
C#
#nullable enable
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace UVC.UIToolkit
|
|
{
|
|
/// <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
|
|
}
|
|
}
|