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