Protogame.TreeView.HandleEvent C# (CSharp) Method

HandleEvent() public method

public HandleEvent ( ISkinLayout skin, Rectangle layout, IGameContext context, Event @event ) : bool
skin ISkinLayout
layout Microsoft.Xna.Framework.Rectangle
context IGameContext
@event Event
return bool
        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;
        }