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