| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml;namespace CyberX8_MainPages.Sequence{    public class RecipeSequenceTreeBuilder    {        public static List<FileNode> GetFiles(string prefixPath, List<string> filenames)        {            List<FileNode> folders = new List<FileNode>();            FileNode root = new FileNode() { Name = "Files", IsFile = false, FullPath = "", PrefixPath = prefixPath };            folders.Add(root);            foreach (string filename in filenames)            {                string[] filesplits = filename.Split('\\');                FileNode parent = root;                if (filesplits.Length > 1)                {                    for (var index = 0; index < filesplits.Length - 1; index++)                    {                        bool found = false;                        for (var j = 0; j < parent.Files.Count; j++)                        {                            if (parent.Files[j].Name == filesplits[index] && !parent.Files[j].IsFile)                            {                                found = true;                                parent = parent.Files[j];                                break;                            }                        }                        if (!found)                        {                            FileNode folder = new FileNode() { Name = filesplits[index], IsFile = false, PrefixPath = prefixPath };                            folder.FullPath = (parent.FullPath == string.Empty ? filesplits[index] : parent.FullPath + "\\" + filesplits[index]);                            folder.Parent = parent;                            parent.Files.Add(folder);                            parent = folder;                        }                    }                }                FileNode file = new FileNode() { Name = filesplits[filesplits.Length - 1], IsFile = true, PrefixPath = prefixPath };                file.FullPath = (parent.FullPath == string.Empty ? filesplits[filesplits.Length - 1] : parent.FullPath + "\\" + filesplits[filesplits.Length - 1]);                file.Parent = parent;                parent.Files.Add(file);            }            return folders;        }        public static void CreateTreeViewItems(XmlElement curElementNode, FileNode parent, string prefixPath, string selectionName, bool selectionIsFolder)        {            foreach (XmlElement ele in curElementNode.ChildNodes)            {                if (ele.Name == "File")                {                    string fileName = ele.Attributes["Name"].Value;                    fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1);                    string fullPath = string.IsNullOrEmpty(parent.FullPath)                        ? fileName                        : parent.FullPath + "\\" + fileName;                    FileNode file = new FileNode()                    {                        Name = fileName,                        IsFile = true,                        PrefixPath = prefixPath,                        Parent = parent,                        FullPath = fullPath,                    };                    if (!selectionIsFolder && selectionName == file.FullPath)                    {                        file.IsSelected = true;                        FileNode node = file.Parent;                        while (node.FullPath.Contains("\\"))                        {                            node.IsExpanded = true;                            node = node.Parent;                        }                    }                    parent.Files.Add(file);                }                else if (ele.Name == "Folder")                {                    string folderName = ele.Attributes["Name"].Value;                    folderName = folderName.Substring(folderName.LastIndexOf('\\') + 1);                    string fullPath = string.IsNullOrEmpty(parent.FullPath)                        ? folderName                        : parent.FullPath + "\\" + folderName;                    FileNode folder = new FileNode()                    {                        Name = folderName,                        IsFile = false,                        PrefixPath = prefixPath,                        Parent = parent,                        FullPath = fullPath,                        IsExpanded = !fullPath.Contains("\\"),                    };                    parent.Files.Add(folder);                    if (selectionIsFolder && selectionName == folder.FullPath)                    {                        folder.IsSelected = true;                        FileNode node = folder;                        while (node.FullPath.Contains("\\"))                        {                            node.IsExpanded = true;                            node = node.Parent;                        }                    }                    CreateTreeViewItems(ele, folder, prefixPath, selectionName, selectionIsFolder);                }            }        }        public static List<FileNode> BuildFileNode(string prefixPath, string selectionName, bool selectionIsFolder, string fileListInXml)        {            List<FileNode> folders = new List<FileNode>();            FileNode root = new FileNode() { Name = "Files", IsFile = false, FullPath = "", PrefixPath = prefixPath };            folders.Add(root);            XmlDocument doc = new XmlDocument();            doc.LoadXml(fileListInXml);            CreateTreeViewItems(doc.DocumentElement, root, prefixPath, selectionName, selectionIsFolder);            return folders;        }    }}
 |