Exemple #1
0
        public static selectRange ClearAndPrint(this cursorZone zone, cursor c, String content)
        {
            selectRange before = null;

            before = zone.ClearZoneAndSet();

            Console.CursorLeft = zone.x;
            Console.CursorTop  = zone.innerHeight;

            consoleWriteLine(content);

            Console.CursorLeft = zone.innerLeftPosition + c.x;
            Console.CursorTop  = zone.innerHeight + c.y;

            return(before);
        }
        public void run()
        {
            Console.CursorVisible = true;

            //ConsoleKey output = ConsoleKey.NoName; // = new Boolean();

            zone = new cursorZone(Console.BufferWidth, 1, 0);

            //Console.WriteLine();

            DateTime startTime    = DateTime.Now;
            DateTime lastReminder = DateTime.Now;

            doRedraw();

            while (active)
            {
                String input = "";

                Boolean redraw = false;

                if (Console.KeyAvailable == false)
                {
                    Thread.Sleep(100);
                    continue;
                }

                if (Console.KeyAvailable)
                {
                    redraw = true;
                    ConsoleKeyInfo cki = Console.ReadKey(false);

                    if (cki.Modifiers.HasFlag(ConsoleModifiers.Alt))
                    {
                        input = "ALT+";
                    }
                    if (cki.Modifiers.HasFlag(ConsoleModifiers.Control))
                    {
                        input = "CTRL+";
                    }
                    if (cki.Modifiers.HasFlag(ConsoleModifiers.Shift))
                    {
                        input = "SHIFT+";
                    }

                    input += cki.Key.ToString();

                    switch (cki.Key)
                    {
                    case ConsoleKey.F1:
                    case ConsoleKey.F2:
                    case ConsoleKey.F3:
                    case ConsoleKey.F4:
                    case ConsoleKey.F5:
                    case ConsoleKey.F6:
                    case ConsoleKey.F7:
                    case ConsoleKey.F8:
                    case ConsoleKey.F9:
                    case ConsoleKey.F10:
                    case ConsoleKey.F11:
                    case ConsoleKey.F12:
                    case ConsoleKey.Escape:
                        current     = input + cki.Key.ToString();
                        specialCall = cki.Key;
                        active      = false;
                        break;

                    case ConsoleKey.DownArrow:
                        if (historyIndex > 0)
                        {
                            historyIndex--;
                        }

                        break;

                    case ConsoleKey.UpArrow:
                        if (historyIndex < history.Count())
                        {
                            historyIndex--;
                        }
                        break;

                    case ConsoleKey.Tab:
                        break;

                    case ConsoleKey.Enter:
                        active = false;
                        break;

                    case ConsoleKey.Home:
                        c.x = 0;
                        break;

                    case ConsoleKey.End:
                        c.moveTo(current.Length, c.y);
                        break;

                    case ConsoleKey.LeftArrow:
                        c.prev();
                        break;

                    case ConsoleKey.RightArrow:
                        c.next();

                        break;

                    case ConsoleKey.Delete:
                        if (c.x < current.Length)
                        {
                            current = current.Remove(c.x, 1);
                        }
                        break;

                    case ConsoleKey.Backspace:
                        c.prev(1);

                        if (c.x < current.Length)
                        {
                            current = current.Remove(c.x, 1);
                        }

                        break;

                    case ConsoleKey.Spacebar:
                    default:
                        if (cki.KeyChar != char.MinValue)
                        {
                            if (c.x < current.Length)
                            {
                                current = current.Insert(c.x, cki.KeyChar.ToString());
                            }
                            else
                            {
                                current = current + cki.KeyChar.ToString();
                            }
                            c.next(false);
                        }
                        break;
                    }
                }
                else
                {
                    if (startTime.Subtract(lastReminder).TotalSeconds > 5)
                    {
                        lastReminder = DateTime.Now;
                        redraw       = true;
                    }
                    else
                    {
                        //Thread.Sleep(500);
                    }
                }

                if (redraw)
                {
                    doRedraw();
                    // Loop until input is entered.
                }
            }

            zone.ClearZoneAndSet();
            Console.CursorLeft = 0;
        }