示例#1
0
 private IEnumerable<TreeNode> getParents(TreeNode node)
 {
     if (parent != null)
     {
         yield return parent;
         getParents(parent);
     }
 }
示例#2
0
 public TreeNode AddNode(string name, bool isChecked)
 {
     TreeNode node = new TreeNode();
     node.parent = this;
     node.name = name;
     node.isChecked = isChecked;
     node.lastCheckedState = isChecked;
     children.Add(node);
     return node;
 }
示例#3
0
        private bool checkPathExists(List<string> pathList, TreeNode fromNode)
        {
            if (pathList != null)
            {
                if (pathList.Count > 0)
                {
                    if (isTreeEmpty)
                        return false;
                    foreach (var ch in fromNode.children)
                    {
                        string n0 = pathList[0];
                        if (ch.name.Equals(n0, StringComparison.OrdinalIgnoreCase))
                        {
                            pathList.RemoveAt(0);
                            return checkPathExists(pathList, ch);
                      
                        }
                    }
                }

            }
            if (pathList.Count == 0)
                return true;
            else
                return false;
        }
示例#4
0
 public TreeNode AddNode(TreeNode node)
 {
     children.Add(node);
     return node;
 }
示例#5
0
 private void insertRoot()
 {
     TreeNode root = new TreeNode();
     root.name = "";
     root.parent = null;
     root.isRoot = true;
     root.root = null;
     root.isExpanded = true;
     root.isChecked = true;
     treenode.AddNode(root);
     treeroot = root;
     treenode.root = treeroot;
 }
示例#6
0
 public void checkAll(TreeNode node, bool all)
 {
     foreach (var item in node.children)
     {
         item.isChecked = all;
         item.lastCheckedState = !all;
         if (item.children != null && item.children.Count > 0)
             checkChildren(item);
     }
 }
示例#7
0
 public void checkNone(TreeNode node)
 {
     checkAll(node, false);
 }
示例#8
0
        public void populateTree(TreeNode node, ref Rect position, Texture2D foldIcon = null, Texture2D fileIcon = null)
        {
            if (!node.isRoot)
            {
                var content = new GUIContent();
                content.text = node.name;
                if (node != null && node.path != null)
                    position.x = 5 + 15 * node.path.Split('/').Length;
                if (node.isChecked)
                {
                    
                }
                if (node.isDirectory)
                {
                    position.width = 15;
                    node.isExpanded = EditorGUI.Foldout(position, node.isExpanded, "");
                    position.x += 15;
                    position.width = 500;
                    node.isChecked = GUI.Toggle(position, node.isChecked, foldIcon);
                    position.x += 15;


                }
                else //is file
                {
                    position.x += 15;
                    node.isChecked = GUI.Toggle(position, node.isChecked, fileIcon);
                    position.x += 15;
                }
                position.width = 500;
                position.x += 15;
                var lblStyle = EditorStyles.label;
                if (node.isChecked)
                {
                    lblStyle = EditorStyles.boldLabel;
                    if (!selectedNodes.Contains(node))
                    {
                        selectedNodes.Add(node); 
                    }
                }
                else
                {
                    if (selectedNodes.Contains(node))
                    {
                        selectedNodes.Remove(node); 
                    }
                }
                GUI.Label(position, node.name, lblStyle);
                if (node.lastCheckedState != node.isChecked)
                {
                    node.lastCheckedState = node.isChecked;
                    checkChildren(node);
                }
                position.y += position.height;
            }
            
            if (node.isExpanded)
                foreach (var child in node.children)
                {
                    position.x += 15;
                    populateTree(child, ref position, foldIcon, fileIcon);
                }
            
        }
示例#9
0
 void checkChildren(TreeNode node)
 {
     foreach (var child in node.children)
     {
         child.isChecked = node.isChecked;
         if (child.children != null && child.children.Count > 0)
             checkChildren(child);
     }
 }
示例#10
0
 private void doParentalCheck(TreeNode node)
 {
     if (node.isDirectory && node.children.Count == 0)
     {
         node.isChecked = true;
         node.lastCheckedState = true;
     }
     if (node.isChecked && node.parent != null)
     {
         node.parent.isChecked = true;
         node.parent.lastCheckedState = true;
         doParentalCheck(node.parent);
     }
 }
示例#11
0
 private void doEmptyFolderCheck(TreeNode node, List<string> dirs, List<string> all)
 {
     if (node.isDirectory)
     {
         
         //UnityEditor
         var found = AssetDatabase.FindAssets("", new []{ node.path }).ToList();
         PUSelection.ClearWarnings();
         if (!found.Except(dirs).Any() && all.Exists(a => a.Equals(node.path, StringComparison.OrdinalIgnoreCase)))
         {
             node.isChecked = true;
             node.lastCheckedState = true;
         }
         foreach (var child in node.children)
         {
             doEmptyFolderCheck(child, dirs, all);
         }
     }
 }
示例#12
0
 /// <summary>
 /// Adds the node from path.
 /// </summary>
 /// <param name="path">Path.</param>
 /// <param name = "dirList"></param>
 public void AddNodeFromPath(string path, List<string> dirList, List<string> foundList)
 {
     var ph = PathHierarchy(path);
     for (int i = 0; i < ph.Count; i++)
     {
         var p = ph[i];
         if (!treenode.PathExists(p.path))
         {
             TreeNode pathParent = treenode.GetParentNodeInPath(p.path, treeroot);
             TreeNode node = new TreeNode();
             node.parent = pathParent;
             node.name = p.name;
             node.path = TreeNode.iHateSlashes(p.path);
             node.isDirectory = dirList.Exists((d) => d.Equals(node.path, StringComparison.OrdinalIgnoreCase));
             node.isChecked = foundList.Exists(f => f.Equals(node.path, StringComparison.OrdinalIgnoreCase)) && allCheckedByDefault;
             node.lastCheckedState = node.isChecked;
             if (node.isChecked)
                 selectedNodes.Add(node);
             node.isExpanded = allExpandedByDefault;
             pathParent.AddNode(node);
         }
     }
 }
示例#13
0
 public TreeView()
 {
     treenode = new TreeNode();
     selectedNodes = new List<TreeNode>();
     insertRoot();
 }
示例#14
0
        private TreeNode checkGetParentNodeInPath(List<string> pathList, TreeNode fromNode)
        {

            if (pathList != null)
            {
                if (pathList.Count > 0)
                {
                    pathList.RemoveAt(pathList.Count - 1);
                    return GetNodeInPath(listToPath(pathList), fromNode);
                }
            }
            return root;
        }
示例#15
0
 public TreeNode GetParentNodeInPath(string path, TreeNode root)
 {
     return checkGetParentNodeInPath(pathList(path), root);
 }
示例#16
0
        private TreeNode checkGetNodeInPath(List<string> pathList, TreeNode fromNode)
        {

            if (pathList != null)
            {
                if (pathList.Count > 0)
                {
                    string n0 = pathList[0];

                    foreach (var child in fromNode.children)
                    {
                        if (child.name.Equals(n0, StringComparison.OrdinalIgnoreCase))
                        {
                            pathList.RemoveAt(0);
                            return checkGetNodeInPath(pathList, child);
                        }
                    }
                }

            }
            if (pathList.Count == 0)
                return fromNode;
            else
                return null;
        }