Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #4
0
 private void RemoveDraggedAdorner()
 {
     if (_draggedAdorner != null)
     {
         _draggedAdorner.Detach();
         _draggedAdorner = null;
     }
 }
Beispiel #5
0
 private void RemoveDraggedAdorner()
 {
     if (this.draggedAdorner != null)
     {
         this.draggedAdorner.Detach();
         this.draggedAdorner = null;
     }
 }
Beispiel #6
0
        // 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;
            }
        }
Beispiel #9
0
        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);
        }
Beispiel #11
0
        /// <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;
            }
        }
        // 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);
        }
Beispiel #13
0
        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 RemoveDraggedAdorner()
 {
     if (this.draggedAdorner != null)
     {
         this.draggedAdorner.Detach();
         this.draggedAdorner = null;
     }
 }
 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;
     }
 }
Beispiel #17
0
 private void RemoveDraggedAdorner()
 {
     if (this.draggedAdorner == null)
     return;
       this.draggedAdorner.Detach();
       this.draggedAdorner = (DraggedAdorner) null;
 }
Beispiel #18
0
 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);
 }