Mono.Terminal.MenuBar.ProcessKey C# (CSharp) Method

ProcessKey() public method

public ProcessKey ( int key ) : bool
key int
return bool
        public override bool ProcessKey(int key)
        {
            switch (key){
            case Curses.KeyUp:
                if (Menus [selected].Children == null)
                    return false;

                int current = Menus [selected].Current;
                do {
                    current--;
                    if (current < 0)
                        current = Menus [selected].Children.Length-1;
                } while (Menus [selected].Children [current] == null);
                Menus [selected].Current = current;

                Redraw ();
                Curses.refresh ();
                return true;

            case Curses.KeyDown:
                if (Menus [selected].Children == null)
                    return false;

                do {
                    Menus [selected].Current = (Menus [selected].Current+1) % Menus [selected].Children.Length;
                } while (Menus [selected].Children [Menus [selected].Current] == null);

                Redraw ();
                Curses.refresh ();
                break;

            case Curses.KeyLeft:
                selected--;
                if (selected < 0)
                    selected = Menus.Length-1;
                break;
            case Curses.KeyRight:
                selected = (selected + 1) % Menus.Length;
                break;

            case '\n':
                if (Menus [selected].Children == null)
                    return false;

                Selected (Menus [selected].Children [Menus [selected].Current]);
                break;

            case 27:
            case 3:
                Running = false;
                break;

            default:
                if ((key >= 'a' && key <= 'z') || (key >= 'A' && key <= 'Z') || (key >= '0' && key <= '9')){
                    char c = Char.ToUpper ((char)key);

                    if (Menus [selected].Children == null)
                        return false;

                    foreach (var mi in Menus [selected].Children){
                        int p = mi.Title.IndexOf ('_');
                        if (p != -1 && p+1 < mi.Title.Length){
                            if (mi.Title [p+1] == c){
                                Selected (mi);
                                return true;
                            }
                        }
                    }
                }

                return false;
            }
            Container.Redraw ();
            Curses.refresh ();
            return true;
        }