public static void ShowItemContextMenu(Vector2 mousePosition) { var menu = new GenericMenu(); var state = TimelineWindow.instance.state; TimelineAction.AddToMenu(menu, state, mousePosition); if (SelectionManager.SelectedClips().Any()) { ItemAction <TimelineClip> .AddToMenu(menu, state); } if (SelectionManager.SelectedMarkers().Any()) { ItemAction <IMarker> .AddToMenu(menu, state); } var clipGUI = PickerUtils.PickedLayerableOfType <TimelineClipGUI>(); if (clipGUI != null && clipGUI.drawer != null) { var clips = SelectionManager.SelectedClips().ToArray(); if (clips.Length > 0) { clipGUI.drawer.OnBuildClipContextMenu(menu, clips, state); AddMarkerMenuCommands(menu, clipGUI.clip.parentTrack, TimelineHelpers.GetCandidateTime(state, mousePosition)); } } menu.ShowAsContext(); }
protected override bool DoubleClick(Event evt, WindowState state) { if (evt.button != 0) { return(false); } var guiClip = PickerUtils.PickedLayerableOfType <TimelineClipGUI>(); if (guiClip == null) { return(false); } if (!TimelineWindow.instance.state.editSequence.isReadOnly && (guiClip.clip.curves != null || guiClip.clip.animationClip != null)) { ItemAction <TimelineClip> .Invoke <EditClipInAnimationWindow>(state, guiClip.clip); } if (guiClip.supportsSubTimelines) { ItemAction <TimelineClip> .Invoke <EditSubTimeline>(state, guiClip.clip); } return(true); }
public static ISelectable HandleSingleSelection(Event evt) { var item = PickerUtils.PickedLayerableOfType <ISelectable>(); if (item != null) { var selected = item.IsSelected(); if (!selected && CanClearSelection(evt)) { SelectionManager.Clear(); } if (evt.modifiers == EventModifiers.Shift) { if (!selected) { RangeSelectItems((item as TimelineItemGUI).item); } } else { HandleItemSelection(evt, item); } } return(item); }
protected override bool MouseDown(Event evt, WindowState state) { if (evt.modifiers != ManipulatorsUtils.actionModifier) { return(false); } return(MouseDownInternal(evt, state, PickerUtils.PickedLayerableOfType <TimelineClipHandle>())); }
protected override bool MouseDown(Event evt, WindowState state) { var handle = PickerUtils.PickedLayerableOfType <TimelineClipHandle>(); if (handle == null) { return(false); } if (handle.clipGUI.clip.parentTrack != null && handle.clipGUI.clip.parentTrack.lockedInHierarchy) { return(false); } if (ItemSelection.CanClearSelection(evt)) { SelectionManager.Clear(); } if (!SelectionManager.Contains(handle.clipGUI.clip)) { SelectionManager.Add(handle.clipGUI.clip); } m_TrimClipHandler = handle; m_IsCaptured = true; state.AddCaptured(this); m_UndoSaved = false; var clip = m_TrimClipHandler.clipGUI.clip; m_OriginalDuration = clip.duration; m_OriginalTimeScale = clip.timeScale; m_OriginalEaseInDuration = clip.easeInDuration; m_OriginalEaseOutDuration = clip.easeOutDuration; RefreshOverlayStrings(m_TrimClipHandler, state); // in ripple trim, the right edge moves and needs to snap var edges = ManipulateEdges.Right; if (EditMode.editType != EditMode.EditType.Ripple && m_TrimClipHandler.trimDirection == TrimEdge.Start) { edges = ManipulateEdges.Left; } m_SnapEngine = new SnapEngine(m_TrimClipHandler.clipGUI, new TrimClipAttractionHandler(), edges, state, evt.mousePosition); EditMode.BeginTrim(ItemsUtils.ToItem(clip), m_TrimClipHandler.trimDirection); return(true); }
public static void CycleMarkers() { var cluster = PickerUtils.PickedLayerableOfType <TimelineMarkerClusterGUI>(); if (cluster == null) { return; } cluster.topMarker.Deselect(); cluster.CycleTop(); cluster.topMarker.Select(); }
protected override bool MouseUp(Event evt, WindowState state) { if (!m_Dragged) { var item = PickerUtils.PickedLayerableOfType <ISelectable>(); if (item == null) { return(false); } if (!item.IsSelected()) { return(false); } // Re-selecting an item part of a multi-selection should only keep this item selected. if (SelectionManager.Count() > 1 && ItemSelection.CanClearSelection(evt)) { SelectionManager.Clear(); item.Select(); return(true); } if (m_CycleMarkersPending) { m_CycleMarkersPending = false; TimelineMarkerClusterGUI.CycleMarkers(); return(true); } return(false); } m_TimeAreaAutoPanner = null; DropItems(); m_SnapEngine = null; m_MoveItemHandler = null; state.Evaluate(); state.RemoveCaptured(this); m_Dragged = false; TimelineCursors.ClearCursor(); return(true); }
protected override bool ContextClick(Event evt, WindowState state) { if (evt.alt) { return(false); } var selectable = PickerUtils.PickedLayerableOfType <ISelectable>(); if (selectable != null && selectable.IsSelected()) { SequencerContextMenu.ShowItemContextMenu(evt.mousePosition); return(true); } return(false); }
public static bool CanCycleMarkers() { if (!SelectionManager.SelectedMarkers().Any()) { return(false); } var cluster = PickerUtils.PickedLayerableOfType <TimelineMarkerClusterGUI>(); if (cluster == null) { return(false); } // Only cycle if the marker is selected and nothing else is selected return(cluster.topMarker.IsSelected() && SelectionManager.Count() == 1); }
void SelectionChangedCallback(int[] ids) { if (Event.current.button == 1 && PickerUtils.PickedLayerableOfType <ISelectable>() != null) { return; } if (Event.current.command || Event.current.control || Event.current.shift) { SelectionManager.UnSelectTracks(); } else { SelectionManager.Clear(); } foreach (var id in ids) { var trackGUI = (TimelineTrackBaseGUI)m_TreeView.FindItem(id); SelectionManager.Add(trackGUI.track); } m_State.GetWindow().Repaint(); }