From b0b7dec22dc03438682e29be02492f5158b74159 Mon Sep 17 00:00:00 2001 From: Alexandre Agostinho Date: Sat, 13 May 2023 17:20:44 +0200 Subject: [PATCH] :art: new menu (selection) done --- MCTG/ConsoleApp/Menu/IMenu.cs | 5 ++-- MCTG/ConsoleApp/Menu/Menu.cs | 30 ++++++++++++++++++----- MCTG/ConsoleApp/Menu/PlainText.cs | 33 ++++++++++++++++++++++++++ MCTG/ConsoleApp/Menu/SearcherRecipe.cs | 26 ++++++++++---------- MCTG/ConsoleApp/MenuManager.cs | 33 +++++++++++++++++--------- 5 files changed, 94 insertions(+), 33 deletions(-) create mode 100644 MCTG/ConsoleApp/Menu/PlainText.cs diff --git a/MCTG/ConsoleApp/Menu/IMenu.cs b/MCTG/ConsoleApp/Menu/IMenu.cs index b93359c..0816923 100644 --- a/MCTG/ConsoleApp/Menu/IMenu.cs +++ b/MCTG/ConsoleApp/Menu/IMenu.cs @@ -1,4 +1,5 @@ -using System; +using Model; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -18,6 +19,6 @@ namespace ConsoleApp.Menu void EnableWriteMode(); void DisableWriteMode(); void ToggleWriteMode(); - void Return(); + IMenu? Return(); } } diff --git a/MCTG/ConsoleApp/Menu/Menu.cs b/MCTG/ConsoleApp/Menu/Menu.cs index 86c7639..ae0deba 100644 --- a/MCTG/ConsoleApp/Menu/Menu.cs +++ b/MCTG/ConsoleApp/Menu/Menu.cs @@ -20,8 +20,12 @@ namespace ConsoleApp.Menu private int _currentLine; public int CurrentLine { - get => _currentLine; - private set + get + { + if (_currentLine >= _selectList.Count) _currentLine = _selectList.Count - 1; + return _currentLine; + } + protected set { _currentLine = value; if (_currentLine <= 0) _currentLine = 0; @@ -53,9 +57,21 @@ namespace ConsoleApp.Menu CurrentSelected = _selectList[0].Item; } - public abstract void Update(); + public abstract IMenu? Return(); + + protected abstract List> SearchInSelection(); + + public void Update() + { + _selectList = SearchInSelection(); - public abstract void Return(); + if (_selectList == null || _selectList.Count == 0) + { + CurrentSelected = default; + return; + } + CurrentSelected = _selectList[CurrentLine].Item; + } public virtual void Display() { @@ -84,12 +100,14 @@ namespace ConsoleApp.Menu if (_selectList == null || _selectList.Count == 0) _screenDisplay.AppendLine("Empty..."); + _screenDisplay.AppendLine( + "\n\nHint:\n^:previous, v:next, <:ret, -enter-:select, r:search mode, -escape-:exit search mode"); Console.WriteLine(_screenDisplay); } - public void SelectNext() => CurrentSelected = _selectList[CurrentLine++].Item; + public void SelectNext() => ++CurrentLine; - public void SelectPrevious() => CurrentSelected = _selectList[CurrentLine--].Item; + public void SelectPrevious() => --CurrentLine; public void EnableWriteMode() => WriteMode = true; diff --git a/MCTG/ConsoleApp/Menu/PlainText.cs b/MCTG/ConsoleApp/Menu/PlainText.cs new file mode 100644 index 0000000..fa67426 --- /dev/null +++ b/MCTG/ConsoleApp/Menu/PlainText.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ConsoleApp.Menu +{ + internal class PlainText : IMenu + { + public PlainText(string text) + { + InputStr = new StringBuilder(text); + WriteMode = false; + } + + public IMenu? Return() { return null; } + public void Display() + { + Console.Clear(); + Console.WriteLine(InputStr); + } + + public bool WriteMode { get; set; } + public StringBuilder InputStr { get; set; } + public void DisableWriteMode() { return; } + public void EnableWriteMode() { return; } + public void SelectNext() { return; } + public void SelectPrevious() { return; } + public void ToggleWriteMode() { return; } + public void Update() { return; } + } +} diff --git a/MCTG/ConsoleApp/Menu/SearcherRecipe.cs b/MCTG/ConsoleApp/Menu/SearcherRecipe.cs index e509938..c517763 100644 --- a/MCTG/ConsoleApp/Menu/SearcherRecipe.cs +++ b/MCTG/ConsoleApp/Menu/SearcherRecipe.cs @@ -19,32 +19,30 @@ namespace ConsoleApp.Menu public SearcherRecipe(RecipeCollection recipeCollection) : base("Search recipe") { _recipeCollectionOnSearch = recipeCollection; - Update(); + _selectList = SearchInSelection(); } #region Methodes - public override void Update() + protected override List> SearchInSelection() { - RecipeCollection newRCSearchView = + RecipeCollection newRCSearchView = _recipeCollectionOnSearch.ResearchByName(InputStr.ToString()); - _selectList.Clear(); - + List> newSelectors = new List>(); foreach (Recipe recipe in newRCSearchView) { - _selectList.Add(new Selector(recipe, $"[{recipe.Id}]: {recipe.Title}")); - } - if (_selectList == null || _selectList.Count == 0) - { - CurrentSelected = null; - return; + newSelectors.Add(new Selector(recipe, $"[{recipe.Id}]: {recipe.Title}")); } - CurrentSelected = _selectList[0].Item; + + return newSelectors; } - public override void Return() + public override IMenu? Return() { - Console.WriteLine(CurrentSelected); + if (CurrentSelected == null) + throw new Exception("Error: CurrentSelected is null."); + + return new PlainText(CurrentSelected.ToString()); } #endregion } diff --git a/MCTG/ConsoleApp/MenuManager.cs b/MCTG/ConsoleApp/MenuManager.cs index cfd7a0f..7eef410 100644 --- a/MCTG/ConsoleApp/MenuManager.cs +++ b/MCTG/ConsoleApp/MenuManager.cs @@ -22,18 +22,29 @@ namespace ConsoleApp private void WriteMenuMode(Menu.IMenu menu, ConsoleKeyInfo cki) { - if (!menu.WriteMode) + if (!menu.WriteMode && cki.Key == ConsoleKey.R) { + menu.EnableWriteMode(); return; } - if (cki.Key == ConsoleKey.Backspace && menu.InputStr.Length > 0) + if (menu.WriteMode) { - menu.InputStr.Remove(menu.InputStr.Length-1, 1); - return; - } + if (cki.Key == ConsoleKey.Escape) + { + menu.DisableWriteMode(); + menu.InputStr.Clear(); + return; + } - menu.InputStr.Append(cki.KeyChar); + 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() @@ -56,18 +67,18 @@ namespace ConsoleApp menuOnHead.SelectPrevious(); break; case ConsoleKey.Enter: - menuOnHead.Return(); - MenuCallStack.Pop(); + Menu.IMenu? retMenu = menuOnHead.Return(); + if (retMenu is null) MenuCallStack.Pop(); + else MenuCallStack.Push(retMenu); break; - case ConsoleKey.R: - menuOnHead.ToggleWriteMode(); + case ConsoleKey.LeftArrow: + MenuCallStack.Pop(); break; default: WriteMenuMode(menuOnHead, cki); break; } } while (MenuCallStack.Count > 0); - } } }