Пример #1
0
        protected override void OnMouseUp(MouseEventArgs e)
        {
            base.OnMouseUp(e);
            if (Locked)
            {
                return;
            }

            ObjectCollection selectedObjects = new ObjectCollection();

            Designer.SelectedObjects.CopyTo(selectedObjects);
            HideToolTip();

            FEventArgs.X       = e.X - Offset.X;
            FEventArgs.Y       = e.Y - Offset.Y;
            FEventArgs.Button  = e.Button;
            FEventArgs.Mode    = FMode2;
            FEventArgs.Handled = false;

            if (FMode2 == WorkspaceMode2.Move || FMode2 == WorkspaceMode2.Size)
            {
                // serve all objects
                for (int i = 0; i < Designer.Objects.Count; i++)
                {
                    ComponentBase c = Designer.Objects[i] as ComponentBase;
                    if (c != null)
                    {
                        c.HandleMouseUp(FEventArgs);
                    }
                }
                // remove objects with zero size
                if (FMode1 == WorkspaceMode1.Insert)
                {
                    int i = 0;
                    while (i < Designer.SelectedObjects.Count)
                    {
                        ComponentBase c = Designer.SelectedObjects[i] as ComponentBase;
                        if (c != null && c.Width == 0 && c.Height == 0)
                        {
                            Designer.Objects.Remove(c);
                            Designer.SelectedObjects.Remove(c);
                            c.Dispose();
                            i--;
                        }
                        i++;
                    }
                }
                if (FMode1 != WorkspaceMode1.Select)
                {
                    // during OnInsert call current context may be changed
                    WorkspaceMode1 saveMode = FMode1;
                    FMode1 = WorkspaceMode1.Select;
                    ObjectCollection insertedObjects = new ObjectCollection();
                    Designer.SelectedObjects.CopyTo(insertedObjects);
                    foreach (Base c in insertedObjects)
                    {
                        c.OnAfterInsert(FInsertionSource);
                    }
                    FMode1 = saveMode;
                }

                // check if we actually move a mouse after we clicked it
                if (FMouseMoved || FMode1 == WorkspaceMode1.Insert)
                {
                    Designer.SetModified(FPageDesigner,
                                         FMode1 == WorkspaceMode1.Insert ? "Insert" : FMode2 == WorkspaceMode2.Move ? "Move" : "Size");
                }
            }
            else if (FMode2 == WorkspaceMode2.SelectionRect)
            {
                FEventArgs.SelectionRect = NormalizeSelectionRect();
                if (FEventArgs.ActiveObject != null)
                {
                    FEventArgs.ActiveObject.HandleMouseUp(FEventArgs);
                }
            }
            else if (FMode2 == WorkspaceMode2.Custom)
            {
                if (FEventArgs.ActiveObject != null)
                {
                    FEventArgs.ActiveObject.HandleMouseUp(FEventArgs);
                }
            }

            bool needReset = FMode1 == WorkspaceMode1.Insert;

            if (!selectedObjects.Equals(Designer.SelectedObjects) || needReset)
            {
                Designer.SelectionChanged(FPageDesigner);
            }

            FMouseDown = false;
            FMode1     = WorkspaceMode1.Select;
            FMode2     = WorkspaceMode2.None;
            FGuides.ClearVirtualGuides();
            Refresh();
            if (needReset)
            {
                Designer.ResetObjectsToolbar(false);
            }

            if (e.Button == MouseButtons.Right && Designer.SelectedObjects.Count > 0)
            {
                ContextMenuBar menu = Designer.SelectedObjects[0].GetContextMenu();
                if (menu != null)
                {
                    PopupItem item = menu.Items[0] as PopupItem;
                    item.PopupMenu(PointToScreen(e.Location));
                }
            }
        }