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); }
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); }