public void NewRelation(UmlRelation rel) { GuiClass c1 = FindClass(rel.src), c2 = FindClass(rel.dest); if (c1 != null && c2 != null) { int ux1 = 1, ux2 = 3; float uy1 = .5f, uy2 = .5f; if (rel.type == UmlRelationType.Association) { ux1 = 0; uy1 = c1.get_empty_point_on_edge(ux1); ux2 = 2; uy2 = c2.get_empty_point_on_edge(ux2); } else if (rel.type == UmlRelationType.Realization || rel.type == UmlRelationType.Inheritance) { uy2 = c2.get_empty_point_on_edge(ux2); } GuiConnection c = new GuiConnection(new GuiConnectionPoint(c1, ux1, uy1, 0), new GuiConnectionPoint(c2, ux2, uy2, 1), rel.type, this, rel.type == UmlRelationType.Attachment ? GuiConnectionStyle.Line : MouseAgent.conn_style); if (rel.type == UmlRelationType.Association) { c.nav = GuiConnectionNavigation.Left; } c.relation_id = rel.ID; c.first.UpdatePosition(true); c.second.UpdatePosition(true); c.DoCreationFixup(); c.ConnectionCreated(this, rel.src_role, rel.dest_role, rel.name, rel.stereo); Undo.Push(new CreateOperation(c), false); } }
public override void MouseUp(MouseButtons b) { if (scroll_active) { StopScrolling(); } parent.SetDefaultDrawingMode(); original_selected = null; switch (action) { case MouseAction.Scroll: Cursor.Current = Cursors.Arrow; if (first_move) { System.Windows.Forms.ContextMenu m = new ContextMenu(); parent.AddMenuItems(m); if (m.MenuItems.Count > 0) { m.Show(parent.cview, new Point(menurealx, menurealy)); } } break; case MouseAction.CreateConnection: if (conn.second.item == null) { conn.Invalidate(); } else { conn.ConnectionCreated(parent, null, null, null, null); parent.Undo.Push(new CreateOperation(conn), false); } conn = null; break; case MouseAction.Move: ArrayList movedobjects = new ArrayList(); foreach (GuiObject o in movestates.Keys) { if (o is IAroundObject) { movedobjects.Add(o); } } if (movedobjects.Count > 0) { parent.AroundObjectsMoved(movedobjects, movestates); } foreach (IMoveable o in movestates.Keys) { o.Moved(); } if (movestates.Count == 1) { foreach (IStateObject t in movestates.Keys) { parent.Undo.Push(new StateOperation(t, movestates[t] as ObjectState, t.GetState()), false); } } else if (movestates.Count > 1) { MultipleOperation p = new MultipleOperation(); foreach (IStateObject t in movestates.Keys) { p.l.Add(new StateOperation(t, movestates[t] as ObjectState, t.GetState())); } parent.Undo.Push(p, false); } movestates.Clear(); moveitem = null; movelist = null; break; case MouseAction.Select: parent.SelectedObjects.Clear(); parent.SelectInRectangle(selrect); parent.cview.InvalidatePage(selrect); selrect = Rectangle.Empty; break; } action = MouseAction.None; }