public void ImportClass(UmlClass cl) { if (parent.FindClass(cl) == null) { GuiClass gc = GuiElementFactory.CreateClass(parent, x_coord_counter, ancest ? Y - 100 : Y + Height + 100, cl); x_coord_counter += 20 + gc.Width; } }
// Drag-n-drop functions public override void StartDrag(UmlObject elem) { dropobj = elem; dropitem = GuiElementFactory.CreateElement(elem); if (dropitem != null) { System.Diagnostics.Debug.Assert(dropitem is IMoveable && dropitem is IRemoveable, "wrong element created"); dropitem.parent = parent; if (dropitem is INeedRefresh) { parent.RefreshObject((INeedRefresh)dropitem); } action = MouseAction.Drag; } else { action = MouseAction.None; } }
public override void MouseDown(int x, int y, MouseButtons b, Keys modif, int realx, int realy) { // Left mouse button if (action != MouseAction.None) { return; } if (b == MouseButtons.Left) { if (current_operation == MouseOperation.DrawComment || current_operation == MouseOperation.DrawPackage) { switch (current_operation) { case MouseOperation.DrawComment: moveitem = GuiElementFactory.CreateMemo(parent, x, y); break; case MouseOperation.DrawPackage: moveitem = GuiElementFactory.CreatePackage(parent, x, y); break; } first_move = true; moveux = 0; moveuy = 0; action = MouseAction.Move; } else if ((modif & Keys.Control) == Keys.Control || current_operation == MouseOperation.DrawConnection) { conn_item = parent.FindItem(x, y, out moveux, out moveuy, true) as IAcceptConnection; if (conn_item == null) { action = MouseAction.Scroll; selx = x; sely = y; return; } int ux; float uy; conn_item.coord_nearest(x, y, out ux, out uy); action = MouseAction.CreateConnection; conn = new GuiConnection(new GuiConnectionPoint(conn_item, ux, uy, 0), new GuiConnectionPoint(x, y, 1), conn_type, parent, conn_type == UmlRelationType.Attachment ? GuiConnectionStyle.Line : conn_style); conn.first.item.coord_nearest(x, y, out conn.first.ux, out conn.first.uy); conn.first.UpdatePosition(true); conn.DoCreationFixup(); conn.InvalidateTemporary(); conn.Invalidate(); } else if ((modif & Keys.Shift) == Keys.Shift) { GuiObject obj = parent.FindItem(x, y, false); if (obj != null) { parent.SelectedObjects.Add(obj); obj.Invalidate(); } } else { // Left button click: // select // move, move multiple GuiObject s = parent.FindItem(x, y, out moveux, out moveuy, false); if (s == null) { parent.SelectedObjects.Clear(); action = MouseAction.Select; selx = x; sely = y; return; } if (!s.selected) { parent.SelectedObjects.Clear(); parent.SelectedObjects.Add(s); } // deciding: to move, or not ... moveitem = null; movelist = null; movestates.Clear(); original_selected = null; GuiObject t = parent.FindItem(x, y, out moveux, out moveuy, true); if (t != null) { if (t is IMoveRedirect) { if (t.selected) { original_selected = t; } moveitem = (t as IMoveRedirect).MoveRedirect(ref moveux, ref moveuy); } else if (t is IMoveMultiple && (t as IMoveMultiple).CanMoveInGroup) { movelist = new ArrayList(); if (!t.selected) { movelist.Add(t); } foreach (GuiObject o in parent.SelectedObjects) { if (o is IMoveMultiple && (o as IMoveMultiple).CanMoveInGroup) { movelist.Add(o); } } selx = x; sely = y; } else if (t is IMoveable && (t as IMoveable).IsMoveable(x, y)) { moveitem = t as IMoveable; } if (moveitem != null || movelist != null) { first_move = true; action = MouseAction.Move; } else if (t is IClickable) { (t as IClickable).LeftClick(false, x, y); } } } } else if (b == MouseButtons.Right) { ISelectable obj = parent.FindItem(x, y, true) as ISelectable; if (obj != null) { if (obj is IDropMenu) { parent.SelectedObjects.Clear(); parent.SelectedObjects.Add(obj as GuiObject); System.Windows.Forms.ContextMenu m = new ContextMenu(); (obj as IDropMenu).AddMenuItems(m, x, y); if (m.MenuItems.Count > 0) { m.Show(parent.cview, new Point(realx, realy)); } } } else { action = MouseAction.Scroll; Cursor.Current = Cursors.Hand; selx = x; sely = y; menurealx = realx; menurealy = realy; first_move = true; } } }