#if UNITY_EDITOR using UnityEngine.UIElements; using System.Collections.Generic; namespace GSpawn { public class TreeViewItemPool : VisualElement where TItem : TreeViewItem, new() where TItemData : IUIItemStateProvider { private ITreeView _treeView; private List _freeItems = new List(); public static string newItemTag { get { return "TreeViewItemPool.NewItem"; } } public TreeViewItemPool(ITreeView treeView) { _treeView = treeView; } public void releaseItem(TItem item) { _freeItems.Add(item); item.onWillBeDetachedFromTreeView(); item.removeTag(newItemTag); } public TItem obtainItem(TItemData itemData) { TItem item = default(TItem); if (_freeItems.Count == 0) { item = new TItem(); item.initialize(_treeView, itemData); item.buildUI(); _freeItems.Add(item); item.addTag(newItemTag); } item = _freeItems[_freeItems.Count - 1]; _freeItems.RemoveAt(_freeItems.Count - 1); item.parentItem = null; item.data = itemData; item.setVisible(true); item.setExpanded(true, false); return item; } } } #endif