public FolderNodeViewModel(ResourceNode node, ResourceNodeViewModel parent) { Node = node; Name = node.Name; foreach (var child in Node.ChildNodes) { ResourceNodeViewModel model; if (child.Item is ResourceFolder) { model = new FolderNodeViewModel(child, this); } else if (child.Item is Palette) { model = new PaletteNodeViewModel(child, this); } else if (child.Item is DataSource) { model = new DataFileNodeViewModel(child, this); } else if (child.Item is Arranger) { model = new ArrangerNodeViewModel(child, this); } else { continue; } Children.Add(model); } ParentModel = parent; }
/// <summary> /// Traverses the tree and sorts the result so that the deepest nodes are at the front of the result and root at the back /// </summary> /// <param name="rootNode"></param> /// <returns></returns> public static IEnumerable <ResourceNodeViewModel> BottomUpTraversal(this ResourceNodeViewModel rootNode) { if (rootNode is null) { return(Enumerable.Empty <ResourceNodeViewModel>()); } return(rootNode.SelfAndDescendants() .OrderByDescending(x => x.Ancestors().Count())); }
public static IEnumerable <ResourceNodeViewModel> Ancestors(this ResourceNodeViewModel node) { ResourceNodeViewModel nodeVisitor = node.ParentModel; while (nodeVisitor != null) { yield return(nodeVisitor); nodeVisitor = nodeVisitor.ParentModel; } }
public static IEnumerable <ResourceNodeViewModel> SelfAndDescendants(this ResourceNodeViewModel node) { var nodeStack = new Stack <ResourceNodeViewModel>(); nodeStack.Push(node); while (nodeStack.Count > 0) { var popNode = nodeStack.Pop(); yield return(popNode); foreach (var child in popNode.Children) { nodeStack.Push(child); } } }
public PaletteNodeViewModel(ResourceNode node, ResourceNodeViewModel parent) { Node = node; Name = node.Name; ParentModel = parent; }
public AddScatteredArrangerEvent(ResourceNodeViewModel parent) { Parent = parent; }
public RequestRemoveTreeNodeEvent(ResourceNodeViewModel treeNode) { TreeNode = treeNode; }
public DataFileNodeViewModel(ResourceNode node, ResourceNodeViewModel parent) { Node = node; Name = node.Name; ParentModel = parent; }
public AddPaletteEvent(ResourceNodeViewModel parent) { Parent = parent; }
public ArrangerNodeViewModel(ResourceNode node, ResourceNodeViewModel parent) { Node = node; Name = node.Name; ParentModel = parent; }
public AddDataFileEvent(ResourceNodeViewModel parent) { Parent = parent; }