protected override async void HandleMouseDown(object sender, MouseButtonEventArgs e) { switch (mouseMode) { case MouseMode.Nothing: if (e.LeftButton == MouseButtonState.Pressed) { if (e.ClickCount == 2) { // left double click in empty space of canvas ShowSelectionNode(); } else { // left singe click in empty space of canvas startSelectionRectanglePoint = Mouse.GetPosition(this); mouseMode = MouseMode.PreSelectionRectangle; SplineMode = SplineModes.Nothing; } if (radialMenu != null) { radialMenu.IsOpen = false; radialMenu.Dispose(); radialMenu = null; } } else if (e.MiddleButton == MouseButtonState.Pressed) { start = e.GetPosition(this); origin = new Point(TranslateTransform.X, TranslateTransform.Y); HideElementsForTransformation(); Cursor = Cursors.Hand; mouseMode = MouseMode.Panning; } else if (e.RightButton == MouseButtonState.Pressed) { if (radialMenu == null) { radialMenu = new RadialContentMenu(this); Children.Add(radialMenu); } if (radialMenu.IsOpen) { radialMenu.IsOpen = false; await Task.Delay(400); } radialMenu.SetValue(LeftProperty, Mouse.GetPosition(this).X - 150); radialMenu.SetValue(TopProperty, Mouse.GetPosition(this).Y - 150); radialMenu.IsOpen = true; } break; case MouseMode.PreSelectionRectangle: if (e.ClickCount == 2) { // left double click in empty space of canvas ShowSelectionNode(); } break; case MouseMode.Selection: if (e.LeftButton == MouseButtonState.Pressed) { // left singe click in empty space of canvas while nodes are selected UnselectAllElements(); mouseMode = MouseMode.Nothing; } break; case MouseMode.GroupSelection: break; } }
public void NewFile() { NodeCollection.Clear(); ConnectorCollection.Clear(); Children.Clear(); if (radialMenu != null) radialMenu.Dispose(); radialMenu = null; selectionNode = null; }
private async void HandleMouseDown(object sender, MouseButtonEventArgs e) { switch (MouseMode) { case MouseModes.Nothing: if (e.LeftButton == MouseButtonState.Pressed) { if (e.ClickCount == 2) { // double click in empty space of canvas var node = new SelectionNode(this) { Left = Mouse.GetPosition(this).X - 15, Top = Mouse.GetPosition(this).Y - 20 }; } else { var mouseUpOnNode = false; foreach (var node in NodeCollection) { if (VisualTreeHelper.HitTest(node.Border, e.GetPosition(node)) != null) mouseUpOnNode = true; } // if mouse up in empty space if (!mouseUpOnNode) { startSelectionPoint = Mouse.GetPosition(this); MouseMode = MouseModes.Selection; SplineMode = SplineModes.Nothing; if (radialMenu != null) { radialMenu.IsOpen = false; radialMenu.Dispose(); radialMenu = null; } } } } else if (e.MiddleButton == MouseButtonState.Pressed) { // panning foreach (var node in NodeCollection) { node.OldMousePosition = e.GetPosition(this); if (MouseMode != MouseModes.Panning) MouseMove += node.HostCanvas_MouseMove; } MouseMode = MouseModes.Panning; } else if (e.RightButton == MouseButtonState.Pressed) { if (radialMenu == null) { radialMenu = new RadialContentMenu(this); Children.Add(radialMenu); } if (radialMenu.IsOpen) { radialMenu.IsOpen = false; await Task.Delay(400); } radialMenu.SetValue(LeftProperty, Mouse.GetPosition(this).X - 150); radialMenu.SetValue(TopProperty, Mouse.GetPosition(this).Y - 150); radialMenu.IsOpen = true; } break; } }