public override void Abort() { if (IsDragging) { IsDragging = false; if (_ghostAdorner != null) { RemoveAdorner(_ghostAdorner); _ghostAdorner = null; } _atomList = null; } if (EditViewModel.SelectedItems.Any()) { EditViewModel.ClearSelection(); CurrentStatus = DefaultText; } if (_lassoAdorner != null) { DisposeLasso(); } _initialTarget = null; _mouseTrack = null; CurrentEditor.ReleaseMouseCapture(); CurrentStatus = DefaultText; }
private void CurrentEditor_PreviewMouseMove(object sender, MouseEventArgs e) { var pos = Mouse.GetPosition(CurrentEditor); Vector shift; //how much we want to shift the objects by if (MouseIsDown(e) & !IsDragging) { CurrentStatus = "Draw around atoms and bonds to select."; if (_initialTarget == null) { if (_mouseTrack == null) { _mouseTrack = new PointCollection(); } StreamGeometry outline = null; if (!RectMode) { //just add the most recent point to the track _mouseTrack.Add(pos); } else { //build a rectangle _mouseTrack.Clear(); _mouseTrack.Add(StartPoint); _mouseTrack.Add(new Point(pos.X, StartPoint.Y)); _mouseTrack.Add(new Point(pos.X, pos.Y)); _mouseTrack.Add(new Point(StartPoint.X, pos.Y)); } outline = GetPolyGeometry(); if (_lassoAdorner == null) { _lassoAdorner = new LassoAdorner(CurrentEditor, outline); } if (Mouse.Captured != CurrentEditor) { Mouse.Capture(CurrentEditor); } _lassoAdorner.Outline = outline; } else { var target = CurrentObject(e); if (_initialTarget != target) { IsDragging = true; } } } //we're dragging an object around if (MouseIsDown(e) & IsDragging) { if (_initialTarget is Bond b && EditViewModel.SelectionType == SelectionTypeCode.Bond && EditViewModel.SelectedItems.Count == 1) //i.e. we have one bond selected { CurrentStatus = "Drag bond to reposition."; _atomList = new List <Atom> { b.StartAtom, b.EndAtom }; shift = pos - StartPoint; var tt = new TranslateTransform(shift.X, shift.Y); _shift = new TransformGroup(); _shift.Children.Add(tt); } else //we're dragging an atom { RemoveGhost(); DragAtom(pos); } RemoveGhost(); _ghostAdorner = new PartialGhostAdorner(EditViewModel, _atomList, _shift); }
private void CurrentEditor_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { dynamic currentObject = CurrentObject(e); if (IsDragging) { if (_atomList != null && _atomList.Any()) { EditViewModel.DoTransform(_shift, _atomList); _atomList[0].Parent.UpdateVisual(); } IsDragging = false; if (_ghostAdorner != null) { RemoveAdorner(_ghostAdorner); _ghostAdorner = null; } _atomList = null; } else { //did we go up on the target we went down on? if ((currentObject != null) & (currentObject == _initialTarget)) { //select it DoSelectionClick(e); } else if (_initialTarget != null && EditViewModel.SelectedItems.Contains(_initialTarget)) { DoSelectionClick(e); } if (_lassoAdorner != null) { _lassoHits = new List <object>(); GatherSelection(_lassoAdorner.Outline); _lassoHits = _lassoHits.Distinct().ToList(); EditViewModel.AddToSelection(_lassoHits); } if (EditViewModel.SelectedItems.Any()) { CurrentStatus = ActiveSelText; } if (_lassoAdorner != null) { DisposeLasso(); } } _initialTarget = null; _mouseTrack = null; CurrentEditor.ReleaseMouseCapture(); CurrentEditor.Focus(); var al = AdornerLayer.GetAdornerLayer(CurrentEditor); al.Update(); CurrentStatus = DefaultText; }