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>;
            }
        }
Ejemplo n.º 2
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();
        }
        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);
        }