using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp.Menu { internal abstract partial class Entry : Menu { private List _steps = new List(); protected Entry(string title, params EntryStep[] entrySteps) : base(title) { _steps = entrySteps.ToList(); _allSelectors = ConvertEntryStepsInSelector(); _selectList = _allSelectors; } private List> ConvertEntryStepsInSelector() { List> newSelectors = new List>(); foreach (EntryStep step in _steps) { newSelectors.Add(new Selector(step, step.Description)); } return newSelectors; } public override void WriteMenuMode(ConsoleKeyInfo cki) { if (!WriteMode && cki.Key == ConsoleKey.R) { EnableWriteMode(); return; } if (WriteMode) { if (cki.Key == ConsoleKey.Escape) { if (CurrentSelected is null) throw new Exception("Error: CurrentSelected is null."); CurrentSelected.Input = InputStr.ToString(); DisableWriteMode(); InputStr.Clear(); return; } if (cki.Key == ConsoleKey.Backspace && InputStr.Length > 0) { InputStr.Remove(InputStr.Length - 1, 1); return; } InputStr.Append(cki.KeyChar); } } public override void Update() { if (_selectList == null || _selectList.Count == 0) { CurrentSelected = default; return; } CurrentSelected = _selectList[CurrentLine].Item; } public override void Display() { _screenDisplay.Clear(); Console.Clear(); _screenDisplay.AppendLine($"[ {Title} ]"); _screenDisplay.AppendLine("-------------------------------------------"); for (int i = 0; i < _selectList.Count; i++) { if (CurrentLine == i) _screenDisplay.Append($"> "); else _screenDisplay.Append($" "); _screenDisplay.Append($"{_selectList[i].Line} {_selectList[i].Item.Input}"); if (CurrentLine == i && WriteMode) _screenDisplay.Append(InputStr.ToString()); _screenDisplay.AppendLine(); } if (_selectList == null || _selectList.Count == 0) _screenDisplay.AppendLine("Empty..."); _screenDisplay.AppendLine( "\n\nHint:\n^:previous, v:next, <:ret, -enter-:return, r:write, -escape-:exit search mode"); Console.WriteLine(_screenDisplay); } } }