#nullable enable
using System;
using UnityEngine;
using UnityEngine.UIElements;
using UVC.UI.Commands;
namespace UVC.UIToolkit
{
///
/// 앱 최소화 버튼 컴포넌트.
/// 클릭 시 를 실행합니다.
/// 고정 크기: width=45, height=32.
///
///
/// C# 코드에서 사용:
///
/// var btn = new UTKMinimizeAppButton();
/// container.Add(btn);
///
/// // 비활성화
/// btn.IsEnabled = false;
///
/// UXML에서 사용:
///
///
///
///
///
///
///
[UxmlElement]
public partial class UTKMinimizeAppButton : VisualElement, IDisposable
{
#region Constants
private const string UXML_PATH = "UIToolkit/Button/UTKMinimizeAppButton";
private const string USS_PATH = "UIToolkit/Button/UTKMinimizeAppButtonUss";
private const int ICON_SIZE = 18;
#endregion
#region Fields
private bool _disposed;
private bool _isEnabled = true;
private Label? _materialIconLabel;
private readonly MinimizeApplicationCommand _command = new();
#endregion
#region Properties
/// 활성화 상태. false이면 시각적 비활성화 + 클릭 무시.
[UxmlAttribute("is-enabled")]
public bool IsEnabled
{
get => _isEnabled;
set
{
_isEnabled = value;
SetEnabled(value);
EnableInClassList("utk-minimize-app-btn--disabled", !value);
}
}
#endregion
#region Constructor
public UTKMinimizeAppButton()
{
UTKThemeManager.Instance.ApplyThemeToElement(this);
var uss = Resources.Load(USS_PATH);
if (uss != null)
{
styleSheets.Add(uss);
}
CreateUI();
SetupEvents();
SubscribeToThemeChanges();
}
#endregion
#region Setup
private void CreateUI()
{
AddToClassList("utk-minimize-app-btn");
focusable = true;
pickingMode = PickingMode.Position;
var asset = Resources.Load(UXML_PATH);
if (asset != null)
{
var root = asset.Instantiate();
_materialIconLabel = root.Q