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