/// <summary> /// Create a TypeList /// </summary> /// <param name="assemblies">The assemblies to pull types from to detemrine available namespaces</param> /// <param name="namespaceLevels">The level of namespace to display. If levle is 2, then namespace x.y.z is resolved to x.y. If 0, does not constrain levels</param> /// <param name="filter">When a filter returns true, the element should be kept</param> public EETypeList(Assembly[] assemblies, int namespaceLevels = 0, Predicate <Type> filter = null) { _namespaceLevels = namespaceLevels; _filter = filter; foreach (Assembly ass in assemblies) { _assemblyMap[ass] = null; } _assembliesDropdown = new EEDropdown( _assemblyMap.Keys .Select(a => new EEDropdown.SElement() { ReadableName = a.GetName().Name, Element = a }) .OrderBy(a => a.ReadableName) .ToArray() ); }
private void OnEnable() { List <EEDropdown.SElement> items = new List <EEDropdown.SElement>(); for (int i = 0; i < 10; i++) { int rand = Random.Range(0, 10000); items.Add( new EEDropdown.SElement() { ReadableName = $"Element {rand}", Element = rand } ); } _list = new EEDropdown(items.ToArray()); }
public void Render_Basic() { //Render dropdown containing namespaces EditorGUILayout.BeginHorizontal(); _assembliesDropdown.Render_Basic(); _namespaceDropdown?.Render_Basic(); EditorGUILayout.EndHorizontal(); // is assembly changed, render that assemblies namespaces if (_assemblyRendering != _assembliesDropdown.Selected.ReadableName) { // Get the assembly selected _assemblySelected = _assembliesDropdown.Selected.Element as Assembly; if (_assemblySelected != null && _assemblyMap[_assemblySelected] == null) { LoadAssemblyTypes(_assemblySelected, _namespaceLevels, _filter); } _namespaceDropdown = new EEDropdown( _assemblyMap[_assemblySelected].Namespaces.Select( n => new EEDropdown.SElement() { ReadableName = n.Namespace.SeparatorLevelPrune('.', _namespaceLevels) } ).ToArray() ); _assemblyRendering = _assemblySelected.GetName().Name; } // if the namespace changes, get the new types if (_namespaceDropdown != null && _namespaceRendering != _namespaceDropdown.Selected.ReadableName) { string selectedNamespace = _namespaceDropdown.Selected.ReadableName; Type[] types = _assemblyMap[_assemblySelected].Namespaces.FirstOrDefault(n => n.Namespace == selectedNamespace)?.Types; EEInteractableItem.Args[] args = types.Select( t => new EEInteractableItem.Args() { ItemLabel = new SLabel() { ReadableName = t.Name, Id = t.Name }, ButtonLabels = new SLabel[] { new SLabel { ReadableName = "Select", Id = "select" } } } ).OrderBy(a => a.ItemLabel.ReadableName).ToArray(); _list = new EEInteractableList(new SLabel() { ReadableName = "Types" }, args); _list.OnItemInteraction += OnItemInteraction; _namespaceRendering = selectedNamespace; } _list.Render_Basic(300); }