public void ContextMenuAddChild(object sender, RoutedEventArgs e) { if (!(sender is MenuItem)) { return; } string guid = ((MenuItem)sender).Name.Substring(1, ((MenuItem)sender).Name.Length - 1).Replace("_", "-"); foreach (var umlElement in elements) { if (umlElement is UMLClassBox && ((UMLClassBox)umlElement).getGuid() == guid) { UMLClassBox f = umlElement as UMLClassBox; Point s = f.GetCenterPoint(); UMLClassBox n = new UMLClassBox("NewChildClass", UMLClassBox.BoxType.Class, new Point(s.X + 160, s.Y), classes); n.draw(drawCanvas); n.initMenu(this); DependencyArrow dependency = new DependencyArrow(n, f, (f.getType() == UMLClassBox.BoxType.Class)? DependencyArrow.Tips.DerivArrow: DependencyArrow.Tips.ImplementationArrow); dependency.draw(drawCanvas); elements.Add(n); elements.Add(dependency); return; } } }
private void Canvas_MouseUp(object sender, MouseButtonEventArgs e) { Point now = e.GetPosition((UIElement)sender); if (picked == State.ClassBox || picked == State.InterfaceBox) { drawCanvas.Children.Remove(rectangle); now = new Point(now.X - rectangle.Width / 2, now.Y - rectangle.Height / 2); UMLClassBox box = new UMLClassBox("SomeClass", (picked == State.ClassBox)? UMLClassBox.BoxType.Class: UMLClassBox.BoxType.Interface, now, classes); box.initMenu(this); box.draw(drawCanvas); elements.Add(box); setMode(State.Editing); } else if (picked == State.Editing && !isMoving && e.ChangedButton == MouseButton.Left && e.ChangedButton != MouseButton.Right) { UMLElement g = getPickedElement(now); if (g != null) { g.setPicked(!g.getPicked()); return; } } else if (picked != State.Editing) { if (!doubleClick) { doubleClick = true; fblock = getPickedElement(now); } else { DependencyArrow.Tips s; s = convertTip(); doubleClick = false; DependencyArrow line = new DependencyArrow(fblock, getPickedElement(now), s); line.draw(drawCanvas); elements.Add(line); setMode(State.Editing); } } isMoving = false; }
public void ContextMenuAddParent(object sender, RoutedEventArgs e) { if (!(sender is MenuItem)) { return; } string guid = ((MenuItem)sender).Name.Substring(1, ((MenuItem)sender).Name.Length - 1).Replace("_", "-"); DependencyArrow link = null; UMLClassBox fblock = null; UMLClassBox sblock = null; foreach (var val in elements) { if (val is DependencyArrow && (val as DependencyArrow).getFGUID() == guid && ((val as DependencyArrow).GetTip() == DependencyArrow.Tips.ImplementationArrow || (val as DependencyArrow).GetTip() == DependencyArrow.Tips.DerivArrow)) { link = val as DependencyArrow; } else if (val is UMLClassBox && (val as UMLClassBox).getGuid() == guid) { fblock = val as UMLClassBox; } if (link != null && fblock != null) { break; } } if (link != null) { foreach (var umlElement in elements) { if (umlElement is UMLClassBox && (umlElement as UMLClassBox).getGuid() == link.getSGUID()) { sblock = umlElement as UMLClassBox; break; } } } ParentDependencyWindow dependencyWindow = new ParentDependencyWindow(fblock.getFieldsList(), fblock.getMethodsList()); if (dependencyWindow.ShowDialog() != true) { return; } if (link != null) { elements.Remove(link); link.removeGraphicFromCanvas(drawCanvas); } UMLClassBox newbox = dependencyWindow.generateParent(fblock.GetCenterPoint(), classes); fblock.move(new Point(160, 0), drawCanvas); DependencyArrow arrow = new DependencyArrow(fblock, newbox, DependencyArrow.Tips.DerivArrow); arrow.draw(drawCanvas); newbox.draw(drawCanvas); newbox.beforeLoadSets(classes); newbox.initMenu(this); elements.Add(arrow); elements.Add(newbox); if (link != null) { DependencyArrow sArrow = new DependencyArrow(newbox, sblock, link.GetTip()); sArrow.draw(drawCanvas); elements.Add(sArrow); } //TODO: удалять отдельно связи }