示例#1
0
 public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
 {
     if (interaction.Type == InteractionType.MouseMoved)
     {
         SetEnd(interaction.MousePosition.X, interaction.MousePosition.Y);
     }
 }
示例#2
0
 public override void StopInteraction(DiagramInteractionEventArguments interaction)
 {
     if (ContextTerminal != null)
     {
         ContextTerminal.HighlightVisible = false;
     }
 }
示例#3
0
 public void HandleDiagramInput(DiagramInteractionEventArguments interaction, Diagram diagram)
 {
     interaction.Diagram = diagram;
     PutViewModelMouseIsOverInInteraction(interaction);
     PutKeyStatesInInteraction(interaction);
     SendInteractionToInteractors(interaction);
 }
示例#4
0
 public override void StartInteraction(DiagramInteractionEventArguments interaction)
 {
     _reachedMinimunMouseDeltaToStartPanning = false;
     StartMouseLocation = interaction.MousePosition;
     StartPanX          = interaction.Diagram.PanX;
     StartPanY          = interaction.Diagram.PanY;
 }
示例#5
0
        private void SendInteractionToActiveInteractions(DiagramInteractionEventArguments interaction)
        {
            var activeInteractors = ActiveDiagramInteractors.ToArray();

            foreach (var activeInteractor in activeInteractors)
            {
                activeInteractor.ProcessInteraction(interaction);
            }
        }
示例#6
0
 public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
 {
     if (interaction.Type == InteractionType.MouseMoved)
     {
         MoveInsertingNode(interaction.Diagram, interaction.MousePosition);
         interaction.Diagram.UpdateDiagramBoundingBox();
         InsertingNodeViewModel.Visible = true;
     }
 }
示例#7
0
        private void StopActiveInteractionsThatShouldStop(DiagramInteractionEventArguments interaction)
        {
            var activeInteractors = ActiveDiagramInteractors.ToArray();

            foreach (var activeInteractor in activeInteractors)
            {
                TryStoppingInteraction(interaction, activeInteractor);
            }
        }
示例#8
0
 public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
 {
     if (interaction.Type == InteractionType.MouseMoved)
     {
         var diagram       = interaction.Diagram;
         var mousePosition = interaction.MousePosition;
         ProcessMouseMoved(diagram, mousePosition);
     }
 }
示例#9
0
        public override bool ShouldStartInteraction(DiagramInteractionEventArguments interaction)
        {
            if ((interaction.Type == InteractionType.LeftMouseDown ||
                 interaction.Type == InteractionType.MouseMoved) &&
                interaction.ViewModelUnderMouse is Node node)
            {
                if (!node.ResizeEnabled)
                {
                    return(false);
                }
                var mousePosition     = interaction.MousePosition;
                var diagram           = interaction.Diagram;
                var absoluteLeft      = diagram.GetViewPointFromDiagramPointX(node.X + Diagram.NodeBorderWidth);
                var absoluteTop       = diagram.GetViewPointFromDiagramPointY(node.Y + Diagram.NodeBorderWidth);
                var absoluteRight     = diagram.GetViewPointFromDiagramPointX(node.X + node.Width + Diagram.NodeBorderWidth);
                var absoluteBottom    = diagram.GetViewPointFromDiagramPointY(node.Y + node.Height + Diagram.NodeBorderWidth);
                var topLeftCorner     = new Point(absoluteLeft, absoluteTop);
                var topRightCorner    = new Point(absoluteRight, absoluteTop);
                var bottomLeftCorner  = new Point(absoluteLeft, absoluteBottom);
                var bottomRightCorner = new Point(absoluteRight, absoluteBottom);
                var scaledMargin      = ResizeBorderMargin * diagram.Zoom;

                if (mousePosition.X > absoluteLeft && mousePosition.X < absoluteRight)
                {
                    if (mousePosition.Y > absoluteTop && mousePosition.Y < absoluteBottom)
                    {
                        if (scaledMargin > DistanceFromPointToLine(mousePosition, topLeftCorner, topRightCorner))
                        {
                            Mode = ResizeMode.Top;
                            Mouse.SetCursor(Cursors.SizeNS);
                        }
                        else if (scaledMargin > DistanceFromPointToLine(mousePosition, topRightCorner, bottomRightCorner))
                        {
                            Mode = ResizeMode.Right;
                            Mouse.SetCursor(Cursors.SizeWE);
                        }
                        else if (scaledMargin > DistanceFromPointToLine(mousePosition, bottomRightCorner, bottomLeftCorner))
                        {
                            Mode = ResizeMode.Bottom;
                            Mouse.SetCursor(Cursors.SizeNS);
                        }
                        else if (scaledMargin > DistanceFromPointToLine(mousePosition, bottomLeftCorner, topLeftCorner))
                        {
                            Mode = ResizeMode.Left;
                            Mouse.SetCursor(Cursors.SizeWE);
                        }
                        else
                        {
                            return(false);
                        }
                        return(interaction.Type == InteractionType.LeftMouseDown);
                    }
                }
            }
            return(false);
        }
