public override bool OnKeyDown(KeyboardKeyEventArgs e)
        {
            if (base.OnKeyDown(e))
            {
                return(true);
            }

            if (!(Visible && Enabled && Selected))
            {
                return(false);
            }

            switch (e.Key)
            {
            case Key.Escape:
                OnClose();
                return(true);

            case Key.Up:
                MovePrev();
                return(true);

            case Key.Down:
                MoveNext();
                return(true);

            case Key.PageDown:
            case Key.End:
                MoveLast();
                return(true);

            case Key.PageUp:
            case Key.Home:
                MoveFirst();
                return(true);

            case Key.Left:
                if (Parent as SubMenuOverlay != null)
                {
                    Parent.Select();
                    (Parent as SubMenuOverlay).CloseSubMenu();
                    return(true);
                }
                if (Parent as MenuBar != null)
                {
                    Parent.Select();
                    (Parent as MenuBar).MovePrev();
                    return(true);
                }
                break;

            case Key.Right:
                if (m_ActiveItem != null && !m_ActiveItem.Children.IsNullOrEmpty())
                {
                    ShowSubMenu(m_ActiveItem);
                    if (SubMenu != null)
                    {
                        SubMenu.Select();
                        SubMenu.MoveFirst();
                        Invalidate();
                    }
                    return(true);
                }
                if (Parent as MenuBar != null)
                {
                    Parent.Select();
                    (Parent as MenuBar).MoveNext();
                    return(true);
                }
                break;

            case Key.Space:
                if (m_ActiveItem != null)
                {
                    if (m_ActiveItem.OnClick())
                    {
                        Invalidate();
                    }
                    return(true);
                }
                break;

            case Key.Enter:
                if (m_ActiveItem != null && !m_ActiveItem.Children.IsNullOrEmpty())
                {
                    ShowSubMenu(m_ActiveItem);
                    if (SubMenu != null)
                    {
                        SubMenu.Select();
                        SubMenu.MoveFirst();
                        Invalidate();
                    }
                    return(true);
                }
                if (m_ActiveItem != null)
                {
                    if (m_ActiveItem.OnClick())
                    {
                        OnClose();
                        return(true);
                    }
                }
                break;

            default:
                if (Menu != null && e.Key != Key.AltLeft)
                {
                    char keyChar = e.Key.ToString() [0];
                    //this.LogVerbose ("{0}, {1}", e.Key.ToString(), ModifierKeys.AltPressed.ToString());

                    for (int i = 0; i < Menu.Count; i++)
                    {
                        IGuiMenuItem mi = Menu [i];
                        if (mi == null || !(mi.Visible && mi.Enabled))
                        {
                            continue;
                        }
                        if (mi.ProcessInputKey(e))                              // iterates recursive through all children
                        {
                            return(true);
                        }
                        if (ModifierKeys.AltPressed && keyChar == mi.Mnemonic)
                        {
                            if (mi.OnClick())
                            {
                                OnClose();
                                return(true);
                            }
                            else if (!mi.Children.IsNullOrEmpty())
                            {
                                if (mi != ActiveItem)
                                {
                                    CloseSubMenu();
                                    ActiveItem = mi;
                                    Invalidate();
                                    this.Select();
                                }
                                //return true;
                            }
                        }
                    }
                }
                break;
            }

            if (SubMenu != null && SubMenu.OnKeyDown(e))
            {
                return(true);
            }

            return(false);
        }
Exemple #2
0
        public override bool OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
        {
            /***
             * if (base.OnKeyDown (e))
             *      return true;
             ***/

            switch (e.Key)
            {
            case Key.Home:
                if (Selected)
                {
                    MoveFirst();
                    return(true);
                }
                break;

            case Key.End:
                if (Selected)
                {
                    MoveLast();
                    return(true);
                }
                break;

            case Key.Left:
                if (Selected)
                {
                    MovePrev();
                    return(true);
                }
                break;

            case Key.Right:
                if (Selected)
                {
                    MoveNext();
                    return(true);
                }
                break;

            case Key.Down:
            case Key.PageDown:
            case Key.PageUp:
            case Key.Enter:
                //if (Selected && Expanded && SubMenu != null) {
                if (Selected && SubMenu != null)
                {
                    SubMenu.Select();
                    Expanded = true;
                    if (e.Key == Key.PageDown)
                    {
                        SubMenu.MoveLast();
                    }
                    else
                    {
                        SubMenu.MoveFirst();
                    }
                    return(true);
                }
                break;

            case Key.F10:
                if (Selected)
                {
                    return(false);
                }
                if (ActiveItem == null && !Menu.IsNullOrEmpty())
                {
                    if (m_LastActiveItemIndex >= 0 && m_LastActiveItemIndex < Menu.Count)
                    {
                        ActiveItem = Menu [m_LastActiveItemIndex];
                    }
                    else
                    {
                        ActiveItem            = Menu.FirstOrDefault();
                        m_LastActiveItemIndex = 0;
                    }
                }
                this.Select();
                MoveNext();
                MovePrev();
                this.Update();
                return(true);

            case Key.Escape:
                CloseSubMenu();
                FocusPreviouseWidget();
                return(true);

            default:
                if (Menu != null)
                {
                    char keyChar = e.Key.ToString() [0];
                    for (int i = 0; i < Menu.Count; i++)
                    {
                        IGuiMenuItem mi = Menu [i];
                        if (mi == null || !(mi.Visible && mi.Enabled))
                        {
                            continue;
                        }
                        if (mi.ProcessInputKey(e))                              // iterates recursive through all children
                        {
                            return(true);
                        }

                        // Alt-Key / Mnemonics for this Selected menu only
                        if (ModifierKeys.AltPressed && keyChar == mi.Mnemonic)
                        {
                            if (mi != ActiveItem)
                            {
                                CloseSubMenu();
                                ActiveItem            = mi;
                                m_LastActiveItemIndex = Menu.IndexOf(mi);
                                Invalidate();
                                this.Select();
                            }
                            //return true;
                        }
                    }
                }
                break;
            }

            if (SubMenu != null && SubMenu.OnKeyDown(e))
            {
                return(true);
            }

            return(false);
        }