protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.Modifiers == Keys.None)
{
switch (e.KeyCode)
{
case Keys.Space:
case Keys.Return:
if (SelectedNode != null)
{
SelectedNode.Toggle();
}
break;
case Keys.Down:
SelectNext();
break;
case Keys.Left:
if (SelectedNode != null)
{
SelectedNode.Collapse();
}
break;
case Keys.Right:
if (SelectedNode != null)
{
SelectedNode.Expand();
}
break;
case Keys.Up:
SelectPrevious();
break;
case Keys.PageDown:
if (nodeList.Count > 0)
{
var lNodesOnScreen = nodesOnScreen;
var nextIndex = 0;
if (SelectedNode != null)
{
nextIndex = nodeList.IndexOf(SelectedNode);
}
nextIndex = MathHelper.Clamp(nextIndex + lNodesOnScreen, 0, nodeList.Count - 1);
SelectedNode = nodeList[nextIndex];
}
break;
case Keys.PageUp:
if (nodeList.Count > 0)
{
var lNodesOnScreen = nodesOnScreen;
var nextIndex = 0;
if (SelectedNode != null)
{
nextIndex = nodeList.IndexOf(SelectedNode);
}
nextIndex = MathHelper.Clamp(nextIndex - lNodesOnScreen, 0, nodeList.Count - 1);
SelectedNode = nodeList[nextIndex];
}
break;
case Keys.End:
if (nodeList.Count > 0)
{
SelectedNode = nodeList[nodeList.Count - 1];
}
break;
case Keys.Home:
if (nodeList.Count > 0)
{
SelectedNode = nodeList[0];
}
break;
}
}
else if (e.Control)
{
switch (e.KeyCode)
{
case Keys.Down:
if (uwfVScrollBar.Visible)
{
uwfVScrollBar.DoScroll(ScrollEventType.SmallIncrement);
}
break;
case Keys.Up:
if (uwfVScrollBar.Visible)
{
uwfVScrollBar.DoScroll(ScrollEventType.SmallDecrement);
}
break;
}
}
char c = KeyHelper.GetLastInputChar();
if (char.IsLetterOrDigit(c) || char.IsPunctuation(c))
{
filter += c;
resetFilterTime = 3; // sec.
SelectNodeWText(filter);
}
}