54 lines
1.4 KiB
C#
54 lines
1.4 KiB
C#
|
#if UNITY_EDITOR
|
|||
|
using UnityEngine.UIElements;
|
|||
|
using System.Collections.Generic;
|
|||
|
|
|||
|
namespace GSpawn
|
|||
|
{
|
|||
|
public class TreeViewItemPool<TItem, TItemData> : VisualElement
|
|||
|
where TItem : TreeViewItem<TItemData>, new()
|
|||
|
where TItemData : IUIItemStateProvider
|
|||
|
{
|
|||
|
private ITreeView _treeView;
|
|||
|
private List<TItem> _freeItems = new List<TItem>();
|
|||
|
|
|||
|
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
|