示例#10
0
        public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
        {
            var diagram       = interaction.Diagram;
            var selectedNodes = diagram.Nodes.Where(n => n.IsSelected);

            selectedNodes.ForEach(diagram.RemoveNode);
            if (!diagram.Nodes.Any())
            {
                diagram.ResetPanAndZoom();
            }
        }
示例#11
0
        private static void PutViewModelMouseIsOverInInteraction(DiagramInteractionEventArguments interaction)
        {
            var elementMouseIsOver = Mouse.DirectlyOver as FrameworkElement;

            if (!(elementMouseIsOver?.DataContext is Screen viewModelMouseIsOver))
            {
                var contentPresenter = elementMouseIsOver?.DataContext as ContentPresenter;
                viewModelMouseIsOver = contentPresenter?.DataContext as Screen;
            }
            interaction.ViewModelUnderMouse = viewModelMouseIsOver;
        }
示例#12
0
        public override void StartInteraction(DiagramInteractionEventArguments interaction)
        {
            var diagram       = interaction.Diagram;
            var mousePosition = interaction.MousePosition;

            RiftStartDiagramPoint = diagram.GetDiagramPointFromViewPoint(mousePosition);
            Mode       = RiftMode.None;
            X          = mousePosition.X;
            Y          = mousePosition.Y;
            RiftWidth  = 0;
            RiftHeight = 0;
        }
示例#13
0
        private bool TryStoppingInteraction(DiagramInteractionEventArguments interaction, DiagramInteractor activeInteractor)
        {
            var didInteractionStop = activeInteractor.ShouldStopInteraction(interaction);

            if (didInteractionStop)
            {
                activeInteractor.StopInteraction(interaction);
                ActiveDiagramInteractors.Remove(activeInteractor);
                ActiveDiagramInteractorNames.Remove(activeInteractor.GetType().Name);
            }
            return(didInteractionStop);
        }
示例#14
0
 public override void StopInteraction(DiagramInteractionEventArguments interaction)
 {
     if (!interaction.IsCtrlKeyPressed)
     {
         foreach (var node in interaction.Diagram.Nodes.Where(n => n.IsSelected))
         {
             node.X = interaction.Diagram.SnapToGrid(node.X);
             node.Y = interaction.Diagram.SnapToGrid(node.Y);
         }
     }
     interaction.Diagram.ShowSnapGrid = false;
 }
示例#15
0
 private void SendInteractionToInteractors(DiagramInteractionEventArguments interaction)
 {
     if (!ActiveDiagramInteractors.Any())
     {
         StartAndProcessInteractionsThatShouldStart(interaction);
     }
     else
     {
         SendInteractionToActiveInteractions(interaction);
         StopActiveInteractionsThatShouldStop(interaction);
     }
 }
