🎨 new menu (selection) done
continuous-integration/drone/push Build is passing Details

pull/38/head
Alexandre AGOSTINHO 2 years ago
parent c5b717a6ff
commit b0b7dec22d

@ -1,4 +1,5 @@
using System; using Model;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -18,6 +19,6 @@ namespace ConsoleApp.Menu
void EnableWriteMode(); void EnableWriteMode();
void DisableWriteMode(); void DisableWriteMode();
void ToggleWriteMode(); void ToggleWriteMode();
void Return(); IMenu? Return();
} }
} }

@ -20,8 +20,12 @@ namespace ConsoleApp.Menu
private int _currentLine; private int _currentLine;
public int CurrentLine { public int CurrentLine {
get => _currentLine; get
private set {
if (_currentLine >= _selectList.Count) _currentLine = _selectList.Count - 1;
return _currentLine;
}
protected set
{ {
_currentLine = value; _currentLine = value;
if (_currentLine <= 0) _currentLine = 0; if (_currentLine <= 0) _currentLine = 0;
@ -53,9 +57,21 @@ namespace ConsoleApp.Menu
CurrentSelected = _selectList[0].Item; CurrentSelected = _selectList[0].Item;
} }
public abstract void Update(); public abstract IMenu? Return();
protected abstract List<Selector<T>> 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() public virtual void Display()
{ {
@ -84,12 +100,14 @@ namespace ConsoleApp.Menu
if (_selectList == null || _selectList.Count == 0) if (_selectList == null || _selectList.Count == 0)
_screenDisplay.AppendLine("Empty..."); _screenDisplay.AppendLine("Empty...");
_screenDisplay.AppendLine(
"\n\nHint:\n^:previous, v:next, <:ret, -enter-:select, r:search mode, -escape-:exit search mode");
Console.WriteLine(_screenDisplay); 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; public void EnableWriteMode() => WriteMode = true;

@ -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; }
}
}

@ -19,32 +19,30 @@ namespace ConsoleApp.Menu
public SearcherRecipe(RecipeCollection recipeCollection) : base("Search recipe") public SearcherRecipe(RecipeCollection recipeCollection) : base("Search recipe")
{ {
_recipeCollectionOnSearch = recipeCollection; _recipeCollectionOnSearch = recipeCollection;
Update(); _selectList = SearchInSelection();
} }
#region Methodes #region Methodes
public override void Update() protected override List<Selector<Recipe>> SearchInSelection()
{ {
RecipeCollection newRCSearchView = RecipeCollection newRCSearchView =
_recipeCollectionOnSearch.ResearchByName(InputStr.ToString()); _recipeCollectionOnSearch.ResearchByName(InputStr.ToString());
_selectList.Clear(); List<Selector<Recipe>> newSelectors = new List<Selector<Recipe>>();
foreach (Recipe recipe in newRCSearchView) foreach (Recipe recipe in newRCSearchView)
{ {
_selectList.Add(new Selector<Recipe>(recipe, $"[{recipe.Id}]: {recipe.Title}")); newSelectors.Add(new Selector<Recipe>(recipe, $"[{recipe.Id}]: {recipe.Title}"));
}
if (_selectList == null || _selectList.Count == 0)
{
CurrentSelected = null;
return;
} }
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 #endregion
} }

@ -22,18 +22,29 @@ namespace ConsoleApp
private void WriteMenuMode(Menu.IMenu menu, ConsoleKeyInfo cki) private void WriteMenuMode(Menu.IMenu menu, ConsoleKeyInfo cki)
{ {
if (!menu.WriteMode) if (!menu.WriteMode && cki.Key == ConsoleKey.R)
{ {
menu.EnableWriteMode();
return; return;
} }
if (cki.Key == ConsoleKey.Backspace && menu.InputStr.Length > 0) if (menu.WriteMode)
{ {
menu.InputStr.Remove(menu.InputStr.Length-1, 1); if (cki.Key == ConsoleKey.Escape)
return; {
} 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() public void Loop()
@ -56,18 +67,18 @@ namespace ConsoleApp
menuOnHead.SelectPrevious(); menuOnHead.SelectPrevious();
break; break;
case ConsoleKey.Enter: case ConsoleKey.Enter:
menuOnHead.Return(); Menu.IMenu? retMenu = menuOnHead.Return();
MenuCallStack.Pop(); if (retMenu is null) MenuCallStack.Pop();
else MenuCallStack.Push(retMenu);
break; break;
case ConsoleKey.R: case ConsoleKey.LeftArrow:
menuOnHead.ToggleWriteMode(); MenuCallStack.Pop();
break; break;
default: default:
WriteMenuMode(menuOnHead, cki); WriteMenuMode(menuOnHead, cki);
break; break;
} }
} while (MenuCallStack.Count > 0); } while (MenuCallStack.Count > 0);
} }
} }
} }

Loading…
Cancel
Save