Пример #1
0
        public ExposedParameterFieldView(BaseGraphView graphView, ExposedParameter param, string shortType) : base(null, param.name, shortType)
        {
            this.graphView = graphView;
            parameter      = param;
            this.AddManipulator(new ContextualMenuManipulator(BuildContextualMenu));
            this.AddToClassList("parameter-" + shortType);
            this.Q("icon").visible = true;

            (this.Q("textField") as TextField).RegisterValueChangedCallback((e) =>
            {
                param.name = e.newValue;
                text       = e.newValue;
                if (param.name == "inputVector3" || param.name == "inputVector2" || param.name == "inputFloat" || param.name == "inputInteger" || param.name == "inputGameObject")
                {
                    param.settings.isHidden = true;
                }

                graphView.graph.UpdateExposedParameterName(param, e.newValue);
            });

            var parameterElem = this.Q("pill");

            parameterElem.RegisterCallback <MouseOverEvent>((e) =>
            {
                graphView.Query <ParameterNodeView>(className: "pName-" + parameter.name).Build()
                .ForEach(view => view.AddToClassList("Highlight"));
            });

            parameterElem.RegisterCallback <MouseOutEvent>((e) =>
            {
                graphView.Query <ParameterNodeView>(className: "pName-" + parameter.name).Build()
                .ForEach(view => view.RemoveFromClassList("Highlight"));
            });
        }
Пример #2
0
        private void UpdateOrderList()
        {
            content.Clear();
            var orderedNodes = graph.nodes.OrderBy(n => n.computeOrder).ToList();

            Func <VisualElement>        makeItem = () => new Label();
            Action <VisualElement, int> bindItem = (e, i) =>
            {
                var label = e as Label;
                if (orderedNodes[i].computeOrder == -2)
                {
                    label.AddToClassList("infinite-loop");
                    label.tooltip = "This node won't work if you don't fix the recursive loop.";
                    label.text    = "! x " + (orderedNodes[i].category != null ? orderedNodes[i].category + "/" : "") + orderedNodes[i].name;
                }
                else
                {
                    label.text = orderedNodes[i].computeOrder + 1 + " -> " + (orderedNodes[i].category != null ? orderedNodes[i].category + "/" : "") +
                                 orderedNodes[i].name;
                    if (!orderedNodes[i].GetInputNodes().Any() && !orderedNodes[i].GetOutputNodes().Any())
                    {
                        label.AddToClassList("no-connection");
                        label.text   += " (e)";
                        label.tooltip = "This node doesn't connected to any other nodes. It is recommended to remove it from the graph.";
                    }
                }

                var nodeView = graphView.Query(name: orderedNodes[i].GUID).Build().First();

                label.RegisterCallback <MouseOverEvent>(mo => Highlight(nodeView));
                label.RegisterCallback <MouseOutEvent>(mo => UnHighlight(nodeView));
            };

            const int itemHeight = 20;

            listView = new ListView(orderedNodes, itemHeight, makeItem, bindItem);
            listView.style.flexGrow = 1.0f;

            listView.onItemsChosen += obj =>
            {
                var selectedNode = obj.ToList()[0] as BaseNode;

                graph.position = new Vector3(-selectedNode.position.x + graphView.viewport.contentRect.width / 2f - selectedNode.position.width / 2f,
                                             -selectedNode.position.y + graphView.viewport.contentRect.height / 2f - selectedNode.position.height / 2f, 0f);
                graph.scale = Vector3.one;
                graphView.RemoveFromClassList("zoom-out");
                graphView.RemoveFromClassList("zoom-in");

                graphView.UpdateViewTransform(graph.position, graph.scale);
            };
            onResized += RefreshOrderList;
            listView.Q <ScrollView>().verticalScroller.valueChanged += RefreshOrderList;

            content.Add(listView);
        }