60 lines
3.0 KiB
C#
60 lines
3.0 KiB
C#
namespace UVC.UI.Toolbar
|
|
{
|
|
/// <summary>
|
|
/// 라디오 버튼 그룹 내에서 사용되는 버튼입니다.
|
|
/// 그룹 내 하나의 버튼만 선택될 수 있습니다.
|
|
/// </summary>
|
|
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 값을 확인하도록 합니다.
|
|
}
|
|
}
|
|
}
|