You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.1 KiB
74 lines
2.1 KiB
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<Menu.IMenu> MenuCallStack { get; set; }
|
|
|
|
public MenuManager(DataManager dataManager, Menu.IMenu firstMenu)
|
|
{
|
|
DataManager = dataManager;
|
|
|
|
MenuCallStack = new Stack<Menu.IMenu>();
|
|
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);
|
|
|
|
}
|
|
}
|
|
}
|