public override VisualElement Build() { var root = Resources.TypeInspector.Clone(); var label = root.Q <Label>("label"); label.text = DisplayName; var input = root.Q <VisualElement>("input"); input.RegisterCallback <MouseDownEvent>(e => { var items = new List <SearchView.Item>(); foreach (var platform in Platform.AvailablePlatforms) { var type = platform.GetType(); if (type.HasAttribute <HideInInspector>() || type.HasAttribute <ObsoleteAttribute>()) { continue; } items.Add(new SearchView.Item { Path = platform.DisplayName, Icon = Resources.GetPlatformIcon(platform.IconName), Data = platform }); } items = items.OrderBy(item => item.Path).ToList(); SearchWindow searchWindow = SearchWindow.Create(); searchWindow.Title = "Platform"; searchWindow.Items = items; searchWindow.OnSelection += item => { Target = (Platform)item.Data; m_TextElement.text = Target.DisplayName; }; var rect = EditorWindow.focusedWindow.position; var button = input.worldBound; searchWindow.position = new Rect(rect.x + button.x, rect.y + button.y + button.height, 230, 315); searchWindow.ShowPopup(); e.StopPropagation(); }); m_TextElement = input.Q <TextElement>("text"); m_TextElement.text = Target?.DisplayName; return(root); }
public override VisualElement Build() { var root = Resources.TypeInspector.Clone(); var label = root.Q <Label>("label"); label.text = DisplayName; var input = root.Q <VisualElement>("input"); input.RegisterCallback <MouseDownEvent>(e => { var items = new List <SearchView.Item>(); var types = TypeCache.GetTypesDerivedFrom <T>(); foreach (var type in types) { if (type.IsAbstract || type.IsInterface || type.HasAttribute <HideInInspector>() || type.HasAttribute <ObsoleteAttribute>()) { continue; } if (!TypeConstruction.CanBeConstructed(type)) { continue; } if (TypeFilter != null && !TypeFilter(type)) { continue; } var name = GetName(type); var category = GetCategory(type); items.Add(new SearchView.Item { Path = !string.IsNullOrEmpty(category) ? $"{category}/{name}" : name, Icon = GetIcon(type), Data = type }); } items = items.OrderBy(item => item.Path).ToList(); SearchWindow searchWindow = SearchWindow.Create(); searchWindow.Title = Title; searchWindow.Items = items; searchWindow.OnSelection += item => { var type = (Type)item.Data; if (TypeConstruction.TryConstruct <T>(type, out var instance)) { Target = instance; m_TextElement.text = GetName(type); } }; var rect = EditorWindow.focusedWindow.position; var button = input.worldBound; searchWindow.position = new Rect(rect.x + button.x, rect.y + button.y + button.height, 230, 315); searchWindow.ShowPopup(); e.StopPropagation(); }); m_TextElement = input.Q <TextElement>("text"); m_TextElement.text = GetName(Target?.GetType()); return(root); }