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
Location:
trunk/sources/HeuristicLab.Optimization.Views/3.3
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.Designer.cs

    r4522 r5237  
    2626    /// </summary>
    2727    private System.ComponentModel.IContainer components = null;
    28 
    29     /// <summary>
    30     /// Clean up any resources being used.
    31     /// </summary>
    32     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    33     protected override void Dispose(bool disposing) {
    34       if (disposing) {
    35         if (problemTypeSelectorDialog != null) problemTypeSelectorDialog.Dispose();
    36         if (components != null) components.Dispose();
    37       }
    38       base.Dispose(disposing);
    39     }
    4028
    4129    #region Component Designer generated code
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs

    r4540 r5237  
    4949    public AlgorithmView() {
    5050      InitializeComponent();
     51    }
     52
     53    protected override void Dispose(bool disposing) {
     54      if (disposing) {
     55        if (problemTypeSelectorDialog != null) problemTypeSelectorDialog.Dispose();
     56        if (components != null) components.Dispose();
     57      }
     58      base.Dispose(disposing);
    5159    }
    5260
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs

    r4522 r5237  
    2626    /// </summary>
    2727    private System.ComponentModel.IContainer components = null;
    28 
    29     /// <summary>
    30     /// Clean up any resources being used.
    31     /// </summary>
    32     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    33     protected override void Dispose(bool disposing) {
    34       if (disposing) {
    35         if (algorithmTypeSelectorDialog != null) algorithmTypeSelectorDialog.Dispose();
    36         if (components != null) components.Dispose();
    37       }
    38       base.Dispose(disposing);
    39     }
    4028
    4129    #region Component Designer generated code
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs

    r4540 r5237  
    4747    public BatchRunView() {
    4848      InitializeComponent();
     49    }
     50
     51    protected override void Dispose(bool disposing) {
     52      if (disposing) {
     53        if (algorithmTypeSelectorDialog != null) algorithmTypeSelectorDialog.Dispose();
     54        if (components != null) components.Dispose();
     55      }
     56      base.Dispose(disposing);
    4957    }
    5058
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionConstraintCollectionView.cs

    r4162 r5237  
    2323using System.Drawing;
    2424using System.Windows.Forms;
    25 using HeuristicLab.Collections;
    2625using HeuristicLab.Core;
    2726using HeuristicLab.Core.Views;
     
    6059    protected override ListViewItem CreateListViewItem(IRunCollectionConstraint item) {
    6160      ListViewItem listViewItem = base.CreateListViewItem(item);
    62       if (item.Active)
    63         listViewItem.Font = new Font(listViewItem.Font, FontStyle.Bold);
    64       else
    65         listViewItem.Font = new Font(listViewItem.Font, FontStyle.Regular);
     61      if (item != null) {
     62        listViewItem.Font = item.Active ? new Font(listViewItem.Font, FontStyle.Bold) : new Font(listViewItem.Font, FontStyle.Regular);
     63      }
    6664      return listViewItem;
    6765    }
    6866
    69     protected override void RegisterContentEvents() {
    70       base.RegisterContentEvents();
    71       foreach (IRunCollectionConstraint constraint in Content)
    72         RegisterConstraintEvents(constraint);
     67    protected override void DeregisterItemEvents(IRunCollectionConstraint item) {
     68      item.ActiveChanged -= new EventHandler(Item_ActiveChanged);
     69      base.DeregisterItemEvents(item);
    7370    }
    74     protected override void DeregisterContentEvents() {
    75       base.DeregisterContentEvents();
    76       foreach (IRunCollectionConstraint constraint in Content)
    77         DeregisterConstraintEvents(constraint);
    78     }
    79     protected override void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRunCollectionConstraint> e) {
    80       base.Content_ItemsAdded(sender, e);
    81       foreach (IRunCollectionConstraint constraint in e.Items)
    82         RegisterConstraintEvents(constraint);
    83 
    84     }
    85     protected override void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRunCollectionConstraint> e) {
    86       base.Content_ItemsRemoved(sender, e);
    87       foreach (IRunCollectionConstraint constraint in e.Items)
    88         DeregisterConstraintEvents(constraint);
    89     }
    90     protected override void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRunCollectionConstraint> e) {
    91       base.Content_CollectionReset(sender, e);
    92       foreach (IRunCollectionConstraint constraint in e.OldItems)
    93         RegisterConstraintEvents(constraint);
    94       foreach (IRunCollectionConstraint constraint in e.Items)
    95         DeregisterConstraintEvents(constraint);
     71    protected override void RegisterItemEvents(IRunCollectionConstraint item) {
     72      base.RegisterItemEvents(item);
     73      item.ActiveChanged += new EventHandler(Item_ActiveChanged);
    9674    }
    9775
    98     protected virtual void RegisterConstraintEvents(IRunCollectionConstraint constraint) {
    99       constraint.ActiveChanged += new EventHandler(constraint_ActiveChanged);
    100     }
    101     protected virtual void DeregisterConstraintEvents(IRunCollectionConstraint constraint) {
    102       constraint.ActiveChanged -= new EventHandler(constraint_ActiveChanged);
    103     }
    104     protected virtual void constraint_ActiveChanged(object sender, EventArgs e) {
     76    protected virtual void Item_ActiveChanged(object sender, EventArgs e) {
    10577      IRunCollectionConstraint constraint = (IRunCollectionConstraint)sender;
    10678      foreach (ListViewItem listViewItem in GetListViewItemsForItem(constraint)) {
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.Designer.cs

    r4883 r5237  
    2020#endregion
    2121
    22 using System;
    2322using System.Windows.Forms;
    2423
     
    3635    protected override void Dispose(bool disposing) {
    3736      if (disposing) {
    38         foreach (ListViewItem item in itemsListView.Items) {
    39           ((IRun)item.Tag).ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
    40           ((IRun)item.Tag).ToStringChanged -= new EventHandler(Item_ToStringChanged);
    41         }
    4237        if (components != null) components.Dispose();
    4338      }
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs

    r4883 r5237  
    3636  [Content(typeof(IItemCollection<IRun>), false)]
    3737  public sealed partial class RunCollectionView : ItemView {
    38     private Dictionary<IRun, List<ListViewItem>> runListViewItemMapping;
     38    private Dictionary<IRun, List<ListViewItem>> itemListViewItemMapping;
    3939
    4040    public new IItemCollection<IRun> Content {
     
    5454      InitializeComponent();
    5555      itemsGroupBox.Text = "Runs";
    56       runListViewItemMapping = new Dictionary<IRun, List<ListViewItem>>();
     56      itemListViewItemMapping = new Dictionary<IRun, List<ListViewItem>>();
    5757    }
    5858
     
    6161      Content.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
    6262      Content.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
    63       DeregisterRunEvents(Content);
     63      foreach (IRun run in itemListViewItemMapping.Keys) {
     64        DeregisterItemEvents(run);
     65      }
    6466      base.DeregisterContentEvents();
    6567    }
     
    6971      Content.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
    7072      Content.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
    71       RegisterRunEvents(Content);
    72     }
    73     private void RegisterRunEvents(IEnumerable<IRun> runs) {
    74       foreach (IRun run in runs)
    75         run.Changed += new EventHandler(Run_Changed);
    76     }
    77     private void DeregisterRunEvents(IEnumerable<IRun> runs) {
    78       foreach (IRun run in runs)
    79         run.Changed -= new EventHandler(Run_Changed);
     73    }
     74    private void DeregisterItemEvents(IRun item) {
     75      item.ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
     76      item.ToStringChanged -= new EventHandler(Item_ToStringChanged);
     77      item.Changed -= new EventHandler(Item_Changed);
     78    }
     79    private void RegisterItemEvents(IRun item) {
     80      item.ItemImageChanged += new EventHandler(Item_ItemImageChanged);
     81      item.ToStringChanged += new EventHandler(Item_ToStringChanged);
     82      item.Changed += new EventHandler(Item_Changed);
    8083    }
    8184
     
    101104        selectedName = ((IRun)itemsListView.SelectedItems[0].Tag).Name;
    102105
    103       while (itemsListView.Items.Count > 0) RemoveListViewItem(itemsListView.Items[0]);
     106      itemsListView.Items.Clear();
     107      itemListViewItemMapping.Clear();
     108      RebuildImageList();
    104109      viewHost.Content = null;
    105110
     
    148153    private ListViewItem CreateListViewItem(IRun item) {
    149154      ListViewItem listViewItem = new ListViewItem();
    150       listViewItem.Text = item.ToString();
    151       listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription;
    152       itemsListView.SmallImageList.Images.Add(item.ItemImage);
    153       listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
    154       listViewItem.Tag = item;
    155 
    156       if (item.Visible) {
    157         listViewItem.Font = new Font(listViewItem.Font, FontStyle.Regular);
    158         listViewItem.ForeColor = item.Color;
     155      if (item == null) {
     156        listViewItem.Text = "null";
     157        itemsListView.SmallImageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.Nothing);
     158        listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
    159159      } else {
    160         listViewItem.Font = new Font(listViewItem.Font, FontStyle.Italic);
    161         listViewItem.ForeColor = Color.LightGray;
     160        listViewItem.Text = item.ToString();
     161        listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription;
     162        itemsListView.SmallImageList.Images.Add(item.ItemImage);
     163        listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
     164        listViewItem.Tag = item;
     165
     166        if (item.Visible) {
     167          listViewItem.Font = new Font(listViewItem.Font, FontStyle.Regular);
     168          listViewItem.ForeColor = item.Color;
     169        } else {
     170          listViewItem.Font = new Font(listViewItem.Font, FontStyle.Italic);
     171          listViewItem.ForeColor = Color.LightGray;
     172        }
    162173      }
    163174      return listViewItem;
     
    167178      IRun run = listViewItem.Tag as IRun;
    168179      if (run != null) {
    169         if (!runListViewItemMapping.ContainsKey(run))
    170           runListViewItemMapping.Add(run, new List<ListViewItem>());
    171         runListViewItemMapping[run].Add(listViewItem);
    172         run.ItemImageChanged += new EventHandler(Item_ItemImageChanged);
    173         run.ToStringChanged += new EventHandler(Item_ToStringChanged);
     180        if (!itemListViewItemMapping.ContainsKey(run)) {
     181          itemListViewItemMapping.Add(run, new List<ListViewItem>());
     182          RegisterItemEvents(run);
     183        }
     184        itemListViewItemMapping[run].Add(listViewItem);
    174185      }
    175186    }
     
    177188      IRun run = listViewItem.Tag as IRun;
    178189      if (run != null) {
    179         runListViewItemMapping[run].Remove(listViewItem);
    180         if (runListViewItemMapping[run].Count == 0) {
    181           runListViewItemMapping.Remove(run);
    182           run.ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
    183           run.ToStringChanged -= new EventHandler(Item_ToStringChanged);
     190        itemListViewItemMapping[run].Remove(listViewItem);
     191        if (itemListViewItemMapping[run].Count == 0) {
     192          DeregisterItemEvents(run);
     193          itemListViewItemMapping.Remove(run);
    184194        }
    185195      }
    186196      listViewItem.Remove();
    187       foreach (ListViewItem other in itemsListView.Items)
    188         if (other.ImageIndex > listViewItem.ImageIndex) other.ImageIndex--;
    189       itemsListView.SmallImageList.Images.RemoveAt(listViewItem.ImageIndex);
    190197    }
    191198    private void UpdateListViewItemImage(ListViewItem listViewItem) {
     199      IRun item = listViewItem.Tag as IRun;
    192200      int i = listViewItem.ImageIndex;
    193       listViewItem.ImageList.Images[i] = ((IRun)listViewItem.Tag).ItemImage;
     201      listViewItem.ImageList.Images[i] = item == null ? HeuristicLab.Common.Resources.VS2008ImageLibrary.Nothing : item.ItemImage;
    194202      listViewItem.ImageIndex = -1;
    195203      listViewItem.ImageIndex = i;
    196204    }
    197205    private void UpdateListViewItemText(ListViewItem listViewItem) {
    198       if (!listViewItem.Text.Equals(listViewItem.Tag.ToString()))
    199         listViewItem.Text = listViewItem.Tag.ToString();
    200     }
    201     private IEnumerable<ListViewItem> GetListViewItemsForItem(IRun run) {
    202       return runListViewItemMapping[run];
     206      IRun item = listViewItem.Tag as IRun;
     207      listViewItem.Text = item == null ? "null" : item.ToString();
     208      listViewItem.ToolTipText = item == null ? string.Empty : item.ItemName + ": " + item.ItemDescription;
     209    }
     210    private IEnumerable<ListViewItem> GetListViewItemsForItem(IRun item) {
     211      if (item == null) {
     212        List<ListViewItem> listViewItems = new List<ListViewItem>();
     213        foreach (ListViewItem listViewItem in itemsListView.Items) {
     214          if (listViewItem.Tag == null) listViewItems.Add(listViewItem);
     215        }
     216        return listViewItems;
     217      } else {
     218        return itemListViewItemMapping[item];
     219      }
    203220    }
    204221
     
    228245    private void itemsListView_DoubleClick(object sender, EventArgs e) {
    229246      if (itemsListView.SelectedItems.Count == 1) {
    230         IRun item = (IRun)itemsListView.SelectedItems[0].Tag;
    231         IContentView view = MainFormManager.MainForm.ShowContent(item);
    232         if (view != null) {
    233           view.ReadOnly = ReadOnly;
    234           view.Locked = Locked;
     247        IRun item = itemsListView.SelectedItems[0].Tag as IRun;
     248        if (item != null) {
     249          IContentView view = MainFormManager.MainForm.ShowContent(item);
     250          if (view != null) {
     251            view.ReadOnly = ReadOnly;
     252            view.Locked = Locked;
     253          }
    235254        }
    236255      }
     
    239258      if (!Locked) {
    240259        ListViewItem listViewItem = (ListViewItem)e.Item;
    241         IRun item = (IRun)listViewItem.Tag;
    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);
     260        IRun item = listViewItem.Tag as IRun;
     261        if (item != null) {
     262          DataObject data = new DataObject();
     263          data.SetData("Type", item.GetType());
     264          data.SetData("Value", item);
     265          if (Content.IsReadOnly || ReadOnly) {
     266            DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
     267          } else {
     268            DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);
     269            if ((result & DragDropEffects.Move) == DragDropEffects.Move)
     270              Content.Remove(item);
     271          }
    251272        }
    252273      }
     
    312333        Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded), sender, e);
    313334      else {
    314         RegisterRunEvents(e.Items);
    315335        foreach (IRun item in e.Items)
    316336          AddListViewItem(CreateListViewItem(item));
     
    326346        Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved), sender, e);
    327347      else {
    328         DeregisterRunEvents(e.Items);
    329348        foreach (IRun item in e.Items) {
    330349          //remove only the first matching ListViewItem, because the IRun could be contained multiple times in the ItemCollection
     
    332351          if (listViewItem != null) RemoveListViewItem(listViewItem);
    333352        }
     353        RebuildImageList();
    334354        analyzeRunsToolStripDropDownButton.Enabled = itemsListView.Items.Count > 0;
    335355        clearButton.Enabled = itemsListView.Items.Count > 0 && !Content.IsReadOnly && !ReadOnly;
     
    341361        Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset), sender, e);
    342362      else {
    343         DeregisterRunEvents(e.OldItems);
    344363        foreach (IRun item in e.OldItems) {
     364          //remove only the first matching ListViewItem, because the IRun could be contained multiple times in the ItemCollection
    345365          ListViewItem listViewItem = GetListViewItemsForItem(item).FirstOrDefault();
    346366          if (listViewItem != null) RemoveListViewItem(listViewItem);
    347367        }
    348         RegisterRunEvents(e.Items);
     368        RebuildImageList();
    349369        foreach (IRun item in e.Items)
    350370          AddListViewItem(CreateListViewItem(item));
     
    378398      }
    379399    }
    380     private void Run_Changed(object sender, EventArgs e) {
    381       if (InvokeRequired)
    382         this.Invoke(new EventHandler(Run_Changed), sender, e);
     400    private void Item_Changed(object sender, EventArgs e) {
     401      if (InvokeRequired)
     402        this.Invoke(new EventHandler(Item_Changed), sender, e);
    383403      else {
    384404        IRun run = (IRun)sender;
     
    408428      }
    409429    }
     430    private void RebuildImageList() {
     431      itemsListView.SmallImageList.Images.Clear();
     432      foreach (ListViewItem item in itemsListView.Items) {
     433        itemsListView.SmallImageList.Images.Add(((IRun)item.Tag).ItemImage);
     434        item.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
     435      }
     436    }
    410437    #endregion
    411438  }
Note: See TracChangeset for help on using the changeset viewer.