/// <summary> /// Affiche l'adorner, le crée si nécessaire. /// </summary> /// <param name="currentPosition">La position relative à la fenêtre parente.</param> private void ShowDraggedAdorner(Point currentPosition) { if (_draggedAdorner == null) { var adornerLayer = AdornerLayer.GetAdornerLayer(_topWindow.GetFirstFocusableChild()); // Créer l'adorner if (this.AdornerContent != null || this.AdornerDataTemplate != null) { _draggedAdorner = new DraggedAdorner(this.AdornerContent, this.AdornerDataTemplate, this.AssociatedObject, adornerLayer); } else { _draggedAdorner = new DraggedAdorner(CreateAssociatedObjectVisual(), null, this.AssociatedObject, adornerLayer); } _draggedAdorner.Style = this.AdornerStyle; // Obtenir la position var transform = base.AssociatedObject.TransformToAncestor(_topWindow) as MatrixTransform; var sourcePos = new Point(-transform.Matrix.OffsetX, -transform.Matrix.OffsetY) + new Vector(SystemParameters.CursorWidth / 4, SystemParameters.CursorHeight / 4); _draggedAdornerOffset = new Point(this._initialMousePosition.X + sourcePos.X, this._initialMousePosition.Y + sourcePos.Y); } // mettre à jour la position _draggedAdorner.SetPosition( currentPosition.X - this._initialMousePosition.X + _draggedAdornerOffset.X, currentPosition.Y - this._initialMousePosition.Y + _draggedAdornerOffset.Y); }
protected override void OnDragOver(DragEventArgs e) { var currentPosition = e.GetPosition(WorkspaceElements); // create adorner if it is necessary if (draggedAdorner == null) { var adornerLayer = AdornerLayer.GetAdornerLayer(WorkspaceElements); draggedAdorner = new DraggedAdorner(draggedData, draggedSelectionTemplate, WorkspaceElements, adornerLayer); } var zoom = ViewModel.Zoom; var xOffset = currentPosition.X - initialMousePosition.X; var yOffset = currentPosition.Y - initialMousePosition.Y; // compute (x; y) so that dragged selection has mouse cursor // in the same place as origin selection does var x = xOffset * zoom; var y = yOffset * zoom; // compute bounds of dragged content so that it does not go outside dragged canvas var x1 = -ViewModel.Model.X / zoom - xOffset; var y1 = -ViewModel.Model.Y / zoom - yOffset; var x2 = WorkspaceElements.RenderSize.Width / zoom; var y2 = WorkspaceElements.RenderSize.Height / zoom; var bounds = new Rect(x1, y1, x2, y2); draggedAdorner.SetPosition(x, y, bounds); }
// // Adorner // // Creates or updates the dragged Adorner. private void CreateDraggedAdorner() { if (_draggedAdorner == null) { var adornerLayer = AdornerLayer.GetAdornerLayer(DragSource); _draggedAdorner = new DraggedAdorner(DraggedElement, DragSource, adornerLayer); } }
private void RemoveDraggedAdorner() { if (_draggedAdorner != null) { _draggedAdorner.Detach(); _draggedAdorner = null; } }
private void RemoveDraggedAdorner() { if (this.draggedAdorner != null) { this.draggedAdorner.Detach(); this.draggedAdorner = null; } }
// Adorners // Creates or updates the dragged Adorner. private void ShowDraggedAdorner(Point currentPosition) { if (this.draggedAdorner == null) { var adornerLayer = AdornerLayer.GetAdornerLayer(this.sourceItemsControl); this.draggedAdorner = new DraggedAdorner(this.draggedData, GetDragDropTemplate(this.sourceItemsControl), this.sourceItemContainer, adornerLayer); } this.draggedAdorner.SetPosition(currentPosition.X - this.initialMousePosition.X + this.initialMouseOffset.X, currentPosition.Y - this.initialMousePosition.Y + this.initialMouseOffset.Y); }
private void RemoveDraggedAdorner() { if (_draggedAdorner == null) { return; } _draggedAdorner.Detach(); _draggedAdorner = null; }
/// <summary> /// Drag and drop nodes, notes, annotations and connectors. /// </summary> /// <param name="mouse">Relative position to WorkspaceElements</param> private void DragAndDrop(Point mouse) { // disable clearing selection while dragged data is being generated // new AnnotationViewModel unnecessarily clears selection DynamoSelection.Instance.ClearSelectionDisabled = true; var selection = DynamoSelection.Instance.Selection; var nodes = selection.OfType <NodeModel>(); var notes = selection.OfType <NoteModel>(); var pins = selection.OfType <ConnectorPinModel>(); var annotations = selection.OfType <AnnotationModel>(); var connectors = nodes.SelectMany(n => n.OutPorts.SelectMany(port => port.Connectors) .Where(c => c.End != null && c.End.Owner.IsSelected)).Distinct(); // set list of selected viewmodels draggedData = connectors.Select(c => (ViewModelBase) new ConnectorViewModel(ViewModel, c)) .Concat(pins.Select(p => new ConnectorPinViewModel(ViewModel, p))) .Concat(notes.Select(n => new NoteViewModel(ViewModel, n))) .Concat(annotations.Select(a => new AnnotationViewModel(ViewModel, a))) .Concat(nodes.Select(n => { var node = this.ChildrenOfType <NodeView>() .FirstOrDefault(view => view.ViewModel.NodeModel == n); if (node == null) { return(new NodeViewModel(ViewModel, n)); } var nodeRect = node.nodeBorder; var size = new Size(nodeRect.ActualWidth, nodeRect.ActualHeight); // set fixed size for dragged nodes, // so that they will correspond to origin nodes return(new NodeViewModel(ViewModel, n, size)); })).ToList(); var locatableModels = nodes.Concat <ModelBase>(notes).Concat <ModelBase>(pins); var minX = locatableModels.Any() ? locatableModels.Min(mb => mb.X) : 0; var minY = locatableModels.Any() ? locatableModels.Min(mb => mb.Y) : 0; // compute offset to correctly place selected items right under mouse cursor var mouseOffset = new Point2D(mouse.X - minX, mouse.Y - minY); DynamoSelection.Instance.ClearSelectionDisabled = false; DragDrop.DoDragDrop(this, mouseOffset, DragDropEffects.Copy); // remove dragged selection view if (draggedAdorner != null) { draggedData = null; draggedAdorner.Detach(); draggedAdorner = null; } }
public void UpdateDragDrop(DragEventArgs e) { object draggedData = e.Data.GetData(Format.Name); if (draggedData != null) { Point currentPosition = e.GetPosition(_topWindow); if (_draggedAdorner == null) { var adornerLayer = AdornerLayer.GetAdornerLayer(_source); _draggedAdorner = new DraggedAdorner(draggedData, ItemsControlBehaviors.GetDragDropTemplate(_source), _sourceItemContainer, adornerLayer); } _draggedAdorner.SetPosition(currentPosition.X - _initialMousePosition.X + _initialMouseOffset.X, currentPosition.Y - _initialMousePosition.Y + _initialMouseOffset.Y); } }
// Adorners // Creates or updates the dragged Adorner. private void ShowDraggedAdorner(Point currentPosition) { if (this._draggedAdorner == null) { var adornerLayer = AdornerLayer.GetAdornerLayer(this._sourceItemsControl); this._draggedAdorner = new DraggedAdorner(this._draggedData, GetDragDropTemplate(this._sourceItemsControl), this._sourceItemContainer, adornerLayer); } double left = currentPosition.X - this._initialMousePosition.X + this._initialMouseOffset.X; Debug.WriteLine("Adorner Left: " + left); double top = currentPosition.Y - this._initialMousePosition.Y + this._initialMouseOffset.Y; Debug.WriteLine("Adorner Top: " + top); this._draggedAdorner.SetPosition(left, top); }
/// <summary> /// Supprime l'adorner. /// </summary> public virtual void RemoveAdorner() { if (_topWindow != null) { _topWindow.PreviewDragEnter -= TopWindow_DragEnter; _topWindow.PreviewDragOver -= TopWindow_DragOver; if (_draggedAdorner != null) { _draggedAdorner.Detach(); _draggedAdorner = null; } _topWindow = null; } }
private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { WorkspaceViewModel wvm = (DataContext as WorkspaceViewModel); if (this.snappedPort != null) { wvm.HandlePortClicked(this.snappedPort); } else { wvm.HandleLeftButtonDown(workBench, e); } // if selection is going to be dragged and ctrl is pressed if (wvm.IsDragging && Keyboard.Modifiers == ModifierKeys.Control) { initialMousePosition = e.GetPosition(WorkspaceElements); // disable clearing selection while dragged data is being generated // new AnnotationViewModel unnecessarily clears selection DynamoSelection.Instance.ClearSelectionDisabled = true; var selection = DynamoSelection.Instance.Selection; var nodes = selection.OfType <NodeModel>(); var notes = selection.OfType <NoteModel>(); var annotations = selection.OfType <AnnotationModel>(); var connectors = nodes.SelectMany(n => n.OutPorts.SelectMany(port => port.Connectors) .Where(c => c.End != null && c.End.Owner.IsSelected)).Distinct(); // set list of selected viewmodels draggedData = connectors.Select(c => (ViewModelBase) new ConnectorViewModel(ViewModel, c)) .Concat(notes.Select(n => new NoteViewModel(ViewModel, n))) .Concat(annotations.Select(a => new AnnotationViewModel(ViewModel, a))) .Concat(nodes.Select(n => { var nodeRect = this.ChildrenOfType <NodeView>() .First(view => view.ViewModel.NodeModel == n).nodeBorder; var size = new Size(nodeRect.ActualWidth, nodeRect.ActualHeight); // set fixed size for dragged nodes, // so that they will correspond to origin nodes return(new NodeViewModel(ViewModel, n, size)); })).ToList(); var mouse = e.GetPosition(WorkspaceElements); var locatableModels = nodes.Concat <ModelBase>(notes); var minX = locatableModels.Any() ? locatableModels.Min(mb => mb.X) : 0; var minY = locatableModels.Any() ? locatableModels.Min(mb => mb.Y) : 0; // compute offset to correctly place selected items right under mouse cursor var mouseOffset = new Point2D(mouse.X - minX, mouse.Y - minY); DynamoSelection.Instance.ClearSelectionDisabled = false; DragDrop.DoDragDrop(this, mouseOffset, DragDropEffects.Copy); // end dragging operation by setting State from DragSetup to None ViewModel.HandleMouseRelease(workBench, e); // remove dragged selection view if (draggedAdorner != null) { draggedData = null; draggedAdorner.Detach(); draggedAdorner = null; } } InCanvasSearchBar.IsOpen = false; }
private void ShowDraggedAdorner(Point currentPoint) { if (draggedAdorner == null) { var adornerLayer = AdornerLayer.GetAdornerLayer(sourceItemsControl); draggedAdorner = new DraggedAdorner(draggedData, GetDragDropTemplate(sourceItemsControl), sourceItemContainer, adornerLayer); } draggedAdorner.SetPosition(currentPoint.X, currentPoint.Y); }
private void RemoveDraggedAdorner() { if (draggedAdorner != null) { draggedAdorner.Detach(); draggedAdorner = null; } }
private void RemoveDraggedAdorner() { if (this.draggedAdorner == null) return; this.draggedAdorner.Detach(); this.draggedAdorner = (DraggedAdorner) null; }
private void ShowDraggedAdorner(Point currentPosition) { if (this.draggedAdorner == null) this.draggedAdorner = new DraggedAdorner(this.draggedData, DragDropHelper.GetDragDropTemplate((DependencyObject) this.dragSourceControl), (UIElement) this.sourceItemContainer, AdornerLayer.GetAdornerLayer((Visual) this.dragSourceControl)); this.draggedAdorner.SetPosition(currentPosition.X - this.initialMouseDragStartPosition.X + this.initialMouseOffset.X, currentPosition.Y - this.initialMouseDragStartPosition.Y + this.initialMouseOffset.Y); }