125 lines
3.2 KiB
C#
125 lines
3.2 KiB
C#
#nullable enable
|
|
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace UVC.UIToolkit
|
|
{
|
|
/// <summary>
|
|
/// 탭 컴포넌트.
|
|
/// Unity Tab을 래핑하여 커스텀 스타일을 적용합니다.
|
|
/// </summary>
|
|
/// <example>
|
|
/// <para><b>C# 코드에서 사용:</b></para>
|
|
/// <code>
|
|
/// // UTKTabView와 함께 사용
|
|
/// var tabView = new UTKTabView();
|
|
///
|
|
/// var tab1 = new UTKTab();
|
|
/// tab1.Text = "일반";
|
|
/// tab1.Add(new Label("일반 탭 내용"));
|
|
/// tabView.Add(tab1);
|
|
///
|
|
/// var tab2 = new UTKTab();
|
|
/// tab2.Text = "고급";
|
|
/// tab2.IsEnabled = false; // 비활성화
|
|
/// tabView.Add(tab2);
|
|
/// </code>
|
|
/// <para><b>UXML에서 사용:</b></para>
|
|
/// <code>
|
|
/// <ui:UXML xmlns:utk="UVC.UIToolkit">
|
|
/// <utk:UTKTabView>
|
|
/// <utk:UTKTab label="일반">
|
|
/// <ui:Label text="일반 내용" />
|
|
/// </utk:UTKTab>
|
|
/// <utk:UTKTab label="고급">
|
|
/// <ui:Label text="고급 내용" />
|
|
/// </utk:UTKTab>
|
|
/// </utk:UTKTabView>
|
|
/// </ui:UXML>
|
|
/// </code>
|
|
/// </example>
|
|
[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
|
|
}
|
|
}
|