using System.Collections.Generic; namespace UVC.UI.Toolbar { /// /// 라디오 버튼들을 그룹으로 관리하여 하나만 선택되도록 합니다. /// ToolbarRadioButtonGroup, ToolbarExpandableButton 클래스는 이전 제안과 거의 동일하게 유지하되, /// 상태 변경 시 NotifyStateChanged() 호출을 고려할 수 있습니다. /// 예를 들어 ToolbarExpandableButton에서 SelectSubButton 후 주 버튼의 Text, Icon이 변경되면 NotifyStateChanged() 호출 /// public class ToolbarRadioButtonGroup { private List _buttons = new List(); public ToolbarRadioButton SelectedButton { get; private set; } public void RegisterButton(ToolbarRadioButton button) { if (!_buttons.Contains(button)) { _buttons.Add(button); button.RadioGroup = this; } } public void SetSelected(ToolbarRadioButton buttonToSelect) { if (!_buttons.Contains(buttonToSelect) || !buttonToSelect.IsEnabled) return; SelectedButton = buttonToSelect; foreach (var btn in _buttons) { bool isNowSelected = (btn == SelectedButton); if (btn.IsSelected != isNowSelected) // 실제 상태 변경이 있을 때만 { btn.IsSelected = isNowSelected; // 이 setter가 OnStateChanged를 호출 // btn.OnClick?.Invoke(); // OnClick은 버튼 자체의 ExecuteClick에서 관리하는 것이 더 적절할 수 있음 // 또는 선택 변경 시 항상 호출하고 싶다면 여기에 둠 // btn.OnToggle?.Invoke(isNowSelected); // OnToggle은 IsSelected setter에서 OnToggleStateChanged로 대체 가능 } } } } }