Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/18/11 01:38:23 (13 years ago)
Author:
swagner
Message:

Implemented dragging of multiple items in all collection views and refactored drag & drop code (#1112)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Core.Views/3.3/ItemSetView.cs

    r5445 r5744  
    2020#endregion
    2121
     22using System.Collections;
    2223using System.Windows.Forms;
    2324using HeuristicLab.MainForm;
     
    2829  [Content(typeof(IItemSet<>), false)]
    2930  public partial class ItemSetView<T> : ItemCollectionView<T> where T : class, IItem {
     31    protected bool draggedItemsAlreadyContained;
     32
    3033    public new IItemSet<T> Content {
    3134      get { return (IItemSet<T>)base.Content; }
     
    3740    }
    3841
    39     protected override void itemsListView_DragEnterOver(object sender, DragEventArgs e) {
    40       base.itemsListView_DragEnterOver(sender, e);
    41       if (e.Effect == DragDropEffects.Link || e.Effect == DragDropEffects.Move) {
    42         T item = e.Data.GetData("Value") as T;
    43         if (Content.Contains(item)) e.Effect = DragDropEffects.None;
     42    protected override void itemsListView_DragEnter(object sender, DragEventArgs e) {
     43      base.itemsListView_DragEnter(sender, e);
     44      draggedItemsAlreadyContained = false;
     45      if (validDragOperation) {
     46        if (e.Data.GetData("HeuristicLab") is T) {
     47          draggedItemsAlreadyContained = Content.Contains((T)e.Data.GetData("HeuristicLab"));
     48        } else if (e.Data.GetData("HeuristicLab") is IEnumerable) {
     49          IEnumerable items = (IEnumerable)e.Data.GetData("HeuristicLab");
     50          foreach (object item in items)
     51            draggedItemsAlreadyContained = draggedItemsAlreadyContained || Content.Contains((T)item);
     52        }
     53      }
     54    }
     55    protected override void itemsListView_DragOver(object sender, DragEventArgs e) {
     56      e.Effect = DragDropEffects.None;
     57      if (validDragOperation) {
     58        if (((e.KeyState & 32) == 32) && !draggedItemsAlreadyContained) e.Effect = DragDropEffects.Link;  // ALT key
     59        else if (((e.KeyState & 4) == 4) && !draggedItemsAlreadyContained) e.Effect = DragDropEffects.Move;  // SHIFT key
     60        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
     61        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move) && !draggedItemsAlreadyContained) e.Effect = DragDropEffects.Move;
     62        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link) && !draggedItemsAlreadyContained) e.Effect = DragDropEffects.Link;
    4463      }
    4564    }
Note: See TracChangeset for help on using the changeset viewer.