Example #1
0
        private InputOutputSelector SetSelector(SwitchBase sw, InputOutputBase sourceIO)
        {
            var selector = new InputOutputSelector(sw, sourceIO);

            if (Input?.InputOutput is InputBase && sourceIO is OutputBase)
            {
                Output = selector;
            }

            if (Input?.InputOutput is OutputBase && sourceIO is InputBase)
            {
                Output = selector;
            }

            if (Output?.InputOutput is InputBase && sourceIO is OutputBase)
            {
                Input = selector;
            }

            if (Output?.InputOutput is OutputBase && sourceIO is InputBase)
            {
                Input = selector;
            }

            return(selector);
        }
Example #2
0
        private void MouseServiceOnMouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                MouseRightDownMoveTranslationPositionLast = e.Location;
            }

            if (e.Button == MouseButtons.Left)
            {
                StartSelectionRectangle       = false;
                MouseLeftDownMovePositionLast = RenderingEngine.TranslatedMousePosition;
                MouseLeftDownPositionLast     = RenderingEngine.TranslatedMousePosition;

                if (!StartDrag)
                {
                    Input  = null;
                    Output = null;

                    var mouseOverItems       = RenderingEngine.CurrentProject.Items.Where(x => x.IsMouseOver).ToList();
                    var mouseOverConnections = RenderingEngine.CurrentProject.Connections.Where(x => x.IsMouseOver).ToList();

                    if (mouseOverItems.Count == 0 && mouseOverConnections.Count == 0)
                    {
                        DeselectAll();
                    }

                    if (mouseOverItems.Count > 0)
                    {
                        foreach (var selectedItem in mouseOverItems)
                        {
                            if (!CurrentSelection.Contains(selectedItem))
                            {
                                DeselectAll();
                                CurrentSelection.Add(selectedItem);
                            }
                            selectedItem.IsSelected = true;

                            List <InputOutputBase> inputOutputs = new List <InputOutputBase>();

                            inputOutputs.AddRange(selectedItem.Inputs);
                            inputOutputs.AddRange(selectedItem.Outputs);

                            var mouseOverInputOutput = inputOutputs.FirstOrDefault(x => x.IsMouseOver);

                            if (mouseOverInputOutput != null)
                            {
                                if (mouseOverInputOutput is InputBase)
                                {
                                    Input = new InputOutputSelector(selectedItem, mouseOverInputOutput);
                                }
                                if (mouseOverInputOutput is OutputBase)
                                {
                                    Output = new InputOutputSelector(selectedItem, mouseOverInputOutput);
                                }
                            }
                        }
                    }

                    if (mouseOverConnections.Count > 0)
                    {
                        foreach (var selectedItem in mouseOverConnections)
                        {
                            if (!CurrentSelectionConnection.Contains(selectedItem))
                            {
                                DeselectAll();
                                CurrentSelectionConnection.Add(selectedItem);
                            }
                            selectedItem.IsSelected = true;
                        }
                    }
                }

                if (!SelectedItemsAvailable)
                {
                    StartSelectionRectangle = true;
                    SelectionRectangleStart = e.Location;
                }
                StartDrag = true;
            }

            if (e.Button == MouseButtons.Middle)
            {
                MouseMiddleDownMovePositionLast = e.Location;
            }
        }
Example #3
0
        private void MouseServiceOnMouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (!StartSelectionRectangle)
                {
                    var mouseOverItems           = RenderingEngine.CurrentProject.Items.Where(x => x.IsMouseOver);
                    InputOutputSelector selector = null;
                    foreach (var selectedItem in mouseOverItems)
                    {
                        selectedItem.IsSelected = true;

                        List <InputOutputBase> inputOutputs = new List <InputOutputBase>();

                        inputOutputs.AddRange(selectedItem.Inputs);
                        inputOutputs.AddRange(selectedItem.Outputs);

                        var mouseOverInputOutput = inputOutputs.FirstOrDefault(x => x.IsMouseOver);

                        if (mouseOverInputOutput != null)
                        {
                            selector = SetSelector(selectedItem, mouseOverInputOutput);
                            break;
                        }
                    }

                    if (NotComplete || !SignatureMatching)
                    {
                        if (InputOutputAvailable && !SelectorEquals(SelectedInputOutput, selector))
                        {
                            _lastDestinationPoint = RenderingEngine.TranslatedMousePosition;
                            _currentActionArgs    = new ContextActionEventArgs {
                                Selector = SelectedInputOutput, Location = e.Location
                            };
                            OnContextAction(_currentActionArgs);
                            _actionActive = true;
                        }
                        else
                        {
                            OnInComplete();
                            FinishContextActionIntern();
                        }
                    }
                    else
                    {
                        OnCompleted();
                        FinishContextActionIntern();
                    }
                }
                else
                {
                    var selectedItems = RenderingEngine.CurrentProject.Items.Where(x => RectangleF.Intersect(x.Rectangle, SelectionRectangleTranslated) != RectangleF.Empty);

                    foreach (var selectedItem in selectedItems)
                    {
                        selectedItem.IsSelected = true;
                        CurrentSelection.Add(selectedItem);
                    }
                }

                StartDrag = false;
            }
        }
Example #4
0
 public static bool SelectorEquals(InputOutputSelector sel1, InputOutputSelector sel2)
 {
     return(sel1?.OriginId == sel2?.OriginId && sel1?.InputOutputId == sel2?.InputOutputId);
 }