Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.01 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6.  
  7. namespace Menu
  8. {
  9. internal class Program
  10. {
  11. private static readonly Random random = new Random();
  12.  
  13. private static void Main(string[] args)
  14. {
  15. var mujList = new List();
  16. mujList.Add("Boháč");
  17. mujList.Add("kokot");
  18. var count = 2;
  19.  
  20.  
  21. var root = new MenuItem("Hlavní menu");
  22. var item1 = new MenuItem("Fronta");
  23. var item2 = new MenuItem("Zásobník");
  24. var item3 = new MenuItem("Přidat");
  25. var item4 = new MenuItem("Odebrat");
  26. var item5 = new MenuItem("Počet");
  27. var item6 = new MenuItem("Peek");
  28. var item7 = new MenuItem("Vypiš");
  29.  
  30.  
  31. root.Items.Add(item1);
  32. root.Items.Add(item2);
  33.  
  34. item1.Items.Add(item3);
  35. item1.Items.Add(item4);
  36. item1.Items.Add(item5);
  37. item1.Items.Add(item6);
  38. item1.Items.Add(item7);
  39. var current = root;
  40. while (true)
  41. {
  42. current.Draw();
  43. var key = Console.ReadKey(true);
  44. switch (key.Key)
  45. {
  46. case ConsoleKey.UpArrow:
  47. if (current.SelectedItemIndex - 1 >= 0)
  48. current.SelectedItemIndex--;
  49. break;
  50. case ConsoleKey.DownArrow:
  51. if (current.SelectedItemIndex + 1 < current.Items.Count)
  52. current.SelectedItemIndex++;
  53. break;
  54. case ConsoleKey.Enter:
  55. var selected = current.Items[current.SelectedItemIndex];
  56. if (selected == item3)
  57. {
  58. mujList.Add(RandomString(7));
  59. count++;
  60. }
  61. else if (selected == item4)
  62. {
  63. mujList.RemoveAt(0);
  64. count--;
  65. }
  66. else if (selected == item5)
  67. {
  68. Console.WriteLine(count);
  69. Console.ReadLine();
  70. }
  71. else if (selected == item6)
  72. {
  73.  
  74. }
  75. else if (selected == item7)
  76. {
  77. foreach (var item in mujList)
  78. Console.WriteLine(item);
  79. Console.ReadLine();
  80. }
  81. else
  82. {
  83. current = selected;
  84. }
  85. break;
  86. case ConsoleKey.Escape:
  87. current = root;
  88. break;
  89. }
  90. }
  91. }
  92.  
  93. public static string RandomString(int length)
  94. {
  95. const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  96. return new string(Enumerable.Repeat(chars, length)
  97. .Select(s => s[random.Next(s.Length)]).ToArray());
  98. }
  99. }
  100.  
  101.  
  102. internal class MenuItem
  103. {
  104. private int _selectedItemIndex;
  105.  
  106.  
  107. public MenuItem(string title)
  108. {
  109. Title = title;
  110. }
  111.  
  112. public string Title { get; set; } = "Titulek";
  113. public List<MenuItem> Items { get; set; } = new List<MenuItem>();
  114.  
  115. public int SelectedItemIndex
  116. {
  117. get => _selectedItemIndex;
  118. set
  119. {
  120. if (value < 0) throw new Exception("Vybraná položka menu nemůže být záporná");
  121. if (value >= Items.Count)
  122. throw new Exception("Vybraná položka menu musí být v rozsahu 0-počet položek");
  123. _selectedItemIndex = value;
  124. }
  125. }
  126.  
  127. public int Width
  128. {
  129. get
  130. {
  131. var width = Title.Length;
  132. for (var j = 0; j < Items.Count; j++)
  133. if (width < Items[j].Title.Length)
  134. width = Items[j].Title.Length;
  135. return width;
  136. }
  137. }
  138.  
  139. public void Draw()
  140. {
  141. Console.Clear();
  142. Console.OutputEncoding = Encoding.UTF8;
  143.  
  144. var w = Width;
  145.  
  146. var centerX = Console.WindowWidth / 2 - w / 2;
  147.  
  148. Console.CursorTop = Console.WindowHeight / 2 - (Items.Count + 4) / 2;
  149. Console.CursorLeft = centerX - w / 2 - 1;
  150.  
  151. Console.Write("┌");
  152. for (var i = 0; i < w; i++)
  153. Console.Write("─");
  154. Console.WriteLine("┐");
  155.  
  156. Console.CursorLeft = centerX - w / 2 - 1;
  157. Console.WriteLine($"│{Title.PadLeft(w)}│");
  158. Console.CursorLeft = centerX - w / 2 - 1;
  159.  
  160. Console.Write("├");
  161. for (var i = 0; i < w; i++)
  162. Console.Write("─");
  163. Console.WriteLine("┤");
  164.  
  165. for (var index = 0; index < Items.Count; index++)
  166. {
  167. var menuItem = Items[index];
  168. Console.CursorLeft = centerX - w / 2 - 1;
  169. Console.Write($"│");
  170. if (index == _selectedItemIndex)
  171. {
  172. var tmp = Console.BackgroundColor;
  173. Console.BackgroundColor = Console.ForegroundColor;
  174. Console.ForegroundColor = tmp;
  175. }
  176. Console.Write($"{menuItem.Title.PadLeft(w)}");
  177. if (index == _selectedItemIndex)
  178. {
  179. var tmp = Console.BackgroundColor;
  180. Console.BackgroundColor = Console.ForegroundColor;
  181. Console.ForegroundColor = tmp;
  182. }
  183. Console.WriteLine("│");
  184. }
  185.  
  186. Console.CursorLeft = centerX - w / 2 - 1;
  187.  
  188. Console.Write("└");
  189. for (var i = 0; i < w; i++)
  190. Console.Write("─");
  191. Console.WriteLine("┘");
  192. }
  193. }
  194.  
  195. internal class ListItem
  196. {
  197. public string Data;
  198. public ListItem Next;
  199. }
  200.  
  201. internal class List : IEnumerable
  202. {
  203. private ListItem first;
  204. private ListItem last;
  205.  
  206. public IEnumerator GetEnumerator()
  207. {
  208. return new MyEnumerator(first);
  209. }
  210.  
  211. public void Add(string data)
  212. {
  213. var tmp = new ListItem();
  214. tmp.Data = data;
  215. if (last == null)
  216. {
  217. first = last = tmp;
  218. }
  219. else
  220. {
  221. last.Next = tmp;
  222. last = tmp;
  223. }
  224. }
  225.  
  226.  
  227. public void RemoveAt(int index)
  228. {
  229. if (index == 0)
  230. {
  231. var tmp = first.Next;
  232. first = tmp;
  233. }
  234. else
  235. {
  236. var tmp = first;
  237. for (var i = 0; i < index - 1; i++)
  238. tmp = tmp.Next;
  239. tmp.Next = tmp.Next.Next;
  240. }
  241. }
  242.  
  243. private class MyEnumerator : IEnumerator
  244. {
  245. private ListItem curr;
  246. private readonly ListItem first;
  247.  
  248. public MyEnumerator(ListItem first)
  249. {
  250. this.first = curr = first;
  251. }
  252.  
  253. public bool MoveNext()
  254. {
  255. curr = curr.Next;
  256. return curr != null;
  257. }
  258.  
  259. public void Reset()
  260. {
  261. curr = first;
  262. }
  263.  
  264. public object Current => curr.Data;
  265. }
  266. }
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement