public void DeselectChildren() { foreach (AssetItem asset in children) { if (asset is FolderItem) { FolderItem folder = (FolderItem)asset; folder.selected = false; folder.DeselectChildren(); } else { asset.selected = false; } } }
void DoItemGUI(AssetItem item) { GUIContent content = new GUIContent(EditorGUIUtility.ObjectContent(item.asset, item.asset.GetType())); content.text = item.name; if (item is FolderItem) { FolderItem folder = (FolderItem)item; Rect fRect = EditorGUILayout.BeginHorizontal(); int childrenSelected = folder.ChildrenSelected(); EditorGUI.showMixedValue = childrenSelected < 0; //Some but not all folder.foldout = ContentlessFoldout.DoFoldout(folder.foldout); GUI.changed = false; bool selectFolder = EditorGUILayout.ToggleLeft(content, folder.selected); if (GUI.changed) { if (EditorGUI.showMixedValue) //selectFolder == true if toggle was clicked { if (selectFolder) { folder.selected = false; folder.DeselectChildren(); } } else { if (folder.selected = selectFolder) { folder.SelectChildren(); } else { folder.DeselectChildren(); } } } folder.selected = childrenSelected != 0; EditorGUILayout.EndHorizontal(); if (Event.current.type == EventType.ContextClick && fRect.Contains(Event.current.mousePosition)) { FolderContextMenu(folder); } if (folder.foldout) { EditorGUI.indentLevel++; foreach (AssetItem i in folder.children) { DoItemGUI(i); } EditorGUI.indentLevel--; } } else { Rect iRect = EditorGUILayout.BeginHorizontal(); EditorGUI.showMixedValue = false; GUILayout.Space(20f); item.selected = EditorGUILayout.ToggleLeft(content, item.selected); EditorGUILayout.EndHorizontal(); if (Event.current.type == EventType.ContextClick && iRect.Contains(Event.current.mousePosition)) { AssetContextMenu(item); } } }