public void ApplyEnabledFilters(TreeViewItem root) { AssetTreeItem node = root as AssetTreeItem; AssetTreeItem parent = root.parent as AssetTreeItem; if (node != null) { if (node.isDirectory) { node.SetEnabled( (parent == null || parent.enabled) && (m_DirectoryIgnorePatterns == null || !m_DirectoryIgnorePatterns.Any(x => x.IsMatch(node.fullPath)))); } else { node.SetEnabled( (parent == null || parent.enabled) && (m_FileIgnorePatterns == null || !m_FileIgnorePatterns.Any(x => x.IsMatch(node.fullPath)))); } } if (root.children != null) { foreach (var child in root.children) { ApplyEnabledFilters(child); } } }
public void SetEnabled(bool isEnabled) { enabled = isEnabled; if (children != null) { foreach (var child in children) { AssetTreeItem asset = child as AssetTreeItem; if (asset != null) { asset.SetEnabled(isEnabled); } } } var upstream = parent; while (upstream != null) { var up = upstream as AssetTreeItem; if (up != null && up.children != null) { AssetTreeItem firstChild = up.children.FirstOrDefault() as AssetTreeItem; if (firstChild != null) { up.m_IsMixedState = up.children.Any(x => { var y = x as AssetTreeItem; return(y.enabled != firstChild.enabled); }); if (!up.m_IsMixedState) { up.enabled = firstChild.enabled; } } else { up.m_IsMixedState = false; } } upstream = upstream.parent; } }
protected override void RowGUI(RowGUIArgs args) { CenterRectUsingSingleLineHeight(ref args.rowRect); args.rowRect.xMin += GetContentIndent(args.item); AssetTreeItem item = args.item as AssetTreeItem; m_TempContent.text = item.relativePath; m_TempContent.tooltip = item.fullPath; m_ToggleRect.x = args.rowRect.xMin; m_ToggleRect.y = args.rowRect.yMin; m_ToggleRect.width = 16; m_ToggleRect.height = args.rowRect.height; args.rowRect.xMin += m_ToggleRect.width; EditorGUI.BeginChangeCheck(); EditorGUI.showMixedValue = item.isMixedState; item.enabled = EditorGUI.Toggle(m_ToggleRect, "", item.enabled); EditorGUI.showMixedValue = false; if (EditorGUI.EndChangeCheck()) { if (GetSelection().Any(x => FindItem(x, rootItem) == item)) { foreach (int id in GetSelection()) { var sel = FindItem(id, rootItem) as AssetTreeItem; if (sel != null) { sel.SetEnabled(item.enabled); } } } else { item.SetEnabled(item.enabled); } } bool guiEnabled = GUI.enabled; GUI.enabled = item.enabled; GUI.Label(args.rowRect, m_TempContent); GUI.enabled = guiEnabled; }