public static T CreateUI <T>(GraphView graphView, IStore store, IGTFGraphElementModel model) where T : class, IGraphElement { if (model == null) { Debug.LogError("GraphElementFactory could not create element because model is null."); return(null); } if (graphView == null) { Debug.LogError("GraphElementFactory could not create element because graphView is null."); return(null); } var ext = ExtensionMethodCache <ElementBuilder> .GetExtensionMethod( model.GetType(), ElementBuilder.FilterMethods, ElementBuilder.KeySelector ); T newElem = null; if (ext != null) { var nodeBuilder = new ElementBuilder { GraphView = graphView }; newElem = ext.Invoke(null, new object[] { nodeBuilder, store, model }) as T; } if (newElem == null) { Debug.LogError($"GraphElementFactory doesn't know how to create a UI for element of type: {model.GetType()}"); return(null); } s_UIForModel[new ValueTuple <GraphView, IGTFGraphElementModel>(graphView, model)] = newElem; return(newElem); }
public static IGraphElement CreateCollapsiblePortNode(this ElementBuilder elementBuilder, IStore store, IGTFNodeModel model) { IGraphElement ui; if (model is IGTFStackNodeModel) { ui = new StackNode(); } else if (model is IHasSingleInputPort || model is IHasSingleOutputPort) { ui = new TokenNode(); } else if (model is IHasPorts) { ui = new CollapsiblePortNode(); } else { ui = new Node(); } ui.Setup(model, store, elementBuilder.GraphView); return(ui); }