Ejemplo n.º 1
0
 public void AddNode(Node node, Vector location)
 {
     var nodeViewModel = new NodeViewModel(node, location, ControlTypesResolver);
     nodeViewModel.PropertyChanged += OnNodeViewModelPropertyChanged;
     _innerNodeViewModels.Add(nodeViewModel);
     Node.AddNode(node);
 }
Ejemplo n.º 2
0
        public PinViewModel(NodeViewModel nodeViewModel, IPin pin, IControlTypesResolver controlTypesResolver)
        {
            ControlTypesResolver = controlTypesResolver;
            NodeViewModel = nodeViewModel;
            Pin = pin;
            Name = pin.Name;
            Type = pin.Type;
            Point = new CanvasPoint();

            var changablePin = pin as INotifyPropertyChanged;
            if (changablePin != null)
            {
                changablePin.PropertyChanged += OnPinPropertyChanged;
                _disposable = Disposable.Create(() => changablePin.PropertyChanged -= OnPinPropertyChanged);
            }

            UpdateValue();
        }
Ejemplo n.º 3
0
        protected override void OnPreviewMouseUp(MouseButtonEventArgs e)
        {
            base.OnPreviewMouseUp(e);

            if (_canvasDragStartPoint != null)
            {
                ReleaseMouseCapture();
                _canvasDragStartPoint = null;
            }

            var hitTestResult = VisualTreeHelper.HitTest(this, e.GetPosition(this));
            var originalSource = hitTestResult.VisualHit;

            if (_endLinkPoint != null)
            {
                ReleaseMouseCapture();
                PinViewModel pinViewModel = null;

                var bullet = VisualTreeUtils.FindParent<Bullet>(originalSource);
                if (bullet != null)
                {
                    pinViewModel = VisualTreeUtils.FindDataContext<PinViewModel>(bullet);
                }

                OnPreviewPinMouseUp(pinViewModel, e);
                _endLinkPoint = null;
            }

            if (_nodeDraged != null)
            {
                ReleaseMouseCapture();
                _nodeDraged = null;
            }

            //            if (_currentRope != null)
            //            {
            //                var hitTestResult = VisualTreeHelper.HitTest(this, e.GetPosition(this));
            //                var pin = VisualTreeUtils.FindParent<Pin>(hitTestResult.VisualHit);
            //                var ropeAdded = false;
            //                if (pin != null)
            //                {
            //                    if (_currentRope.EndPoint == _currentRopeFreePoint)
            //                    {
            //                        if (pin.IsInputPin)
            //                        {
            //                            if (InnerControls.OfType<Rope>().All(rope => rope.EndPoint != _pinLocations[pin]))
            //                            {
            //                                _currentRope.EndPoint = _pinLocations[pin];
            //                                Node.Link(_sourcePin.Node, _sourcePin.NodePin, pin.Node, pin.NodePin);
            //                                pin.Node.Pulse();
            //                                ropeAdded = true;
            //                            }
            //                        }
            //                    }
            //                    else
            //                    {
            //                        if (!pin.IsInputPin)
            //                        {
            //                            _currentRope.BeginPoint = _pinLocations[pin];
            //                            Node.Link(pin.Node, pin.NodePin, _targetPin.Node, _targetPin.NodePin);
            //                            pin.Node.Pulse();
            //                            ropeAdded = true;
            //                        }
            //                    }
            //                }
            //
            //                if (!ropeAdded)
            //                {
            //                    InnerControls.Remove(_currentRope);
            //                }
            //
            //                _currentRope = null;
            //                _currentRopeFreePoint = null;
            //            }
        }
Ejemplo n.º 4
0
        protected override void OnPreviewMouseDown(MouseButtonEventArgs e)
        {
            base.OnPreviewMouseDown(e);

            if (!e.Handled)
            {
                if (e.ChangedButton == MouseButton.Middle)
                {
                    _canvasDragStartPoint = TranslatePosition(e.GetPosition(this));
                    CaptureMouse();
                }
                else if (e.ChangedButton == MouseButton.Left)
                {
                    var originalSource = e.OriginalSource as FrameworkElement;

                    var bullet = VisualTreeUtils.FindParent<Bullet>(originalSource);
                    if (bullet != null)
                    {
                        var pinViewModel = VisualTreeUtils.FindDataContext<PinViewModel>(bullet);

                        if (pinViewModel != null)
                        {
                            OnPreviewPinMouseDown(pinViewModel, e);
                            return;
                        }
                    }

                    var nodeViewModel = VisualTreeUtils.FindDataContext<NodeViewModel>(originalSource);
                    if (nodeViewModel != null && nodeViewModel != ViewModel)
                    {
                        _nodeDragLatestPoint = (Vector) TranslatePosition(e.GetPosition(this));
                        _nodeDraged = nodeViewModel;
                        ViewModel.BringToFront(nodeViewModel.Node);
                        var ctrlPressed = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl);
                        if (ctrlPressed)
                        {
                            nodeViewModel.IsSelected = !ViewModel.SelectedNodeViewModels.Contains(nodeViewModel);
                        }
                        else
                        {
                            nodeViewModel.IsSelected = true;
                            foreach (var viewModel in ViewModel.SelectedNodeViewModels.ToArray())
                            {
                                if (viewModel != nodeViewModel && viewModel.IsSelected)
                                {
                                    viewModel.IsSelected = false;
                                }
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
 public void UpdateValue()
 {
     Value = IsDead ? null : NodeViewModel.GetValue(Pin);
 }