80 lines
2.7 KiB
C#
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
|
|
}
|
|
}
|