예제 #1
0
        /// <summary>
        /// Sets the hierarchy's expanded state to only contain the current selection.
        /// </summary>
        public static void FocusProfilerWindowToSelection(EditorWindow profilerWindow)
        {
            var interfaceType = Type.GetType("UnityEditorInternal.IProfilerWindowController,UnityEditor");

            // Get the selected profiler module, with fallbacks.
            PropertyInfo selectedModuleProperty = interfaceType.GetProperty("selectedModule", PublicInstance);

            if (selectedModuleProperty == null)
            {
                selectedModuleProperty = interfaceType.GetProperty("SelectedModule", PublicInstance);
            }

            object module;

            if (selectedModuleProperty == null)
            {
                // m_ProfilerModules[(int) m_CurrentArea].
                Type  profilerWindowType = profilerWindow.GetType();
                Array modules            = (Array)profilerWindowType.GetField("m_ProfilerModules", NonPublicInstance)
                                           .GetValue(profilerWindow);
                int index = (int)profilerWindowType.GetField("m_CurrentArea", NonPublicInstance)
                            .GetValue(profilerWindow);
                module = modules.GetValue(index);
            }
            else
            {
                module = selectedModuleProperty.GetValue(profilerWindow);                 // ProfilerModule
            }

            // CPUOrGPUProfilerModule.FrameDataHierarchyView
            PropertyInfo frameDataHierarchyViewProperty = module.GetType()
                                                          .GetProperty("FrameDataHierarchyView", NonPublicInstance);

            if (frameDataHierarchyViewProperty != null)
            {
                // ProfilerFrameDataHierarchyView
                object   frameDataHierarchyView = frameDataHierarchyViewProperty.GetValue(module);
                TreeView treeView = (TreeView)frameDataHierarchyView.GetType().GetProperty("treeView", PublicInstance)
                                    .GetValue(frameDataHierarchyView);
                treeView.state.expandedIDs = new List <int>();
                treeView.SetSelection(treeView.state.selectedIDs, TreeViewSelectionOptions.RevealAndFrame);
                treeView.Reload();
            }
        }
예제 #2
0
 public TreeViewControlGUI(TreeViewController treeView, TreeView owner)
     : base(treeView)
 {
     m_Owner    = owner;
     cellMargin = MultiColumnHeader.DefaultGUI.columnContentMargin;
 }