示例#1
0
        public override void OnMouseDown(ShapeMouseEventArgs args)
        {
            args.Sender.ClearSelection();
            Selected = true;

            if (args.BoundingBox.Data == RightResizeIdentifier)
            {
                mouseDownPos   = new Point(args.X, args.Y);
                SelectedObject = null;
                args.Redraw    = true;
            }
            else if (args.BoundingBox.Data == LeftResizeIdentifier)
            {
                mouseDownPos   = new Point(args.X, args.Y);
                SelectedObject = null;
                args.Redraw    = true;
            }
            else
            {
                mouseDownPos      = new Point(args.X, args.Y);
                mouseDownShapePos = Bounds.Location;
                SelectedObject    = null;

                args.Redraw = true;
            }
        }
示例#2
0
        private void MainCanvas_DoubleClick(object sender, EventArgs e)
        {
            var x = (int)((mouseDownPoint.X - MainCanvas.AutoScrollPosition.X) / Zoom);
            var y = (int)((mouseDownPoint.Y - MainCanvas.AutoScrollPosition.Y) / Zoom);

            for (int i = BoundingItemes.Count - 1; i >= 0; i--)
            {
                BoundingItem bitem = BoundingItemes[i];
                if (bitem.HitTest(x, y))
                {
                    if (bitem.Target is Shape)
                    {
                        currentBoundingItem = bitem;
                        var shape = (Shape)bitem.Target;
                        var args  = new ShapeMouseEventArgs
                        {
                            BoundingItem = bitem, X = x, Y = y, Button = MouseButtons.Left, Sender = this
                        };
                        shape.OnDoubleClick(args);
                        if (args.Redraw)
                        {
                            Refresh();
                        }
                    }

                    return;
                }
            }
        }
示例#3
0
 public override void OnDoubleClick(ShapeMouseEventArgs args)
 {
     if (args.BoundingBox.Data == TextIdentifier)
     {
         BeginEditText(args.Sender);
     }
 }
示例#4
0
        private void MainCanvas_MouseDown(object sender, MouseEventArgs e)
        {
            EndInput();
            var x = (int)((e.X - MainCanvas.AutoScrollPosition.X) / Zoom);
            var y = (int)((e.Y - MainCanvas.AutoScrollPosition.Y) / Zoom);

            if (EditMode == EditMode.BeginDrawRelation)
            {
                mouseDownPoint = new Point(e.X, e.Y);
                EditMode       = EditMode.DrawRelation;
                relationStart  = null;

                for (int i = BoundingBoxes.Count - 1; i >= 0; i--)
                {
                    BoundingBox bbox = BoundingBoxes[i];
                    if (bbox.Bounds.Contains(x, y))
                    {
                        if (bbox.Target is Shape)
                        {
                            relationStart = bbox.Target as Shape;
                        }
                    }
                }
            }
            else if (EditMode == EditMode.Normal)
            {
                mouseDownPoint           = new Point(e.X, e.Y);
                mouseDownAutoscrollPoint = new Point(-MainCanvas.AutoScrollPosition.X, -MainCanvas.AutoScrollPosition.Y);

                for (int i = BoundingBoxes.Count - 1; i >= 0; i--)
                {
                    BoundingBox bbox = BoundingBoxes[i];
                    if (bbox.Bounds.Contains(x, y))
                    {
                        if (bbox.Target is Shape)
                        {
                            currentBoundingBox = bbox;
                            var shape = (Shape)bbox.Target;
                            currentShape = shape;
                            var args = new ShapeMouseEventArgs();
                            args.BoundingBox = bbox;
                            args.X           = x;
                            args.Y           = y;
                            args.Button      = e.Button;
                            args.Sender      = this;
                            args.GridSize    = GridSize;
                            args.SnapToGrid  = SnapToGrid;
                            shape.OnMouseDown(args);
                            if (args.Redraw)
                            {
                                Refresh();
                            }
                        }

                        return;
                    }
                }
                isPanning = true;
            }
        }
