TUM.CMS.VplControl.Core.Port.Port_MouseDown C# (CSharp) Method

Port_MouseDown() private method

private Port_MouseDown ( object sender, System.Windows.Input.MouseButtonEventArgs e ) : void
sender object
e System.Windows.Input.MouseButtonEventArgs
return void
        private void Port_MouseDown(object sender, MouseButtonEventArgs e)
        {
            switch (hostCanvas.SplineMode)
            {
                case SplineModes.Nothing:

                    if (PortType== PortTypes.Input && !MultipleConnectionsAllowed && ConnectedConnectors.Count > 0)
                    {
                        Connector conn = ConnectedConnectors[0];
                        conn.Delete();
                        hostCanvas.TempStartPort = conn.StartPort;
                    }
                    else
                    {
                        hostCanvas.TempStartPort = this;
                    }

                    hostCanvas.SplineMode = SplineModes.Second;
                    break;
                case SplineModes.Second:
                    if (
                        (
                            hostCanvas.TempStartPort.DataType.IsCastableTo(DataType) &&
                            hostCanvas.TypeSensitive && PortType == PortTypes.Output
                            ||
                            DataType.IsCastableTo(hostCanvas.TempStartPort.DataType) &&
                            hostCanvas.TypeSensitive && PortType == PortTypes.Input // data types matching
                            ||
                            !hostCanvas.TypeSensitive // data types must not match
                            )
                        && PortType != hostCanvas.TempStartPort.PortType
                            // is not same port type --> input to output or output to input
                        && !Equals(ParentNode, hostCanvas.TempStartPort.ParentNode)) // is not same node
                    {
                        Connector connector;

                        if (PortType == PortTypes.Output)
                        {
                            if (hostCanvas.TempStartPort.ConnectedConnectors.Count > 0)
                            {
                                if (!hostCanvas.TempStartPort.MultipleConnectionsAllowed)
                                {
                                    foreach (var tempConnector in hostCanvas.TempStartPort.ConnectedConnectors)
                                        tempConnector.RemoveFromCanvas();

                                    hostCanvas.TempStartPort.ConnectedConnectors.Clear();
                                }
                            }

                            connector = new Connector(hostCanvas, this, hostCanvas.TempStartPort);
                        }
                        else
                        {
                            if (ConnectedConnectors.Count > 0)
                            {
                                if (!MultipleConnectionsAllowed)
                                {
                                    foreach (var tempConnector in ConnectedConnectors)
                                        tempConnector.RemoveFromCanvas();

                                    ConnectedConnectors.Clear();
                                }
                            }

                            connector = new Connector(hostCanvas, hostCanvas.TempStartPort, this);
                        }


                        connector.SynchroniseAfterZoom();
                        hostCanvas.ConnectorCollection.Add(connector);
                    }


                    hostCanvas.SplineMode = SplineModes.Nothing;
                    hostCanvas.ClearTempLine();
                    break;
            }

            e.Handled = true;
        }