public static void PrintScrollableMenu <T>(ScrollableMenu <T> menu)
        {
            if (menu.GetTotalItemNumber() < menu.GetScopeSize())
            {
                PrintMenu(menu);
            }
            else
            {
                int currentRow  = menu.GetPositionY();
                int positionX   = menu.GetPositionX();
                int dotPosition = menu.GetPositionX() + (menu.GetSizeX() / 2 - 1);
                switch (menu.GetAlignment())
                {
                case Alignment.Left:
                    break;

                case Alignment.Right:
                    positionX = positionX + menu.GetSizeX() - 1;
                    break;

                default:
                    positionX = positionX + (menu.GetSizeX() / 2 - 1);
                    break;
                }
                List <MenuItem <T> > menuitems = menu.GetMenuItemsInScope();
                for (int i = 0; i < menuitems.Count; i++)
                {
                    if (i == 0 && !menu.FirstIsInScope())
                    {
                        PrintFreeString(new FreeString("...", dotPosition, currentRow,
                                                       menuitems[i].GetColor1(), menuitems[i].GetColor2(), Alignment.Center));
                    }
                    else if (i == menuitems.Count - 1 && !menu.LastIsInScope())
                    {
                        PrintFreeString(new FreeString("...", dotPosition, currentRow,
                                                       menuitems[i].GetColor1(), menuitems[i].GetColor2(), Alignment.Center));
                    }
                    else if (i + menu.GetFirstItemIndexInScope() == menu.GetCurrentSelectedIndex())
                    {
                        PrintFreeString(new FreeString(menuitems[i].GetText(), positionX, currentRow,
                                                       menuitems[i].GetColor2(), menuitems[i].GetColor1(), menu.GetAlignment()));
                    }
                    else
                    {
                        PrintFreeString(new FreeString(menuitems[i].GetText(), positionX, currentRow,
                                                       menuitems[i].GetColor1(), menuitems[i].GetColor2(), menu.GetAlignment()));
                    }
                    currentRow++;
                }
                CleanUp();
            }
        }
Example #2
0
        public void ScrollableMenuDemo()
        {
            cHandler.Reset();
            Console.Clear();
            ScrollableMenu <int> menu = new ScrollableMenu <int>(30, 10, 20, 10, Color.Green, Color.Black);

            for (int i = 1; i <= 30; i++)
            {
                menu.AddItem($"{i}", i);
            }
            menu.AddItem("Exit", 0);

            FreeStringBundle guide = new FreeStringBundle(5, 20, 30);

            guide.Add("This menu contains 30 numbered items and an exit button");
            guide.Add("Q | LeftAlign, W | CenterAlign, E | RightAlign");
            bool exit = false;

            while (!exit)
            {
                guide.Print();
                menu.Print();
                ConsoleKey switcher = Console.ReadKey().Key;
                switch (switcher)
                {
                case ConsoleKey.Enter:
                    if (menu.GetReturn() == 0)
                    {
                        exit = true;
                    }
                    break;

                case ConsoleKey.UpArrow:
                    if (!menu.AtTop())
                    {
                        Console.Clear();
                        menu.Up();
                    }
                    break;

                case ConsoleKey.DownArrow:
                    if (!menu.AtBottem())
                    {
                        Console.Clear();
                        menu.Down();
                    }
                    break;

                case ConsoleKey.Q:
                    menu.LeftAlign();
                    Console.Clear();
                    break;

                case ConsoleKey.W:
                    menu.CenterAlign();
                    Console.Clear();
                    break;

                case ConsoleKey.E:
                    menu.RightAlign();
                    Console.Clear();
                    break;
                }
            }
        }