コード例 #1
0
        private void Port_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                switch (HostCanvas.SplineMode)
                {
                case SplineModes.Nothing:
                    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);
                        }

                        HostCanvas.ConnectorCollection.Add(connector);
                    }


                    HostCanvas.SplineMode = SplineModes.Nothing;
                    HostCanvas.ClearTempLine();
                    break;
                }
            }
            else if (e.RightButton == MouseButtonState.Pressed)
            {
                foreach (var connector in ConnectedConnectors)
                {
                    connector.RemoveFromCanvas();
                }
                ConnectedConnectors.Clear();
            }
            // e.Handled = true;
        }