단축키, UndoRedo 개발중

This commit is contained in:
logonkhi
2025-12-22 19:49:36 +09:00
parent ac071813f4
commit 94dd7782ae
61 changed files with 5433 additions and 1628 deletions

View File

@@ -199,6 +199,7 @@ namespace UVC.UI.Menu
/// <see cref="TopMenuView.OnMenuItemClicked"/> 이벤트가 발생했을 때 호출되는 핸들러입니다.
/// 클릭된 메뉴 아이템(<paramref name="clickedItemData"/>)의 유효성을 검사하고,
/// 연결된 <see cref="ICommand"/>를 실행합니다.
/// IUndoableCommand인 경우 Undo/Redo 히스토리에 기록됩니다.
/// </summary>
/// <param name="clickedItemData">사용자가 클릭한 메뉴 아이템의 데이터입니다.</param>
protected virtual void HandleMenuItemClicked(MenuItemData clickedItemData)
@@ -223,9 +224,35 @@ namespace UVC.UI.Menu
// 클릭된 메뉴 아이템 정보 로그 (디버깅 목적)
ULog.Debug($"메뉴 아이템 클릭됨: {clickedItemData.ItemId} (표시 키: {clickedItemData.DisplayName})");
// 메뉴 아이템에 연결된 Command가 있다면 실행
// Command가 null일 수 있으므로 null 조건부 연산자(?.) 사용
clickedItemData.Command?.Execute(clickedItemData.CommandParameter);
// 메뉴 아이템에 연결된 Command 실행
ExecuteCommand(clickedItemData.Command, clickedItemData.CommandParameter);
}
/// <summary>
/// Command를 실행합니다.
/// IUndoableCommand인 경우 UndoRedoManager를 통해 실행하여 히스토리에 기록합니다.
/// 일반 ICommand인 경우 직접 실행합니다.
/// </summary>
/// <param name="command">실행할 Command</param>
/// <param name="parameter">Command 파라미터</param>
protected virtual void ExecuteCommand(ICommand command, object parameter = null)
{
if (command == null) return;
// IUndoableCommand인 경우 UndoRedoManager를 통해 실행
if (command is IUndoableCommand undoableCommand)
{
// UndoRedoManager가 존재하는지 확인 (Studio 씬에서만 사용 가능)
var undoRedoManager = FindAnyObjectByType<UVC.Studio.Manager.UndoRedoManager>();
if (undoRedoManager != null)
{
undoRedoManager.ExecuteCommand(undoableCommand, parameter);
return;
}
}
// 일반 ICommand이거나 UndoRedoManager가 없는 경우 직접 실행
command.Execute(parameter);
}
/// <summary>