示例#16
0
 public override bool ShouldStartInteraction(DiagramInteractionEventArguments interaction)
 {
     if ((interaction.Type == InteractionType.LeftMouseDown) &&
         interaction.ViewModelUnderMouse is Node node &&
         !interaction.IsCtrlKeyPressed)
     {
         var mouseX  = interaction.MousePosition.X;
         var mouseY  = interaction.MousePosition.Y;
         var diagram = interaction.Diagram;
         return(IsMouseOverNodeBorder(node, mouseX, mouseY, diagram));
     }
     return(false);
 }
示例#17
0
        public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
        {
            var diagram           = interaction.Diagram;
            var mousePosition     = interaction.MousePosition;
            var diagramMousePoint = diagram.GetDiagramPointFromViewPoint(mousePosition);
            var riftDeltaX        = diagramMousePoint.X - RiftStartDiagramPoint.X;
            var riftDeltaY        = diagramMousePoint.Y - RiftStartDiagramPoint.Y;

            if (interaction.Type == InteractionType.MouseMoved)
            {
                ProcessMouseMoved(diagram, mousePosition, riftDeltaX, riftDeltaY);
            }
        }
示例#18
0
 public override void StopInteraction(DiagramInteractionEventArguments interaction)
 {
     if (interaction.Type == InteractionType.RightMouseDown)
     {
         interaction.Diagram.RemoveNode(InsertingNodeViewModel);
     }
     else
     {
         InsertingNodeViewModel.X = interaction.Diagram.SnapToGrid(InsertingNodeViewModel.X);
         InsertingNodeViewModel.Y = interaction.Diagram.SnapToGrid(InsertingNodeViewModel.Y);
     }
     InsertingNodeViewModel           = null;
     interaction.Diagram.ShowSnapGrid = false;
 }
示例#19
0
        public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
        {
            var diagram = interaction.Diagram;

            if (interaction.Type == InteractionType.MouseMoved)
            {
                var mousePosition = interaction.MousePosition;
                ProcessMouseMoved(diagram, mousePosition);
            }
            else if (interaction.Type == InteractionType.LeftMouseUp && !_reachedMinimunMouseDeltaToStartPanning)
            {
                ProcessMouseMouseUpAfterNotPanning(diagram);
            }
        }
示例#20
0
 public override void StopInteraction(DiagramInteractionEventArguments interaction)
 {
     if (!interaction.IsCtrlKeyPressed)
     {
         foreach (var node in interaction.Diagram.Nodes.Where(n => n.IsSelected))
         {
             node.X      = interaction.Diagram.SnapToGrid(node.X);
             node.Y      = interaction.Diagram.SnapToGrid(node.Y);
             node.Width  = interaction.Diagram.SnapToGrid(node.Width);
             node.Height = interaction.Diagram.SnapToGrid(node.Height);
         }
     }
     interaction.Diagram.ShowSnapGrid = false;
     Mouse.SetCursor(Cursors.Arrow);
 }
示例#21
0
        public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
        {
            var diagram           = interaction.Diagram;
            var mousePosition     = interaction.MousePosition;
            var elementUnderMouse = interaction.ViewModelUnderMouse;

            if (interaction.Type == InteractionType.MouseMoved)
            {
                ProcessMouseMove(diagram, mousePosition, elementUnderMouse);
            }
            else if (interaction.Type == InteractionType.LeftMouseDown)
            {
                ProcessLeftMouseDown(diagram, elementUnderMouse);
            }
        }
示例#22
0
 private void StartAndProcessInteractionsThatShouldStart(DiagramInteractionEventArguments interaction)
 {
     foreach (var interactor in WeightedDiagramInteractors)
     {
         if (interactor.ShouldStartInteraction(interaction))
         {
             interactor.StartInteraction(interaction);
             ActiveDiagramInteractors.Add(interactor);
             ActiveDiagramInteractorNames.Add(interactor.GetType().Name);
             interactor.ProcessInteraction(interaction);
             if (!TryStoppingInteraction(interaction, interactor))
             {
                 break;
             }
         }
     }
 }
示例#23
0
        public override void StopInteraction(DiagramInteractionEventArguments interaction)
        {
            Mode            = RiftMode.None;
            _lastRiftDeltaX = 0;
            _lastRiftDeltaY = 0;

            if (!interaction.IsCtrlKeyPressed)
            {
                foreach (var node in NodesBeingRifted)
                {
                    node.X = interaction.Diagram.SnapToGrid(node.X);
                    node.Y = interaction.Diagram.SnapToGrid(node.Y);
                }
            }

            NodesBeingRifted = null;
        }
示例#24
0
        public override void StopInteraction(DiagramInteractionEventArguments interaction)
        {
            var diagram = interaction.Diagram;
            var left    = diagram.GetDiagramPointFromViewPointX(X);
            var top     = diagram.GetDiagramPointFromViewPointY(Y);
            var right   = diagram.GetDiagramPointFromViewPointX(X + Width);
            var bottom  = diagram.GetDiagramPointFromViewPointY(Y + Height);

            foreach (var node in diagram.Nodes)
            {
                if (node.X > left &&
                    node.X + node.Width < right &&
                    node.Y > top &&
                    node.Y + node.Height < bottom)
                {
                    node.IsSelected = true;
                }
            }
        }
示例#25
0
        public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
        {
            if (interaction.Type == InteractionType.RightMouseDown)
            {
                _diagram = interaction.Diagram;

                var availableWidth  = _diagram.View != null ? _diagram.View.RenderSize.Width : 0;
                var availableHeight = _diagram.View != null ? _diagram.View.RenderSize.Height : 0;
                X = Math.Min(interaction.MousePosition.X, availableWidth - NodeSelectorRightMargin);
                Y = Math.Min(interaction.MousePosition.Y, availableHeight - NodeSelectorBottomMargin);

                var viewModelUnderMouse = interaction.ViewModelUnderMouse;

                if (viewModelUnderMouse is Terminal terminal)
                {
                    if (terminal.Model.Direction != Direction.West)
                    {
                        X += Terminal.TerminalHeight;
                    }
                }
                ShowWithContextFilter(viewModelUnderMouse);
            }
        }
示例#26
0
 private void ProcessMouseUpInteraction(DiagramInteractionEventArguments interaction)
 {
     if (_mouseDownPoint.Equals(interaction.MousePosition))
     {
         if (interaction.ViewModelUnderMouse is Diagram)
         {
             interaction.Diagram.UnselectNodes();
             interaction.Diagram.UnselectTerminals();
         }
         else if (interaction.ViewModelUnderMouse is Node pluginNode)
         {
             if (!pluginNode.IsSelected)
             {
                 if (!interaction.IsCtrlKeyPressed)
                 {
                     interaction.Diagram.UnselectNodes();
                 }
                 interaction.Diagram.UnselectTerminals();
                 pluginNode.IsSelected = true;
             }
         }
     }
 }
示例#27
0
        public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
        {
            if (interaction.Type == InteractionType.LeftMouseDown)
            {
                ProcessMouseDownInteraction(interaction);
            }
            else if (interaction.Type == InteractionType.LeftMouseUp)
            {
                ProcessMouseUpInteraction(interaction);
            }

            if (interaction.ViewModelUnderMouse is Node pluginNode)
            {
                if (!pluginNode.IsSelected)
                {
                    if (!interaction.IsCtrlKeyPressed)
                    {
                        interaction.Diagram.UnselectNodes();
                    }
                    interaction.Diagram.UnselectTerminals();
                    pluginNode.IsSelected = true;
                }
            }
        }
示例#28
0
 public override bool ShouldStopInteraction(DiagramInteractionEventArguments interaction)
 {
     return(interaction.Type == InteractionType.LeftMouseUp);
 }
示例#29
0
 public override bool ShouldStartInteraction(DiagramInteractionEventArguments interaction)
 {
     return(interaction.Type == InteractionType.LeftMouseDown &&
            interaction.IsShiftKeyPressed &&
            interaction.ViewModelUnderMouse is Diagram);
 }
示例#30
0
 public override void StopInteraction(DiagramInteractionEventArguments interaction)
 {
 }