public bool HandleEvent(ISkinLayout skin, Rectangle layout, IGameContext context, Event @event)
{
foreach (var kv in GetChildrenWithLayouts(skin, layout))
{
if (kv.Layout != null && kv.Item.HandleEvent(skin, kv.Layout.Value, context, @event))
{
return true;
}
}
var keyPressEvent = @event as KeyPressEvent;
if (keyPressEvent != null)
{
var upPressed = keyPressEvent.Key == Keys.Up;
var downPressed = keyPressEvent.Key == Keys.Down;
if (SelectedItem != null && (upPressed || downPressed))
{
var tree = BuildEntryGraph(layout);
var list = NormalizeTree(tree, true);
var current = list.IndexOf(list.First(x => SelectedItem == x.Item));
if (upPressed)
{
current -= 1;
}
else
{
current += 1;
}
if (current >= 0 && current < list.Count)
{
SelectedItem = list[current].Item;
return true;
}
}
}
return false;
}