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);
                 }
             }
         }
     }
 }