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.
SAE-2.01/MCTG/ConsoleApp/Menu/Menu.cs

80 lines
2.3 KiB

using Model;
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp.Menu
{
internal abstract class Menu<T> : IMenu
{
protected StringBuilder _screenDisplay;
protected readonly List<Selector<T>> _selectList;
public string Title { get; private set; }
public StringBuilder InputStr { get; set; }
public int CurrentLine { get; private set; }
public T CurrentSelected { get; private set; }
public bool WriteMode { get; set; }
public Menu(string title, params Selector<T>[] selections )
{
if (selections == null || selections.Length == 0)
throw new ArgumentException("Error: a menu must contain at least 1 selection");
Title = title;
CurrentLine = 0;
CurrentSelected = selections[0].Item;
WriteMode = false;
_selectList = new List<Selector<T>>(selections);
_screenDisplay = new StringBuilder();
InputStr = new StringBuilder();
}
public virtual void Display()
{
Console.WriteLine(_screenDisplay);
}
public virtual void Update()
{
_screenDisplay.AppendLine($"[ {Title} ]");
_screenDisplay.AppendLine("-------------------------------------------\n");
foreach (Selector<T> selector in _selectList)
{
if (selector.Equals(CurrentSelected))
_screenDisplay.Append($"> ");
else
_screenDisplay.Append($" ");
_screenDisplay.AppendLine($"{selector.Line}");
}
}
public void SelectNext()
{
CurrentSelected = _selectList[++CurrentLine].Item;
}
public void SelectPrevious()
{
CurrentSelected = _selectList[--CurrentLine].Item
}
public void EnableWriteMode()
{
WriteMode = true;
}
public void DisableWriteMode()
{
WriteMode = false;
}
public abstract void Return();
}
}