void AddSettingsMenu(ISettingsMenuProvider provider, MainMenuUI.ButtonData buttonData, ITooltip tooltip) { buttonData.sectionName = k_SettingsMenuSectionName; CreateFaceButton(buttonData, tooltip, () => { var instance = m_MainMenuUI.AddSubmenu(k_SettingsMenuSectionName, provider.settingsMenuPrefab); m_SettingsMenus[provider] = instance; provider.settingsMenuInstance = instance; }); }
void AddSettingsMenu(ISettingsMenuProvider provider, MainMenuUI.ButtonData buttonData, ITooltip tooltip) { buttonData.sectionName = k_SettingsMenuSectionName; var button = CreateFaceButton(buttonData, tooltip, () => { var instance = m_MainMenuUI.AddSubmenu(k_SettingsMenuSectionName, provider.settingsMenuPrefab); m_SettingsMenus[provider] = instance; provider.settingsMenuInstance = instance; AddToggleHaptics(instance); }); button.hovered += OnButtonHovered; button.clicked += OnButtonClicked; }
void CreateFaceButtons(List <Type> types) { foreach (var type in types) { var customMenuAttribute = (MainMenuItemAttribute)type.GetCustomAttributes(typeof(MainMenuItemAttribute), false).FirstOrDefault(); if (customMenuAttribute != null && !customMenuAttribute.shown) { continue; } var isTool = typeof(ITool).IsAssignableFrom(type); var isWorkspace = typeof(Workspace).IsAssignableFrom(type); var isSettingsProvider = typeof(ISettingsMenuProvider).IsAssignableFrom(type); var buttonData = new MainMenuUI.ButtonData(); buttonData.name = type.Name; if (customMenuAttribute != null) { buttonData.name = customMenuAttribute.name; buttonData.sectionName = customMenuAttribute.sectionName; buttonData.description = customMenuAttribute.description; } else if (isTool) { buttonData.name = type.Name.Replace("Tool", string.Empty); } else if (isWorkspace) { // For workspaces that haven't specified a custom attribute, do some menu categorization automatically buttonData.name = type.Name.Replace("Workspace", string.Empty); buttonData.sectionName = "Workspaces"; } else if (isSettingsProvider) { // For workspaces that haven't specified a custom attribute, do some menu categorization automatically buttonData.name = type.Name.Replace("Module", string.Empty); buttonData.sectionName = "Settings"; } var selectedType = type; // Local variable for proper closure m_MainMenuUI.CreateFaceButton(buttonData, b => { b.button.onClick.RemoveAllListeners(); if (isTool) { m_ToolButtons[selectedType] = b; b.button.onClick.AddListener(() => { if (visible && targetRayOrigin) { this.SelectTool(targetRayOrigin, selectedType); UpdateToolButtons(); } }); } else if (isWorkspace) { b.button.onClick.AddListener(() => { if (visible) { this.CreateWorkspace(selectedType); } }); } else if (isSettingsProvider) { b.button.onClick.AddListener(() => { var provider = settingsMenuProviders[selectedType]; provider.settingsMenuInstance = m_MainMenuUI.AddSubmenu(buttonData.sectionName, provider.settingsMenuPrefab); }); } if (customMenuAttribute != null && customMenuAttribute.tooltip != null) { b.tooltipText = customMenuAttribute.tooltip.tooltipText; } }); } }