기본 Styleguide 완료

This commit is contained in:
logonkhi
2026-01-21 20:43:54 +09:00
parent fd8f8c6de0
commit e00953de52
122 changed files with 3310 additions and 709 deletions

View File

@@ -476,7 +476,7 @@ namespace UVC.UIToolkit
}
/// <summary>
/// [레거시] 아코디언 전체 데이터 - List&lt;UTKAccordionItemData&gt; 사용 권장
/// [레거시] 아코디언 전체 데이터 - List<UTKAccordionItemData> 사용 권장
/// </summary>
[Serializable]
public sealed class UTKAccordionData : IDisposable

View File

@@ -30,13 +30,13 @@ namespace UVC.UIToolkit
///
/// <para><b>UXML에서 사용:</b></para>
/// <code>
/// &lt;uvc:UTKImageList name="image-list" /&gt;
/// <uvc:UTKImageList name="image-list" />
/// </code>
///
/// <para><b>코드에서 사용:</b></para>
/// <code>
/// var list = root.Q&lt;UTKImageList&gt;();
/// list.OnItemClick += (item) =&gt; Debug.Log($"클릭: {item.itemName}");
/// var list = root.Q<UTKImageList>();
/// list.OnItemClick += (item) => Debug.Log($"클릭: {item.itemName}");
/// list.SetData(imageItems);
/// </code>
///

View File

@@ -9,32 +9,105 @@ namespace UVC.UIToolkit
/// <summary>
/// 리스트 뷰 컴포넌트.
/// Unity ListView를 래핑하여 커스텀 스타일을 적용합니다.
/// 가상화(Virtualization)를 지원하여 대량의 데이터도 효율적으로 표시합니다.
/// </summary>
/// <remarks>
/// <para><b>ListView(리스트 뷰)란?</b></para>
/// <para>
/// ListView는 여러 항목을 세로로 나열하여 표시하는 UI 컴포넌트입니다.
/// 파일 목록, 연락처, 설정 항목 등 반복되는 데이터를 표시할 때 사용합니다.
/// </para>
///
/// <para><b>가상화(Virtualization)란?</b></para>
/// <para>
/// 수천 개의 항목이 있어도 화면에 보이는 항목만 실제로 렌더링하는 기술입니다.
/// 스크롤 시 보이지 않는 항목은 메모리에서 재활용되어 성능이 유지됩니다.
/// 이를 위해 <c>makeItem</c>(요소 생성)과 <c>bindItem</c>(데이터 바인딩)을 분리합니다.
/// </para>
///
/// <para><b>필수 설정:</b></para>
/// <list type="number">
/// <item><description><c>itemsSource</c> - 표시할 데이터 컬렉션 (IList)</description></item>
/// <item><description><c>makeItem</c> - 항목 VisualElement 생성 함수</description></item>
/// <item><description><c>bindItem</c> - 데이터를 요소에 바인딩하는 함수</description></item>
/// </list>
///
/// <para><b>주요 속성:</b></para>
/// <list type="bullet">
/// <item><description><c>fixedItemHeight</c> - 항목 높이 (고정 시 성능 향상)</description></item>
/// <item><description><c>selectionType</c> - 선택 모드 (None, Single, Multiple)</description></item>
/// <item><description><c>selectedIndex</c> - 현재 선택된 인덱스</description></item>
/// <item><description><c>showBorder</c> - 테두리 표시 여부</description></item>
/// </list>
///
/// <para><b>주요 이벤트:</b></para>
/// <list type="bullet">
/// <item><description><c>OnItemSelected</c> - 항목 선택 시 (인덱스 전달)</description></item>
/// <item><description><c>OnItemDoubleClicked</c> - 항목 더블클릭 시 (인덱스 전달)</description></item>
/// </list>
///
/// <para><b>실제 활용 예시:</b></para>
/// <list type="bullet">
/// <item><description>파일 탐색기 - 파일/폴더 목록</description></item>
/// <item><description>설정 화면 - 설정 항목 목록</description></item>
/// <item><description>채팅 앱 - 대화 목록</description></item>
/// <item><description>게임 인벤토리 - 아이템 목록</description></item>
/// <item><description>데이터 테이블 - 행 단위 데이터</description></item>
/// </list>
/// </remarks>
/// <example>
/// <para><b>C# 코드에서 사용:</b></para>
/// <code>
/// // 리스트 뷰 생성
/// var listView = new UTKListView();
///
/// listView.fixedItemHeight = 30; // 항목 높이 고정 (성능 향상)
///
/// // 데이터 소스 설정
/// var items = new List<string> { "항목 1", "항목 2", "항목 3" };
/// listView.itemsSource = items;
///
/// // 아이템 렌더링
///
/// // 항목 생성 함수 (가상화를 위해 재사용됨)
/// listView.makeItem = () => new Label();
///
/// // 데이터 바인딩 함수 (스크롤 시 호출됨)
/// listView.bindItem = (element, index) => {
/// (element as Label).text = items[index];
/// };
///
///
/// // 선택 이벤트
/// listView.OnItemSelected += (index) => Debug.Log($"선택: {items[index]}");
/// listView.OnItemDoubleClicked += (index) => Debug.Log($"더블클릭: {items[index]}");
/// listView.OnItemSelected += (index) => {
/// Debug.Log($"선택: {items[index]}");
/// };
///
/// // 더블클릭 이벤트 (파일 열기 등)
/// listView.OnItemDoubleClicked += (index) => {
/// OpenFile(items[index]);
/// };
///
/// // 복잡한 항목 구조
/// listView.makeItem = () => {
/// var container = new VisualElement();
/// container.Add(new Label { name = "title" });
/// container.Add(new Label { name = "subtitle" });
/// return container;
/// };
///
/// listView.bindItem = (element, index) => {
/// var data = myDataList[index];
/// element.Q<Label>("title").text = data.Title;
/// element.Q<Label>("subtitle").text = data.Subtitle;
/// };
/// </code>
/// <para><b>UXML에서 사용:</b></para>
/// <code>
/// <ui:UXML xmlns:utk="UVC.UIToolkit">
/// <utk:UTKListView fixed-item-height="30" selection-type="Single" />
/// </ui:UXML>
/// <!-- 기본 리스트 뷰 -->
/// <utk:UTKListView fixed-item-height="30" selection-type="Single" />
///
/// <!-- 다중 선택 가능 -->
/// <utk:UTKListView fixed-item-height="40" selection-type="Multiple" />
///
/// <!-- 테두리 표시 -->
/// <utk:UTKListView show-border="true" />
/// </code>
/// </example>
[UxmlElement]

