private PackageImportTreeView.Amount GetFolderChildrenEnabledState(PackageImportTreeView.PackageImportTreeViewItem folder) { if (!folder.isFolder) { Debug.LogError("Should be a folder item!"); } if (!folder.hasChildren) { return(PackageImportTreeView.Amount.None); } PackageImportTreeView.Amount amount = PackageImportTreeView.Amount.NotSet; PackageImportTreeView.PackageImportTreeViewItem packageImportTreeViewItem = folder.children[0] as PackageImportTreeView.PackageImportTreeViewItem; int enabled = packageImportTreeViewItem.item.enabled; for (int i = 1; i < folder.children.Count; i++) { if (enabled != (folder.children[i] as PackageImportTreeView.PackageImportTreeViewItem).item.enabled) { amount = PackageImportTreeView.Amount.Mixed; break; } } if (amount == PackageImportTreeView.Amount.NotSet) { amount = ((enabled != 1) ? PackageImportTreeView.Amount.None : PackageImportTreeView.Amount.All); } return(amount); }
private void RecursiveComputeEnabledStateForFolders(PackageImportTreeView.PackageImportTreeViewItem pitem, HashSet <PackageImportTreeView.PackageImportTreeViewItem> done) { if (!pitem.isFolder) { return; } if (pitem.hasChildren) { foreach (TreeViewItem current in pitem.children) { this.RecursiveComputeEnabledStateForFolders(current as PackageImportTreeView.PackageImportTreeViewItem, done); } } if (!done.Contains(pitem)) { PackageImportTreeView.Amount folderChildrenEnabledState = this.GetFolderChildrenEnabledState(pitem); pitem.item.enabled = (int)folderChildrenEnabledState; if (folderChildrenEnabledState == PackageImportTreeView.Amount.Mixed) { done.Add(pitem); for (PackageImportTreeView.PackageImportTreeViewItem packageImportTreeViewItem = pitem.parent as PackageImportTreeView.PackageImportTreeViewItem; packageImportTreeViewItem != null; packageImportTreeViewItem = (packageImportTreeViewItem.parent as PackageImportTreeView.PackageImportTreeViewItem)) { if (!done.Contains(packageImportTreeViewItem)) { packageImportTreeViewItem.item.enabled = 2; done.Add(packageImportTreeViewItem); } } } } }