#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
}
}