private MenuItem MenuItemFromCursorKey(VirtualKey virtualKey) { const int NextMenuItem = 0; const int PrevMenuItem = 1; const int Nothing = 2; int action = Nothing; if (DropDownMenu) { if (virtualKey == VirtualKey.VK_UP) { action = PrevMenuItem; } else if (virtualKey == VirtualKey.VK_DOWN) { action = NextMenuItem; } } else { if (virtualKey == VirtualKey.VK_LEFT) { action = PrevMenuItem; } else if (virtualKey == VirtualKey.VK_RIGHT) { action = NextMenuItem; } } if (action == Nothing || !VisibleMenuItems.Any()) { return(null); } var currentMenuItem = ActiveMenuItem ?? VisibleMenuItems.First(); var index = _menuItems.IndexOf(currentMenuItem); var count = VisibleMenuItems.Count(); do { if (action == NextMenuItem) { index = (index + 1) % count; } else if (action == PrevMenuItem) { index = (index - 1 + count) % count; } }while (_menuItems[index].Separator); return(_menuItems[index]); }
public override void OnKeyUp(object sender, KeyEvent e) { if (!this._active) { this._active = true; if (VisibleMenuItems.Any() && !this.AllowNoSelection) { ActivateMenuItem((Screen)sender, VisibleMenuItems.First()); } } else { if (e.VirtualKey == VirtualKey.VK_MENU) { Deactivate((Screen)sender); } } }
public void Update( ) { if (this != CurrentMenu) { return; } if (SelectedItem == null) { SelectedItem = VisibleMenuItems.FirstOrDefault( ); } int lineNumber = 0; bool ScrollNeeded = Display.MaxLines < CountVisibleMenuItems; if (ScrollNeeded) { throw new NotImplementedException("Too many visible menu items"); } Display.WriteLine(int.MaxValue, MenuHeading, Color.Aqua); foreach (var item in VisibleMenuItems) { Display.WriteLine( lineNumber++, item.DisplayString, SelectedItem == item ? SelectedColour : ItemColour); } while (lineNumber < Display.MaxLines) { // blank the unused lines. Display.WriteLine(lineNumber++, "", Color.White); } }