Files
EnglewoodLAB/Assets/Scripts/UVC/UIToolkit/List/UTKTreeListItemData.cs

134 lines
5.1 KiB
C#

#nullable enable
using System;
using System.Collections.Generic;
namespace UVC.UIToolkit
{
/// <summary>
/// 트리 구조 리스트의 개별 항목 데이터를 나타내는 클래스입니다.
///
/// <para><b>개요:</b></para>
/// <para>
/// UTKTreeListItemData는 계층적 트리 구조에서 각 노드(항목)를 표현합니다.
/// 부모-자식 관계를 통해 중첩된 트리 구조를 구성할 수 있으며,
/// UTKTreeListWindow(UI)에서 사용됩니다.
/// </para>
///
/// <para><b>주요 용도:</b></para>
/// <list type="bullet">
/// <item>3D glTF 모델의 계층 구조를 UI 트리로 표현</item>
/// <item>트리 리스트에서 항목 선택/확장/가시성 상태 관리</item>
/// <item>모델 뷰어와 트리 리스트 간의 데이터 동기화</item>
/// </list>
///
/// <para><b>사용 예시:</b></para>
/// <code>
/// // 루트 항목 생성
/// var root = new UTKTreeListItemData { id = 1, name = "루트" };
///
/// // 자식 항목 추가
/// var child1 = new UTKTreeListItemData { id = 2, name = "자식1" };
/// var child2 = new UTKTreeListItemData { id = 3, name = "자식2" };
/// root.Add(child1);
/// root.Add(child2);
///
/// // 손자 항목 추가
/// var grandChild = new UTKTreeListItemData { id = 4, name = "손자" };
/// child1.Add(grandChild);
/// </code>
/// </summary>
public class UTKTreeListItemData: IDisposable
{
/// <summary>
/// 항목의 고유 식별자입니다.
/// TreeView에서 항목을 구분하고 선택하는 데 사용됩니다.
/// 일반적으로 TreeList.SetData() 호출 시 자동으로 할당됩니다.
/// </summary>
public int id = 0;
/// <summary>
/// 항목의 표시 이름입니다.
/// UI의 TreeView에서 사용자에게 보여지는 텍스트입니다.
/// glTF 모델 로드 시 GameObject 이름이 자동으로 설정됩니다.
/// </summary>
public string name = string.Empty;
/// <summary>
/// 추가 옵션 또는 설명 텍스트입니다.
/// 검색 필터링 시 name과 함께 검색 대상이 됩니다.
/// </summary>
public string option = string.Empty;
/// <summary>
/// 트리뷰에서 해당 항목이 펼쳐져 있는지 여부입니다.
/// true: 자식 항목들이 표시됨 / false: 자식 항목들이 숨겨짐
/// </summary>
public bool isExpanded = false;
/// <summary>
/// 해당 항목이 현재 선택되어 있는지 여부입니다.
/// 선택 상태가 변경되면 TreeList.OnSelectionChanged 이벤트가 발생합니다.
/// </summary>
public bool isSelected = false;
/// <summary>
/// 부모 항목에 대한 참조입니다.
/// 루트 항목의 경우 null입니다.
/// Add() 메서드로 자식을 추가하면 자동으로 설정됩니다.
/// </summary>
public UTKTreeListItemData? parent;
/// <summary>
/// 자식 항목들의 리스트입니다.
/// 재귀적 트리 구조를 형성합니다.
/// Add() 메서드를 통해 자식을 추가할 수 있습니다.
/// </summary>
public List<UTKTreeListItemData> children = new List<UTKTreeListItemData>();
/// <summary>
/// 해당 항목(및 연결된 3D 오브젝트)의 가시성 상태입니다.
/// UI의 눈 아이콘 버튼으로 토글되며,
/// 변경 시 UTKTreeListWindow.OnVisibilityChanged 이벤트를 통해
/// 3D 모델의 GameObject.SetActive()가 호출됩니다.
/// </summary>
public bool IsVisible = true;
/// <summary>
/// 외부 시스템(예: 간트 차트)과의 연동을 위한 외부 키입니다.
/// 검색 필터링 시 검색 대상에 포함됩니다.
/// 모델과 차트 간의 동기화에 사용될 수 있습니다.
/// </summary>
public string ExternalKey = string.Empty;
/// <summary>
/// 임의의 사용자 데이터를 저장하기 위한 태그입니다.
/// 예: Transform, GameObject 등 연관된 오브젝트 참조에 사용됩니다.
/// </summary>
public object? Tag = null;
/// <summary>
/// 자식 항목을 추가합니다.
/// 추가되는 자식의 parent 속성이 자동으로 현재 항목으로 설정됩니다.
/// </summary>
/// <param name="child">추가할 자식 항목</param>
/// <example>
/// <code>
/// var parent = new UTKTreeListItemData { name = "부모" };
/// var child = new UTKTreeListItemData { name = "자식" };
/// parent.Add(child);
/// // child.parent == parent (자동 설정됨)
/// </code>
/// </example>
public void Add(UTKTreeListItemData child)
{
child.parent = this;
children.Add(child);
}
public void Dispose()
{
children.Clear();
parent = null;
}
}
}