75 lines
2.8 KiB
C#
75 lines
2.8 KiB
C#
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.UIElements;
|
||
|
|
||
|
namespace UnityEditor.Searcher
|
||
|
{
|
||
|
[CustomEditor(typeof(SearcherExampleComponent))]
|
||
|
class SearcherExampleComponentEditor : Editor
|
||
|
{
|
||
|
Rect m_ButtonRect;
|
||
|
|
||
|
public override void OnInspectorGUI()
|
||
|
{
|
||
|
var root = new SearcherItem("Root");
|
||
|
var children = new List<SearcherItem>();
|
||
|
for (var i = 0; i < 10; ++i)
|
||
|
children.Add(new SearcherItem("B-" + i));
|
||
|
|
||
|
var child = new SearcherItem("Child","", children);
|
||
|
root.AddChild(child);
|
||
|
|
||
|
{
|
||
|
EditorGUILayout.BeginHorizontal();
|
||
|
EditorGUILayout.PrefixLabel("Mouse Position");
|
||
|
if (EditorGUILayout.DropdownButton(new GUIContent("Button"), FocusType.Passive, GUI.skin.button))
|
||
|
{
|
||
|
var editorWindow = EditorWindow.focusedWindow;
|
||
|
var localMousePosition = Event.current.mousePosition;
|
||
|
var worldMousePosition = editorWindow.rootVisualElement.LocalToWorld(localMousePosition);
|
||
|
|
||
|
SearcherWindow.Show(
|
||
|
editorWindow,
|
||
|
new List<SearcherItem> { root },
|
||
|
"Mouse Position",
|
||
|
item => {
|
||
|
Debug.Log("Searcher item selected: " + (item?.Name ?? "<none>"));
|
||
|
return true;
|
||
|
},
|
||
|
worldMousePosition);
|
||
|
}
|
||
|
EditorGUILayout.EndHorizontal();
|
||
|
}
|
||
|
|
||
|
{
|
||
|
EditorGUILayout.BeginHorizontal();
|
||
|
EditorGUILayout.PrefixLabel("Button Center");
|
||
|
|
||
|
var selected = EditorGUILayout.DropdownButton(new GUIContent("Button"), FocusType.Passive, GUI.skin.button);
|
||
|
if (Event.current.type == EventType.Repaint)
|
||
|
m_ButtonRect = GUILayoutUtility.GetLastRect();
|
||
|
|
||
|
if (selected)
|
||
|
{
|
||
|
var editorWindow = EditorWindow.focusedWindow;
|
||
|
var localButtonCenter = m_ButtonRect.center;
|
||
|
var worldButtonCenter = editorWindow.rootVisualElement.LocalToWorld(localButtonCenter);
|
||
|
|
||
|
SearcherWindow.Show(
|
||
|
editorWindow,
|
||
|
new List<SearcherItem> { root },
|
||
|
"Button Center",
|
||
|
item => {
|
||
|
Debug.Log("Searcher item selected: " + (item?.Name ?? "<none>"));
|
||
|
return true;
|
||
|
},
|
||
|
worldButtonCenter);
|
||
|
}
|
||
|
|
||
|
EditorGUILayout.EndHorizontal();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|