private void EndDragDrop(bool allowSetChildIndexOnDrop) { Control target = this.data.Target as Control; if (target != null) { if (this.serviceProviderTarget == null) { this.serviceProviderTarget = target.Site; if (this.serviceProviderTarget == null) { return; } } if (this.destHost == null) { this.destHost = (IDesignerHost)this.serviceProviderTarget.GetService(typeof(IDesignerHost)); if (this.destHost == null) { return; } } if (this.behaviorServiceTarget == null) { this.behaviorServiceTarget = (BehaviorService)this.serviceProviderTarget.GetService(typeof(BehaviorService)); if (this.behaviorServiceTarget == null) { return; } } ArrayList list = null; bool flag = this.lastEffect == DragDropEffects.Copy; Control source = this.data.Source; bool localDrag = source.Equals(target); PropertyDescriptor member = TypeDescriptor.GetProperties(target)["Controls"]; PropertyDescriptor descriptor2 = TypeDescriptor.GetProperties(source)["Controls"]; IComponentChangeService service = (IComponentChangeService)this.serviceProviderSource.GetService(typeof(IComponentChangeService)); IComponentChangeService service2 = (IComponentChangeService)this.serviceProviderTarget.GetService(typeof(IComponentChangeService)); if (this.dragAssistanceManager != null) { this.dragAssistanceManager.OnMouseUp(); } ISelectionService service3 = null; if (flag || ((this.srcHost != this.destHost) && (this.destHost != null))) { service3 = (ISelectionService)this.serviceProviderTarget.GetService(typeof(ISelectionService)); } try { if ((this.dragComponents != null) && (this.dragComponents.Length > 0)) { string str; DesignerTransaction transaction = null; DesignerTransaction transaction2 = null; if (this.dragComponents.Length == 1) { string componentName = TypeDescriptor.GetComponentName(this.dragComponents[0].dragComponent); if ((componentName == null) || (componentName.Length == 0)) { componentName = this.dragComponents[0].dragComponent.GetType().Name; } str = System.Design.SR.GetString(flag ? "BehaviorServiceCopyControl" : "BehaviorServiceMoveControl", new object[] { componentName }); } else { str = System.Design.SR.GetString(flag ? "BehaviorServiceCopyControls" : "BehaviorServiceMoveControls", new object[] { this.dragComponents.Length }); } if ((this.srcHost != null) && (((this.srcHost == this.destHost) || (this.destHost == null)) || !flag)) { transaction = this.srcHost.CreateTransaction(str); } if ((this.srcHost != this.destHost) && (this.destHost != null)) { transaction2 = this.destHost.CreateTransaction(str); } try { ComponentTray tray = null; int num = 0; if (flag) { tray = this.serviceProviderTarget.GetService(typeof(ComponentTray)) as ComponentTray; num = (tray != null) ? tray.Controls.Count : 0; ArrayList objects = new ArrayList(); for (int j = 0; j < this.dragComponents.Length; j++) { objects.Add(this.dragComponents[j].dragComponent); } objects = DesignerUtils.CopyDragObjects(objects, this.serviceProviderTarget) as ArrayList; if (objects == null) { return; } list = new ArrayList(); for (int k = 0; k < objects.Count; k++) { list.Add(this.dragComponents[k].dragComponent); this.dragComponents[k].dragComponent = objects[k]; } } if ((!localDrag || flag) && ((service != null) && (service2 != null))) { service2.OnComponentChanging(target, member); if (!flag) { service.OnComponentChanging(source, descriptor2); } } int num4 = ParentControlDesigner.DetermineTopChildIndex(target); this.DropControl(this.primaryComponentIndex, target, source, localDrag); Point p = this.behaviorServiceSource.AdornerWindowPointToScreen(this.dragComponents[this.primaryComponentIndex].draggedLocation); p = ((Control)this.dragComponents[this.primaryComponentIndex].dragComponent).Parent.PointToClient(p); if (((Control)this.dragComponents[this.primaryComponentIndex].dragComponent).Parent.IsMirrored) { p.Offset(-((Control)this.dragComponents[this.primaryComponentIndex].dragComponent).Width, 0); } Control dragComponent = this.dragComponents[this.primaryComponentIndex].dragComponent as Control; PropertyDescriptor descriptor3 = TypeDescriptor.GetProperties(dragComponent)["Location"]; if ((dragComponent != null) && (descriptor3 != null)) { try { service2.OnComponentChanging(dragComponent, descriptor3); } catch (CheckoutException exception) { if (exception != CheckoutException.Canceled) { throw; } return; } } this.SetLocationPropertyAndChildIndex(this.primaryComponentIndex, target, p, this.shareParent ? (num4 + this.dragComponents[this.primaryComponentIndex].zorderIndex) : num4, allowSetChildIndexOnDrop); if (service3 != null) { service3.SetSelectedComponents(new object[] { this.dragComponents[this.primaryComponentIndex].dragComponent }, SelectionTypes.Click | SelectionTypes.Replace); } for (int i = 0; i < this.dragComponents.Length; i++) { if (i != this.primaryComponentIndex) { this.DropControl(i, target, source, localDrag); Point dropPoint = new Point(p.X + this.dragComponents[i].positionOffset.X, p.Y + this.dragComponents[i].positionOffset.Y); this.SetLocationPropertyAndChildIndex(i, target, dropPoint, this.shareParent ? (num4 + this.dragComponents[i].zorderIndex) : num4, allowSetChildIndexOnDrop); if (service3 != null) { service3.SetSelectedComponents(new object[] { this.dragComponents[i].dragComponent }, SelectionTypes.Add); } } } if ((!localDrag || flag) && ((service != null) && (service2 != null))) { service2.OnComponentChanged(target, member, target.Controls, target.Controls); if (!flag) { service.OnComponentChanged(source, descriptor2, source.Controls, source.Controls); } } if (list != null) { for (int m = 0; m < list.Count; m++) { this.dragComponents[m].dragComponent = list[m]; } list = null; } if (flag) { if (tray == null) { tray = this.serviceProviderTarget.GetService(typeof(ComponentTray)) as ComponentTray; } if (tray != null) { int num7 = tray.Controls.Count - num; if (num7 > 0) { ArrayList components = new ArrayList(); for (int n = 0; n < num7; n++) { components.Add(tray.Controls[num + n]); } tray.UpdatePastePositions(components); } } } this.CleanupDrag(false); if (transaction != null) { transaction.Commit(); transaction = null; } if (transaction2 != null) { transaction2.Commit(); transaction2 = null; } } finally { if (transaction != null) { transaction.Cancel(); } if (transaction2 != null) { transaction2.Cancel(); } } } } finally { if (list != null) { for (int num9 = 0; num9 < list.Count; num9++) { this.dragComponents[num9].dragComponent = list[num9]; } } this.CleanupDrag(false); if (this.statusCommandUITarget != null) { this.statusCommandUITarget.SetStatusInformation((service3 == null) ? (this.dragComponents[this.primaryComponentIndex].dragComponent as Component) : (service3.PrimarySelection as Component)); } } this.lastFeedbackLocation = new Point(-1, -1); } }
private void ReParentControls(ArrayList controls, bool copy) { IDesignerHost host = this.serviceProvider.GetService(typeof(IDesignerHost)) as IDesignerHost; if ((host != null) && (controls.Count > 0)) { string str; if ((controls.Count == 1) && (controls[0] is ToolStrip)) { string componentName = TypeDescriptor.GetComponentName(controls[0]); if ((componentName == null) || (componentName.Length == 0)) { componentName = controls[0].GetType().Name; } str = System.Design.SR.GetString(copy ? "BehaviorServiceCopyControl" : "BehaviorServiceMoveControl", new object[] { componentName }); } else { str = System.Design.SR.GetString(copy ? "BehaviorServiceCopyControls" : "BehaviorServiceMoveControls", new object[] { controls.Count }); } DesignerTransaction transaction = host.CreateTransaction(str); try { ArrayList objects = null; ISelectionService service = (ISelectionService)this.serviceProvider.GetService(typeof(ISelectionService)); if (copy) { objects = new ArrayList(); service = (ISelectionService)this.serviceProvider.GetService(typeof(ISelectionService)); } for (int i = 0; i < controls.Count; i++) { Control control = controls[i] as Control; if (control is ToolStrip) { if (copy) { objects.Clear(); objects.Add(control); objects = DesignerUtils.CopyDragObjects(objects, this.serviceProvider) as ArrayList; if (objects != null) { control = objects[0] as Control; control.Visible = true; } } Control relatedControl = this.relatedControl; IComponentChangeService service2 = this.serviceProvider.GetService(typeof(IComponentChangeService)) as IComponentChangeService; PropertyDescriptor member = TypeDescriptor.GetProperties(relatedControl)["Controls"]; Control parent = control.Parent; if ((parent != null) && !copy) { if (service2 != null) { service2.OnComponentChanging(parent, member); } parent.Controls.Remove(control); } if (service2 != null) { service2.OnComponentChanging(relatedControl, member); } relatedControl.Controls.Add(control); if (((service2 != null) && (parent != null)) && !copy) { service2.OnComponentChanged(parent, member, null, null); } if (service2 != null) { service2.OnComponentChanged(relatedControl, member, null, null); } if (service != null) { service.SetSelectedComponents(new object[] { control }, (i == 0) ? (SelectionTypes.Click | SelectionTypes.Replace) : SelectionTypes.Add); } } } } catch { if (transaction != null) { transaction.Cancel(); transaction = null; } } finally { if (transaction != null) { transaction.Commit(); transaction = null; } } } }