139 lines
5.1 KiB
C#
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
|
|
}
|
|
}
|