#nullable enable using System.Collections.Generic; namespace UVC.UIToolkit { /// /// Float + Dropdown 복합 속성 데이터 클래스입니다. /// Float 값(또는 Stepper)과 Dropdown 선택을 하나의 행에 표시합니다. /// UI는 UTKFloatDropdownPropertyItemView에서 담당합니다. /// public class UTKFloatDropdownPropertyItem : UTKPropertyItemBase { #region Fields private List _choices; private bool _useStepper; private float _floatMinValue = float.MinValue; private float _floatMaxValue = float.MaxValue; private float _stepperStep = 1.0f; #endregion #region Properties /// 속성 타입 public override UTKPropertyType PropertyType => UTKPropertyType.FloatDropdown; /// Dropdown 선택 목록 public List Choices => _choices; /// 스테퍼(증감 버튼) 사용 여부. false이면 UTKFloatField 사용 public bool UseStepper { get => _useStepper; set => _useStepper = value; } /// Float 최소값 public float FloatMinValue { get => _floatMinValue; set => _floatMinValue = value; } /// Float 최대값 public float FloatMaxValue { get => _floatMaxValue; set => _floatMaxValue = value; } /// 스테퍼 증감 단위 (기본값: 1.0) public float StepperStep { get => _stepperStep; set => _stepperStep = value > 0 ? value : 1.0f; } #endregion #region Constructor /// /// Float + Dropdown 복합 속성을 생성합니다. /// /// 고유 ID /// 표시 이름 /// 초기 float 값 /// Dropdown 선택 목록 /// 초기 Dropdown 선택 값 /// 스테퍼 사용 여부 /// 읽기 전용 여부 /// 레이블 표시 여부 public UTKFloatDropdownPropertyItem( string id, string name, float floatValue, List choices, string dropdownValue = "", bool useStepper = false, bool isReadOnly = false, bool showLabel = true) : base(id, name, new UTKFloatDropdownValue(floatValue, ValidateDropdownValue(dropdownValue, choices))) { _choices = new List(choices); _useStepper = useStepper; _isReadOnly = isReadOnly; _showLabel = showLabel; } /// /// Float + Dropdown 복합 속성을 생성합니다 /// (최소/최대 float 값 및 스테퍼 단위 포함) /// /// 고유 ID /// 표시 이름 /// 초기 float 값 /// Dropdown 선택 목록 /// 초기 Dropdown 선택 값 /// Float 최소값 /// Float 최대값 /// 스테퍼 증감 단위스테퍼 사용 여부 /// 읽기 전용 여부 /// 레이블 표시 여부 public UTKFloatDropdownPropertyItem( string id, string name, float floatValue, List choices, string dropdownValue, float floatMinValue, float floatMaxValue, float stepperStep = 1.0f, bool useStepper = false, bool isReadOnly = false, bool showLabel = true) : base(id, name, new UTKFloatDropdownValue(floatValue, ValidateDropdownValue(dropdownValue, choices))) { _choices = new List(choices); _floatMinValue = floatMinValue; _floatMaxValue = floatMaxValue; _stepperStep = stepperStep; _useStepper = useStepper; _isReadOnly = isReadOnly; _showLabel = showLabel; } #endregion #region Methods /// Dropdown 선택 값 검증 (목록에 없으면 첫 번째 값 반환) private static string ValidateDropdownValue(string value, List choices) { if (choices.Count == 0) return value; if (string.IsNullOrEmpty(value) || !choices.Contains(value)) { return choices[0]; } return value; } #endregion } }