Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 3
0
 private void select(DrawableMenuItem drawableItem)
 {
     if (selectedItem != null)
     {
         selectedItem.BackgroundColour = UnselectedColour;
     }
     selectedItem  = drawableItem;
     Current.Value = drawableItem.Item;
     selectedItem.BackgroundColour = SelectedColour;
 }
Ejemplo n.º 4
0
        private void itemStateChanged(DrawableMenuItem item, MenuItemState state)
        {
            if (state != MenuItemState.Selected)
            {
                return;
            }

            if (item != selectedItem && selectedItem != null)
            {
                selectedItem.State = MenuItemState.NotSelected;
            }
            selectedItem = item;
        }
Ejemplo n.º 5
0
        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);
        }