🎨 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.Linq;
using System.Text;
@ -18,6 +19,6 @@ namespace ConsoleApp.Menu
void EnableWriteMode();
void DisableWriteMode();
void ToggleWriteMode();
void Return();
IMenu? Return();
}
}

@ -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<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()
{
@ -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;

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

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

Loading…
Cancel
Save