namespace UVC.UI.Toolbar { /// /// 라디오 버튼 그룹 내에서 사용되는 버튼입니다. /// 그룹 내 하나의 버튼만 선택될 수 있습니다. /// public class ToolbarRadioButton : ToolbarToggleButton { public string GroupName { get; private set; } internal ToolbarRadioButtonGroup RadioGroup { get; set; } public ToolbarRadioButton(string groupName) { GroupName = groupName; } public override void ExecuteClick(object parameter = null) { if (!IsEnabled) return; bool wasSelected = IsSelected; if (RadioGroup != null) { // SetSelected는 IsSelected 상태를 변경하고, // IsSelected setter는 OnToggleStateChanged 및 NotifyStateChanged를 호출합니다. // OnToggle 콜백도 IsSelected setter 내부 또는 SetSelected 메서드 내에서 호출될 수 있습니다. RadioGroup.SetSelected(this); } else { // 그룹이 없는 라디오 버튼은 의미가 모호하므로, 단독으로 선택되는 것을 방지하거나 특별 처리. // 여기서는 그룹이 없으면 아무것도 하지 않거나, 경고를 로깅할 수 있습니다. UnityEngine.Debug.LogWarning($"ToolbarRadioButton '{Text}' (그룹: {GroupName})에 RadioGroup이 할당되지 않았습니다."); // 또는 강제로 선택 상태로 만들고 콜백 호출 (기존 주석 참고) // if (!IsSelected) // 현재 선택되지 않았다면 선택 // { // IsSelected = true; // OnToggle?.Invoke(IsSelected); // } } // ClickCommand 실행 // RadioGroup.SetSelected에 의해 IsSelected 상태가 변경된 후 실행됩니다. // parameter가 null이 아니면 그것을 우선 사용하고, 아니면 현재 IsSelected 상태를 전달할 수 있습니다. // 또는 버튼 자체를 파라미터로 전달하여 Command가 필요한 정보를 추출하도록 할 수도 있습니다. object commandParameterToUse = parameter ?? this; // 예: 파라미터가 없으면 버튼 인스턴스 전달 // 라디오 버튼의 경우, ClickCommand는 주로 해당 버튼이 "선택되었을 때"의 액션을 정의합니다. // 따라서 IsSelected가 true일 때만 Command를 실행하는 것이 일반적일 수 있습니다. if (IsSelected) // 현재 버튼이 선택된 상태일 때만 Command 실행 { ClickCommand?.Execute(commandParameterToUse); } // 만약 선택 해제 시에도 Command를 실행해야 한다면 위 if 조건을 제거합니다. // 혹은, 선택/해제 상태 모두에 대해 Command를 실행하되, Command 내부에서 IsSelected 값을 확인하도록 합니다. } } }