#nullable enable
using System;
using UVC.UI.Commands;
namespace UVC.UI.Menu
{
///
/// 컨텍스트 메뉴의 각 항목에 대한 정보를 담는 데이터 구조체입니다.
/// 인스펙터에서 메뉴 항목을 쉽게 설정할 수 있도록 Serializable 특성을 가집니다.
///
[Serializable]
public class ContextMenuItemData
{
///
/// 메뉴 아이템의 고유 식별자입니다.
///
public string ItemId { get; private set; }
///
/// UI에 표시될 메뉴 아이템의 이름입니다. 다국어 키도 가능합니다.
/// 이 키를 사용하여 실제 표시될 텍스트를 가져옵니다.
///
public string DisplayName { get; private set; }
///
/// 메뉴 아이템이 선택되었을 때 실행될 명령입니다.
/// `ICommand` 인터페이스를 구현하는 객체여야 합니다.
/// 실행할 동작이 없는 경우 null일 수 있습니다.
///
public ICommand? Command { get; private set; }
///
/// 실행 시 전달될 파라미터입니다.
/// 이 파라미터는 호출 시 사용됩니다.
///
public object? CommandParameter { get; set; }
///
/// 이 메뉴 아이템이 시각적인 구분선인지 여부를 나타냅니다.
/// `true`이면 메뉴 UI에서 다른 아이템들과 구분되는 선으로 표시됩니다.
///
public bool IsSeparator { get; private set; }
public ContextMenuItemData(string itemId = "", string displayName = "", ICommand? command = null, object? commandParameter = null, bool isSeparator = false)
{
this.ItemId = itemId;
this.DisplayName = displayName;
this.Command = command;
this.CommandParameter = commandParameter;
this.IsSeparator = isSeparator;
}
}
}