Files
XRLib/Assets/Scripts/UVC/UIToolkit/Property/Items/UTKFloatDropdownPropertyItem.cs
2026-02-10 20:48:49 +09:00

139 lines
5.1 KiB
C#

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