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로 대체 가능
}
}
}
}
}