private void menuItemHovered(DrawableMenuItem item) { // If we're not a sub-menu, then hover shouldn't display a sub-menu unless an item is clicked if (TopLevelMenu && submenu?.State != MenuState.Open) { return; } openDelegate?.Cancel(); if (TopLevelMenu || HoverOpenDelay == 0) { openSubmenuFor(item); } else { openDelegate = Scheduler.AddDelayed(() => { if (item.IsHovered) { openSubmenuFor(item); } }, HoverOpenDelay); } }
private void openSubmenuFor(DrawableMenuItem item) { item.State = MenuItemState.Selected; if (submenu == null) { submenuContainer.Add(submenu = CreateSubMenu()); submenu.parentMenu = this; submenu.StateChanged += submenuStateChanged; } submenu.triggeringItem = item.Item; submenu.Items = item.Item.Items; submenu.Position = item.ToSpaceOfOtherDrawable(new Vector2( Direction == Direction.Vertical ? item.DrawWidth : 0, Direction == Direction.Horizontal ? item.DrawHeight : 0), this); if (item.Item.Items.Count > 0) { if (submenu.State == MenuState.Open) { Schedule(delegate { GetContainingInputManager().ChangeFocus(submenu); }); } else { submenu.Open(); } } else { submenu.Close(); } }
private void select(DrawableMenuItem drawableItem) { if (selectedItem != null) { selectedItem.BackgroundColour = UnselectedColour; } selectedItem = drawableItem; Current.Value = drawableItem.Item; selectedItem.BackgroundColour = SelectedColour; }
private void itemStateChanged(DrawableMenuItem item, MenuItemState state) { if (state != MenuItemState.Selected) { return; } if (item != selectedItem && selectedItem != null) { selectedItem.State = MenuItemState.NotSelected; } selectedItem = item; }
private void menuItemClicked(DrawableMenuItem item) { // We only want to close the sub-menu if we're not a sub menu - if we are a sub menu // then clicks should instead cause the sub menus to instantly show up if (TopLevelMenu && submenu?.State == MenuState.Open) { submenu.Close(); return; } // Check if there is a sub menu to display if (item.Item.Items?.Count == 0) { // This item must have attempted to invoke an action - close all menus closeAll(); return; } openDelegate?.Cancel(); openSubmenuFor(item); }