Advertisement
Guest User

Untitled

a guest
Nov 14th, 2018
518
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.13 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace SimpleCMenu.Menu
  6. {
  7. public class ConsoleMenu
  8. {
  9. #region Public var
  10.  
  11. public ConsoleMenu ParentMenu { get; set; }
  12.  
  13. public string Header { get; set; }
  14. public string SubTitle { get; set; }
  15. public string CursorText { get; set; }
  16. public ConsoleColor CursorColor { get; set; }
  17. public ConsoleColor HeaderColor { get; set; }
  18. public ConsoleColor ForeColor { get; set; }
  19. public ConsoleColor MenuItemColor { get; set; }
  20. public ConsoleColor SubTitleColor { get; set; }
  21.  
  22. #endregion
  23.  
  24. #region Private var
  25.  
  26. private List<MenuItem> menuItemList;
  27.  
  28. private int cursor;
  29. private bool exit;
  30.  
  31. #endregion
  32.  
  33. #region Constructor
  34.  
  35. public ConsoleMenu(string cursorText = "->")
  36. {
  37. menuItemList = new List<MenuItem>();
  38. cursor = 0;
  39.  
  40. this.CursorText = cursorText;
  41. CursorColor = ConsoleColor.Yellow;
  42. HeaderColor = ConsoleColor.Blue;
  43. ForeColor = ConsoleColor.White;
  44. MenuItemColor = ConsoleColor.White;
  45. SubTitleColor = ConsoleColor.White;
  46. }
  47.  
  48. #endregion
  49.  
  50. #region Public methods
  51.  
  52. public bool addMenuItem(int id, string text, Action action)
  53. {
  54. // check if it dosen't already exists
  55. if (!menuItemList.Any(item => item.ID == id))
  56. {
  57. menuItemList.Add(new MenuItem(id, text, action));
  58. return true;
  59. }
  60. return false;
  61. }
  62.  
  63. public bool removeMenuItem(int id)
  64. {
  65. throw new NotImplementedException();
  66. }
  67.  
  68. #endregion
  69.  
  70. #region Public Virtual methods
  71.  
  72. public virtual void drawHeader()
  73. {
  74. Console.ForegroundColor = HeaderColor;
  75. Console.WriteLine(Header);
  76. Console.ForegroundColor = ForeColor;
  77. }
  78.  
  79. public virtual void drawWithHeader()
  80. {
  81. drawHeader();
  82. draw();
  83. }
  84.  
  85. public virtual void draw()
  86. {
  87. Console.WriteLine(SubTitle);
  88.  
  89. for (int i = 0; i < menuItemList.Count; i++)
  90. {
  91. if (i == cursor)
  92. {
  93. Console.ForegroundColor = CursorColor;
  94. Console.Write(CursorText + " ");
  95. Console.WriteLine(menuItemList[i].Text);
  96. Console.ForegroundColor = ForeColor;
  97. }
  98. else
  99. {
  100. Console.Write(new string(' ', (CursorText.Length + 1)));
  101. Console.WriteLine(menuItemList[i].Text);
  102. }
  103. }
  104. }
  105.  
  106. public virtual void clear()
  107. {
  108. Console.Clear();
  109. }
  110.  
  111. public virtual void clearWithoutHeader()
  112. {
  113. Console.Clear();
  114. drawHeader();
  115. }
  116.  
  117. public virtual void showMenu()
  118. {
  119. Console.CursorVisible = false;
  120. Console.Clear();
  121. drawWithHeader();
  122. exit = false;
  123. while (!exit)
  124. {
  125. updateMenu();
  126. }
  127. }
  128.  
  129. public virtual void hideMenu()
  130. {
  131. exit = true;
  132. }
  133.  
  134. public virtual void updateMenu()
  135. {
  136. switch (Console.ReadKey(true).Key)
  137. {
  138. case ConsoleKey.UpArrow:
  139. {
  140. if (cursor > 0)
  141. {
  142. cursor--;
  143. Console.Clear();
  144. drawWithHeader();
  145. }
  146. }
  147. break;
  148. case ConsoleKey.DownArrow:
  149. {
  150. if (cursor < (menuItemList.Count - 1))
  151. {
  152. cursor++;
  153. Console.Clear();
  154. drawWithHeader();
  155. }
  156. }
  157. break;
  158. case ConsoleKey.Escape:
  159. {
  160. if (ParentMenu != null)
  161. {
  162.  
  163. hideMenu();
  164. }
  165. }
  166. break;
  167. case ConsoleKey.Enter:
  168. {
  169. Console.Clear();
  170. drawHeader();
  171. Console.CursorVisible = true;
  172. menuItemList[cursor].Action();
  173. Console.CursorVisible = false;
  174. Console.Clear();
  175. drawWithHeader();
  176. }
  177. break;
  178. default:
  179. {
  180. // Unsuported key. Do nothing....
  181. }
  182. break;
  183. }
  184. }
  185.  
  186. #endregion
  187. }
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement