Пример #1
0
        public void DeleteItem(ElemBase elemBase)
        {
            int toDelete = this.GetTaskIndex(elemBase.Task);

            elemBase.Task.BeforeDeletion();
            this.FunctionalElements.RemoveAt(toDelete);
            this.VisualElements.RemoveAt(toDelete);
        }
Пример #2
0
 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;
            }
        }
Пример #4
0
 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);
 }
Пример #5
0
 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);
 }
Пример #6
0
        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);
        }
Пример #7
0
 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);
 }