Example #1
0
        /// <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()
                );
        }
Example #2
0
        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());
        }
Example #3
0
        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);
        }