View File

@@ -9,38 +9,115 @@ namespace UVC.UIToolkit
/// <summary>
/// 트리 뷰 컴포넌트.
/// Unity TreeView를 래핑하여 커스텀 스타일을 적용합니다.
/// 계층적(부모-자식) 구조의 데이터를 접기/펼치기로 표시합니다.
/// </summary>
/// <remarks>
/// <para><b>TreeView(트리 뷰)란?</b></para>
/// <para>
/// TreeView는 계층 구조(부모-자식 관계)를 가진 데이터를 표시하는 UI 컴포넌트입니다.
/// 폴더 구조, 조직도, 메뉴 계층, 게임 오브젝트 계층 등을 표현할 때 사용합니다.
/// 각 노드는 펼치거나 접을 수 있어 복잡한 구조를 효율적으로 탐색할 수 있습니다.
/// </para>
///
/// <para><b>ListView vs TreeView:</b></para>
/// <list type="bullet">
/// <item><description><c>ListView</c> - 단순 목록 (1차원 데이터)</description></item>
/// <item><description><c>TreeView</c> - 계층 구조 (부모-자식, 중첩 가능)</description></item>
/// </list>
///
/// <para><b>TreeViewItemData 구조:</b></para>
/// <code>
/// TreeViewItemData<T>(int id, T data, List<TreeViewItemData<T>> children)
/// - id: 고유 식별자 (필수, 중복 불가)
/// - data: 노드에 저장할 데이터
/// - children: 자식 노드 목록 (없으면 리프 노드)
/// </code>
///
/// <para><b>필수 설정:</b></para>
/// <list type="number">
/// <item><description><c>SetRootItems()</c> - 루트 노드 설정</description></item>
/// <item><description><c>makeItem</c> - 항목 VisualElement 생성 함수</description></item>
/// <item><description><c>bindItem</c> - 데이터를 요소에 바인딩하는 함수</description></item>
/// </list>
///
/// <para><b>주요 메서드:</b></para>
/// <list type="bullet">
/// <item><description><c>SetRootItems()</c> - 전체 트리 데이터 설정</description></item>
/// <item><description><c>GetItemDataForIndex<T>(index)</c> - 인덱스로 데이터 조회</description></item>
/// <item><description><c>ExpandItem(id)</c> - 특정 노드 펼치기</description></item>
/// <item><description><c>CollapseItem(id)</c> - 특정 노드 접기</description></item>
/// <item><description><c>ExpandAll()</c> - 모든 노드 펼치기</description></item>
/// <item><description><c>CollapseAll()</c> - 모든 노드 접기</description></item>
/// </list>
///
/// <para><b>실제 활용 예시:</b></para>
/// <list type="bullet">
/// <item><description>파일 탐색기 - 폴더/파일 계층 구조</description></item>
/// <item><description>Unity Hierarchy - 게임 오브젝트 계층</description></item>
/// <item><description>조직도 - 부서/팀/직원 구조</description></item>
/// <item><description>메뉴 시스템 - 다단계 메뉴</description></item>
/// <item><description>카테고리 - 대분류/중분류/소분류</description></item>
/// </list>
/// </remarks>
/// <example>
/// <para><b>C# 코드에서 사용:</b></para>
/// <code>
/// // 트리 뷰 생성
/// var treeView = new UTKTreeView();
///
/// // 데이터 구조 설정
/// var rootItems = new List<TreeViewItemData<string>> {
/// new TreeViewItemData<string>(0, "루트 1", new List<TreeViewItemData<string>> {
/// new TreeViewItemData<string>(1, "자식 1-1"),
/// new TreeViewItemData<string>(2, "자식 1-2")
/// treeView.fixedItemHeight = 24;
///
/// // 계층 데이터 구성
/// var rootItems = new List<TreeViewItemData<string>>
/// {
/// new TreeViewItemData<string>(0, "프로젝트", new List<TreeViewItemData<string>>
/// {
/// new TreeViewItemData<string>(1, "Assets", new List<TreeViewItemData<string>>
/// {
/// new TreeViewItemData<string>(2, "Scripts"),
/// new TreeViewItemData<string>(3, "Prefabs"),
/// new TreeViewItemData<string>(4, "Materials")
/// }),
/// new TreeViewItemData<string>(5, "Packages")
/// }),
/// new TreeViewItemData<string>(3, "루트 2")
/// new TreeViewItemData<string>(6, "Settings")
/// };
///
/// treeView.SetRootItems(rootItems);
///
/// // 아이템 렌더링
///
/// // 항목 생성 함수
/// treeView.makeItem = () => new Label();
///
/// // 데이터 바인딩 함수
/// treeView.bindItem = (element, index) => {
/// var item = treeView.GetItemDataForIndex<string>(index);
/// (element as Label).text = item;
/// var data = treeView.GetItemDataForIndex<string>(index);
/// (element as Label).text = data;
/// };
///
///
/// // 선택 이벤트
/// treeView.OnItemSelected += (index) => Debug.Log($"선택: {index}");
/// treeView.OnItemSelected += (index) => {
/// var selectedData = treeView.GetItemDataForIndex<string>(index);
/// Debug.Log($"선택됨: {selectedData}");
/// };
///
/// // 더블클릭 이벤트 (폴더 열기 등)
/// treeView.OnItemDoubleClicked += (index) => {
/// var data = treeView.GetItemDataForIndex<string>(index);
/// OpenFolder(data);
/// };
///
/// // 특정 노드 펼치기
/// treeView.ExpandItem(0); // ID 0인 노드 펼치기
///
/// // 모든 노드 펼치기
/// treeView.ExpandAll();
/// </code>
/// <para><b>UXML에서 사용:</b></para>
/// <code>
/// <ui:UXML xmlns:utk="UVC.UIToolkit">
/// <utk:UTKTreeView fixed-item-height="24" />
/// </ui:UXML>
/// <!-- 기본 트리 뷰 -->
/// <utk:UTKTreeView fixed-item-height="24" />
///
/// <!-- 다중 선택 가능 -->
/// <utk:UTKTreeView selection-type="Multiple" />
/// </code>
/// </example>
[UxmlElement]