#nullable enable using System; using UnityEngine; using UnityEngine.UIElements; namespace UVC.UIToolkit { /// /// 도움말 박스 컴포넌트. /// Unity HelpBox를 래핑하여 커스텀 스타일을 적용합니다. /// [UxmlElement] public partial class UTKHelpBox : HelpBox, IDisposable { #region Constants private const string USS_PATH = "UIToolkit/Common/UTKHelpBox"; #endregion #region Fields private bool _disposed; #endregion #region Properties /// 메시지 텍스트 public string Message { get => text; set => text = value; } /// 메시지 타입 public new HelpBoxMessageType messageType { get => base.messageType; set { base.messageType = value; UpdateMessageTypeClass(); } } #endregion #region Constructor public UTKHelpBox() : base() { UTKThemeManager.Instance.ApplyThemeToElement(this); var uss = Resources.Load(USS_PATH); if (uss != null) { styleSheets.Add(uss); } SetupStyles(); SubscribeToThemeChanges(); } public UTKHelpBox(string message, HelpBoxMessageType type = HelpBoxMessageType.Info) : this() { text = message; messageType = type; } #endregion #region Setup private void SetupStyles() { AddToClassList("utk-helpbox"); UpdateMessageTypeClass(); } private void UpdateMessageTypeClass() { RemoveFromClassList("utk-helpbox--info"); RemoveFromClassList("utk-helpbox--warning"); RemoveFromClassList("utk-helpbox--error"); RemoveFromClassList("utk-helpbox--none"); var typeClass = messageType switch { HelpBoxMessageType.Warning => "utk-helpbox--warning", HelpBoxMessageType.Error => "utk-helpbox--error", HelpBoxMessageType.None => "utk-helpbox--none", _ => "utk-helpbox--info" }; AddToClassList(typeClass); } private void SubscribeToThemeChanges() { UTKThemeManager.Instance.OnThemeChanged += OnThemeChanged; RegisterCallback(_ => { 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 } }