private IEnumerable<TreeNode> getParents(TreeNode node) { if (parent != null) { yield return parent; getParents(parent); } }
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; }
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; }
public TreeNode AddNode(TreeNode node) { children.Add(node); return node; }
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; }
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); } }
public void checkNone(TreeNode node) { checkAll(node, false); }
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); } }
void checkChildren(TreeNode node) { foreach (var child in node.children) { child.isChecked = node.isChecked; if (child.children != null && child.children.Count > 0) checkChildren(child); } }
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); } }
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); } } }
/// <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); } } }
public TreeView() { treenode = new TreeNode(); selectedNodes = new List<TreeNode>(); insertRoot(); }
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; }
public TreeNode GetParentNodeInPath(string path, TreeNode root) { return checkGetParentNodeInPath(pathList(path), root); }
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; }