- Timestamp:
- 01/08/11 01:47:47 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs
r5068 r5237 34 34 [Content(typeof(IItemCollection<>), false)] 35 35 public partial class ItemCollectionView<T> : ItemView where T : class, IItem { 36 pr ivate Dictionary<T, List<ListViewItem>> listViewItemMapping;36 protected Dictionary<T, List<ListViewItem>> itemListViewItemMapping; 37 37 protected TypeSelectorDialog typeSelectorDialog; 38 38 … … 48 48 public ItemCollectionView() { 49 49 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); 51 59 } 52 60 … … 55 63 Content.ItemsRemoved -= new CollectionItemsChangedEventHandler<T>(Content_ItemsRemoved); 56 64 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); 60 67 } 61 68 base.DeregisterContentEvents(); … … 67 74 Content.CollectionReset += new CollectionItemsChangedEventHandler<T>(Content_CollectionReset); 68 75 } 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 } 69 84 70 85 protected override void OnContentChanged() { 71 86 base.OnContentChanged(); 72 while (itemsListView.Items.Count > 0) RemoveListViewItem(itemsListView.Items[0]); 87 itemsListView.Items.Clear(); 88 itemListViewItemMapping.Clear(); 73 89 RebuildImageList(); 74 90 viewHost.Content = null; … … 112 128 try { 113 129 return (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType(); 114 } catch (Exception ex) { 130 } 131 catch (Exception ex) { 115 132 ErrorHandling.ShowErrorDialog(this, ex); 116 133 } … … 120 137 protected virtual ListViewItem CreateListViewItem(T item) { 121 138 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 } 127 150 return listViewItem; 128 151 } … … 130 153 T item = (listViewItem.Tag as T); 131 154 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 } 138 162 sortAscendingButton.Enabled = itemsListView.Items.Count > 1; 139 163 sortDescendingButton.Enabled = itemsListView.Items.Count > 1; … … 141 165 protected virtual void RemoveListViewItem(ListViewItem listViewItem) { 142 166 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 } 148 173 } 149 174 listViewItem.Remove(); … … 152 177 } 153 178 protected virtual void UpdateListViewItemImage(ListViewItem listViewItem) { 179 T item = listViewItem.Tag as T; 154 180 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; 156 182 listViewItem.ImageIndex = -1; 157 183 listViewItem.ImageIndex = i; 158 184 } 159 185 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; 162 189 } 163 190 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 } 165 200 } 166 201 … … 190 225 protected virtual void itemsListView_DoubleClick(object sender, EventArgs e) { 191 226 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 } 197 234 } 198 235 } … … 201 238 if (!Locked) { 202 239 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 } 213 252 } 214 253 }
Note: See TracChangeset
for help on using the changeset viewer.