public void SetUp(BaseNode _nodeViewModel, CommandDispatcher _commandDispatcher, BaseGraphView _graphView)
        {
            Model             = _nodeViewModel;
            CommandDispatcher = _commandDispatcher;
            Owner             = _graphView;

            // 绑定
            BindingProperties();

            InitializePorts();
            RefreshPorts();

            foreach (var fieldInfo in Model.GetNodeFieldInfos())
            {
                // 如果不是接口,跳过
                if (!PortViews.TryGetValue(fieldInfo.Name, out NodePortView portView))
                {
                    continue;
                }
                if (portView.direction != Direction.Input)
                {
                    continue;
                }
                if (portView.orientation != Orientation.Horizontal)
                {
                    continue;
                }

                var box = new VisualElement {
                    name = fieldInfo.Name
                };
                box.AddToClassList("port-input-element");
                if (Utility_Attribute.TryGetFieldInfoAttribute(fieldInfo, out ShowAsDrawer showAsDrawer))
                {
                    BindableElement fieldDrawer = UIElementsFactory.CreateField(String.Empty, fieldInfo.FieldType, Model.GetFieldInfoValue(fieldInfo), (newValue) =>
                    {
                        IBindableProperty property;
                        if (!string.IsNullOrEmpty(showAsDrawer.targetBindablePropertyName) && (property = Model.GetBindableProperty(showAsDrawer.targetBindablePropertyName)) != null)
                        {
                            property.ValueBoxed = newValue;
                            Owner.SetDirty();
                        }
                    });
                    if (fieldDrawer != null)
                    {
                        box.Add(fieldDrawer);
                        box.visible              = !portView.Model.IsConnected;
                        portView.onConnected    += () => { box.visible = false; };
                        portView.onDisconnected += () => { box.visible = !portView.connected; };
                    }
                }
                else
                {
                    box.visible      = false;
                    box.style.height = portView.style.height;
                }
                inputContainerElement.Add(box);
            }
        }
        protected VisualElement CreateControlField(FieldInfo _fieldInfo, string _label = null, Action <object> _valueChangedCallback = null)
        {
            if (_fieldInfo == null)
            {
                return(null);
            }

            var fieldDrawer = UIElementsFactory.CreateField(_label, _fieldInfo.FieldType, Model.GetFieldInfoValue(_fieldInfo), (newValue) =>
            {
                Model.SetFieldInfoValue(_fieldInfo, newValue);
                _valueChangedCallback?.Invoke(newValue);
                Owner.SetDirty();
            });

            return(fieldDrawer);
        }
示例#3
0
        public void AddFieldView(string _name, ICZType _data)
        {
            BlackboardField blackboardField = new BlackboardField()
            {
                text = _name, typeText = _data.ValueType.Name, userData = _data
            };

            blackboardField.RegisterCallback <MouseEnterEvent>(evt =>
            {
                GraphView.nodes.ForEach(node =>
                {
                    if (node is ParameterNodeView parameterNodeView && parameterNodeView.T_Model.Name == blackboardField.text)
                    {
                        parameterNodeView.HighlightOn();
                    }
                });
            });

            blackboardField.RegisterCallback <MouseLeaveEvent>(evt =>
            {
                GraphView.nodes.ForEach(node =>
                {
                    if (node is ParameterNodeView parameterNodeView && parameterNodeView.T_Model.Name == blackboardField.text)
                    {
                        parameterNodeView.HighlightOff();
                    }
                });
            });
            BindableElement fieldDrawer = UIElementsFactory.CreateField("", _data.ValueType, _data.GetValue(), _newValue =>
            {
                _data.SetValue(_newValue);
                if (_data.GetValue() != null)
                {
                    blackboardField.typeText = _data.ValueType.Name;
                }
            });
            BlackboardRow blackboardRow = new BlackboardRow(blackboardField, fieldDrawer);

            contentContainer.Add(blackboardRow);
            fields[_name] = blackboardRow;
        }