void LoadAllCounters() { using (ProfilerMarkers.k_LoadAllCounters.Auto()) { ProfilerMarkers.k_FetchCounters.Begin(); var counterCollector = new CounterCollector(); SortedDictionary <string, List <string> > unityCounters; SortedDictionary <string, List <string> > userCounters; if (m_isConnectedToEditor) { counterCollector.LoadEditorCounters(out unityCounters, out userCounters); } else { counterCollector.LoadCounters(out unityCounters, out userCounters); } ProfilerMarkers.k_FetchCounters.End(); // Format counter data for display in tree view. ProfilerMarkers.k_FormatCountersForDisplay.Begin(); m_TreeDataItems = new List <TreeViewItemData <ModuleDetailsItemData> >(); ModuleDetailsItemData.ResetNextId(); AddCounterGroupToTreeDataItems(unityCounters, "Unity", m_TreeDataItems); AddCounterGroupToTreeDataItems(userCounters, "User", m_TreeDataItems); ProfilerMarkers.k_FormatCountersForDisplay.End(); // Update tree view UI. ProfilerMarkers.k_RebuildCountersUI.Begin(); m_AllCountersTreeView.SetRootItems(m_TreeDataItems); m_AllCountersTreeView.Rebuild(); ProfilerMarkers.k_RebuildCountersUI.End(); // Get a reference to the controller now that items are set. m_AllCountersTreeViewController = m_AllCountersTreeView.viewController as DefaultTreeViewController <ModuleDetailsItemData>; } }
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(); }
public ElementHierarchyView( BuilderPaneWindow paneWindow, VisualElement documentRootElement, BuilderSelection selection, BuilderClassDragger classDragger, BuilderExplorerDragger explorerDragger, BuilderElementContextMenu contextMenuManipulator, Action <List <VisualElement> > selectElementCallback, HighlightOverlayPainter highlightOverlayPainter) { m_PaneWindow = paneWindow; m_DocumentRootElement = documentRootElement; m_Selection = selection; m_ClassDragger = classDragger; m_ExplorerDragger = explorerDragger; m_ContextMenuManipulator = contextMenuManipulator; this.focusable = true; m_SelectElementCallback = selectElementCallback; hierarchyHasChanged = true; hasUnsavedChanges = false; m_SearchResultsHightlights = new List <VisualElement>(); this.RegisterCallback <FocusEvent>(e => m_TreeView?.Focus()); // HACK: ListView/TreeView need to clear their selections when clicking on nothing. this.RegisterCallback <MouseDownEvent>(e => { var leafTarget = e.leafTarget as VisualElement; if (leafTarget.parent is ScrollView) { m_PaneWindow.primarySelection.ClearSelection(null); } }); m_TreeViewHoverOverlay = highlightOverlayPainter; m_Container = new VisualElement(); m_Container.name = "explorer-container"; m_Container.style.flexGrow = 1; m_ClassDragger.builderHierarchyRoot = m_Container; m_ExplorerDragger.builderHierarchyRoot = m_Container; Add(m_Container); m_ClassPillTemplate = BuilderPackageUtilities.LoadAssetAtPath <VisualTreeAsset>( BuilderConstants.UIBuilderPackagePath + "/BuilderClassPill.uxml"); // Create TreeView. m_TreeRootItems = new List <TreeViewItem>(); m_TreeView = new TreeView(20, MakeItem, FillItem); m_TreeView.SetRootItems(m_TreeRootItems); m_TreeViewController = m_TreeView.viewController as DefaultTreeViewController <VisualElement>; m_TreeView.selectionType = SelectionType.Multiple; m_TreeView.viewDataKey = "unity-builder-explorer-tree"; m_TreeView.style.flexGrow = 1; m_TreeView.onSelectedIndicesChange += OnSelectionChange; m_TreeView.RegisterCallback <MouseDownEvent>(OnLeakedMouseClick); m_Container.Add(m_TreeView); m_ContextMenuManipulator.RegisterCallbacksOnTarget(m_Container); }