示例#5
0
        public override void OnMouseUp(ShapeMouseEventArgs args)
        {
            foreach (UmlTypeMemberSection section in TypeMemberSections)
            {
                if (args.BoundingBox.Data == section.AddNewIdentifier)
                {
                    UmlTypeMember newMember = TypedDataSource.CreateTypeMember(section.Name);
                    SelectedObject = newMember;
                    BeginRenameProperty(args.Sender, newMember);
                    args.Redraw = true;
                }
            }

            //if (args.BoundingBox.Data == AddNewPropertyIdentifier)
            //{
            //    UmlTypeMember newProperty = TypedDataSource.CreateTypeMember("Property");
            //    this.SelectedObject = newProperty;

            //    BeginRenameProperty(args.Sender, newProperty);

            //    args.Redraw = true;
            //}

            if (args.BoundingBox.Data == TypeExpanderIdentifier)
            {
                Expanded = !Expanded;
            }
            args.Redraw = true;
        }
示例#6
0
        private void MainCanvas_DoubleClick(object sender, EventArgs e)
        {
            var x = (int)((mouseDownPoint.X - MainCanvas.AutoScrollPosition.X) / Zoom);
            var y = (int)((mouseDownPoint.Y - MainCanvas.AutoScrollPosition.Y) / Zoom);

            for (int i = BoundingBoxes.Count - 1; i >= 0; i--)
            {
                BoundingBox bbox = BoundingBoxes[i];
                if (bbox.Bounds.Contains(x, y))
                {
                    if (bbox.Target is Shape)
                    {
                        currentBoundingBox = bbox;
                        var shape = (Shape)bbox.Target;
                        var args  = new ShapeMouseEventArgs();
                        args.BoundingBox = bbox;
                        args.X           = x;
                        args.Y           = y;
                        args.Button      = MouseButtons.Left;
                        args.Sender      = this;
                        shape.OnDoubleClick(args);
                        if (args.Redraw)
                        {
                            Refresh();
                        }
                    }

                    return;
                }
            }
        }
示例#7
0
        public override void OnMouseDown(ShapeMouseEventArgs args)
        {
            args.Sender.ClearSelection();
            Selected    = true;
            args.Redraw = true;

            mouseDownPoint = new Point(args.X, args.Y);
        }
示例#8
0
        public override void OnMouseDown(ShapeMouseEventArgs args)
        {
            args.Sender.ClearSelection();
            Selected = true;

            if (args.BoundingBox.Data == RightResizeIdentifier)
            {
                mouseDownPos   = new Point(args.X, args.Y);
                SelectedObject = null;
                args.Redraw    = true;
            }
            else if (args.BoundingBox.Data == LeftResizeIdentifier)
            {
                mouseDownPos   = new Point(args.X, args.Y);
                SelectedObject = null;
                args.Redraw    = true;
            }
            else if (args.BoundingBox.Data == PropertiesIdentifier)
            {
                SelectedObject = PropertiesIdentifier;
                args.Redraw    = true;
            }
            else if (args.BoundingBox.Data is UmlTypeMember)
            {
                SelectedObject = args.BoundingBox.Data as UmlTypeMember;
                args.Redraw    = true;
            }
            else if (args.BoundingBox.Data == CaptionIdentifier)
            {
                mouseDownPos      = new Point(args.X, args.Y);
                mouseDownShapePos = Bounds.Location;
                SelectedObject    = null;

                args.Redraw = true;
            }
            else
            {
                foreach (UmlTypeMemberSection section in TypeMemberSections)
                {
                    if (args.BoundingBox.Data == section.CaptionIdentifier)
                    {
                        SelectedObject = section.CaptionIdentifier;
                        args.Redraw    = true;
                    }

                    if (args.BoundingBox.Data == section.ExpanderIdentifier)
                    {
                        SelectedObject   = section.CaptionIdentifier;
                        section.Expanded = !section.Expanded;
                        args.Redraw      = true;
                    }
                }
            }
        }
