// Handler for element selection on the canvas providing resizing adorner void myCanvas_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { // Remove selection on clicking anywhere the window if (selected) { selected = false; if (selectedElement != null && aLayer.GetAdorners(selectedElement) != null) { // Remove the adorner from the selected element aLayer.Remove(aLayer.GetAdorners(selectedElement)[0]); selectedElement = null; } } //If adding a new link if (e.Source.GetType() == typeof(SystemBasicView)) { if (e.Source.GetType() == typeof(SystemBasicView) && _isAddNewLink) { if (!_isLinkStarted) { if (_link == null || _link.EndPoint != _link.StartPoint) { _isLinkStarted = true; _linkedSystem = e.Source as SystemBasicView; SystemViewModel svm = (_linkedSystem.DataContext) as SystemViewModel; _tempLink = new TemporaryConnectorViewModel(svm); _tempLink.StartPostion = _linkedSystem.Position; e.Handled = true; } } } // If a componentView is selected, add adorner layer to it else { _isDown = true; _startPoint = e.GetPosition(myCanvas); selectedElement = e.Source as UIElement; _originalPoint = selectedElement.TranslatePoint(new Point(0, 0), myCanvas); aLayer = AdornerLayer.GetAdornerLayer(selectedElement); aLayer.Add(new ResizingAdorner(selectedElement, myCanvas)); selected = true; e.Handled = true; } } }
//added to ComponentSelected Event when Link button is clicked public void StartTempConnector(ComponentViewModel start, EventArgs e) { //Create temporary connector for visual display TemporaryConnectorViewModel temp = new TemporaryConnectorViewModel(start as SystemViewModel); ComponentVMs.Add(temp); //remove handler from event to prevent being called again ComponentSelected -= StartTempConnector; //create event handler closure to remember start ComponentSelectionHandler h = null; h = (end, args) => { //create real connector with remembered start and new end CreateConnector(start as SystemViewModel, end as SystemViewModel); //remove h so not called again ComponentSelected -= h; //remove temporary connector ComponentVMs.Remove(temp); }; //add anonymous event handler "h" to ComponentSelected ComponentSelected += h; }
// Handler for drag stopping on user choise void DragFinishedMouseHandler(object sender, MouseButtonEventArgs e) { if(e.Source.GetType() == typeof(SystemBasicView)) { if (_tempLink != null) { SystemBasicView targetSystem = e.Source as SystemBasicView; SystemViewModel s = (targetSystem.DataContext) as SystemViewModel; _tempLink.End = s; _tempLink.EndPosition = e.GetPosition(this); Mouse.OverrideCursor = null; _isAddNewLink = false; _isLinkStarted = false; _context.ComponentVMs.Add(_tempLink); _tempLink = null; e.Handled = true; } } StopDragging(); e.Handled = true; }