private AnimationWindowHierarchyPropertyNode AddPropertyToHierarchy(AnimationWindowCurve curve, AnimationWindowHierarchyNode parentNode) { AnimationWindowHierarchyPropertyNode node = new AnimationWindowHierarchyPropertyNode(curve.type, 0, curve.propertyName, curve.path, parentNode, curve.binding, curve.isPPtrCurve); if (parentNode.icon != null) { node.icon = parentNode.icon; } else { node.icon = GetIcon(curve.binding); } node.indent = curve.depth; node.curves = new[] { curve }; return(node); }
// Draw foldout (after text content above to ensure drop down icon is rendered above selection highlight) private void DoFoldout(AnimationWindowHierarchyNode node, Rect rect, float indent, int row) { if (m_TreeView.data.IsExpandable(node)) { Rect toggleRect = rect; toggleRect.x = indent; toggleRect.width = foldoutStyleWidth; EditorGUI.BeginChangeCheck(); bool newExpandedValue = GUI.Toggle(toggleRect, m_HierarchyItemFoldControlIDs[row], m_TreeView.data.IsExpanded(node), GUIContent.none, foldoutStyle); if (EditorGUI.EndChangeCheck()) { if (Event.current.alt) { m_TreeView.data.SetExpandedWithChildren(node, newExpandedValue); } else { m_TreeView.data.SetExpanded(node, newExpandedValue); } } } else { AnimationWindowHierarchyPropertyNode hierarchyPropertyNode = node as AnimationWindowHierarchyPropertyNode; AnimationWindowHierarchyState hierarchyState = m_TreeView.state as AnimationWindowHierarchyState; if (hierarchyPropertyNode != null && hierarchyPropertyNode.isPptrNode) { Rect toggleRect = rect; toggleRect.x = indent; toggleRect.width = foldoutStyleWidth; EditorGUI.BeginChangeCheck(); bool tallMode = hierarchyState.GetTallMode(hierarchyPropertyNode); tallMode = GUI.Toggle(toggleRect, m_HierarchyItemFoldControlIDs[row], tallMode, GUIContent.none, foldoutStyle); if (EditorGUI.EndChangeCheck()) { hierarchyState.SetTallMode(hierarchyPropertyNode, tallMode); } } } }
private AnimationWindowHierarchyPropertyGroupNode AddPropertyGroupToHierarchy(AnimationWindowCurve[] curves, AnimationWindowHierarchyNode parentNode) { List <AnimationWindowHierarchyNode> childNodes = new List <AnimationWindowHierarchyNode>(); System.Type animatableObjectType = curves[0].type; AnimationWindowHierarchyPropertyGroupNode node = new AnimationWindowHierarchyPropertyGroupNode(animatableObjectType, 0, AnimationWindowUtility.GetPropertyGroupName(curves[0].propertyName), curves[0].path, parentNode); node.icon = GetIcon(curves[0].binding); node.indent = curves[0].depth; node.curves = curves; foreach (AnimationWindowCurve curve in curves) { AnimationWindowHierarchyPropertyNode childNode = AddPropertyToHierarchy(curve, node); // For child nodes we do not want to display the type in front (It is already shown by the group node) childNode.displayName = AnimationWindowUtility.GetPropertyDisplayName(childNode.propertyName); childNodes.Add(childNode); } TreeViewUtility.SetChildParentReferences(new List <TreeViewItem>(childNodes.ToArray()), node); return(node); }