protected override void OnDragEnter(DragEventArgs e) { EVEMon.Common.Skill dragSkill = GetDraggingSkill(e); if (dragSkill != null) { base.OnDragEnter(e); return; } base.OnDragEnter(e); if (!this.AllowRowReorder) { e.Effect = DragDropEffects.None; ClearDropMarker(); return; } if (!e.Data.GetDataPresent(DataFormats.Text)) { e.Effect = DragDropEffects.None; ClearDropMarker(); return; } base.OnDragEnter(e); String text = (String)e.Data.GetData(REORDER.GetType()); if (text.CompareTo(REORDER) == 0) { e.Effect = DragDropEffects.Move; } else { e.Effect = DragDropEffects.None; ClearDropMarker(); } }
protected override void OnDragOver(DragEventArgs e) { EVEMon.Common.Skill dragSkill = GetDraggingSkill(e); if (dragSkill != null) { base.OnDragOver(e); return; } if (!this.AllowRowReorder) { e.Effect = DragDropEffects.None; ClearDropMarker(); return; } if (!e.Data.GetDataPresent(DataFormats.Text)) { e.Effect = DragDropEffects.None; ClearDropMarker(); return; } Point cp = base.PointToClient(new Point(e.X, e.Y)); ListViewItem hoverItem = base.GetItemAt(cp.X, cp.Y); if (hoverItem == null) { e.Effect = DragDropEffects.None; ClearDropMarker(); return; } foreach (ListViewItem moveItem in base.SelectedItems) { if (moveItem.Index == hoverItem.Index) { e.Effect = DragDropEffects.None; hoverItem.EnsureVisible(); ClearDropMarker(); return; } } base.OnDragOver(e); String text = (String)e.Data.GetData(REORDER.GetType()); if (text.CompareTo(REORDER) == 0) { e.Effect = DragDropEffects.Move; hoverItem.EnsureVisible(); Rectangle hoverBounds = hoverItem.GetBounds(ItemBoundsPortion.ItemOnly); DrawDropMarker(hoverItem.Index, (cp.Y > (hoverBounds.Top + (hoverBounds.Height / 2)))); } else { e.Effect = DragDropEffects.None; ClearDropMarker(); } }
protected override void OnDragDrop(DragEventArgs e) { EVEMon.Common.Skill dragSkill = GetDraggingSkill(e); if (dragSkill != null) { base.OnDragDrop(e); return; } base.OnDragDrop(e); m_dragging = false; ClearDropMarker(); if (!this.AllowRowReorder) { return; } if (base.SelectedItems.Count == 0) { return; } Point cp = base.PointToClient(new Point(e.X, e.Y)); ListViewItem dragToItem = base.GetItemAt(cp.X, cp.Y); if (dragToItem == null) { return; } int dropIndex = dragToItem.Index; if (dropIndex > base.SelectedItems[0].Index) { dropIndex++; } if (ListViewItemsDragging != null) { ListViewDragEventArgs args = new ListViewDragEventArgs(base.SelectedItems[0].Index, base.SelectedItems.Count, dropIndex); ListViewItemsDragging(this, args); if (args.Cancel) { return; } } ArrayList insertItems = new ArrayList(base.SelectedItems.Count); // Make a copy of all the selected items foreach (ListViewItem item in base.SelectedItems) { insertItems.Add(item.Clone()); } // insert the copied items in reverse order at the drop index so // they appear in the right order after they've all been inserted for (int i = insertItems.Count - 1; i >= 0; i--) { base.Items.Insert(dropIndex, (ListViewItem)insertItems[i]); } // remove the selected items foreach (ListViewItem item in base.SelectedItems) { // must clear the items icon index or an exception is thrown when it is removed item.StateImageIndex = -1; base.Items.Remove(item); } if (ListViewItemsDragged != null) { ListViewItemsDragged(this, new EventArgs()); } base.EnsureVisible(dropIndex); }