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;
}
}