// (case 1029160) Modified version of EditorGUI.DoPopup to fit large data list query. private AnimationClip DoClipPopup(AnimationClip clip, GUIStyle style) { Rect position = EditorGUILayout.GetControlRect(false, EditorGUI.kSingleLineHeight, style); int controlID = GUIUtility.GetControlID(s_ClipPopupHash, FocusType.Keyboard, position); clip = ClipPopupCallbackInfo.GetSelectedClipForControl(controlID, clip); Event evt = Event.current; switch (evt.type) { case EventType.Repaint: Font originalFont = style.font; if (originalFont && EditorGUIUtility.GetBoldDefaultFont() && originalFont == EditorStyles.miniFont) { style.font = EditorStyles.miniBoldFont; } GUIContent buttonContent = EditorGUIUtility.TempContent(CurveUtility.GetClipName(clip)); buttonContent.tooltip = AssetDatabase.GetAssetPath(clip); style.Draw(position, buttonContent, controlID, false); style.font = originalFont; break; case EventType.MouseDown: if (evt.button == 0 && position.Contains(evt.mousePosition)) { DisplayClipMenu(position, controlID, clip); GUIUtility.keyboardControl = controlID; evt.Use(); } break; case EventType.KeyDown: if (evt.MainActionKeyForControl(controlID)) { DisplayClipMenu(position, controlID, clip); evt.Use(); } break; } return(clip); }
private AnimationClip[] GetOrderedClipList() { AnimationClip[] clips = new AnimationClip[0]; if (state.activeRootGameObject != null) { clips = AnimationUtility.GetAnimationClips(state.activeRootGameObject); } if (!string.IsNullOrEmpty(animClipName)) { if (clips != null && clips.Length > 0) { List <AnimationClip> clipsByName = new List <AnimationClip>(); string nameInClip = animClipName; for (int i = 0; i < clips.Length; i++) { if (clips[i].name.Contains(nameInClip)) { clipsByName.Add(clips[i]); } } if (clipsByName.Count > 0) { clips = clipsByName.ToArray(); } } } #if UNITY_EDITOR_WIN // So we don't break in windows even though it worked before, only up to 999 because you need one more for New Clip System.Array.Resize(ref clips, 999); #endif Array.Sort(clips, (AnimationClip clip1, AnimationClip clip2) => CurveUtility.GetClipName(clip1).CompareTo(CurveUtility.GetClipName(clip2))); return(clips); }
private GUIContent[] GetClipMenuContent(AnimationClip[] clips) { int size = clips.Length; if (state.selection.canCreateClips) { size += 2; } GUIContent[] content = new GUIContent[size]; for (int i = 0; i < clips.Length; i++) { content[i] = new GUIContent(CurveUtility.GetClipName(clips[i])); } if (state.selection.canCreateClips) { content[content.Length - 2] = GUIContent.none; content[content.Length - 1] = AnimationWindowStyles.createNewClip; } return(content); }
public void OnGUI() { // Check for the animation clip name and create array of clips based on name animClipName = EditorGUILayout.TextField("Animation Clip Name:", animClipName, GUILayout.Width(300)); if (state.selection.canChangeAnimationClip) { EditorGUI.BeginChangeCheck(); var newClip = DoClipPopup(state.activeAnimationClip, AnimationWindowStyles.animClipToolbarPopup); if (EditorGUI.EndChangeCheck()) { state.activeAnimationClip = newClip; // Layout has changed, bail out now. EditorGUIUtility.ExitGUI(); } } else if (state.activeAnimationClip != null) { Rect r = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight, AnimationWindowStyles.toolbarLabel); EditorGUI.LabelField(r, CurveUtility.GetClipName(state.activeAnimationClip), AnimationWindowStyles.toolbarLabel); } }