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