105 lines
4.7 KiB
C#
105 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UVC.UI.Commands;
|
|
|
|
namespace UVC.UI.Menu
|
|
{
|
|
/// <summary>
|
|
/// 메뉴 시스템에서 개별 메뉴 아이템을 나타내는 데이터 클래스입니다.
|
|
/// 각 메뉴 아이템은 고유 ID, 표시 이름, 실행될 명령, 하위 메뉴 등을 가질 수 있습니다.
|
|
/// </summary>
|
|
public class MenuItemData
|
|
{
|
|
/// <summary>
|
|
/// 메뉴 아이템의 고유 식별자입니다.
|
|
/// </summary>
|
|
public string ItemId { get; private set; }
|
|
|
|
/// <summary>
|
|
/// UI에 표시될 메뉴 아이템의 이름에 대한 다국어 처리 키입니다.
|
|
/// 이 키를 사용하여 실제 표시될 텍스트를 가져옵니다.
|
|
/// </summary>
|
|
public string DisplayNameKey { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 메뉴 아이템이 선택되었을 때 실행될 명령입니다.
|
|
/// `ICommand` 인터페이스를 구현하는 객체여야 합니다.
|
|
/// 실행할 동작이 없는 경우 null일 수 있습니다.
|
|
/// </summary>
|
|
public ICommand Command { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 이 메뉴 아이템에 속한 하위 메뉴 아이템들의 목록입니다.
|
|
/// 하위 메뉴가 없는 경우 빈 리스트입니다.
|
|
/// </summary>
|
|
public List<MenuItemData> SubMenuItems { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 이 메뉴 아이템이 시각적인 구분선인지 여부를 나타냅니다.
|
|
/// `true`이면 메뉴 UI에서 다른 아이템들과 구분되는 선으로 표시됩니다.
|
|
/// </summary>
|
|
public bool IsSeparator { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 메뉴 아이템의 활성화 상태를 나타냅니다.
|
|
/// `false`일 경우 메뉴 아이템은 비활성화되어 사용자가 선택할 수 없습니다.
|
|
/// 기본값은 `true` (활성화) 입니다.
|
|
/// </summary>
|
|
public bool IsEnabled { get; set; }
|
|
|
|
/// <summary>
|
|
/// `MenuItemData` 클래스의 새 인스턴스를 초기화합니다.
|
|
/// </summary>
|
|
/// <param name="itemId">메뉴 아이템의 고유 ID.</param>
|
|
/// <param name="displayNameKey">표시 이름의 다국어 키.</param>
|
|
/// <param name="command">실행할 명령 (선택 사항).</param>
|
|
/// <param name="subMenuItems">하위 메뉴 아이템 목록 (선택 사항).</param>
|
|
/// <param name="isSeparator">구분선 여부 (선택 사항, 기본값: false).</param>
|
|
/// <param name="isEnabled">활성화 상태 (선택 사항, 기본값: true).</param>
|
|
public MenuItemData(string itemId, string displayNameKey, ICommand command = null, List<MenuItemData> subMenuItems = null, bool isSeparator = false, bool isEnabled = true)
|
|
{
|
|
ItemId = itemId;
|
|
DisplayNameKey = displayNameKey;
|
|
Command = command;
|
|
SubMenuItems = subMenuItems ?? new List<MenuItemData>(); // null인 경우 빈 리스트로 초기화
|
|
IsSeparator = isSeparator;
|
|
IsEnabled = isEnabled;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 현재 메뉴 아이템에 하위 메뉴 아이템을 추가합니다.
|
|
/// 만약 현재 아이템이 구분선(`IsSeparator`가 `true`)이라면, 하위 메뉴를 추가할 수 없습니다.
|
|
/// </summary>
|
|
/// <param name="subItem">추가할 하위 메뉴 아이템.</param>
|
|
public void AddSubMenuItem(MenuItemData subItem)
|
|
{
|
|
if (IsSeparator) return; // 구분선에는 하위 메뉴를 추가할 수 없음
|
|
SubMenuItems.Add(subItem);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 메뉴 UI에서 시각적인 구분선으로 사용될 `MenuItemData` 객체를 생성합니다.
|
|
/// </summary>
|
|
/// <param name="itemId">구분선의 고유 ID. null일 경우 GUID를 사용하여 자동으로 생성됩니다.</param>
|
|
/// <returns>구분선 역할을 하는 새로운 `MenuItemData` 객체입니다.</returns>
|
|
public static MenuItemData CreateSeparator(string itemId = null)
|
|
{
|
|
// 구분선은 특정 동작이나 표시 이름이 필요 없으므로, displayNameKey는 비워두고 command는 null로 설정합니다.
|
|
return new MenuItemData(itemId ?? $"separator_{Guid.NewGuid()}", string.Empty, null, null, true);
|
|
}
|
|
}
|
|
|
|
public class TopMenuModel
|
|
{
|
|
public List<MenuItemData> MenuItems { get; private set; }
|
|
|
|
public TopMenuModel()
|
|
{
|
|
MenuItems = new List<MenuItemData>();
|
|
}
|
|
|
|
// LoadMenuItems 메서드는 Controller에서 직접 데이터를 채움
|
|
//public void LoadMenuItems(string jsonString) { }
|
|
}
|
|
}
|