示例#9
0
        public override void OnDoubleClick(ShapeMouseEventArgs args)
        {
            foreach (UmlTypeMemberSection section in TypeMemberSections)
            {
                if (args.BoundingBox.Data == section.CaptionIdentifier)
                {
                    section.Expanded = !section.Expanded;
                    args.Redraw      = true;
                }
            }

            if (args.BoundingBox.Data == CaptionIdentifier)
            {
                BeginRenameType(args.Sender);
            }

            if (args.BoundingBox.Data is UmlTypeMember)
            {
                BeginRenameProperty(args.Sender, args.BoundingBox.Data as UmlTypeMember);
                args.Redraw = true;
            }
        }
示例#10
0
        public override void OnMouseMove(ShapeMouseEventArgs args)
        {
            if (args.BoundingItem.Data == StartPortIdentifier && args.Button == MouseButtons.Left)
            {
                Rectangle bounds = DataSource.Start.Bounds;

                int         offset = 0;
                UmlPortSide side   = DataSource.StartPortSide;

                int         oppositeOffset = DataSource.EndPortOffset;
                UmlPortSide oppositeSide   = DataSource.EndPortSide;


                MovePort(args, bounds, ref offset, ref side, oppositeOffset, oppositeSide);

                DataSource.StartPortSide   = side;
                DataSource.StartPortOffset = offset;
                args.Redraw = true;
            }

            if (args.BoundingItem.Data == EndPortIdentifier && args.Button == MouseButtons.Left)
            {
                Rectangle bounds = DataSource.End.Bounds;

                int         offset = 0;
                UmlPortSide side   = DataSource.EndPortSide;

                int         oppositeOffset = DataSource.StartPortOffset;
                UmlPortSide oppositeSide   = DataSource.StartPortSide;


                MovePort(args, bounds, ref offset, ref side, oppositeOffset, oppositeSide);

                DataSource.EndPortSide   = side;
                DataSource.EndPortOffset = offset;
                args.Redraw = true;
            }
        }
示例#11
0
        private static void MovePort(ShapeMouseEventArgs args, Rectangle bounds, ref int offset, ref UmlPortSide side,
                                     int oppositeOffset, UmlPortSide oppositeSide)
        {
            int x = args.X;
            int y = args.Y;

            int half   = bounds.Width / 2;
            int center = bounds.X + half;
            int xd     = Math.Abs(x - center);
            int top    = bounds.Top + half - xd;
            int bottom = bounds.Bottom - half + xd;


            if (x < center)
            {
                //left of
                side = UmlPortSide.Left;
            }
            else
            {
                //right of
                side = UmlPortSide.Right;
            }

            if (y < top)
            {
                side = UmlPortSide.Top;
            }

            if (y > bottom)
            {
                side = UmlPortSide.Bottom;
            }


            if (side == UmlPortSide.Top || side == UmlPortSide.Bottom)
            {
                offset = args.X - bounds.Left;

                if (args.X < bounds.Left)
                {
                    offset = 0;
                }

                if (args.X > bounds.Right)
                {
                    offset = bounds.Width;
                }
            }

            if (side == UmlPortSide.Left || side == UmlPortSide.Right)
            {
                offset = args.Y - bounds.Top;

                if (args.Y < bounds.Top)
                {
                    offset = 0;
                }

                if (args.Y > bounds.Bottom)
                {
                    offset = bounds.Height;
                }
            }

            if ((side == UmlPortSide.Left || side == UmlPortSide.Right) &&
                (oppositeSide == UmlPortSide.Left || oppositeSide == UmlPortSide.Right))
            {
                if (Math.Abs(offset - oppositeOffset) < 10)
                {
                    offset = oppositeOffset;
                }
            }

            if ((side == UmlPortSide.Top || side == UmlPortSide.Bottom) &&
                (oppositeSide == UmlPortSide.Top || oppositeSide == UmlPortSide.Bottom))
            {
                if (Math.Abs(offset - oppositeOffset) < 10)
                {
                    offset = oppositeOffset;
                }
            }
        }
示例#12
0
        public override void OnMouseMove(ShapeMouseEventArgs args)
        {
            if (args.BoundingBox.Data == RightResizeIdentifier && args.Button == MouseButtons.Left)
            {
                int diff = args.X - Bounds.Left;
                if (diff < 100)
                {
                    diff = 100;
                }

                Bounds      = new Rectangle(Bounds.X, Bounds.Y, diff, Bounds.Height);
                args.Redraw = true;
            }

            if (args.BoundingBox.Data == LeftResizeIdentifier && args.Button == MouseButtons.Left)
            {
                int diff = Bounds.Right - args.X;
                if (diff < 100)
                {
                    diff = 100;
                }

                if (diff + args.X > Bounds.Right)
                {
                    Bounds      = new Rectangle(Bounds.Right - 100, Bounds.Y, 100, Bounds.Height);
                    args.Redraw = true;
                }
                else
                {
                    Bounds      = new Rectangle(args.X, Bounds.Y, diff, Bounds.Height);
                    args.Redraw = true;
                }
            }

            if (args.BoundingBox.Data == CaptionIdentifier && args.Button == MouseButtons.Left)
            {
                int dx = args.X - mouseDownPos.X;
                int dy = args.Y - mouseDownPos.Y;

                int shapeX = mouseDownShapePos.X + dx;
                int shapeY = mouseDownShapePos.Y + dy;

                if (args.SnapToGrid)
                {
                    shapeX = shapeX - shapeX % args.GridSize;
                    shapeY = shapeY - shapeY % args.GridSize;
                }

                if (shapeX < 0)
                {
                    shapeX = 0;
                }

                if (shapeY < 0)
                {
                    shapeY = 0;
                }

                Bounds      = new Rectangle(shapeX, shapeY, Bounds.Width, Bounds.Height);
                args.Redraw = true;
            }
        }
示例#13
0
        private void MainCanvas_MouseUp(object sender, MouseEventArgs e)
        {
            var x = (int)((e.X - MainCanvas.AutoScrollPosition.X) / Zoom);
            var y = (int)((e.Y - MainCanvas.AutoScrollPosition.Y) / Zoom);

            if (EditMode == EditMode.DrawRelation)
            {
                relationEnd = null;


                for (int i = BoundingBoxes.Count - 1; i >= 0; i--)
                {
                    BoundingBox bbox = BoundingBoxes[i];
                    if (bbox.Bounds.Contains(x, y))
                    {
                        if (bbox.Target is Shape)
                        {
                            relationEnd = bbox.Target as Shape;
                        }
                    }
                }

                endDrawRelation(relationStart, relationEnd);

                //end drawing
                EditMode = EditMode.Normal;
                MainCanvas.Refresh();
            }
            else if (EditMode == EditMode.Normal)
            {
                Cursor             = Cursors.Default;
                currentBoundingBox = null;
                isPanning          = false;
                for (int i = BoundingBoxes.Count - 1; i >= 0; i--)
                {
                    BoundingBox bbox = BoundingBoxes[i];
                    if (bbox.Bounds.Contains(x, y))
                    {
                        if (bbox.Target is Shape)
                        {
                            var shape = (Shape)bbox.Target;
                            var args  = new ShapeMouseEventArgs();
                            args.BoundingBox = bbox;
                            args.X           = x;
                            args.Y           = y;
                            args.Button      = e.Button;
                            args.Sender      = this;
                            args.GridSize    = GridSize;
                            args.SnapToGrid  = SnapToGrid;
                            shape.OnMouseUp(args);
                            if (args.Redraw)
                            {
                                Refresh();
                            }
                        }

                        return;
                    }
                }
            }
        }
