Files
EnglewoodLAB/Assets/Scripts/UVC/UIToolkit/ToolBar/Data/UTKToolBarRadioButtonData.cs

80 lines
2.7 KiB
C#

#nullable enable
using System;
namespace UVC.UIToolkit
{
/// <summary>
/// 그룹 내 상호 배타적 선택을 지원하는 라디오 버튼 데이터입니다.
/// 동일한 GroupName을 가진 라디오 버튼들 중 하나만 선택됩니다.
/// </summary>
public class UTKToolBarRadioButtonData : UTKToolBarToggleButtonData
{
#region Properties
/// <summary>소속 라디오 그룹 이름</summary>
public string GroupName { get; private set; }
/// <summary>라디오 그룹 참조 (모델에서 설정)</summary>
internal UTKToolBarRadioButtonGroup? RadioGroup { get; set; }
#endregion
#region Constructor
/// <summary>
/// UTKToolBarRadioButtonData의 새 인스턴스를 초기화합니다.
/// </summary>
/// <param name="groupName">소속 라디오 그룹 이름. null이거나 비어있을 수 없습니다.</param>
/// <param name="itemId">아이템 고유 식별자. null이면 GUID 자동 생성.</param>
/// <exception cref="ArgumentNullException">groupName이 null이거나 빈 문자열일 경우</exception>
public UTKToolBarRadioButtonData(string groupName, string? itemId = null) : base(itemId)
{
if (string.IsNullOrEmpty(groupName))
{
throw new ArgumentNullException(nameof(groupName), "라디오 버튼은 반드시 GroupName을 가져야 합니다.");
}
GroupName = groupName;
}
#endregion
#region Methods
/// <summary>
/// 클릭 시 그룹 내 다른 버튼은 해제하고 이 버튼만 선택합니다.
/// 선택된 상태에서만 ClickCommand가 실행됩니다.
/// </summary>
/// <param name="parameter">ClickCommand에 전달할 파라미터</param>
public override void ExecuteClick(object? parameter = null)
{
if (!IsEnabled) return;
if (RadioGroup != null)
{
RadioGroup.SetSelected(this);
}
else
{
UnityEngine.Debug.LogWarning($"UTKToolBarRadioButtonData '{Text}' (그룹: {GroupName})에 RadioGroup이 할당되지 않았습니다.");
}
// 선택된 상태에서만 Command 실행
if (IsSelected && ClickCommand != null)
{
ClickCommand.Execute(parameter ?? this);
}
}
/// <summary>
/// 모든 이벤트 핸들러를 해제합니다.
/// </summary>
public override void ClearEventHandlers()
{
base.ClearEventHandlers();
}
#endregion
}
}