public override bool OnMouseMove(Glyph g, MouseButtons button, Point mouseLoc) { bool flag = false; ToolStripItemGlyph glyph = g as ToolStripItemGlyph; ToolStripItem item = glyph.Item; ISelectionService selectionService = this.GetSelectionService(item); if (((selectionService != null) && (item.Site != null)) && !this.MouseHandlerPresent(item)) { if (!selectionService.GetComponentSelected(item)) { this.PaintInsertionMark(item); flag = false; } if (((button != MouseButtons.Left) || (glyph == null)) || ((glyph.ItemDesigner == null) || glyph.ItemDesigner.IsEditorActive)) { return(flag); } Rectangle empty = Rectangle.Empty; IDesignerHost service = (IDesignerHost)item.Site.GetService(typeof(IDesignerHost)); if ((item.Placement == ToolStripItemPlacement.Overflow) || ((item.Placement == ToolStripItemPlacement.Main) && !item.IsOnDropDown)) { ToolStrip mainToolStrip = glyph.ItemDesigner.GetMainToolStrip(); ToolStripDesigner designer = service.GetDesigner(mainToolStrip) as ToolStripDesigner; if (designer != null) { empty = designer.DragBoxFromMouseDown; } } else if (item.IsOnDropDown) { ToolStripDropDown owner = item.Owner as ToolStripDropDown; if (owner != null) { ToolStripItem ownerItem = owner.OwnerItem; ToolStripItemDesigner designer3 = service.GetDesigner(ownerItem) as ToolStripItemDesigner; if (designer3 != null) { empty = designer3.dragBoxFromMouseDown; } } } if (!(empty != Rectangle.Empty) || empty.Contains(mouseLoc.X, mouseLoc.Y)) { return(flag); } if (this._timer != null) { this._timer.Enabled = false; this._timer.Tick -= new EventHandler(this.OnDoubleClickTimerTick); this._timer.Dispose(); this._timer = null; } try { ArrayList dragComponents = new ArrayList(); foreach (IComponent component in selectionService.GetSelectedComponents()) { ToolStripItem item3 = component as ToolStripItem; if (item3 != null) { dragComponents.Add(item3); } } ToolStripItem primarySelection = selectionService.PrimarySelection as ToolStripItem; if (primarySelection != null) { ToolStrip strip2 = primarySelection.Owner; ToolStripItemDataObject data = new ToolStripItemDataObject(dragComponents, primarySelection, strip2); this.DropSource.QueryContinueDrag += new QueryContinueDragEventHandler(this.QueryContinueDrag); ToolStripDropDownItem item5 = item as ToolStripDropDownItem; if (item5 != null) { ToolStripMenuItemDesigner designer4 = service.GetDesigner(item5) as ToolStripMenuItemDesigner; if (designer4 != null) { designer4.InitializeBodyGlyphsForItems(false, item5); item5.HideDropDown(); } } else if (item.IsOnDropDown && !item.IsOnOverflow) { ToolStripDropDown currentParent = item.GetCurrentParent() as ToolStripDropDown; ToolStripDropDownItem item6 = currentParent.OwnerItem as ToolStripDropDownItem; selectionService.SetSelectedComponents(new IComponent[] { item6 }, SelectionTypes.Replace); } this.DropSource.DoDragDrop(data, DragDropEffects.Move | DragDropEffects.Copy | DragDropEffects.Scroll); } } finally { this.DropSource.QueryContinueDrag -= new QueryContinueDragEventHandler(this.QueryContinueDrag); this.SetParentDesignerValuesForDragDrop(item, false, Point.Empty); ToolStripDesigner.dragItem = null; this.dropSource = null; } } return(false); }
public override void OnDragDrop(Glyph g, DragEventArgs e) { ToolStripItem dragItem = ToolStripDesigner.dragItem; if ((e.Data is ToolStripItemDataObject) && (dragItem != null)) { ToolStripItemDataObject data = (ToolStripItemDataObject)e.Data; ToolStripItem primarySelection = data.PrimarySelection; IDesignerHost host = (IDesignerHost)dragItem.Site.GetService(typeof(IDesignerHost)); if ((dragItem != primarySelection) && (host != null)) { string str; ArrayList dragComponents = data.DragComponents; ToolStrip currentParent = dragItem.GetCurrentParent(); int index = -1; bool flag = e.Effect == DragDropEffects.Copy; if (dragComponents.Count == 1) { string componentName = TypeDescriptor.GetComponentName(dragComponents[0]); if ((componentName == null) || (componentName.Length == 0)) { componentName = dragComponents[0].GetType().Name; } str = System.Design.SR.GetString(flag ? "BehaviorServiceCopyControl" : "BehaviorServiceMoveControl", new object[] { componentName }); } else { str = System.Design.SR.GetString(flag ? "BehaviorServiceCopyControls" : "BehaviorServiceMoveControls", new object[] { dragComponents.Count }); } DesignerTransaction transaction = host.CreateTransaction(str); try { IComponentChangeService service = (IComponentChangeService)dragItem.Site.GetService(typeof(IComponentChangeService)); if (service != null) { ToolStripDropDown down = currentParent as ToolStripDropDown; if (down != null) { ToolStripItem ownerItem = down.OwnerItem; service.OnComponentChanging(ownerItem, TypeDescriptor.GetProperties(ownerItem)["DropDownItems"]); } else { service.OnComponentChanging(currentParent, TypeDescriptor.GetProperties(currentParent)["Items"]); } } if (flag) { if (primarySelection != null) { index = dragComponents.IndexOf(primarySelection); } ToolStripKeyboardHandlingService keyBoardHandlingService = this.GetKeyBoardHandlingService(primarySelection); if (keyBoardHandlingService != null) { keyBoardHandlingService.CopyInProgress = true; } dragComponents = DesignerUtils.CopyDragObjects(dragComponents, dragItem.Site) as ArrayList; if (keyBoardHandlingService != null) { keyBoardHandlingService.CopyInProgress = false; } if (index != -1) { primarySelection = dragComponents[index] as ToolStripItem; } } if ((e.Effect == DragDropEffects.Move) || flag) { ISelectionService selectionService = this.GetSelectionService(dragItem); if (selectionService != null) { if (currentParent is ToolStripOverflow) { currentParent = ((ToolStripOverflow)currentParent).OwnerItem.Owner; } int num2 = currentParent.Items.IndexOf(ToolStripDesigner.dragItem); if (num2 != -1) { int num3 = 0; if (primarySelection != null) { num3 = currentParent.Items.IndexOf(primarySelection); } if ((num3 != -1) && (num2 > num3)) { num2--; } foreach (ToolStripItem item4 in dragComponents) { currentParent.Items.Insert(num2, item4); } } selectionService.SetSelectedComponents(new IComponent[] { primarySelection }, SelectionTypes.Click | SelectionTypes.Replace); } } if (service != null) { ToolStripDropDown down2 = currentParent as ToolStripDropDown; if (down2 != null) { ToolStripItem component = down2.OwnerItem; service.OnComponentChanged(component, TypeDescriptor.GetProperties(component)["DropDownItems"], null, null); } else { service.OnComponentChanged(currentParent, TypeDescriptor.GetProperties(currentParent)["Items"], null, null); } if (flag) { if (down2 != null) { ToolStripItem item6 = down2.OwnerItem; service.OnComponentChanging(item6, TypeDescriptor.GetProperties(item6)["DropDownItems"]); service.OnComponentChanged(item6, TypeDescriptor.GetProperties(item6)["DropDownItems"], null, null); } else { service.OnComponentChanging(currentParent, TypeDescriptor.GetProperties(currentParent)["Items"]); service.OnComponentChanged(currentParent, TypeDescriptor.GetProperties(currentParent)["Items"], null, null); } } } foreach (ToolStripItem item7 in dragComponents) { if (item7 is ToolStripDropDownItem) { ToolStripMenuItemDesigner designer = host.GetDesigner(item7) as ToolStripMenuItemDesigner; if (designer != null) { designer.InitializeDropDown(); } } ToolStripDropDown down3 = item7.GetCurrentParent() as ToolStripDropDown; if ((down3 != null) && !(down3 is ToolStripOverflow)) { ToolStripDropDownItem item8 = down3.OwnerItem as ToolStripDropDownItem; if (item8 != null) { ToolStripMenuItemDesigner designer2 = host.GetDesigner(item8) as ToolStripMenuItemDesigner; if (designer2 != null) { designer2.InitializeBodyGlyphsForItems(false, item8); designer2.InitializeBodyGlyphsForItems(true, item8); } } } } BehaviorService behaviorService = this.GetBehaviorService(dragItem); if (behaviorService != null) { behaviorService.SyncSelection(); } } catch (Exception exception) { if (transaction != null) { transaction.Cancel(); transaction = null; } if (System.Windows.Forms.ClientUtils.IsCriticalException(exception)) { throw; } } finally { if (transaction != null) { transaction.Commit(); transaction = null; } } } } }