public CanvasPoint BeginLinkage(PinViewModel pinViewModel)
        {
            _currentUnfinishedLink = new LinkViewModel(pinViewModel, null, ControlTypesResolver);
            _linkViewModels.Add(_currentUnfinishedLink);

            return(_currentUnfinishedLink.EndPoint);
        }
        public CanvasPoint BeginLinkage(PinViewModel pinViewModel)
        {
            _currentUnfinishedLink = new LinkViewModel(pinViewModel, null, ControlTypesResolver);
            _linkViewModels.Add(_currentUnfinishedLink);

            return _currentUnfinishedLink.EndPoint;
        }
        public void Link(Node sourceNode, IPin sourcePin, Node targetNode, IPin targetPin)
        {
            var linkViewModel = new LinkViewModel(
                GetNodeViewModel(sourceNode).GetPinViewModel(sourcePin),
                GetNodeViewModel(targetNode).GetPinViewModel(targetPin),
                ControlTypesResolver);

            _linkViewModels.Add(linkViewModel);
        }
        public CanvasPoint BeginRelinkage(PinViewModel pinViewModel)
        {
            _currentUnfinishedLink = _linkViewModels.First(model => model.TargetPinViewModel == pinViewModel);
            _currentUnfinishedLink.TargetPinViewModel = null;
            var canvasPoint = new CanvasPoint();

            _currentUnfinishedLink.EndPoint = canvasPoint;
            return(canvasPoint);
        }
        public void EndLinkage(PinViewModel pinViewModel)
        {
            if (_currentUnfinishedLink != null)
            {
                var success = false;
                if (_currentUnfinishedLink.TargetPinViewModel == null)
                {
                    // Can't link to nowhere
                    if (pinViewModel != null)
                    {
                        // Can't link input<->input
                        if (pinViewModel.Pin.Direction == PinDirection.Input)
                        {
                            // Can't link node to itself
                            if (pinViewModel.NodeViewModel != _currentUnfinishedLink.SourcePinViewModel.NodeViewModel)
                            {
                                // Hurray! Successfully linked!

                                // Cleanup previous loosers
                                foreach (var linkViewModel in _linkViewModels.Where(model => model.TargetPinViewModel == pinViewModel).ToArray())
                                {
                                    Node.Unlink(linkViewModel.TargetPinViewModel.NodeViewModel.Node, linkViewModel.TargetPinViewModel.Pin);
                                    _linkViewModels.Remove(linkViewModel);
                                }

                                _currentUnfinishedLink.TargetPinViewModel = pinViewModel;
                                Node.Link(
                                    _currentUnfinishedLink.SourcePinViewModel.NodeViewModel.Node,
                                    _currentUnfinishedLink.SourcePinViewModel.Pin,
                                    pinViewModel.NodeViewModel.Node,
                                    pinViewModel.Pin);

                                pinViewModel.NodeViewModel.Node.Pulse();
                                success = true;
                            }
                        }
                    }
                }

                if (!success)
                {
                    _linkViewModels.Remove(_currentUnfinishedLink);
                }

                _currentUnfinishedLink = null;
            }
        }
 public CanvasPoint BeginRelinkage(PinViewModel pinViewModel)
 {
     _currentUnfinishedLink = _linkViewModels.First(model => model.TargetPinViewModel == pinViewModel);
     _currentUnfinishedLink.TargetPinViewModel = null;
     var canvasPoint = new CanvasPoint();
     _currentUnfinishedLink.EndPoint = canvasPoint;
     return canvasPoint;
 }
 public void Link(Node sourceNode, IPin sourcePin, Node targetNode, IPin targetPin)
 {
     var linkViewModel = new LinkViewModel(
         GetNodeViewModel(sourceNode).GetPinViewModel(sourcePin),
         GetNodeViewModel(targetNode).GetPinViewModel(targetPin),
         ControlTypesResolver);
     _linkViewModels.Add(linkViewModel);
 }
        public void EndLinkage(PinViewModel pinViewModel)
        {
            if (_currentUnfinishedLink != null)
            {
                var success = false;
                if (_currentUnfinishedLink.TargetPinViewModel == null)
                {
                    // Can't link to nowhere
                    if (pinViewModel != null)
                    {
                        // Can't link input<->input
                        if (pinViewModel.Pin.Direction == PinDirection.Input)
                        {
                            // Can't link node to itself
                            if (pinViewModel.NodeViewModel != _currentUnfinishedLink.SourcePinViewModel.NodeViewModel)
                            {
                                // Hurray! Successfully linked!

                                // Cleanup previous loosers
                                foreach (var linkViewModel in _linkViewModels.Where(model => model.TargetPinViewModel == pinViewModel).ToArray())
                                {
                                    Node.Unlink(linkViewModel.TargetPinViewModel.NodeViewModel.Node, linkViewModel.TargetPinViewModel.Pin);
                                    _linkViewModels.Remove(linkViewModel);
                                }

                                _currentUnfinishedLink.TargetPinViewModel = pinViewModel;
                                Node.Link(
                                    _currentUnfinishedLink.SourcePinViewModel.NodeViewModel.Node,
                                    _currentUnfinishedLink.SourcePinViewModel.Pin,
                                    pinViewModel.NodeViewModel.Node,
                                    pinViewModel.Pin);

                                pinViewModel.NodeViewModel.Node.Pulse();
                                success = true;
                            }
                        }
                    }
                }

                if (!success)
                {
                    _linkViewModels.Remove(_currentUnfinishedLink);
                }

                _currentUnfinishedLink = null;
            }
        }