using Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp { internal class MenuManager { public DataManager DataManager { get; private set; } public Stack MenuCallStack { get; set; } public MenuManager(DataManager dataManager, Menu.IMenu firstMenu) { DataManager = dataManager; MenuCallStack = new Stack(); MenuCallStack.Push(firstMenu); } private void WriteMenuMode(Menu.IMenu menu, ConsoleKeyInfo cki) { if (!menu.WriteMode) { return; } if (cki.Key == ConsoleKey.Backspace && menu.InputStr.Length > 0) { menu.InputStr.Remove(menu.InputStr.Length-1, 1); return; } menu.InputStr.Append(cki.KeyChar); } public void Loop() { ConsoleKeyInfo cki; Menu.IMenu menuOnHead; do { menuOnHead = MenuCallStack.Peek(); menuOnHead.Update(); menuOnHead.Display(); cki = Console.ReadKey(true); switch (cki.Key) { case ConsoleKey.DownArrow: menuOnHead.SelectNext(); break; case ConsoleKey.UpArrow: menuOnHead.SelectPrevious(); break; case ConsoleKey.Enter: menuOnHead.Return(); MenuCallStack.Pop(); break; case ConsoleKey.R: menuOnHead.ToggleWriteMode(); break; default: WriteMenuMode(menuOnHead, cki); break; } } while (MenuCallStack.Count > 0); } } }