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