Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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;
        }