示例#14
0
        private void MainCanvas_MouseMove(object sender, MouseEventArgs e)
        {
            if (EditMode == EditMode.DrawRelation)
            {
                mouseCurrentPoint = new Point(e.X, e.Y);
                MainCanvas.Refresh();
            }
            else if (EditMode == EditMode.Normal)
            {
                var x = (int)((e.X - MainCanvas.AutoScrollPosition.X) / Zoom);
                var y = (int)((e.Y - MainCanvas.AutoScrollPosition.Y) / Zoom);

                if (e.Button != MouseButtons.None)
                {
                    if (currentBoundingBox == null)
                    {
                        if (isPanning)
                        {
                            int dx = mouseDownPoint.X - e.X;
                            int dy = mouseDownPoint.Y - e.Y;

                            var newPos = new Point(mouseDownAutoscrollPoint.X + dx, mouseDownAutoscrollPoint.Y + dy);
                            MainCanvas.AutoScrollPosition = newPos;
                            Cursor = Cursors.SizeAll;
                        }
                    }
                    else
                    {
                        var shape = (Shape)currentBoundingBox.Target;
                        var args  = new ShapeMouseEventArgs();
                        args.BoundingBox = currentBoundingBox;
                        args.X           = x;
                        args.Y           = y;
                        args.Button      = e.Button;
                        args.Sender      = this;
                        args.GridSize    = GridSize;
                        args.SnapToGrid  = SnapToGrid;
                        shape.OnMouseMove(args);
                        if (args.Redraw)
                        {
                            MainCanvas.Refresh();
                        }
                    }
                }
                else
                {
                    for (int i = BoundingBoxes.Count - 1; i >= 0; i--)
                    {
                        BoundingBox bbox = BoundingBoxes[i];
                        if (bbox.Bounds.Contains(x, y))
                        {
                            if (bbox.Target is Shape)
                            {
                                var shape = (Shape)bbox.Target;
                                var args  = new ShapeMouseEventArgs();
                                args.BoundingBox = bbox;
                                args.X           = x;
                                args.Y           = y;
                                args.Button      = e.Button;
                                args.Sender      = this;
                                shape.OnMouseMove(args);
                                if (args.Redraw)
                                {
                                    MainCanvas.Refresh();
                                }
                            }

                            return;
                        }
                    }
                }
            }
        }
示例#15
0
 public virtual void OnDoubleClick(ShapeMouseEventArgs args)
 {
 }
示例#16
0
 public virtual void OnMouseMove(ShapeMouseEventArgs args)
 {
 }
示例#17
0
 public virtual void OnMouseDown(ShapeMouseEventArgs args)
 {
 }
示例#18
0
        private void MainCanvas_MouseUp(object sender, MouseEventArgs e)
        {
            var x = (int)((e.X - MainCanvas.AutoScrollPosition.X) / Zoom);
            var y = (int)((e.Y - MainCanvas.AutoScrollPosition.Y) / Zoom);

            if (EditMode == EditMode.DrawRelation)
            {
                relationEnd = null;


                for (int i = BoundingItemes.Count - 1; i >= 0; i--)
                {
                    BoundingItem bitem = BoundingItemes[i];
                    if (bitem.HitTest(x, y))
                    {
                        if (bitem.Target is Shape)
                        {
                            relationEnd = bitem.Target as Shape;
                        }
                    }
                }

                endDrawRelation(relationStart, relationEnd);

                //end drawing
                EditMode = EditMode.Normal;
                MainCanvas.Refresh();
            }
            else if (EditMode == EditMode.Normal)
            {
                Cursor = Cursors.Default;
                currentBoundingItem = null;
                isPanning           = false;
                for (int i = BoundingItemes.Count - 1; i >= 0; i--)
                {
                    BoundingItem bitem = BoundingItemes[i];
                    if (bitem.HitTest(x, y))
                    {
                        if (bitem.Target is Shape)
                        {
                            var shape = (Shape)bitem.Target;
                            var args  = new ShapeMouseEventArgs
                            {
                                BoundingItem = bitem,
                                X            = x,
                                Y            = y,
                                Button       = e.Button,
                                Sender       = this,
                                GridSize     = GridSize,
                                SnapToGrid   = SnapToGrid
                            };
                            shape.OnMouseUp(args);
                            if (args.Redraw)
                            {
                                Refresh();
                            }
                        }

                        return;
                    }
                }
            }
        }
示例#19
0
 public override void OnMouseUp(ShapeMouseEventArgs args)
 {
     args.Redraw = true;
 }
