#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 } }