#nullable enable
using UnityEngine;
using UnityEngine.UIElements;
namespace UVC.UIToolkit
{
///
/// UIToolkit 기반 이미지 메뉴 아이템 UI 컴포넌트입니다 (Image 또는 Material Icon 기반).
/// 메뉴 아이템의 시각적 표현과 클릭 이벤트를 처리합니다.
///
///
///
/// // 이미지 메뉴 아이템 생성
/// var menuItem = new UTKTopMenuImageItem();
/// menuItem.SetData(imageItemData);
///
/// // 클릭 이벤트 구독
/// menuItem.OnClicked += (data) => Debug.Log($"Clicked: {data.ItemId}");
///
/// // 사용 후 정리
/// menuItem.Dispose();
///
///
[UxmlElement]
public partial class UTKTopMenuImageItem : UTKMenuItemBase
{
#region Constants
private const string UXML_PATH = "UIToolkit/Menu/UTKMenuImageItem";
private const string USS_PATH = "UIToolkit/Menu/UTKMenuImageItemUss";
private const string MATERIAL_ICONS_FONT_PATH = "Fonts/MaterialIcons-Regular";
#endregion
#region Fields
private UTKLabel? _iconLabel; // Material Icon용
private Image? _image; // 일반 이미지용
private bool _useMaterialIcon;
#endregion
#region Constructor
///
/// UTKTopMenuImageItem의 새 인스턴스를 초기화합니다.
///
public UTKTopMenuImageItem() : base()
{
_ussPath = USS_PATH;
}
#endregion
#region Setup
///
/// UI를 생성합니다.
///
protected override void CreateUI()
{
AddToClassList("utk-menu-item");
AddToClassList("utk-menu-item--image");
var asset = Resources.Load(UXML_PATH);
if (asset != null)
{
CreateUIFromUxml(asset);
}
else
{
CreateUIFallback();
}
}
///
/// UXML에서 UI를 생성합니다.
///
/// UXML 에셋
private void CreateUIFromUxml(VisualTreeAsset asset)
{
var root = asset.Instantiate();
// USS를 root에 추가
var uss = Resources.Load(USS_PATH);
if (uss != null)
{
root.styleSheets.Add(uss);
}
// UI 요소 참조 가져오기 (쿼리 캐싱)
_button = root.Q