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);
        }
Beispiel #2
0
        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);
        }