void AddCounterGroupToTreeDataItems(SortedDictionary <string, List <string> > counterDictionary, string groupName, List <TreeViewItemData <ModuleDetailsItemData> > treeDataItems)
        {
            if (counterDictionary.Count == 0)
            {
                return;
            }

            var groupData = new GroupItemData(groupName);
            var group     = new TreeViewItemData <ModuleDetailsItemData>(groupData.treeViewItem.id, groupData);

            foreach (var categoryName in counterDictionary.Keys)
            {
                var categoryData = new CategoryItemData(categoryName);
                var category     = new TreeViewItemData <ModuleDetailsItemData>(categoryData.treeViewItem.id, categoryData);

                var counters = new List <TreeViewItemData <ModuleDetailsItemData> >();
                foreach (var counter in counterDictionary[categoryName])
                {
                    var data = new CounterItemData(counter, categoryName);
                    counters.Add(new TreeViewItemData <ModuleDetailsItemData>(data.treeViewItem.id, data));
                }

                category.AddChildren(counters);
                group.AddChild(category);
            }

            treeDataItems.Add(group);
        }
Ejemplo n.º 2
0
        private void AddTreeItemsForElement(IList <TreeViewItemData <VisualElement> > items, VisualElement ve, ref int nextId)
        {
            if (ve == null)
            {
                return;
            }

            int count = ve.hierarchy.childCount;

            if (count == 0)
            {
                return;
            }

            for (int i = 0; i < count; i++)
            {
                var child = ve.hierarchy[i];

                var treeItem = new TreeViewItemData <VisualElement>(nextId, child);
                items.Add(treeItem);
                nextId++;

                var childItems = new List <TreeViewItemData <VisualElement> >();
                AddTreeItemsForElement(childItems, child, ref nextId);
                if (childItems.Count == 0)
                {
                    continue;
                }

                treeItem.AddChildren(childItems);
            }
        }
Ejemplo n.º 3
0
        TreeViewItemData <Progress.Item> GetExistingTreeViewItemFromId(int itemId)
        {
            var progressItem = m_TreeView.GetItemDataForId <Progress.Item>(itemId);
            var treeViewItem = new TreeViewItemData <Progress.Item>(itemId, progressItem);

            var childrenIds = m_TreeView.viewController.GetChildrenIds(itemId);

            if (childrenIds != null)
            {
                var childrenItems = childrenIds.Select(id => GetExistingTreeViewItemFromId(id));
                treeViewItem.AddChildren(childrenItems.ToList());
            }

            return(treeViewItem);
        }
Ejemplo n.º 4
0
        public void RebuildTree(IPanelDebug panelDebug)
        {
            if (!hierarchyHasChanged && m_CurrentPanelDebug == panelDebug)
            {
                return;
            }

            m_CurrentPanelDebug = panelDebug;
            m_Container.Clear();

            int nextId = 1;

            m_TreeRootItems.Clear();

            var visualTree = panelDebug?.visualTree;

            if (visualTree != null)
            {
                var rootItem = new TreeViewItemData <VisualElement>(nextId++, visualTree);
                m_TreeRootItems.Add(rootItem);

                var childItems = new List <TreeViewItemData <VisualElement> >();
                AddTreeItemsForElement(childItems, visualTree, ref nextId);

                rootItem.AddChildren(childItems);
            }

            Func <VisualElement> makeItem = () =>
            {
                var element = new VisualElement();
                element.name = "unity-treeview-item-content";
                element.RegisterCallback <MouseEnterEvent>((e) =>
                {
                    HighlightItemInTargetWindow(e.target as VisualElement);
                });
                element.RegisterCallback <MouseLeaveEvent>((e) =>
                {
                    UnhighlightItemInTargetWindow(e.target as VisualElement);
                });
                return(element);
            };

            // Clear selection which would otherwise persist via view data persistence.
            m_TreeView?.ClearSelection();

            m_TreeView = new TreeView(makeItem, FillItem);
            m_TreeView.SetRootItems(treeRootItems);
            m_TreeView.fixedItemHeight            = 20;
            m_TreeView.style.flexGrow             = 1;
            m_TreeView.horizontalScrollingEnabled = true;
            m_TreeView.onSelectedIndicesChange   += items =>
            {
                if (m_SelectElementCallback == null)
                {
                    return;
                }

                if (!items.Any())
                {
                    m_SelectElementCallback(null);
                    return;
                }

                var index   = items.First();
                var element = m_TreeViewController.GetDataForIndex(index);
                m_SelectElementCallback(element);
            };

            m_TreeViewController = m_TreeView.viewController as DefaultTreeViewController <VisualElement>;
            m_Container.Add(m_TreeView);

            hierarchyHasChanged = false;
            m_SearchBar.ClearSearch();
        }