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