예제 #1
0
    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;
    }
예제 #2
0
    /// <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()));
    }
예제 #3
0
    public static IEnumerable <ResourceNodeViewModel> Ancestors(this ResourceNodeViewModel node)
    {
        ResourceNodeViewModel nodeVisitor = node.ParentModel;

        while (nodeVisitor != null)
        {
            yield return(nodeVisitor);

            nodeVisitor = nodeVisitor.ParentModel;
        }
    }
예제 #4
0
    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);
            }
        }
    }
예제 #5
0
 public PaletteNodeViewModel(ResourceNode node, ResourceNodeViewModel parent)
 {
     Node        = node;
     Name        = node.Name;
     ParentModel = parent;
 }
예제 #6
0
 public AddScatteredArrangerEvent(ResourceNodeViewModel parent)
 {
     Parent = parent;
 }
예제 #7
0
 public RequestRemoveTreeNodeEvent(ResourceNodeViewModel treeNode)
 {
     TreeNode = treeNode;
 }
예제 #8
0
 public DataFileNodeViewModel(ResourceNode node, ResourceNodeViewModel parent)
 {
     Node        = node;
     Name        = node.Name;
     ParentModel = parent;
 }
예제 #9
0
 public AddPaletteEvent(ResourceNodeViewModel parent)
 {
     Parent = parent;
 }
예제 #10
0
 public ArrangerNodeViewModel(ResourceNode node, ResourceNodeViewModel parent)
 {
     Node        = node;
     Name        = node.Name;
     ParentModel = parent;
 }
예제 #11
0
 public AddDataFileEvent(ResourceNodeViewModel parent)
 {
     Parent = parent;
 }