/// <summary> /// Callback for the KeyDown event. /// </summary> /// <param name="e">The event.</param> protected void OnKeyDown(KeyDownEvent e) { if (e.keyCode != KeyCode.Escape || m_GraphView == null || !m_Active) { return; } // Reset the items to their original pos. foreach (KeyValuePair <GraphElement, OriginalPos> v in m_OriginalPos) { OriginalPos originalPos = v.Value; v.Key.style.left = originalPos.pos.x; v.Key.style.top = originalPos.pos.y; } m_PanSchedule.Pause(); if (m_ItemPanDiff != Vector3.zero) { Vector3 p = m_GraphView.ContentViewContainer.transform.position; Vector3 s = m_GraphView.ContentViewContainer.transform.scale; m_GraphView.CommandDispatcher.Dispatch(new ReframeGraphViewCommand(p, s)); } using (DragExitedEvent eExit = DragExitedEvent.GetPooled()) { eExit.target = m_CurrentDropTarget; m_GraphView.SendEvent(eExit); } target.ReleaseMouse(); e.StopPropagation(); }
private void OnKeyDown(KeyDownEvent e) { if (e.keyCode != KeyCode.Escape || m_GraphView == null || !m_Active) { return; } // Reset the items to their original pos. var groupsElementsToReset = new Dictionary <Scope, List <GraphElement> >(); foreach (KeyValuePair <GraphElement, OriginalPos> v in m_OriginalPos) { OriginalPos originalPos = v.Value; if (originalPos.stack != null) { originalPos.stack.InsertElement(originalPos.stackIndex, v.Key); } else { if (originalPos.scope != null) { if (!groupsElementsToReset.ContainsKey(originalPos.scope)) { groupsElementsToReset[originalPos.scope] = new List <GraphElement>(); } groupsElementsToReset[originalPos.scope].Add(v.Key); } v.Key.SetPosition(originalPos.pos); } } foreach (KeyValuePair <Scope, List <GraphElement> > toReset in groupsElementsToReset) { toReset.Key.AddElements(toReset.Value); } m_PanSchedule.Pause(); if (m_ItemPanDiff != Vector3.zero) { Vector3 p = m_GraphView.contentViewContainer.transform.position; Vector3 s = m_GraphView.contentViewContainer.transform.scale; m_GraphView.UpdateViewTransform(p, s); } using (DragExitedEvent dexit = DragExitedEvent.GetPooled()) { List <ISelectable> selection = m_GraphView.selection; SendDragAndDropEvent(dexit, selection, m_PrevDropTarget, m_GraphView); } target.ReleaseMouse(); e.StopPropagation(); }
private void OnKeyDown(KeyDownEvent e) { if (e.keyCode != KeyCode.Escape || m_GraphView == null || !m_Active) { return; } // Reset the items to their original pos. foreach (KeyValuePair <GraphElement, OriginalPos> v in m_OriginalPos) { OriginalPos originalPos = v.Value; if (originalPos.stack != null) { originalPos.stack.InsertElement(originalPos.stackIndex, v.Key); } else { v.Key.style.left = originalPos.pos.x; v.Key.style.top = originalPos.pos.y; } } m_PanSchedule.Pause(); if (m_ItemPanDiff != Vector3.zero) { Vector3 p = m_GraphView.contentViewContainer.transform.position; Vector3 s = m_GraphView.contentViewContainer.transform.scale; m_GraphView.UpdateViewTransform(p, s); } using (DragExitedEvent dexit = DragExitedEvent.GetPooled()) { List <ISelectable> selection = m_GraphView.selection; SendDragAndDropEvent(dexit, selection, m_PrevDropTarget, m_GraphView); } target.ReleaseMouse(); e.StopPropagation(); }
/// <summary> /// Callback for the MouseCaptureOut event. /// </summary> /// <param name="e">The event.</param> protected void OnMouseCaptureOutEvent(MouseCaptureOutEvent e) { if (m_Active) { if (m_CurrentDropTarget != null && m_GraphView != null) { using (DragExitedEvent eExit = DragExitedEvent.GetPooled()) { eExit.target = m_CurrentDropTarget; m_GraphView.SendEvent(eExit); } } // Stop processing the event sequence if the target has lost focus, then. m_SelectedElement = null; m_CurrentDropTarget = null; m_Active = false; if (m_GraphView?.GetSelection().Any() ?? false) { m_Snapper.EndSnap(); } } }
protected new void OnMouseUp(MouseUpEvent evt) { if (m_GraphView == null) { if (m_Active) { target.ReleaseMouse(); selectedElement = null; m_Active = false; m_Dragging = false; m_PrevDropTarget = null; } return; } List <ISelectable> selection = m_GraphView.selection; if (CanStopManipulation(evt)) { if (m_Active) { if (m_Dragging) { foreach (IGrouping <StackNode, GraphElement> grouping in m_OriginalPos.GroupBy(v => v.Value.stack, v => v.Key)) { if (grouping.Key != null && m_GraphView.elementsRemovedFromStackNode != null) { m_GraphView.elementsRemovedFromStackNode(grouping.Key, grouping); } foreach (GraphElement ge in grouping) { ge.UpdatePresenterPosition(); } m_MovedElements.AddRange(grouping); } var graphView = target as GraphView; if (graphView != null && graphView.graphViewChanged != null) { KeyValuePair <GraphElement, OriginalPos> firstPos = m_OriginalPos.First(); m_GraphViewChange.moveDelta = firstPos.Key.GetPosition().position - firstPos.Value.pos.position; graphView.graphViewChanged(m_GraphViewChange); } m_MovedElements.Clear(); } m_PanSchedule.Pause(); if (m_ItemPanDiff != Vector3.zero) { Vector3 p = m_GraphView.contentViewContainer.transform.position; Vector3 s = m_GraphView.contentViewContainer.transform.scale; m_GraphView.UpdateViewTransform(p, s); } if (selection.Count > 0 && m_PrevDropTarget != null) { if (m_PrevDropTarget.CanAcceptDrop(selection)) { using (DragPerformEvent drop = DragPerformEvent.GetPooled(evt)) { SendDragAndDropEvent(drop, selection, m_PrevDropTarget, m_GraphView); } } else { using (DragExitedEvent dexit = DragExitedEvent.GetPooled(evt)) { SendDragAndDropEvent(dexit, selection, m_PrevDropTarget, m_GraphView); } } } if (snapEnabled) { m_Snapper.EndSnap(m_GraphView); } target.ReleaseMouse(); evt.StopPropagation(); } selectedElement = null; m_Active = false; m_PrevDropTarget = null; m_Dragging = false; m_PrevDropTarget = null; } }
protected new void OnMouseUp(MouseUpEvent evt) { if (m_GraphView == null) { if (m_Active) { target.ReleaseMouse(); selectedElement = null; m_Active = false; m_PrevDropTarget = null; } return; } List <ISelectable> selection = m_GraphView.selection; if (CanStopManipulation(evt)) { if (m_Active) { foreach (var edge in m_EdgesToUpdate) { edge.EdgeControl.ControlPointOffset = Vector2.zero; } m_EdgesToUpdate.Clear(); if (selectedElement == null) { m_MovedElements.Clear(); foreach (IGrouping <StackNode, GraphElement> grouping in m_OriginalPos.GroupBy(v => v.Value.stack, v => v.Key)) { if (grouping.Key != null && m_GraphView.elementsRemovedFromStackNode != null) { m_GraphView.elementsRemovedFromStackNode(grouping.Key, grouping); } m_MovedElements.AddRange(grouping); } // PF: remove graphViewChanged and all. var graphView = target as GraphView; if (graphView?.graphViewChanged != null) { KeyValuePair <GraphElement, OriginalPos> firstPos = m_OriginalPos.First(); m_GraphViewChange.moveDelta = firstPos.Key.GetPosition().position - firstPos.Value.pos.position; graphView.graphViewChanged(m_GraphViewChange); } if (m_GraphView != null) { KeyValuePair <GraphElement, OriginalPos> firstPos = m_OriginalPos.First(); var delta = firstPos.Key.GetPosition().position - firstPos.Value.pos.position; var models = m_OriginalPos.Keys // PF remove this Where clause. It comes from VseGraphView.OnGraphViewChanged. .Where(e => e is IMovable movable && (!(e.Model is IGTFNodeModel) || movable.IsMovable)) .Select(e => e.Model) .OfType <IPositioned>(); m_GraphView.Store.Dispatch(new MoveElementsAction(delta, models.ToArray())); } } m_PanSchedule.Pause(); if (m_ItemPanDiff != Vector3.zero) { Vector3 p = m_GraphView.contentViewContainer.transform.position; Vector3 s = m_GraphView.contentViewContainer.transform.scale; m_GraphView.UpdateViewTransform(p, s); } if (selection.Count > 0 && m_PrevDropTarget != null) { if (m_PrevDropTarget.CanAcceptDrop(selection)) { using (DragPerformEvent drop = DragPerformEvent.GetPooled(evt)) { SendDragAndDropEvent(drop, selection, m_PrevDropTarget, m_GraphView); } } else { using (DragExitedEvent dexit = DragExitedEvent.GetPooled(evt)) { SendDragAndDropEvent(dexit, selection, m_PrevDropTarget, m_GraphView); } } } target.ReleaseMouse(); evt.StopPropagation(); } selectedElement = null; m_Active = false; m_PrevDropTarget = null; } }
protected new void OnMouseMove(MouseMoveEvent e) { if (!m_Active) { return; } if (m_GraphView == null) { return; } var ve = (VisualElement)e.target; Vector2 gvMousePos = ve.ChangeCoordinatesTo(m_GraphView.contentContainer, e.localMousePosition); m_PanDiff = GetEffectivePanSpeed(gvMousePos); if (m_PanDiff != Vector3.zero) { m_PanSchedule.Resume(); } else { m_PanSchedule.Pause(); } // We need to monitor the mouse diff "by hand" because we stop positionning the graph elements once the // mouse has gone out. m_MouseDiff = m_originalMouse - e.mousePosition; foreach (KeyValuePair <GraphElement, Rect> v in m_OriginalPos) { GraphElement ce = v.Key; // Detach the selected element from its parent before dragging it // TODO: Make it more generic if (ce.parent is StackNode) { StackNode stackNode = ce.parent as StackNode; ce.RemoveFromHierarchy(); m_GraphView.AddElement(ce); // Reselect it because RemoveFromHierarchy unselected it ce.Select(m_GraphView, true); if (m_GraphView.elementRemovedFromStackNode != null) { m_GraphView.elementRemovedFromStackNode(stackNode, ce); } } MoveElement(ce, v.Value); } List <ISelectable> selection = m_GraphView.selection; // TODO: Replace with a temp drawing or something...maybe manipulator could fake position // all this to let operation know which element sits under cursor...or is there another way to draw stuff that is being dragged? IDropTarget dropTarget = GetDropTargetAt(e.mousePosition, selection.OfType <VisualElement>()); if (m_PrevDropTarget != dropTarget && m_PrevDropTarget != null) { using (DragExitedEvent eexit = DragExitedEvent.GetPooled(e)) { SendDragAndDropEvent(eexit, selection, m_PrevDropTarget); } } using (DragUpdatedEvent eupdated = DragUpdatedEvent.GetPooled(e)) { SendDragAndDropEvent(eupdated, selection, dropTarget); } m_PrevDropTarget = dropTarget; selectedElement = null; e.StopPropagation(); }
/// <summary> /// Callback for the MouseUp event. /// </summary> /// <param name="evt">The event.</param> protected void OnMouseUp(MouseUpEvent evt) { if (m_GraphView == null) { if (m_Active) { target.ReleaseMouse(); m_SelectedElement = null; m_Active = false; m_Dragging = false; m_CurrentDropTarget = null; } return; } var selectedModels = m_GraphView.GetSelection(); if (CanStopManipulation(evt)) { if (m_Active) { if (m_Dragging || m_SelectedElement == null) { if (target is GraphView graphView) { graphView.StopSelectionDragger(); graphView.PositionDependenciesManager.StopNotifyMove(); } // if we stop dragging on something else than a DropTarget, just move elements if (m_GraphView != null && (m_CurrentDropTarget == null || !m_CurrentDropTarget.CanAcceptDrop(selectedModels))) { var movedElements = new HashSet <GraphElement>(m_OriginalPos.Keys); movedElements.AddRangeInternal(m_EdgesToUpdate); KeyValuePair <GraphElement, OriginalPos> firstPos = m_OriginalPos.First(); var delta = firstPos.Key.GetPosition().position - firstPos.Value.pos.position; var models = movedElements // PF remove this Where clause. It comes from VseGraphView.OnGraphViewChanged. .Where(e => !(e.Model is INodeModel) || e.IsMovable()) .Select(e => e.Model) .OfType <IMovable>(); m_GraphView.CommandDispatcher.Dispatch( new MoveElementsCommand(delta, models.ToList())); } } foreach (var edge in m_EdgesToUpdate) { edge.EdgeControl.ControlPointOffset = Vector2.zero; } m_EdgesToUpdate.Clear(); m_PanSchedule.Pause(); if (m_ItemPanDiff != Vector3.zero) { Vector3 p = m_GraphView.ContentViewContainer.transform.position; Vector3 s = m_GraphView.ContentViewContainer.transform.scale; m_GraphView.CommandDispatcher.Dispatch(new ReframeGraphViewCommand(p, s)); } if (selectedModels.Count > 0 && m_CurrentDropTarget != null) { if (m_CurrentDropTarget.CanAcceptDrop(selectedModels)) { using (DragPerformEvent ePerform = DragPerformEvent.GetPooled(evt)) { ePerform.target = m_CurrentDropTarget; m_GraphView.SendEvent(ePerform); } } else { using (DragExitedEvent eExit = DragExitedEvent.GetPooled(evt)) { eExit.target = m_CurrentDropTarget; m_GraphView.SendEvent(eExit); } } } if (selectedModels.Any()) { m_Snapper.EndSnap(); } target.ReleaseMouse(); evt.StopPropagation(); } m_SelectedElement = null; m_Active = false; m_CurrentDropTarget = null; m_Dragging = false; m_CurrentDropTarget = null; } }