- Timestamp:
- 03/18/11 01:38:23 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs
r5445 r5744 21 21 22 22 using System; 23 using System.Collections; 23 24 using System.Collections.Generic; 24 25 using System.Drawing; … … 37 38 protected Dictionary<T, List<ListViewItem>> itemListViewItemMapping; 38 39 protected TypeSelectorDialog typeSelectorDialog; 40 protected bool validDragOperation; 39 41 40 42 public new IItemList<T> Content { … … 277 279 protected virtual void itemsListView_ItemDrag(object sender, ItemDragEventArgs e) { 278 280 if (!Locked) { 279 ListViewItem listViewItem = (ListViewItem)e.Item; 280 T item = listViewItem.Tag as T; 281 if (item != null) { 281 List<T> items = new List<T>(); 282 foreach (ListViewItem listViewItem in itemsListView.SelectedItems) { 283 T item = listViewItem.Tag as T; 284 if (item != null) items.Add(item); 285 } 286 287 if (items.Count > 0) { 282 288 DataObject data = new DataObject(); 283 data.SetData("Type", item.GetType());284 data.SetData("Value", item);289 if (items.Count == 1) data.SetData("HeuristicLab", items[0]); 290 else data.SetData("HeuristicLab", items); 285 291 if (Content.IsReadOnly || ReadOnly) { 286 292 DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link); 287 293 } else { 288 294 DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move); 289 if ((result & DragDropEffects.Move) == DragDropEffects.Move) 290 Content.RemoveAt(listViewItem.Index); 295 if ((result & DragDropEffects.Move) == DragDropEffects.Move) { 296 foreach (ListViewItem listViewItem in itemsListView.SelectedItems.Cast<ListViewItem>().ToArray()) { 297 if (listViewItem.Tag != null) Content.RemoveAt(listViewItem.Index); 298 } 299 } 291 300 } 292 301 } 293 302 } 294 303 } 295 protected virtual void itemsListView_DragEnterOver(object sender, DragEventArgs e) { 304 protected virtual void itemsListView_DragEnter(object sender, DragEventArgs e) { 305 validDragOperation = false; 306 if (e.Data.GetData("HeuristicLab") is T) { 307 validDragOperation = true; 308 } else if (e.Data.GetData("HeuristicLab") is IEnumerable) { 309 validDragOperation = true; 310 IEnumerable items = (IEnumerable)e.Data.GetData("HeuristicLab"); 311 foreach (object item in items) 312 validDragOperation = validDragOperation && (item is T); 313 } 314 validDragOperation = validDragOperation && !Content.IsReadOnly && !ReadOnly; 315 } 316 protected virtual void itemsListView_DragOver(object sender, DragEventArgs e) { 296 317 e.Effect = DragDropEffects.None; 297 Type type = e.Data.GetData("Type") as Type; 298 if (!Content.IsReadOnly && !ReadOnly && (type != null) && (typeof(T).IsAssignableFrom(type))) { 318 if (validDragOperation) { 299 319 if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link; // ALT key 300 320 else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move; // SHIFT key 301 else if ( (e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;302 else if ( (e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;303 else if ( (e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;321 else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy; 322 else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move; 323 else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link; 304 324 } 305 325 } 306 326 protected virtual void itemsListView_DragDrop(object sender, DragEventArgs e) { 307 327 if (e.Effect != DragDropEffects.None) { 308 T item = e.Data.GetData("Value") as T;309 if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) item = (T)item.Clone();310 311 328 Point p = itemsListView.PointToClient(new Point(e.X, e.Y)); 312 329 ListViewItem listViewItem = itemsListView.GetItemAt(p.X, p.Y); 313 if (listViewItem != null) Content.Insert(listViewItem.Index, item); 314 else Content.Add(item); 330 331 if (e.Data.GetData("HeuristicLab") is T) { 332 T item = (T)e.Data.GetData("HeuristicLab"); 333 if (listViewItem != null) Content.Insert(listViewItem.Index, e.Effect.HasFlag(DragDropEffects.Copy) ? (T)item.Clone() : item); 334 else Content.Add(e.Effect.HasFlag(DragDropEffects.Copy) ? (T)item.Clone() : item); 335 } else if (e.Data.GetData("HeuristicLab") is IEnumerable) { 336 IEnumerable<T> items = ((IEnumerable)e.Data.GetData("HeuristicLab")).Cast<T>(); 337 foreach (T item in items) { 338 if (listViewItem != null) Content.Insert(listViewItem.Index, e.Effect.HasFlag(DragDropEffects.Copy) ? (T)item.Clone() : item); 339 else Content.Add(e.Effect.HasFlag(DragDropEffects.Copy) ? (T)item.Clone() : item); 340 } 341 } 315 342 } 316 343 }
Note: See TracChangeset
for help on using the changeset viewer.