Exemple #1
0
        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);
            if (Locked || Designer.ActiveReport != Report)
            {
                return;
            }

            FEventArgs.X      = e.X - Offset.X;
            FEventArgs.Y      = e.Y - Offset.Y;
            FEventArgs.Button = FMode1 == WorkspaceMode1.Insert ? MouseButtons.Left : e.Button;
            FEventArgs.Delta  = new PointF(FEventArgs.X - FLastMousePoint.X, FEventArgs.Y - FLastMousePoint.Y);

            if (e.Button == MouseButtons.None && FMode1 == WorkspaceMode1.Select)
            {
                Cursor                  = Cursors.Default;
                FMode2                  = WorkspaceMode2.None;
                FEventArgs.Cursor       = Cursor;
                FEventArgs.Mode         = FMode2;
                FEventArgs.ActiveObject = null;
                FEventArgs.Handled      = false;

                // check object's sizing points
                for (int i = Designer.Objects.Count - 1; i >= 0; i--)
                {
                    ComponentBase c = Designer.Objects[i] as ComponentBase;
                    if (c != null)
                    {
                        c.HandleMouseMove(FEventArgs);
                        if (FEventArgs.Handled)
                        {
                            Cursor = FEventArgs.Cursor;
                            FMode2 = FEventArgs.Mode;
                            FEventArgs.ActiveObject = c;
                            break;
                        }
                    }
                }

                // no sizing points found, check hover
                if (!FEventArgs.Handled)
                {
                    for (int i = Designer.Objects.Count - 1; i >= 0; i--)
                    {
                        ComponentBase c = Designer.Objects[i] as ComponentBase;
                        if (c != null)
                        {
                            c.HandleMouseHover(FEventArgs);
                            if (FEventArgs.Handled)
                            {
                                Cursor = FEventArgs.Cursor;
                                break;
                            }
                        }
                    }
                }
            }
            else if (FMode2 == WorkspaceMode2.Move || FMode2 == WorkspaceMode2.Size)
            {
                if (!CheckGridStep())
                {
                    return;
                }

                // if insert is on and user press the mouse button and move the mouse, resize selected objects
                if (FMode1 == WorkspaceMode1.Insert && e.Button == MouseButtons.Left && !FMouseMoved)
                {
                    FMode2 = WorkspaceMode2.Size;
                    foreach (Base c in Designer.SelectedObjects)
                    {
                        if (c is ComponentBase)
                        {
                            (c as ComponentBase).Width  = 0;
                            (c as ComponentBase).Height = 0;
                        }
                    }
                    FEventArgs.SizingPoint = SizingPoint.RightBottom;
                }

                // ctrl was pressed, clone selected objects
                if (FMode1 == WorkspaceMode1.Select && ModifierKeys == Keys.Control && !FMouseMoved)
                {
                    CloneSelectedObjects();
                }

                FMouseMoved        = true;
                FEventArgs.Mode    = FMode2;
                FEventArgs.Handled = false;
                // first serve the active object
                if (FEventArgs.ActiveObject != null)
                {
                    FEventArgs.ActiveObject.HandleMouseMove(FEventArgs);
                }

                // if active object does not reset the handled flag, serve other objects
                if (!FEventArgs.Handled)
                {
                    foreach (Base c in Designer.Objects)
                    {
                        if (c is ComponentBase)
                        {
                            if (c != FEventArgs.ActiveObject)
                            {
                                (c as ComponentBase).HandleMouseMove(FEventArgs);
                            }
                        }
                    }
                }

                FLastMousePoint.X += FEventArgs.Delta.X;
                FLastMousePoint.Y += FEventArgs.Delta.Y;
                FGuides.CheckVirtualGuides();

                // show tooltip with object's location/size
                string     s            = "";
                RectangleF selectedRect = GetSelectedRect();
                if (FMode2 == WorkspaceMode2.Move)
                {
                    s = selectedRect.Left.ToString() + "; " + selectedRect.Top.ToString();
                }
                else if (FMode2 == WorkspaceMode2.Size)
                {
                    s = selectedRect.Width.ToString() + "; " + selectedRect.Height.ToString();
                }
                ShowToolTip(s, e.X + 20, e.Y + 20);

                Refresh();
            }
            else if (FMode2 == WorkspaceMode2.SelectionRect)
            {
                FSelectionRect = new RectangleF(FSelectionRect.Left, FSelectionRect.Top,
                                                FEventArgs.X - FSelectionRect.Left, FEventArgs.Y - FSelectionRect.Top);
                Refresh();
            }
            else if (FMode2 == WorkspaceMode2.Custom)
            {
                if (!CheckGridStep())
                {
                    return;
                }

                FMouseMoved     = true;
                FEventArgs.Mode = FMode2;
                if (FEventArgs.ActiveObject != null)
                {
                    FEventArgs.ActiveObject.HandleMouseMove(FEventArgs);
                }

                FLastMousePoint.X += FEventArgs.Delta.X;
                FLastMousePoint.Y += FEventArgs.Delta.Y;
                Refresh();
            }
        }