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 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 LinkViewModel(PinViewModel sourcePinViewModel, PinViewModel targetPinViewModel, IControlTypesResolver controlTypesResolver) { SourcePinViewModel = sourcePinViewModel; TargetPinViewModel = targetPinViewModel; ControlTypesResolver = controlTypesResolver; }
private void OnPreviewPinMouseUp(PinViewModel pinViewModel, MouseButtonEventArgs e) { ViewModel.EndLinkage(pinViewModel); }
private void OnPreviewPinMouseDown(PinViewModel pinViewModel, MouseButtonEventArgs e) { if (pinViewModel.Pin.Direction != PinDirection.Input) { _endLinkPoint = ViewModel.BeginLinkage(pinViewModel); CaptureMouse(); } else { _endLinkPoint = ViewModel.BeginRelinkage(pinViewModel); CaptureMouse(); } }
public CanvasPoint BeginRelinkage(PinViewModel pinViewModel) { _currentUnfinishedLink = _linkViewModels.First(model => model.TargetPinViewModel == pinViewModel); _currentUnfinishedLink.TargetPinViewModel = null; var canvasPoint = new CanvasPoint(); _currentUnfinishedLink.EndPoint = canvasPoint; return canvasPoint; }