#nullable enable using UnityEngine.UIElements; namespace UVC.UIToolkit.Property { /// /// 불리언 속성 아이템 /// Toggle을 사용한 체크박스 형식 /// public class UTKBoolPropertyItem : UTKPropertyItemBase { #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("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 evt) { // Toggle은 디바운스 없이 즉시 적용 Value = evt.newValue; } #endregion } }