UTKProperyWIndow 수정 중
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
@@ -14,15 +15,16 @@ namespace UVC.UIToolkit
|
||||
public partial class UTKPropertyWindow : VisualElement, IDisposable
|
||||
{
|
||||
#region Constants
|
||||
private const string USS_PATH = "UIToolkit/Property/UTKPropertyWindow";
|
||||
private const string UXML_PATH = "UIToolkit/Property/UTKPropertyWindow";
|
||||
private const string USS_PATH = "UIToolkit/Property/UTKPropertyWindowUss";
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
private bool _disposed;
|
||||
private UTKPropertyList? _propertyList;
|
||||
private VisualElement? _header;
|
||||
private Label? _titleLabel;
|
||||
private Button? _closeButton;
|
||||
private UTKLabel? _titleLabel;
|
||||
private UTKButton? _closeButton;
|
||||
private string _title = "Properties";
|
||||
private bool _showCloseButton = true;
|
||||
private bool _isDragging;
|
||||
@@ -40,7 +42,7 @@ namespace UVC.UIToolkit
|
||||
_title = value;
|
||||
if (_titleLabel != null)
|
||||
{
|
||||
_titleLabel.text = value;
|
||||
_titleLabel.Text = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -93,6 +95,7 @@ namespace UVC.UIToolkit
|
||||
public UTKPropertyWindow()
|
||||
{
|
||||
UTKThemeManager.Instance.ApplyThemeToElement(this);
|
||||
SubscribeToThemeChanges();
|
||||
|
||||
var styleSheet = Resources.Load<StyleSheet>(USS_PATH);
|
||||
if (styleSheet != null)
|
||||
@@ -114,29 +117,99 @@ namespace UVC.UIToolkit
|
||||
{
|
||||
AddToClassList("utk-property-window");
|
||||
|
||||
var asset = Resources.Load<VisualTreeAsset>(UXML_PATH);
|
||||
if (asset != null)
|
||||
{
|
||||
CreateUIFromUxml(asset);
|
||||
}
|
||||
else
|
||||
{
|
||||
CreateUIFallback();
|
||||
}
|
||||
|
||||
// 드래그 이벤트
|
||||
if (_header != null)
|
||||
{
|
||||
_header.RegisterCallback<PointerDownEvent>(OnHeaderPointerDown);
|
||||
_header.RegisterCallback<PointerMoveEvent>(OnHeaderPointerMove);
|
||||
_header.RegisterCallback<PointerUpEvent>(OnHeaderPointerUp);
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateUIFromUxml(VisualTreeAsset asset)
|
||||
{
|
||||
var root = asset.Instantiate();
|
||||
var windowRoot = root.Q<VisualElement>("window-root");
|
||||
|
||||
if (windowRoot != null)
|
||||
{
|
||||
// windowRoot의 자식들을 현재 요소로 이동
|
||||
foreach (var child in windowRoot.Children().ToArray())
|
||||
{
|
||||
Add(child);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// window-root가 없으면 전체 추가
|
||||
Add(root);
|
||||
}
|
||||
|
||||
// 요소 참조 가져오기
|
||||
_header = this.Q<VisualElement>("header");
|
||||
_titleLabel = this.Q<UTKLabel>("title");
|
||||
_closeButton = this.Q<UTKButton>("close-btn");
|
||||
_propertyList = this.Q<UTKPropertyList>("content");
|
||||
|
||||
// 타이틀 설정
|
||||
if (_titleLabel != null)
|
||||
{
|
||||
_titleLabel.Text = _title;
|
||||
_titleLabel.IsBold = true;
|
||||
_titleLabel.Size = UTKLabel.LabelSize.Label1;
|
||||
}
|
||||
|
||||
// 닫기 버튼 설정
|
||||
if (_closeButton != null)
|
||||
{
|
||||
_closeButton.SetMaterialIcon(UTKMaterialIcons.Close, 14);
|
||||
_closeButton.IconOnly = true;
|
||||
_closeButton.OnClicked += () => OnCloseClicked?.Invoke();
|
||||
_closeButton.style.display = _showCloseButton ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
}
|
||||
|
||||
// PropertyList가 없으면 생성
|
||||
if (_propertyList == null)
|
||||
{
|
||||
_propertyList = new UTKPropertyList();
|
||||
_propertyList.name = "content";
|
||||
_propertyList.AddToClassList("utk-property-window__content");
|
||||
Add(_propertyList);
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateUIFallback()
|
||||
{
|
||||
// 헤더
|
||||
_header = new VisualElement();
|
||||
_header.name = "header";
|
||||
_header.AddToClassList("utk-property-window__header");
|
||||
|
||||
_titleLabel = new Label(_title);
|
||||
_titleLabel = new UTKLabel(_title, UTKLabel.LabelSize.Label1);
|
||||
_titleLabel.name = "title";
|
||||
_titleLabel.IsBold = true;
|
||||
_titleLabel.AddToClassList("utk-property-window__title");
|
||||
_header.Add(_titleLabel);
|
||||
|
||||
_closeButton = new Button { text = "✕" };
|
||||
_closeButton = new UTKButton("", UTKMaterialIcons.Close, UTKButton.ButtonVariant.Text, 14);
|
||||
_closeButton.name = "close-btn";
|
||||
_closeButton.IconOnly = true;
|
||||
_closeButton.AddToClassList("utk-property-window__close-btn");
|
||||
_closeButton.clicked += () => OnCloseClicked?.Invoke();
|
||||
_closeButton.OnClicked += () => OnCloseClicked?.Invoke();
|
||||
_header.Add(_closeButton);
|
||||
|
||||
Add(_header);
|
||||
|
||||
// 드래그 이벤트
|
||||
_header.RegisterCallback<PointerDownEvent>(OnHeaderPointerDown);
|
||||
_header.RegisterCallback<PointerMoveEvent>(OnHeaderPointerMove);
|
||||
_header.RegisterCallback<PointerUpEvent>(OnHeaderPointerUp);
|
||||
|
||||
// PropertyList
|
||||
_propertyList = new UTKPropertyList();
|
||||
_propertyList.AddToClassList("utk-property-window__content");
|
||||
@@ -242,12 +315,33 @@ namespace UVC.UIToolkit
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 테마 (Theme)
|
||||
|
||||
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;
|
||||
|
||||
// 드래그 이벤트 해제
|
||||
if (_header != null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user