#nullable enable using System; using UnityEngine.UIElements; namespace UVC.UIToolkit { /// /// 열거형 속성 아이템 /// UTKEnumDropDown을 사용한 열거형 선택 /// public class UTKEnumPropertyItem : UTKPropertyItemBase { #region Fields private UTKEnumDropDown? _enumDropdown; private Type _enumType; #endregion #region Properties public override UTKPropertyType PropertyType => UTKPropertyType.Enum; /// 열거형 타입 public Type EnumType => _enumType; #endregion #region Constructor public UTKEnumPropertyItem(string id, string name, Enum initialValue, bool isReadOnly = false) : base(id, name, initialValue ?? throw new ArgumentNullException(nameof(initialValue))) { _enumType = initialValue.GetType(); base._isReadOnly = isReadOnly; } #endregion #region Override Methods public override VisualElement CreateUI() { var container = CreateUIFromUxml("UTKEnumPropertyItem"); if (container == null) { return CreateUIFallback(); } _enumDropdown = container.Q("enum-dropdown"); if (_enumDropdown != null) { _enumDropdown.Init(Value); _enumDropdown.IsEnabled = !IsReadOnly; } return container; } private VisualElement CreateUIFallback() { var container = CreateContainer(); var label = CreateNameLabel(); container.Add(label); var valueContainer = new VisualElement(); valueContainer.AddToClassList("utk-property-item__value"); _enumDropdown = new UTKEnumDropDown(); _enumDropdown.name = "enum-dropdown"; _enumDropdown.Init(Value); _enumDropdown.IsEnabled = !IsReadOnly; valueContainer.Add(_enumDropdown); container.Add(valueContainer); return container; } public override void BindUI(VisualElement element) { base.BindUI(element); _enumDropdown = element.Q("enum-dropdown"); if (_enumDropdown != null) { _enumDropdown.Value = Value; _enumDropdown.IsEnabled = !IsReadOnly; _enumDropdown.OnValueChanged += OnEnumDropdownChanged; } } public override void UnbindUI(VisualElement element) { if (_enumDropdown != null) { _enumDropdown.OnValueChanged -= OnEnumDropdownChanged; _enumDropdown = null; } base.UnbindUI(element); } public override void RefreshUI() { if (_enumDropdown != null && _enumDropdown.Value != Value) { _enumDropdown.Value = Value; } } protected override void UpdateReadOnlyState() { base.UpdateReadOnlyState(); if (_enumDropdown != null) { _enumDropdown.IsEnabled = !IsReadOnly; } } #endregion #region Private Methods private void OnEnumDropdownChanged(Enum? newValue) { if (newValue != null) { Value = newValue; } } #endregion } }