95 lines
2.3 KiB
C#
95 lines
2.3 KiB
C#
#nullable enable
|
|
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace UVC.UIToolkit
|
|
{
|
|
/// <summary>
|
|
/// 탭 컴포넌트.
|
|
/// Unity Tab을 래핑하여 커스텀 스타일을 적용합니다.
|
|
/// </summary>
|
|
[UxmlElement]
|
|
public partial class UTKTab : Tab, IDisposable
|
|
{
|
|
#region Fields
|
|
private bool _disposed;
|
|
private bool _isEnabled = true;
|
|
#endregion
|
|
|
|
#region Properties
|
|
/// <summary>탭 텍스트</summary>
|
|
public string Text
|
|
{
|
|
get => label;
|
|
set => label = value;
|
|
}
|
|
|
|
/// <summary>선택 상태</summary>
|
|
public bool IsSelected
|
|
{
|
|
get => ClassListContains("utk-tab--selected");
|
|
set => EnableInClassList("utk-tab--selected", value);
|
|
}
|
|
|
|
/// <summary>활성화 상태</summary>
|
|
[UxmlAttribute]
|
|
public bool IsEnabled
|
|
{
|
|
get => _isEnabled;
|
|
set
|
|
{
|
|
_isEnabled = value;
|
|
SetEnabled(value);
|
|
EnableInClassList("utk-tab--disabled", !value);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Constructor
|
|
public UTKTab() : base()
|
|
{
|
|
UTKThemeManager.Instance.ApplyThemeToElement(this);
|
|
SetupStyles();
|
|
SubscribeToThemeChanges();
|
|
}
|
|
|
|
public UTKTab(string text) : this()
|
|
{
|
|
label = text;
|
|
}
|
|
#endregion
|
|
|
|
#region Setup
|
|
private void SetupStyles()
|
|
{
|
|
AddToClassList("utk-tab");
|
|
}
|
|
|
|
private void SubscribeToThemeChanges()
|
|
{
|
|
UTKThemeManager.Instance.OnThemeChanged += OnThemeChanged;
|
|
RegisterCallback<DetachFromPanelEvent>(_ =>
|
|
{
|
|
UTKThemeManager.Instance.OnThemeChanged -= OnThemeChanged;
|
|
});
|
|
}
|
|
|
|
private void OnThemeChanged(UTKTheme theme)
|
|
{
|
|
UTKThemeManager.Instance.ApplyThemeToElement(this);
|
|
}
|
|
#endregion
|
|
|
|
#region IDisposable
|
|
public void Dispose()
|
|
{
|
|
if (_disposed) return;
|
|
_disposed = true;
|
|
|
|
UTKThemeManager.Instance.OnThemeChanged -= OnThemeChanged;
|
|
}
|
|
#endregion
|
|
}
|
|
}
|