示例#20
0
        private void MainCanvas_MouseDown(object sender, MouseEventArgs e)
        {
            EndInput();
            var x = (int)((e.X - MainCanvas.AutoScrollPosition.X) / Zoom);
            var y = (int)((e.Y - MainCanvas.AutoScrollPosition.Y) / Zoom);

            if (EditMode == EditMode.BeginDrawRelation)
            {
                mouseDownPoint = new Point(e.X, e.Y);
                EditMode       = EditMode.DrawRelation;
                relationStart  = null;

                for (int i = BoundingItemes.Count - 1; i >= 0; i--)
                {
                    BoundingItem bitem = BoundingItemes[i];
                    if (bitem.HitTest(x, y))
                    {
                        if (bitem.Target is Shape)
                        {
                            relationStart = bitem.Target as Shape;
                        }
                    }
                }
            }
            else if (EditMode == EditMode.Normal)
            {
                mouseDownPoint           = new Point(e.X, e.Y);
                mouseDownAutoscrollPoint = new Point(-MainCanvas.AutoScrollPosition.X, -MainCanvas.AutoScrollPosition.Y);

                for (int i = BoundingItemes.Count - 1; i >= 0; i--)
                {
                    BoundingItem bitem = BoundingItemes[i];
                    if (bitem.HitTest(x, y))
                    {
                        if (bitem.Target is Shape)
                        {
                            currentBoundingItem = bitem;
                            var shape = (Shape)bitem.Target;
                            currentShape = shape;
                            var args = new ShapeMouseEventArgs
                            {
                                BoundingItem = bitem,
                                X            = x,
                                Y            = y,
                                Button       = e.Button,
                                Sender       = this,
                                GridSize     = GridSize,
                                SnapToGrid   = SnapToGrid
                            };
                            shape.OnMouseDown(args);
                            if (args.Redraw)
                            {
                                Refresh();
                            }
                        }

                        return;
                    }
                }
                isPanning = true;
            }
        }
示例#21
0
        private void MainCanvas_MouseMove(object sender, MouseEventArgs e)
        {
            if (EditMode == EditMode.DrawRelation)
            {
                mouseCurrentPoint = new Point(e.X, e.Y);
                MainCanvas.Refresh();
            }
            else if (EditMode == EditMode.Normal)
            {
                var x = (int)((e.X - MainCanvas.AutoScrollPosition.X) / Zoom);
                var y = (int)((e.Y - MainCanvas.AutoScrollPosition.Y) / Zoom);

                if (e.Button != MouseButtons.None)
                {
                    if (currentBoundingItem == null)
                    {
                        if (isPanning)
                        {
                            int dx = mouseDownPoint.X - e.X;
                            int dy = mouseDownPoint.Y - e.Y;

                            var newPos = new Point(mouseDownAutoscrollPoint.X + dx, mouseDownAutoscrollPoint.Y + dy);
                            MainCanvas.AutoScrollPosition = newPos;
                            Cursor = Cursors.SizeAll;
                        }
                    }
                    else
                    {
                        var shape = (Shape)currentBoundingItem.Target;
                        var args  = new ShapeMouseEventArgs
                        {
                            BoundingItem = currentBoundingItem,
                            X            = x,
                            Y            = y,
                            Button       = e.Button,
                            Sender       = this,
                            GridSize     = GridSize,
                            SnapToGrid   = SnapToGrid
                        };
                        shape.OnMouseMove(args);
                        if (args.Redraw)
                        {
                            MainCanvas.Refresh();
                        }
                    }
                }
                else
                {
                    for (int i = BoundingItemes.Count - 1; i >= 0; i--)
                    {
                        BoundingItem bitem = BoundingItemes[i];
                        if (bitem.HitTest(x, y))
                        {
                            if (bitem.Target is Shape)
                            {
                                var shape = (Shape)bitem.Target;
                                var args  = new ShapeMouseEventArgs
                                {
                                    BoundingItem = bitem, X = x, Y = y, Button = e.Button, Sender = this
                                };
                                shape.OnMouseMove(args);
                                if (args.Redraw)
                                {
                                    MainCanvas.Refresh();
                                }
                            }

                            return;
                        }
                    }
                }
            }
        }
示例#22
0
 public override void OnMouseDown(ShapeMouseEventArgs args)
 {
     args.Sender.ClearSelection();
     Selected    = true;
     args.Redraw = true;
 }