public static void PrintScrollableMenu <T>(ScrollableMenu <T> menu) { if (menu.GetTotalItemNumber() < menu.GetScopeSize()) { PrintMenu(menu); } else { int currentRow = menu.GetPositionY(); int positionX = menu.GetPositionX(); int dotPosition = menu.GetPositionX() + (menu.GetSizeX() / 2 - 1); switch (menu.GetAlignment()) { case Alignment.Left: break; case Alignment.Right: positionX = positionX + menu.GetSizeX() - 1; break; default: positionX = positionX + (menu.GetSizeX() / 2 - 1); break; } List <MenuItem <T> > menuitems = menu.GetMenuItemsInScope(); for (int i = 0; i < menuitems.Count; i++) { if (i == 0 && !menu.FirstIsInScope()) { PrintFreeString(new FreeString("...", dotPosition, currentRow, menuitems[i].GetColor1(), menuitems[i].GetColor2(), Alignment.Center)); } else if (i == menuitems.Count - 1 && !menu.LastIsInScope()) { PrintFreeString(new FreeString("...", dotPosition, currentRow, menuitems[i].GetColor1(), menuitems[i].GetColor2(), Alignment.Center)); } else if (i + menu.GetFirstItemIndexInScope() == menu.GetCurrentSelectedIndex()) { PrintFreeString(new FreeString(menuitems[i].GetText(), positionX, currentRow, menuitems[i].GetColor2(), menuitems[i].GetColor1(), menu.GetAlignment())); } else { PrintFreeString(new FreeString(menuitems[i].GetText(), positionX, currentRow, menuitems[i].GetColor1(), menuitems[i].GetColor2(), menu.GetAlignment())); } currentRow++; } CleanUp(); } }
public void ScrollableMenuDemo() { cHandler.Reset(); Console.Clear(); ScrollableMenu <int> menu = new ScrollableMenu <int>(30, 10, 20, 10, Color.Green, Color.Black); for (int i = 1; i <= 30; i++) { menu.AddItem($"{i}", i); } menu.AddItem("Exit", 0); FreeStringBundle guide = new FreeStringBundle(5, 20, 30); guide.Add("This menu contains 30 numbered items and an exit button"); guide.Add("Q | LeftAlign, W | CenterAlign, E | RightAlign"); bool exit = false; while (!exit) { guide.Print(); menu.Print(); ConsoleKey switcher = Console.ReadKey().Key; switch (switcher) { case ConsoleKey.Enter: if (menu.GetReturn() == 0) { exit = true; } break; case ConsoleKey.UpArrow: if (!menu.AtTop()) { Console.Clear(); menu.Up(); } break; case ConsoleKey.DownArrow: if (!menu.AtBottem()) { Console.Clear(); menu.Down(); } break; case ConsoleKey.Q: menu.LeftAlign(); Console.Clear(); break; case ConsoleKey.W: menu.CenterAlign(); Console.Clear(); break; case ConsoleKey.E: menu.RightAlign(); Console.Clear(); break; } } }