public ConnectionUI CreateConnection(IConnectable source, IConnectable destination = null, bool isTemporary = true) { ConnectionUI connection = null; if (isTemporary) { connection = new ConnectionUI(false) { Source = source }; GraphView.AddElement(connection); connection.SendToBack(); } else { bool isNew; (connection, isNew) = source.GetConnection(destination, true); connection.Source = source; connection.Destination = destination; if (isNew) { GraphView.AddElement(connection); connection.SendToBack(); connection.Source = source; connection.Destination = destination; source.ExitConnections.Add(connection); destination.EntryConnections.Add(connection); source.OnExitConnect(connection); destination.OnEntryConnect(connection); connection.schedule.Execute(() => connection.Refresh()); if (connection is TransitionConnectionUI transitionConnection) { TransitionConnections.Add(transitionConnection); } } } return(connection); }