public void IterateTree(bool twoStagePass, Action <GenericTreeIterationArgs <InheritanceNode> > iterator) { CheckTreeRebuilded(); var treeIterator = new GenericTreeIterator <InheritanceNode>(node => node.Childs); treeIterator.IterateTree(true, this, iterator); }
private List <TreeNode> GetFlatList(TreeViewEx treeView) { List <TreeNode> flatList = new List <TreeNode>(); var treeIterator = new GenericTreeIterator <TreeNode>( treeNode => treeNode.Nodes.OfType <TreeNode>(), () => treeView.Nodes.OfType <TreeNode>()); treeIterator.IterateTree(false, null, delegate(GenericTreeIterationArgs <TreeNode> args) { if (!flatList.Contains(args.Current)) { flatList.Add(args.Current); } }); return(flatList); }
public void RebuildTree(bool rebuildPaths) { if (!treeRebuilded) { treeRebuilded = true; } var interfacesIterator = new GenericTreeIterator <IInterface>(@interface => @interface.GetCurrentLevelInheritedInterfaces()); interfacesIterator.IterateTree(true, this.Interface, delegate(GenericTreeIterationArgs <IInterface, InheritanceNode> iterationArgs) { if (iterationArgs.CurrentStage == GenericTreeIterationStage.Leave) { iterationArgs.Data = null; } else { var childs = iterationArgs.Current.GetCurrentLevelInheritedInterfaces(); InheritanceNodeType nodeType = childs.Count() == 0 ? InheritanceNodeType.SuperRoot : InheritanceNodeType.Node; InheritanceNode parentNode = iterationArgs.Data ?? this; InheritanceNode newNode = CreateNode(nodeType, parentNode, iterationArgs.Current, null); parentNode.AddChild(newNode); iterationArgs.Data = newNode; } }); pathsRebuilded = false; if (rebuildPaths) { RebuildPaths(); } }