Example #1
0
        public GraphElementSearcherDatabase AddControlFlows()
        {
            AddIfCondition(IfConditionMode.Basic);
            AddIfCondition(IfConditionMode.Advanced);
            AddIfCondition(IfConditionMode.Complete);

            SearcherItem parent    = null;
            var          loopTypes = TypeCache.GetTypesDerivedFrom <LoopStackModel>();

            foreach (var loopType in loopTypes.Where(t => !t.IsAbstract))
            {
                if (parent == null)
                {
                    parent = SearcherItemUtility.GetItemFromPath(Items, k_ControlFlow);
                }

                var name = $"{VseUtility.GetTitle(loopType)}{k_LoopStack}";
                parent.AddChild(new StackNodeModelSearcherItem(
                                    new ControlFlowSearcherItemData(loopType),
                                    data =>
                {
                    var stackModel = (StackBaseModel)data.StackModel;
                    var elements   = new List <IGraphElementModel>();

                    var graphModel    = (VSGraphModel)stackModel.GraphModel;
                    var stackPosition = new Vector2(
                        stackModel.Position.x + k_StackOffset.x,
                        stackModel.Position.y + k_StackOffset.y
                        );

                    LoopStackModel loopStack = graphModel.CreateLoopStack(
                        loopType,
                        stackPosition,
                        data.SpawnFlags
                        );

                    var node = loopStack.CreateLoopNode(
                        stackModel,
                        data.Index,
                        data.SpawnFlags);

                    elements.Add(node);
                    elements.Add(loopStack);

                    var edge = data.SpawnFlags.IsOrphan()
                            ? graphModel.CreateOrphanEdge(loopStack.InputPort, node.OutputPort)
                            : graphModel.CreateEdge(loopStack.InputPort, node.OutputPort);
                    elements.Add(edge);

                    return(elements.ToArray());
                },
                                    name
                                    ));
            }

            return(this);
        }
 public CreateInsertLoopNodeAction(IPortModel portModel, IStackModel stackModel, int index,
                                   LoopStackModel loopStackModel, IEnumerable <IEdgeModel> edgesToDelete = null)
 {
     PortModel      = portModel;
     StackModel     = stackModel;
     Index          = index;
     LoopStackModel = loopStackModel;
     EdgesToDelete  = edgesToDelete ?? Enumerable.Empty <IEdgeModel>();
 }
        public static IEnumerable <SyntaxNode> BuildLoop(this RoslynTranslator translator, LoopNodeModel statement, IPortModel portModel)
        {
            IPortModel outputPortModel = statement.OutputPort;

            if (outputPortModel == null)
            {
                yield break;
            }

            LoopStackModel loopStackModel =
                outputPortModel.ConnectionPortModels.FirstOrDefault()?.NodeModel as LoopStackModel;

            if (loopStackModel == null)
            {
                yield break;
            }

            foreach (var statementSyntax in translator.BuildNode(loopStackModel))
            {
                yield return(statementSyntax);
            }
        }