void CreateDefaultTools() { m_DefaultTools.Clear(); for (int i = 0; i < (int)Tool.Custom; i++) { var button = new ToolButton((Tool)i); button.displayChanged += () => EditorToolbarUtility.SetupChildrenAsButtonStrip(m_DefaultTools); m_DefaultTools.Add(button); } foreach (var type in EditorToolManager.activeToolContext.GetAdditionalToolTypes()) { if (!typeof(EditorTool).IsAssignableFrom(type)) { Debug.LogError($"{type} must be assignable to EditorTool, and not abstract."); continue; } var addl = EditorToolManager.GetSingleton(type) as EditorTool; var button = new ComponentToolButton <EditorTool>(addl); m_DefaultTools.Add(button); } EditorToolbarUtility.SetupChildrenAsButtonStrip(m_DefaultTools); }
public PlayModeButtons() { name = "PlayMode"; Add(m_UIElementsRoot = new VisualElement()); m_UIElementsRoot.style.flexDirection = FlexDirection.Row; m_UIElementsRoot.Add(m_PlayButton = new EditorToolbarToggle { name = "Play", onIcon = EditorGUIUtility.FindTexture("PlayButton On"), offIcon = EditorGUIUtility.FindTexture("PlayButton"), }); m_PlayButton.RegisterCallback <MouseDownEvent>(evt => OnPlayButtonRMBClick(evt)); m_PlayButton.RegisterValueChangedCallback(OnPlayButtonValueChanged); m_UIElementsRoot.Add(m_PauseButton = new EditorToolbarToggle { name = "Pause", onIcon = EditorGUIUtility.FindTexture("PauseButton On"), offIcon = EditorGUIUtility.FindTexture("PauseButton"), }); m_PauseButton.RegisterValueChangedCallback(OnPauseButtonValueChanged); m_UIElementsRoot.Add(m_StepButton = new EditorToolbarButton { name = "Step" }); m_StepButton.clickable.activators.Add(new ManipulatorActivationFilter { button = MouseButton.RightMouse }); m_StepButton.clicked += OnStepButtonClicked; m_StepButton.icon = EditorGUIUtility.FindTexture("StepButton"); EditorToolbarUtility.SetupChildrenAsButtonStrip(m_UIElementsRoot); Add(m_ImguiOverride = new IMGUIContainer()); m_ImguiOverride.style.display = DisplayStyle.None; m_ImguiOverride.style.width = k_ImguiOverrideWidth; UpdatePlayState(); UpdatePauseState(); UpdateStepState(); //Immediately after a domain reload, Modes might be initialized after the toolbar so we wait a frame to check it EditorApplication.delayCall += () => { CheckAvailability(); CheckImguiOverride(); }; RegisterCallback <AttachToPanelEvent>(OnAttachedToPanel); RegisterCallback <DetachFromPanelEvent>(OnDetachFromPanel); }
void Refresh() { for (int i = childCount - 1; i > -1; i--) { RemoveAt(i); } AddToClassList("toolbar-contents"); if ((EditorToolManager.GetCustomEditorToolsCount(false) + EditorToolManager.availableComponentContextCount) < 1) { return; } EditorToolManager.GetComponentToolsForSharedTracker(s_EditorTools); s_SortedTools.Clear(); // Display available tools grouped by their target component foreach (var tool in s_EditorTools) { var component = tool.target; if (component == null) { continue; } if (!s_SortedTools.TryGetValue(component, out List <EditorTool> editorTools)) { editorTools = new List <EditorTool>(); s_SortedTools.Add(component, editorTools); } editorTools.Add(tool); } foreach (var kvp in s_SortedTools) { var tools = new VisualElement() { name = "Component Tools" }; tools.AddToClassList("toolbar-contents"); foreach (var tool in kvp.Value) { tools.Add(new ComponentToolButton <EditorTool>(tool)); } EditorToolbarUtility.SetupChildrenAsButtonStrip(tools); Add(tools); } }
// Used by MainToolbar, as it doesn't use the same Overlay styling internal void LoadToolbarElements(VisualElement root) { if (root == null) { throw new ArgumentNullException(nameof(root)); } EditorToolbarUtility.LoadStyleSheets("EditorToolbar", root); foreach (var id in m_ToolbarElements) { if (TryCreateElement(id, m_Context, out var ve)) { root.Add(ve); } } }
public BuiltinToolsStrip() { name = "BuiltinTools"; EditorToolbarUtility.SetupChildrenAsButtonStrip(this); // Only show the contexts dropdown if there are non-builtin contexts available if (EditorToolUtility.toolContextsInProject > 1) { var contexts = new ToolContextButton(); contexts.AddToClassList(EditorToolbarUtility.aloneStripElementClassName); Add(contexts); } // View and Builtin Transform Tools m_DefaultTools = new VisualElement() { name = "Builtin View and Transform Tools" }; m_DefaultTools.AddToClassList("toolbar-contents"); Add(m_DefaultTools); this.RegisterCallback <AttachToPanelEvent>(OnAttachToPanel); this.RegisterCallback <DetachFromPanelEvent>(OnDetachFromPanel); CreateDefaultTools(); // Custom global tools button (only shown if custom global tools exist in project) // A single "overflow" toggle+dropdown for additional global tools var customToolButton = new LastCustomToolButton(); customToolButton.AddToClassList(EditorToolbarUtility.aloneStripElementClassName); Add(customToolButton); // Component tools are last Add(new ComponentToolsStrip()); }