static void AddTagMenu(ContextualMenuPopulateEvent evt, Action <DropdownMenuAction> action, DropdownMenuAction.Status menuStatus) { const string prefix = "Add Tag/"; foreach (var tagType in TagAttribute.GetVisibleTypesInInspector()) { evt.menu.AppendAction($"{prefix}{TagAttribute.GetDescription(tagType)}", action, a => menuStatus, tagType); } }
void BuildAnimationClipItemMenu(ContextualMenuPopulateEvent evt, VisualElement ve) { var clip = ve.userData as TaggedAnimationClip; if (clip == null) { evt.menu.AppendSeparator("Missing Clip"); return; } if (m_AnimationLibraryListView.m_ClipSelection.Count > 0) { if (!m_AnimationLibraryListView.m_ClipSelection.Contains(clip)) { // We can't change the selection of the list from inside a context menu event return; } evt.menu.AppendAction("Delete Selected Clip(s)", action => m_AnimationLibraryListView.DeleteSelection(), DropdownMenuAction.AlwaysEnabled); evt.menu.AppendSeparator(); foreach (var tagType in TagAttribute.GetVisibleTypesInInspector()) { evt.menu.AppendAction($"Tag Selected Clip(s)/{TagAttribute.GetDescription(tagType)}", OnTagSelectionClicked, DropdownMenuAction.AlwaysEnabled, tagType); } evt.menu.AppendAction("Set Boundary Clips", action => BoundaryClipWindow.ShowWindow(m_Asset, m_AnimationLibraryListView.m_ClipSelection)); evt.menu.AppendAction("Experimental - Generate Procedural Annotations", action => m_AnimationLibraryListView.GenerateProceduralAnnotations(), m_AnimationLibraryListView.CanGenerateProceduralAnnotations()); } else { evt.menu.AppendAction("Delete Clip", action => { m_Asset.RemoveClips(new[] { clip }); m_AnimationLibraryListView.Refresh(); }, DropdownMenuAction.AlwaysEnabled); evt.menu.AppendSeparator(); foreach (var tagType in TagAttribute.GetVisibleTypesInInspector()) { evt.menu.AppendAction($"Tag Clip/{TagAttribute.GetDescription(tagType)}", action => clip.AddTag(tagType), DropdownMenuAction.AlwaysEnabled, tagType); } } }
public static object CreateDefaultTag() { if (!k_DefaultTagTypeComputed) { foreach (Type tagType in TagAttribute.GetVisibleTypesInInspector()) { if (tagType.IsDefined(typeof(DefaultTagAttribute))) { if (k_CreateDefaultTagMethod == null) { MethodInfo createTagMethod = tagType.GetMethod("CreateDefaultTag", BindingFlags.Static | BindingFlags.Public); if (createTagMethod == null) { Debug.LogWarning($"Default tag type {tagType.FullName} is missing \"public static {tagType.FullName} CreateDefaultTag()\" function, cannot create default tag"); return(null); } else if (createTagMethod.GetGenericArguments().Length > 0 || createTagMethod.ReturnType != tagType) { Debug.LogWarning($"Default tag type {tagType.FullName} should have \"public static {tagType.FullName} CreateDefaultTag()\" signature, cannot create default tag"); return(null); } k_CreateDefaultTagMethod = createTagMethod; k_DefaultTagType = tagType; } else { Debug.LogWarning($"Tag type {tagType.FullName} has default tag attribute, but {k_DefaultTagType.FullName} is already defined as the default tag"); } } } k_DefaultTagTypeComputed = true; } if (k_CreateDefaultTagMethod == null) { return(null); } return(k_CreateDefaultTagMethod.Invoke(null, null)); }
public static int MaskFlags(List <bool> boolValues) { if (boolValues.Count > 32) { return(0); } int intValue = 0; TagAttribute.GetVisibleTypesInInspector(); for (int i = 0; i < boolValues.Count; i++) { if (boolValues[i]) { intValue += 1 << i; } } return(intValue); }
protected override void OnMouseUpEvent(MouseUpEvent evt) { if (!m_Active || !target.HasMouseCapture() || !CanStopManipulation(evt)) { return; } base.OnMouseUpEvent(evt); float distanceFromMouseDown = Math.Abs(evt.mousePosition.x - m_MouseDownPosition.x); if (distanceFromMouseDown >= k_MinDistance && !EditorApplication.isPlaying) { float mouseUpTime = m_Timeline.WorldPositionToTime(evt.mousePosition.x); float startTime = Math.Min(m_MouseDownTime, mouseUpTime); float duration = Math.Max(m_MouseDownTime, mouseUpTime) - startTime; var menu = new GenericMenu(); foreach (Type tagType in TagAttribute.GetVisibleTypesInInspector()) { menu.AddItem(new GUIContent($"{TagAttribute.GetDescription(tagType)}"), false, () => { m_Timeline.OnAddTagSelection(tagType, startTime, duration); }); } menu.DropDown(new Rect(evt.mousePosition, Vector2.zero)); } else { m_Timeline.ReSelectCurrentClip(); } m_Target.style.visibility = Visibility.Hidden; }