using System.Collections.Generic;
using UnityEditor;
using UnityEditor.IMGUI.Controls;
using UnityEngine;
public class SearchTreeViewSample : EditorWindow
{
[MenuItem("Tools/SampleTreeView")]
private static void ShowWindow()
{
GetWindow<SearchTreeViewSample>();
}
private SearchField _searchField;
private SampleTreeView _treeView;
private TreeViewState _treeViewState;
<summary>
</summary>
private void Init()
{
if (_treeViewState == null)
{
_treeViewState = new TreeViewState();
}
if (_treeView == null)
{
_treeView = new SampleTreeView(_treeViewState);
}
if (_searchField == null)
{
_searchField = new SearchField();
_searchField.downOrUpArrowKeyPressed += _treeView.SetFocusAndEnsureSelectedItem;
}
}
private void OnGUI()
{
Init();
using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar))
{
GUILayout.Space(10);
_treeView.searchString = _searchField.OnToolbarGUI(_treeView.searchString);
}
var rect = GUILayoutUtility.GetRect(0, float.MaxValue, 0, float.MaxValue);
_treeView.OnGUI(rect);
}
private class SampleTreeView : TreeView
{
private TreeViewItem _root;
public SampleTreeView(TreeViewState state) : base(state)
{
showAlternatingRowBackgrounds = true;
showBorder = true;
_root = new TreeViewItem(0, -1, "root");
_root.children = new List<TreeViewItem>(100);
for (int i = 0; i < 100; i++)
{
_root.AddChild(new TreeViewItem(i + 1, 0, GUID.Generate().ToString()));
}
SetupDepthsFromParentsAndChildren(_root);
Reload();
}
protected override TreeViewItem BuildRoot()
{
return _root;
}
}
}