Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/08/11 01:47:47 (13 years ago)
Author:
swagner
Message:

#1324:

  • Added performance optimization in all other item collection views
  • Checked and refactored item event registration/deregistration
  • Enabled null items in item collection views
  • Moved non-default Dispose methods from designer files into user files
File:
1 edited

Legend:

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

    r5068 r5237  
    3434  [Content(typeof(IItemCollection<>), false)]
    3535  public partial class ItemCollectionView<T> : ItemView where T : class, IItem {
    36     private Dictionary<T, List<ListViewItem>> listViewItemMapping;
     36    protected Dictionary<T, List<ListViewItem>> itemListViewItemMapping;
    3737    protected TypeSelectorDialog typeSelectorDialog;
    3838
     
    4848    public ItemCollectionView() {
    4949      InitializeComponent();
    50       listViewItemMapping = new Dictionary<T, List<ListViewItem>>();
     50      itemListViewItemMapping = new Dictionary<T, List<ListViewItem>>();
     51    }
     52
     53    protected override void Dispose(bool disposing) {
     54      if (disposing) {
     55        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
     56        if (components != null) components.Dispose();
     57      }
     58      base.Dispose(disposing);
    5159    }
    5260
     
    5563      Content.ItemsRemoved -= new CollectionItemsChangedEventHandler<T>(Content_ItemsRemoved);
    5664      Content.CollectionReset -= new CollectionItemsChangedEventHandler<T>(Content_CollectionReset);
    57       foreach (T item in listViewItemMapping.Keys) {
    58         item.ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
    59         item.ToStringChanged -= new EventHandler(Item_ToStringChanged);
     65      foreach (T item in itemListViewItemMapping.Keys) {
     66        DeregisterItemEvents(item);
    6067      }
    6168      base.DeregisterContentEvents();
     
    6774      Content.CollectionReset += new CollectionItemsChangedEventHandler<T>(Content_CollectionReset);
    6875    }
     76    protected virtual void DeregisterItemEvents(T item) {
     77      item.ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
     78      item.ToStringChanged -= new EventHandler(Item_ToStringChanged);
     79    }
     80    protected virtual void RegisterItemEvents(T item) {
     81      item.ItemImageChanged += new EventHandler(Item_ItemImageChanged);
     82      item.ToStringChanged += new EventHandler(Item_ToStringChanged);
     83    }
    6984
    7085    protected override void OnContentChanged() {
    7186      base.OnContentChanged();
    72       while (itemsListView.Items.Count > 0) RemoveListViewItem(itemsListView.Items[0]);
     87      itemsListView.Items.Clear();
     88      itemListViewItemMapping.Clear();
    7389      RebuildImageList();
    7490      viewHost.Content = null;
     
    112128        try {
    113129          return (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
    114         } catch (Exception ex) {
     130        }
     131        catch (Exception ex) {
    115132          ErrorHandling.ShowErrorDialog(this, ex);
    116133        }
     
    120137    protected virtual ListViewItem CreateListViewItem(T item) {
    121138      ListViewItem listViewItem = new ListViewItem();
    122       listViewItem.Text = item.ToString();
    123       listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription;
    124       listViewItem.Tag = item;
    125       itemsListView.SmallImageList.Images.Add(item.ItemImage);
    126       listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
     139      if (item == null) {
     140        listViewItem.Text = "null";
     141        itemsListView.SmallImageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.Nothing);
     142        listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
     143      } else {
     144        listViewItem.Text = item.ToString();
     145        listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription;
     146        itemsListView.SmallImageList.Images.Add(item.ItemImage);
     147        listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
     148        listViewItem.Tag = item;
     149      }
    127150      return listViewItem;
    128151    }
     
    130153      T item = (listViewItem.Tag as T);
    131154      itemsListView.Items.Add(listViewItem);
    132       if (!listViewItemMapping.ContainsKey(item)) {
    133         item.ItemImageChanged += new EventHandler(Item_ItemImageChanged);
    134         item.ToStringChanged += new EventHandler(Item_ToStringChanged);
    135         listViewItemMapping.Add(item, new List<ListViewItem>());
    136       }
    137       listViewItemMapping[item].Add(listViewItem);
     155      if (item != null) {
     156        if (!itemListViewItemMapping.ContainsKey(item)) {
     157          RegisterItemEvents(item);
     158          itemListViewItemMapping.Add(item, new List<ListViewItem>());
     159        }
     160        itemListViewItemMapping[item].Add(listViewItem);
     161      }
    138162      sortAscendingButton.Enabled = itemsListView.Items.Count > 1;
    139163      sortDescendingButton.Enabled = itemsListView.Items.Count > 1;
     
    141165    protected virtual void RemoveListViewItem(ListViewItem listViewItem) {
    142166      T item = (listViewItem.Tag as T);
    143       listViewItemMapping[item].Remove(listViewItem);
    144       if (listViewItemMapping[item].Count == 0) {
    145         listViewItemMapping.Remove(item);
    146         item.ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
    147         item.ToStringChanged -= new EventHandler(Item_ToStringChanged);
     167      if (item != null) {
     168        itemListViewItemMapping[item].Remove(listViewItem);
     169        if (itemListViewItemMapping[item].Count == 0) {
     170          itemListViewItemMapping.Remove(item);
     171          DeregisterItemEvents(item);
     172        }
    148173      }
    149174      listViewItem.Remove();
     
    152177    }
    153178    protected virtual void UpdateListViewItemImage(ListViewItem listViewItem) {
     179      T item = listViewItem.Tag as T;
    154180      int i = listViewItem.ImageIndex;
    155       listViewItem.ImageList.Images[i] = ((T)listViewItem.Tag).ItemImage;
     181      listViewItem.ImageList.Images[i] = item == null ? HeuristicLab.Common.Resources.VS2008ImageLibrary.Nothing : item.ItemImage;
    156182      listViewItem.ImageIndex = -1;
    157183      listViewItem.ImageIndex = i;
    158184    }
    159185    protected virtual void UpdateListViewItemText(ListViewItem listViewItem) {
    160       if (!listViewItem.Text.Equals(listViewItem.Tag.ToString()))
    161         listViewItem.Text = listViewItem.Tag.ToString();
     186      T item = listViewItem.Tag as T;
     187      listViewItem.Text = item == null ? "null" : item.ToString();
     188      listViewItem.ToolTipText = item == null ? string.Empty : item.ItemName + ": " + item.ItemDescription;
    162189    }
    163190    protected virtual IEnumerable<ListViewItem> GetListViewItemsForItem(T item) {
    164       return listViewItemMapping[item];
     191      if (item == null) {
     192        List<ListViewItem> listViewItems = new List<ListViewItem>();
     193        foreach (ListViewItem listViewItem in itemsListView.Items) {
     194          if (listViewItem.Tag == null) listViewItems.Add(listViewItem);
     195        }
     196        return listViewItems;
     197      } else {
     198        return itemListViewItemMapping[item];
     199      }
    165200    }
    166201
     
    190225    protected virtual void itemsListView_DoubleClick(object sender, EventArgs e) {
    191226      if (itemsListView.SelectedItems.Count == 1) {
    192         T item = (T)itemsListView.SelectedItems[0].Tag;
    193         IContentView view = MainFormManager.MainForm.ShowContent(item);
    194         if (view != null) {
    195           view.ReadOnly = ReadOnly;
    196           view.Locked = Locked;
     227        T item = itemsListView.SelectedItems[0].Tag as T;
     228        if (item != null) {
     229          IContentView view = MainFormManager.MainForm.ShowContent(item);
     230          if (view != null) {
     231            view.ReadOnly = ReadOnly;
     232            view.Locked = Locked;
     233          }
    197234        }
    198235      }
     
    201238      if (!Locked) {
    202239        ListViewItem listViewItem = (ListViewItem)e.Item;
    203         T item = (T)listViewItem.Tag;
    204         DataObject data = new DataObject();
    205         data.SetData("Type", item.GetType());
    206         data.SetData("Value", item);
    207         if (Content.IsReadOnly || ReadOnly) {
    208           DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
    209         } else {
    210           DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);
    211           if ((result & DragDropEffects.Move) == DragDropEffects.Move)
    212             Content.Remove(item);
     240        T item = listViewItem.Tag as T;
     241        if (item != null) {
     242          DataObject data = new DataObject();
     243          data.SetData("Type", item.GetType());
     244          data.SetData("Value", item);
     245          if (Content.IsReadOnly || ReadOnly) {
     246            DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
     247          } else {
     248            DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);
     249            if ((result & DragDropEffects.Move) == DragDropEffects.Move)
     250              Content.Remove(item);
     251          }
    213252        }
    214253      }
Note: See TracChangeset for help on using the changeset viewer.