public void DeleteItem(ElemBase elemBase) { int toDelete = this.GetTaskIndex(elemBase.Task); elemBase.Task.BeforeDeletion(); this.FunctionalElements.RemoveAt(toDelete); this.VisualElements.RemoveAt(toDelete); }
private bool IsLogicCompatible(ElemBase origin, ElemBase adding) { if (origin.GetType() == typeof(ElemEnd)) { return(false); } return(true); }
private void AddNewTask(ElemBase origin, Type newElem) { var res = CurrentSession.AddNewTask(origin, newElem); if (res != null) { SessionViewer.SelectedItem = res; } }
private void InsertTaskAfterElement(ElemBase origin, ElemBase adding) { adding.Task.VisualElement = adding; if (origin == null && adding.GetType() == typeof(ElemStart)) { FunctionalElements.Add(adding.Task); VisualElements.Add(adding); return; } FunctionalElements.Insert(FunctionalElements.IndexOf(origin.Task) + 1, adding.Task); VisualElements.Insert(VisualElements.IndexOf(origin) + 1, adding); }
private bool IsParameterCompatible(ElemBase origin, ElemBase adding) { if (adding.Task.InputTypes.Contains(ParameterTypes.Any)) { return(true); } if ((from inp in adding.Task.InputTypes where origin.Task.OutputType == inp select inp) .Any()) { return(true); } return(false); }
public ElemBase AddNewTask(ElemBase selected, Type elemType) { ElemBase newElem = Activator.CreateInstance(elemType, this) as ElemBase; TryAddEventSubscription(newElem.Task); if (VisualElements.Count > 0) { if (newElem is ElemStart) { return(null); } if (newElem is ElemEnd && VisualElements.Exists(o => o.GetType() == typeof(ElemEnd))) { return(null); } if (selected == null) { if (TryAddNewElement(VisualElements.Last(), newElem)) { return(newElem); } } else { if (TryAddNewElement(selected, newElem)) { return(newElem); } } } else { if (newElem is ElemStart) { TryAddNewElement(null, newElem); return(newElem); } } return(null); }
private bool TryAddNewElement(ElemBase origin, ElemBase adding) { if (origin != null && adding.GetType() != typeof(ElemStart)) { if (!IsParameterCompatible(origin, adding)) { return(false); } if (!IsLogicCompatible(origin, adding)) { return(false); } } InsertTaskAfterElement(origin, adding); if (origin != null) { origin.NextElementReaction(adding); } adding.Task.AfterTaskAddition(); adding.AfterElementAddition(); return(true); }