UTKPropertyTabListWindow 개발 중. UTKTabView Tab 버튼에 아이콘 설정 할 수 있게 기능 추가해야 함
This commit is contained in:
@@ -19,9 +19,10 @@ namespace UVC.Sample.UIToolkit
|
||||
[Tooltip("시작 시 적용할 테마")]
|
||||
private UTKTheme initialTheme = UTKTheme.Dark;
|
||||
|
||||
private UTKToggle _themeToggle;
|
||||
private UTKToggle? _themeToggle;
|
||||
|
||||
private UTKPropertyListWindow _propertyWindow;
|
||||
private UTKPropertyListWindow? _propertyWindow;
|
||||
private UTKPropertyTabListWindow? _propertyTabWindow;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
@@ -34,43 +35,48 @@ namespace UVC.Sample.UIToolkit
|
||||
}
|
||||
_uiDocument = doc;
|
||||
|
||||
var toggle = _uiDocument.rootVisualElement.Q<UTKToggle>("toggle");
|
||||
if (toggle == null)
|
||||
{
|
||||
Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
|
||||
return;
|
||||
}
|
||||
_themeToggle = toggle;
|
||||
|
||||
var window = _uiDocument.rootVisualElement.Q<UTKPropertyListWindow>("window");
|
||||
if (window == null)
|
||||
{
|
||||
Debug.LogError("UXML에서 UTKPropertyListWindow를 찾을 수 없습니다.");
|
||||
return;
|
||||
}
|
||||
_propertyWindow = window;
|
||||
|
||||
UTKThemeManager.Instance.RegisterRoot(_uiDocument.rootVisualElement);
|
||||
UTKThemeManager.Instance.SetTheme(initialTheme);
|
||||
|
||||
_themeToggle.OnValueChanged += (isOn) =>
|
||||
{
|
||||
UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
|
||||
};
|
||||
|
||||
var root = _uiDocument.rootVisualElement;
|
||||
CreateSamplePropertyWindow(root);
|
||||
|
||||
// PropertyListWindow 샘플
|
||||
var window = root.Q<UTKPropertyListWindow>("window");
|
||||
if (window != null)
|
||||
{
|
||||
_propertyWindow = window;
|
||||
_propertyWindow.style.position = Position.Absolute;
|
||||
_propertyWindow.style.top = 50;
|
||||
_propertyWindow.style.left = 0;
|
||||
_propertyWindow.style.bottom = 0;
|
||||
_propertyWindow.style.width = 300;
|
||||
CreateSamplePropertyWindow();
|
||||
}
|
||||
|
||||
// PropertyTabListWindow 샘플
|
||||
var tabWindow = root.Q<UTKPropertyTabListWindow>("tabWindow");
|
||||
if (tabWindow != null)
|
||||
{
|
||||
_propertyTabWindow = tabWindow;
|
||||
_propertyTabWindow.style.position = Position.Absolute;
|
||||
_propertyTabWindow.style.top = 50;
|
||||
_propertyTabWindow.style.right = 0;
|
||||
_propertyTabWindow.style.bottom = 0;
|
||||
_propertyTabWindow.style.width = 300;
|
||||
CreateSamplePropertyTabWindow();
|
||||
}
|
||||
|
||||
UTKThemeManager.Instance.OnThemeChanged += theme =>
|
||||
{
|
||||
UTKThemeManager.Instance.ApplyThemeToElement(_uiDocument.rootVisualElement);
|
||||
};
|
||||
}
|
||||
|
||||
private void CreateSamplePropertyWindow(VisualElement root)
|
||||
private void CreateSamplePropertyWindow()
|
||||
{
|
||||
if (_propertyWindow == null) return;
|
||||
|
||||
// 세로 높이를 부모에 맞게 꽉 채우기
|
||||
_propertyWindow.style.position = Position.Absolute;
|
||||
_propertyWindow.style.top = 0;
|
||||
_propertyWindow.style.bottom = 0;
|
||||
_propertyWindow.style.right = 0;
|
||||
_propertyWindow.style.width = 300;
|
||||
_propertyWindow.ShowCloseButton = true;
|
||||
_propertyWindow.OnCloseClicked += () =>
|
||||
{
|
||||
Debug.Log("Property Window Close clicked");
|
||||
@@ -105,8 +111,111 @@ namespace UVC.Sample.UIToolkit
|
||||
// 샘플 데이터 생성
|
||||
var entries = CreateSampleEntries();
|
||||
_propertyWindow.LoadMixedProperties(entries);
|
||||
}
|
||||
|
||||
root.Add(_propertyWindow);
|
||||
/// <summary>
|
||||
/// UTKPropertyTabListWindow 샘플 데이터 설정
|
||||
/// 탭별로 서로 다른 데이터 타입(Flat/Grouped/Mixed)을 보여줍니다.
|
||||
/// </summary>
|
||||
private void CreateSamplePropertyTabWindow()
|
||||
{
|
||||
if (_propertyTabWindow == null) return;
|
||||
|
||||
_propertyTabWindow.ShowCloseButton = true;
|
||||
_propertyTabWindow.OnCloseClicked += () =>
|
||||
{
|
||||
Debug.Log("Tab Property Window Close clicked");
|
||||
_propertyTabWindow?.Hide();
|
||||
};
|
||||
|
||||
_propertyTabWindow.OnTabChanged += (index, data) =>
|
||||
{
|
||||
Debug.Log($"Tab Changed: index={index}, name={data?.Name ?? "All"}");
|
||||
};
|
||||
|
||||
_propertyTabWindow.OnPropertyValueChanged += args =>
|
||||
{
|
||||
Debug.Log($"[Tab] Property Changed: {args.PropertyId} {args.PropertyName} ({args.PropertyType}) = {args.NewValue}");
|
||||
};
|
||||
|
||||
// === 탭 1: 기본 속성 (Grouped) ===
|
||||
var basicTab = new TabPropertyData("기본", UTKMaterialIcons.Settings);
|
||||
var basicGroups = new List<IUTKPropertyGroup>();
|
||||
|
||||
var infoGroup = new UTKPropertyGroup("tab_info", "기본 정보");
|
||||
infoGroup.AddItem(new UTKStringPropertyItem("tab_name", "이름", "오브젝트 A"));
|
||||
infoGroup.AddItem(new UTKBoolPropertyItem("tab_active", "활성화", true));
|
||||
infoGroup.AddItem(new UTKEnumPropertyItem("tab_layer", "레이어", SampleLayer.Default));
|
||||
infoGroup.AddItem(new UTKDropdownPropertyItem("tab_tag", "태그",
|
||||
new List<string> { "Untagged", "Player", "Enemy" }, "Player"));
|
||||
basicGroups.Add(infoGroup);
|
||||
|
||||
var transformGroup = new UTKPropertyGroup("tab_transform", "Transform");
|
||||
transformGroup.AddItem(new UTKVector3PropertyItem("tab_pos", "Position", new Vector3(0, 1, 0)));
|
||||
transformGroup.AddItem(new UTKVector3PropertyItem("tab_rot", "Rotation", Vector3.zero));
|
||||
transformGroup.AddItem(new UTKVector3PropertyItem("tab_scale", "Scale", Vector3.one));
|
||||
basicGroups.Add(transformGroup);
|
||||
|
||||
basicTab.SetGroupedData(basicGroups);
|
||||
|
||||
// === 탭 2: 외관 (Grouped) ===
|
||||
var appearanceTab = new TabPropertyData("외관", UTKMaterialIcons.Palette);
|
||||
var appearanceGroups = new List<IUTKPropertyGroup>();
|
||||
|
||||
var colorGroup = new UTKPropertyGroup("tab_colors", "색상");
|
||||
colorGroup.AddItem(new UTKColorPropertyItem("tab_main_color", "메인 색상", Color.blue));
|
||||
colorGroup.AddItem(new UTKColorPropertyItem("tab_emission", "발광 색상", Color.yellow, true));
|
||||
colorGroup.AddItem(new UTKFloatPropertyItem("tab_alpha", "투명도", 1f, 0f, 1f, useSlider: true));
|
||||
appearanceGroups.Add(colorGroup);
|
||||
|
||||
var materialGroup = new UTKPropertyGroup("tab_material", "머티리얼");
|
||||
materialGroup.AddItem(new UTKDropdownPropertyItem("tab_shader", "셰이더",
|
||||
new List<string> { "Standard", "Unlit", "URP/Lit", "URP/Simple Lit" }, "URP/Lit"));
|
||||
materialGroup.AddItem(new UTKFloatPropertyItem("tab_metallic", "메탈릭", 0.5f, 0f, 1f, useSlider: true));
|
||||
materialGroup.AddItem(new UTKFloatPropertyItem("tab_smoothness", "부드러움", 0.5f, 0f, 1f, useSlider: true));
|
||||
appearanceGroups.Add(materialGroup);
|
||||
|
||||
appearanceTab.SetGroupedData(appearanceGroups);
|
||||
|
||||
// === 탭 3: 고급 설정 (Flat) ===
|
||||
var advancedTab = new TabPropertyData("고급", UTKMaterialIcons.Tune);
|
||||
var advancedItems = new List<IUTKPropertyItem>
|
||||
{
|
||||
new UTKBoolPropertyItem("tab_debug", "디버그 모드", false),
|
||||
new UTKIntPropertyItem("tab_priority", "우선순위", 0, -10, 10, useStepper: true),
|
||||
new UTKFloatPropertyItem("tab_lod_bias", "LOD Bias", 1.0f, 0.1f, 5.0f, useSlider: true, useStepper: true),
|
||||
new UTKMultiSelectDropdownPropertyItem("tab_flags", "플래그",
|
||||
new List<string> { "Static", "Batching", "Navigation", "Occluder", "Occludee" },
|
||||
new List<string> { "Static", "Batching" }),
|
||||
new UTKRadioPropertyItem("tab_quality", "품질",
|
||||
new List<string> { "Low", "Medium", "High", "Ultra" }, 2),
|
||||
};
|
||||
advancedTab.SetFlatData(advancedItems);
|
||||
|
||||
// === 탭 4: 일정 (Mixed) ===
|
||||
var scheduleTab = new TabPropertyData("일정", UTKMaterialIcons.CalendarMonth);
|
||||
var scheduleEntries = new List<IUTKPropertyEntry>();
|
||||
|
||||
scheduleEntries.Add(new UTKDatePropertyItem("tab_created", "생성일", DateTime.Today.AddDays(-30)));
|
||||
scheduleEntries.Add(new UTKDateTimePropertyItem("tab_modified", "수정일", DateTime.Now));
|
||||
|
||||
var periodGroup = new UTKPropertyGroup("tab_period", "유효 기간");
|
||||
periodGroup.AddItem(new UTKDateRangePropertyItem("tab_valid", "유효 기간",
|
||||
DateTime.Today, DateTime.Today.AddMonths(1)));
|
||||
periodGroup.AddItem(new UTKDateTimeRangePropertyItem("tab_session", "세션 기간",
|
||||
DateTime.Now, DateTime.Now.AddHours(2)));
|
||||
scheduleEntries.Add(periodGroup);
|
||||
|
||||
scheduleTab.SetMixedData(scheduleEntries);
|
||||
|
||||
// 탭 데이터 설정
|
||||
_propertyTabWindow.SetTabData(new List<TabPropertyData>
|
||||
{
|
||||
basicTab,
|
||||
appearanceTab,
|
||||
advancedTab,
|
||||
scheduleTab
|
||||
});
|
||||
}
|
||||
|
||||
private List<IUTKPropertyEntry> CreateSampleEntries()
|
||||
@@ -621,6 +730,8 @@ namespace UVC.Sample.UIToolkit
|
||||
{
|
||||
_propertyWindow?.Dispose();
|
||||
_propertyWindow = null;
|
||||
_propertyTabWindow?.Dispose();
|
||||
_propertyTabWindow = null;
|
||||
}
|
||||
|
||||
// 샘플 열거형
|
||||
|
||||
Reference in New Issue
Block a user