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;
}