private void BindNode(ISimulatorNode simNode, TreeNode node, TreeNodeCollection parent)
{
node.Text = simNode.DisplayName;
node.Tag = simNode;
var menu = new ContextMenu();
foreach (var nodeAction in simNode.Actions)
{
var action = new MenuItem(nodeAction.DisplayName);
action.Click += new EventHandler(
delegate(Object o, EventArgs a)
{
nodeAction.Invoke();
}
);
menu.MenuItems.Add(action);
}
if (simNode.Actions.Any())
{
menu.MenuItems.Add("-");
}
foreach (var factory in simNode.Children)
{
var action = new MenuItem(factory.DisplayName);
action.Click += new EventHandler(
delegate(Object o, EventArgs a)
{
var callbacks = new TreeNodeCallbacks(this);
var child = factory.Create(callbacks);
if (child != null)
{
this.BindNode(child, callbacks.node, node.Nodes);
}
}
);
menu.MenuItems.Add(action);
}
if (simNode.Children.Any())
{
menu.MenuItems.Add("-");
}
var item = new MenuItem("Remove");
item.Click += new EventHandler(
delegate(Object o, EventArgs a)
{
ShutdownFrom(node);
parent.Remove(node);
}
);
menu.MenuItems.Add(item);
node.ContextMenu = menu;
parent.Add(node);
}