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