Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace Menu
- {
- internal class Program
- {
- private static readonly Random random = new Random();
- private static void Main(string[] args)
- {
- var mujList = new List();
- mujList.Add("Boháč");
- mujList.Add("kokot");
- var count = 2;
- var root = new MenuItem("Hlavní menu");
- var item1 = new MenuItem("Fronta");
- var item2 = new MenuItem("Zásobník");
- var item3 = new MenuItem("Přidat");
- var item4 = new MenuItem("Odebrat");
- var item5 = new MenuItem("Počet");
- var item6 = new MenuItem("Peek");
- var item7 = new MenuItem("Vypiš");
- root.Items.Add(item1);
- root.Items.Add(item2);
- item1.Items.Add(item3);
- item1.Items.Add(item4);
- item1.Items.Add(item5);
- item1.Items.Add(item6);
- item1.Items.Add(item7);
- var current = root;
- while (true)
- {
- current.Draw();
- var key = Console.ReadKey(true);
- switch (key.Key)
- {
- case ConsoleKey.UpArrow:
- if (current.SelectedItemIndex - 1 >= 0)
- current.SelectedItemIndex--;
- break;
- case ConsoleKey.DownArrow:
- if (current.SelectedItemIndex + 1 < current.Items.Count)
- current.SelectedItemIndex++;
- break;
- case ConsoleKey.Enter:
- var selected = current.Items[current.SelectedItemIndex];
- if (selected == item3)
- {
- mujList.Add(RandomString(7));
- count++;
- }
- else if (selected == item4)
- {
- mujList.RemoveAt(0);
- count--;
- }
- else if (selected == item5)
- {
- Console.WriteLine(count);
- Console.ReadLine();
- }
- else if (selected == item6)
- {
- }
- else if (selected == item7)
- {
- foreach (var item in mujList)
- Console.WriteLine(item);
- Console.ReadLine();
- }
- else
- {
- current = selected;
- }
- break;
- case ConsoleKey.Escape:
- current = root;
- break;
- }
- }
- }
- public static string RandomString(int length)
- {
- const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- return new string(Enumerable.Repeat(chars, length)
- .Select(s => s[random.Next(s.Length)]).ToArray());
- }
- }
- internal class MenuItem
- {
- private int _selectedItemIndex;
- public MenuItem(string title)
- {
- Title = title;
- }
- public string Title { get; set; } = "Titulek";
- public List<MenuItem> Items { get; set; } = new List<MenuItem>();
- public int SelectedItemIndex
- {
- get => _selectedItemIndex;
- set
- {
- if (value < 0) throw new Exception("Vybraná položka menu nemůže být záporná");
- if (value >= Items.Count)
- throw new Exception("Vybraná položka menu musí být v rozsahu 0-počet položek");
- _selectedItemIndex = value;
- }
- }
- public int Width
- {
- get
- {
- var width = Title.Length;
- for (var j = 0; j < Items.Count; j++)
- if (width < Items[j].Title.Length)
- width = Items[j].Title.Length;
- return width;
- }
- }
- public void Draw()
- {
- Console.Clear();
- Console.OutputEncoding = Encoding.UTF8;
- var w = Width;
- var centerX = Console.WindowWidth / 2 - w / 2;
- Console.CursorTop = Console.WindowHeight / 2 - (Items.Count + 4) / 2;
- Console.CursorLeft = centerX - w / 2 - 1;
- Console.Write("┌");
- for (var i = 0; i < w; i++)
- Console.Write("─");
- Console.WriteLine("┐");
- Console.CursorLeft = centerX - w / 2 - 1;
- Console.WriteLine($"│{Title.PadLeft(w)}│");
- Console.CursorLeft = centerX - w / 2 - 1;
- Console.Write("├");
- for (var i = 0; i < w; i++)
- Console.Write("─");
- Console.WriteLine("┤");
- for (var index = 0; index < Items.Count; index++)
- {
- var menuItem = Items[index];
- Console.CursorLeft = centerX - w / 2 - 1;
- Console.Write($"│");
- if (index == _selectedItemIndex)
- {
- var tmp = Console.BackgroundColor;
- Console.BackgroundColor = Console.ForegroundColor;
- Console.ForegroundColor = tmp;
- }
- Console.Write($"{menuItem.Title.PadLeft(w)}");
- if (index == _selectedItemIndex)
- {
- var tmp = Console.BackgroundColor;
- Console.BackgroundColor = Console.ForegroundColor;
- Console.ForegroundColor = tmp;
- }
- Console.WriteLine("│");
- }
- Console.CursorLeft = centerX - w / 2 - 1;
- Console.Write("└");
- for (var i = 0; i < w; i++)
- Console.Write("─");
- Console.WriteLine("┘");
- }
- }
- internal class ListItem
- {
- public string Data;
- public ListItem Next;
- }
- internal class List : IEnumerable
- {
- private ListItem first;
- private ListItem last;
- public IEnumerator GetEnumerator()
- {
- return new MyEnumerator(first);
- }
- public void Add(string data)
- {
- var tmp = new ListItem();
- tmp.Data = data;
- if (last == null)
- {
- first = last = tmp;
- }
- else
- {
- last.Next = tmp;
- last = tmp;
- }
- }
- public void RemoveAt(int index)
- {
- if (index == 0)
- {
- var tmp = first.Next;
- first = tmp;
- }
- else
- {
- var tmp = first;
- for (var i = 0; i < index - 1; i++)
- tmp = tmp.Next;
- tmp.Next = tmp.Next.Next;
- }
- }
- private class MyEnumerator : IEnumerator
- {
- private ListItem curr;
- private readonly ListItem first;
- public MyEnumerator(ListItem first)
- {
- this.first = curr = first;
- }
- public bool MoveNext()
- {
- curr = curr.Next;
- return curr != null;
- }
- public void Reset()
- {
- curr = first;
- }
- public object Current => curr.Data;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement