toolbar 개발 중
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
namespace UVC.UI.ToolBar
|
||||
namespace UVC.UI.Toolbar
|
||||
{
|
||||
/// <summary>
|
||||
/// 라디오 버튼 그룹 내에서 사용되는 버튼입니다.
|
||||
@@ -14,19 +14,46 @@
|
||||
GroupName = groupName;
|
||||
}
|
||||
|
||||
public override void ExecuteClick()
|
||||
public override void ExecuteClick(object parameter = null)
|
||||
{
|
||||
if (IsEnabled)
|
||||
if (!IsEnabled) return;
|
||||
|
||||
bool wasSelected = IsSelected;
|
||||
|
||||
if (RadioGroup != null)
|
||||
{
|
||||
// 라디오 버튼은 직접 IsSelected를 토글하지 않고, 그룹에 의해 상태가 결정됩니다.
|
||||
// 그룹이 SetSelected를 호출하면, 해당 버튼의 IsSelected가 true로 설정되고,
|
||||
// 다른 버튼들은 false로 설정되면서 각자의 OnStateChanged 이벤트가 발생합니다.
|
||||
RadioGroup?.SetSelected(this);
|
||||
// OnClick은 그룹에 의해 선택이 확정되었을 때 호출되도록 RadioGroup.SetSelected 내부에서 처리하거나,
|
||||
// 여기서 IsSelected 상태를 확인 후 호출할 수 있습니다.
|
||||
// 현재 구조에서는 RadioGroup.SetSelected가 IsSelected를 변경하고, IsSelected의 setter가 OnStateChanged를 호출합니다.
|
||||
// OnClick은 ToolbarToggleButton의 ExecuteClick에서 이미 호출될 수 있으므로 중복 호출을 피하거나 의도에 맞게 조정합니다.
|
||||
// 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 값을 확인하도록 합니다.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user