toolbar 개발 중

This commit is contained in:
logonkhi
2025-06-16 19:30:01 +09:00
parent 2ffe7abac6
commit 63b71216cb
92 changed files with 5915 additions and 530 deletions

View File

@@ -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 값을 확인하도록 합니다.
}
}
}