public void ProcessNode(object value, WatchNode node) { foreach (var handler in handlers.Where(x => x.AcceptsValue(value))) { handler.ProcessNode(value, node); } }
public override void SetupCustomUIElements(object ui) { var nodeUI = ui as dynNodeView; watchTree = new WatchTree(); nodeUI.grid.Children.Add(watchTree); watchTree.SetValue(Grid.RowProperty, 2); watchTree.SetValue(Grid.ColumnSpanProperty, 3); watchTree.Margin = new Thickness(5, 0, 5, 5); if (Root == null) { Root = new WatchNode(); } watchTree.DataContext = Root; this.RequestBindingUnhook += new EventHandler(delegate { BindingOperations.ClearAllBindings(watchTree.treeView1); }); this.RequestBindingRehook += new EventHandler(delegate { var sourceBinding = new Binding("Children") { Mode = BindingMode.TwoWay, Source = Root, }; watchTree.treeView1.SetBinding(ItemsControl.ItemsSourceProperty, sourceBinding); }); }
WatchNode Process(Value eIn, ref string content, string prefix, int count, bool isListMember = false) { content += prefix + string.Format("[{0}]:", count.ToString()); WatchNode node = null; if (eIn.IsContainer) { if ((eIn as Value.Container).Item != null) { content += (eIn as Value.Container).Item.ToString(); node = new WatchNode((eIn as Value.Container).Item.ToString(), isListMember, count); handlerManager.ProcessNode((eIn as Value.Container).Item, node); //node.Link = id; } } else if (eIn.IsFunction) { content += eIn.ToString() + "\n"; node = new WatchNode("<function>", isListMember, count); } else if (eIn.IsList) { content += "List\n"; string newPrefix = prefix + "\t"; var list = (eIn as Value.List).Item; node = new WatchNode(list.IsEmpty ? "Empty List" : "List", isListMember, count); foreach (var e in list.Select((x, i) => new { Element = x, Index = i })) { node.Children.Add(Process(e.Element, ref content, newPrefix, e.Index, true)); } } else if (eIn.IsNumber) { content += (eIn as Value.Number).Item.ToString() + "\n"; node = new WatchNode((eIn as Value.Number).Item.ToString(), isListMember, count); } else if (eIn.IsString) { content += (eIn as Value.String).Item.ToString() + "\n"; node = new WatchNode((eIn as Value.String).Item.ToString(), isListMember, count); } else if (eIn.IsSymbol) { content += (eIn as Value.Symbol).Item.ToString() + "\n"; node = new WatchNode((eIn as Value.Symbol).Item.ToString(), isListMember, count); } return(node); }