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(); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } |