diff --git a/MCTG/ConsoleApp/Menu/Core/PlainText.cs b/MCTG/ConsoleApp/Menu/Core/PlainText.cs index 6439c62..3424e82 100644 --- a/MCTG/ConsoleApp/Menu/Core/PlainText.cs +++ b/MCTG/ConsoleApp/Menu/Core/PlainText.cs @@ -25,7 +25,7 @@ namespace ConsoleApp.Menu.Core #endregion #region IMenu implementation - public IMenu? Return() { return null; } + public virtual IMenu? Return() { return null; } public void Display() { Console.Clear(); diff --git a/MCTG/ConsoleApp/Menu/LogoutButton.cs b/MCTG/ConsoleApp/Menu/LogoutButton.cs new file mode 100644 index 0000000..aa10600 --- /dev/null +++ b/MCTG/ConsoleApp/Menu/LogoutButton.cs @@ -0,0 +1,27 @@ +using ConsoleApp.Menu.Core; +using Model.Managers; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ConsoleApp.Menu +{ + internal class LogoutButton : PlainText + { + MasterManager _masterMgr; + + public LogoutButton(MasterManager masterManager) + : base("Logout ? ('ENTER' yes, '<' no)") + { + _masterMgr = masterManager; + } + + public override IMenu? Return() + { + _masterMgr.Logout(); + return base.Return(); + } + } +} diff --git a/MCTG/ConsoleApp/Menu/MainMenu.cs b/MCTG/ConsoleApp/Menu/MainMenu.cs index 6492e44..58c6eb1 100644 --- a/MCTG/ConsoleApp/Menu/MainMenu.cs +++ b/MCTG/ConsoleApp/Menu/MainMenu.cs @@ -19,12 +19,14 @@ namespace ConsoleApp.Menu : base("Main menu") { _allSelectors.Add(new Selector( - new SearcherRecipe(masterManager.DataMgr.GetRecipes("search")), "Recipe search")); + new SearcherRecipe(masterManager.DataMgr.GetRecipes("search")), "Recipe search")); _allSelectors.Add( - new Selector(new ConnectionMenu(masterManager), "Connection")); + new Selector(new ConnectionMenu(masterManager), "Connection")); _allSelectors.Add( - new Selector(new ProfileMenu(masterManager), "User profile")); + new Selector(new ProfileMenu(masterManager), "User profile")); + _allSelectors.Add( + new Selector(new LogoutButton(masterManager), "Logout")); } protected override List> SearchInSelection() @@ -32,7 +34,8 @@ namespace ConsoleApp.Menu List> selectors = base.SearchInSelection(); if (MasterManager.CurrentConnectedUser == null) - return selectors.Except(selectors.Where(s => s.Line == "User profile")).ToList(); + return selectors.Except(selectors.Where(s => s.Line == "User profile")) + .Except(selectors.Where(s => s.Line == "Logout")).ToList(); else return selectors.Except(selectors.Where(s => s.Line == "Connection")).ToList(); } diff --git a/MCTG/ConsoleApp/MenuManager.cs b/MCTG/ConsoleApp/MenuManager.cs index 4d34b2e..e215e8c 100644 --- a/MCTG/ConsoleApp/MenuManager.cs +++ b/MCTG/ConsoleApp/MenuManager.cs @@ -76,6 +76,7 @@ namespace ConsoleApp case ConsoleKey.Enter: IMenu? retMenu = menuOnHead.Return(); if (retMenu is null) MenuCallStack.Pop(); + else if (ReferenceEquals(retMenu, menuOnHead)) break; else MenuCallStack.Push(retMenu); break; case ConsoleKey.LeftArrow: