- Timestamp:
- 05/03/10 17:38:05 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs
r3588 r3595 1 #region License Information1 #region License Information 2 2 /* HeuristicLab 3 3 * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL) … … 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.ComponentModel; 24 25 using System.Drawing; 26 using System.Data; 27 using System.Linq; 28 using System.Text; 25 29 using System.Windows.Forms; 26 30 using HeuristicLab.Collections; 27 31 using HeuristicLab.MainForm; 28 using HeuristicLab.MainForm.WindowsForms;29 32 30 33 namespace HeuristicLab.Core.Views { … … 35 38 [Content(typeof(CheckedItemList<>), true)] 36 39 [Content(typeof(ICheckedItemList<>), false)] 37 public partial class CheckedItemListView<T> : ItemView where T : class, IItem { 38 protected TypeSelectorDialog typeSelectorDialog; 39 40 /// <summary> 41 /// Gets or sets the content to represent visually. 42 /// </summary> 43 /// <remarks>Uses property <see cref="ItemView.Content"/> of base class <see cref="ItemView"/> 44 /// </remarks> 40 public partial class CheckedItemListView<T> : ItemListView<T> where T : class, IItem { 45 41 public new ICheckedItemList<T> Content { 46 42 get { return (ICheckedItemList<T>)base.Content; } … … 48 44 } 49 45 50 public ListView ItemsListView { 51 get { return itemsListView; } 46 public CheckedItemListView() 47 : base() { 48 InitializeComponent(); 52 49 } 53 50 54 /// <summary> 55 /// Initializes a new instance of <see cref="CheckedItemListView"/> with caption "Checked Item List". 56 /// </summary> 57 public CheckedItemListView() { 58 InitializeComponent(); 59 Caption = "Checked Item List"; 51 protected override void RegisterContentEvents() { 52 Content.CheckedItemsChanged += new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_CheckedItemsChanged); 53 base.RegisterContentEvents(); 60 54 } 61 62 /// <summary>63 /// Removes the eventhandlers from the underlying <see cref="ICheckedItemList"/>.64 /// </summary>65 /// <remarks>Calls <see cref="ItemView.DeregisterContentEvents"/> of base class <see cref="ItemView"/>.</remarks>66 55 protected override void DeregisterContentEvents() { 67 Content.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsAdded);68 Content.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsRemoved);69 Content.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsReplaced);70 Content.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsMoved);71 Content.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_CollectionReset);72 56 Content.CheckedItemsChanged -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_CheckedItemsChanged); 73 57 base.DeregisterContentEvents(); 74 58 } 75 59 76 /// <summary> 77 /// Adds eventhandlers to the underlying <see cref="ICheckedItemList"/>. 78 /// </summary> 79 /// <remarks>Calls <see cref="ItemView.RegisterContentEvents"/> of base class <see cref="ItemView"/>.</remarks> 80 protected override void RegisterContentEvents() { 81 base.RegisterContentEvents(); 82 Content.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsAdded); 83 Content.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsRemoved); 84 Content.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsReplaced); 85 Content.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsMoved); 86 Content.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_CollectionReset); 87 Content.CheckedItemsChanged += new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_CheckedItemsChanged); 60 protected override void OnContentChanged() { 61 Caption = "Checked Item List"; 62 base.OnContentChanged(); 88 63 } 89 64 90 91 protected override void OnContentChanged() { 92 base.OnContentChanged(); 93 Caption = "Checked Item List"; 94 while (itemsListView.Items.Count > 0) RemoveListViewItem(itemsListView.Items[0]); 95 viewHost.Content = null; 96 if (Content != null) { 97 Caption += " (" + Content.GetType().Name + ")"; 98 foreach (T item in Content) 99 AddListViewItem(CreateListViewItem(item)); 100 } 101 SetEnabledStateOfControls(); 102 } 103 104 protected override void OnReadOnlyChanged() { 105 base.OnReadOnlyChanged(); 106 SetEnabledStateOfControls(); 107 } 108 109 private void SetEnabledStateOfControls() { 110 if (Content == null) { 111 addButton.Enabled = false; 112 moveUpButton.Enabled = false; 113 moveDownButton.Enabled = false; 114 removeButton.Enabled = false; 115 itemsListView.Enabled = false; 116 detailsGroupBox.Enabled = false; 117 } else { 118 addButton.Enabled = !Content.IsReadOnly && !ReadOnly; 119 moveUpButton.Enabled = itemsListView.SelectedItems.Count == 1 && 120 itemsListView.SelectedIndices[0] != 0 && 121 !Content.IsReadOnly && !ReadOnly; 122 moveDownButton.Enabled = itemsListView.SelectedItems.Count == 1 && 123 itemsListView.SelectedIndices[0] != itemsListView.Items.Count - 1 && 124 !Content.IsReadOnly && !ReadOnly; 125 removeButton.Enabled = itemsListView.SelectedItems.Count > 0 && 126 !Content.IsReadOnly && !ReadOnly; 127 itemsListView.Enabled = true; 128 detailsGroupBox.Enabled = true; 129 } 130 } 131 132 protected virtual T CreateItem() { 133 if (typeSelectorDialog == null) { 134 typeSelectorDialog = new TypeSelectorDialog(); 135 typeSelectorDialog.Caption = "Select Item"; 136 typeSelectorDialog.TypeSelector.Caption = "Available Items"; 137 typeSelectorDialog.TypeSelector.Configure(typeof(T), false, true); 138 } 139 140 if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) { 141 try { 142 return (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType(); 143 } 144 catch (Exception ex) { 145 Auxiliary.ShowErrorMessageBox(ex); 146 } 147 } 148 return null; 149 } 150 protected virtual ListViewItem CreateListViewItem(T item) { 151 ListViewItem listViewItem = new ListViewItem(); 152 listViewItem.Text = item.ToString(); 153 listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription; 154 listViewItem.Tag = item; 65 protected override ListViewItem CreateListViewItem(T item) { 66 ListViewItem listViewItem = base.CreateListViewItem(item); 155 67 listViewItem.Checked = Content.ItemChecked(item); 156 itemsListView.SmallImageList.Images.Add(item.ItemImage);157 listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;158 68 return listViewItem; 159 }160 protected virtual void AddListViewItem(ListViewItem listViewItem) {161 itemsListView.Items.Add(listViewItem);162 ((T)listViewItem.Tag).ItemImageChanged += new EventHandler(Item_ItemImageChanged);163 ((T)listViewItem.Tag).ToStringChanged += new EventHandler(Item_ToStringChanged);164 AdjustListViewColumnSizes();165 }166 protected virtual void InsertListViewItem(int index, ListViewItem listViewItem) {167 itemsListView.Items.Insert(index, listViewItem);168 ((T)listViewItem.Tag).ItemImageChanged += new EventHandler(Item_ItemImageChanged);169 ((T)listViewItem.Tag).ToStringChanged += new EventHandler(Item_ToStringChanged);170 AdjustListViewColumnSizes();171 }172 protected virtual void RemoveListViewItem(ListViewItem listViewItem) {173 ((T)listViewItem.Tag).ItemImageChanged -= new EventHandler(Item_ItemImageChanged);174 ((T)listViewItem.Tag).ToStringChanged -= new EventHandler(Item_ToStringChanged);175 listViewItem.Remove();176 foreach (ListViewItem other in itemsListView.Items)177 if (other.ImageIndex > listViewItem.ImageIndex) other.ImageIndex--;178 itemsListView.SmallImageList.Images.RemoveAt(listViewItem.ImageIndex);179 }180 protected virtual void UpdateListViewItemImage(ListViewItem listViewItem) {181 int i = listViewItem.ImageIndex;182 listViewItem.ImageList.Images[i] = ((T)listViewItem.Tag).ItemImage;183 listViewItem.ImageIndex = -1;184 listViewItem.ImageIndex = i;185 }186 protected virtual void UpdateListViewItemText(ListViewItem listViewItem) {187 if (!listViewItem.Text.Equals(listViewItem.Tag.ToString()))188 listViewItem.Text = listViewItem.Tag.ToString();189 69 } 190 70 191 71 #region ListView Events 192 protected virtual void itemsListView_SelectedIndexChanged(object sender, EventArgs e) {193 moveUpButton.Enabled = itemsListView.SelectedItems.Count == 1 &&194 itemsListView.SelectedIndices[0] != 0 &&195 (Content != null) && !Content.IsReadOnly && !ReadOnly;196 moveDownButton.Enabled = itemsListView.SelectedItems.Count == 1 &&197 itemsListView.SelectedIndices[0] != itemsListView.Items.Count - 1 &&198 (Content != null) && !Content.IsReadOnly && !ReadOnly;199 removeButton.Enabled = itemsListView.SelectedItems.Count > 0 &&200 (Content != null) && !Content.IsReadOnly && !ReadOnly;201 202 if (itemsListView.SelectedItems.Count == 1) {203 T item = (T)itemsListView.SelectedItems[0].Tag;204 detailsGroupBox.Enabled = true;205 viewHost.ViewType = null;206 viewHost.Content = item;207 } else {208 viewHost.Content = null;209 detailsGroupBox.Enabled = false;210 }211 }212 213 protected virtual void itemsListView_KeyDown(object sender, KeyEventArgs e) {214 if (e.KeyCode == Keys.Delete) {215 if ((itemsListView.SelectedItems.Count > 0) && !Content.IsReadOnly && !ReadOnly) {216 foreach (ListViewItem item in itemsListView.SelectedItems)217 Content.RemoveAt(item.Index);218 }219 }220 }221 222 protected virtual void itemsListView_DoubleClick(object sender, EventArgs e) {223 if (itemsListView.SelectedItems.Count == 1) {224 T item = (T)itemsListView.SelectedItems[0].Tag;225 IContentView view = MainFormManager.MainForm.ShowContent(item);226 if (view != null) {227 view.ReadOnly = ReadOnly;228 view.Locked = Locked;229 }230 }231 }232 233 protected virtual void itemsListView_ItemDrag(object sender, ItemDragEventArgs e) {234 if (!Locked) {235 ListViewItem listViewItem = (ListViewItem)e.Item;236 T item = (T)listViewItem.Tag;237 DataObject data = new DataObject();238 data.SetData("Type", item.GetType());239 data.SetData("Value", item);240 if (Content.IsReadOnly || ReadOnly) {241 DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);242 } else {243 DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);244 if ((result & DragDropEffects.Move) == DragDropEffects.Move)245 Content.RemoveAt(listViewItem.Index);246 }247 }248 }249 protected virtual void itemsListView_DragEnterOver(object sender, DragEventArgs e) {250 e.Effect = DragDropEffects.None;251 Type type = e.Data.GetData("Type") as Type;252 if (!Content.IsReadOnly && !ReadOnly && (type != null) && (typeof(T).IsAssignableFrom(type))) {253 if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Link; // CTRL key254 else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move; // SHIFT key255 else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;256 else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;257 else if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;258 }259 }260 protected virtual void itemsListView_DragDrop(object sender, DragEventArgs e) {261 if (e.Effect != DragDropEffects.None) {262 T item = e.Data.GetData("Value") as T;263 if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) item = (T)item.Clone();264 265 Point p = itemsListView.PointToClient(new Point(e.X, e.Y));266 ListViewItem listViewItem = itemsListView.GetItemAt(p.X, p.Y);267 if (listViewItem != null) Content.Insert(listViewItem.Index, item);268 else Content.Add(item);269 }270 }271 272 72 protected virtual void itemsListView_ItemChecked(object sender, ItemCheckedEventArgs e) { 273 73 var checkedItem = (T)e.Item.Tag; 274 if (Content.ItemChecked(checkedItem) != e.Item.Checked) 74 if (Content.ItemChecked(checkedItem) != e.Item.Checked) { 275 75 Content.SetItemCheckedState(checkedItem, e.Item.Checked); 276 }277 #endregion278 279 #region Button Events280 protected virtual void addButton_Click(object sender, EventArgs e) {281 T item = CreateItem();282 if (item != null)283 Content.Add(item);284 }285 protected virtual void moveUpButton_Click(object sender, EventArgs e) {286 if (itemsListView.SelectedItems.Count == 1) {287 int index = itemsListView.SelectedIndices[0];288 T item = Content[index - 1];289 Content[index - 1] = Content[index];290 itemsListView.Items[index].Selected = false;291 itemsListView.Items[index - 1].Selected = true;292 Content[index] = item;293 }294 }295 protected virtual void moveDownButton_Click(object sender, EventArgs e) {296 if (itemsListView.SelectedItems.Count == 1) {297 int index = itemsListView.SelectedIndices[0];298 T item = Content[index + 1];299 Content[index + 1] = Content[index];300 itemsListView.Items[index].Selected = false;301 itemsListView.Items[index + 1].Selected = true;302 Content[index] = item;303 }304 }305 protected virtual void removeButton_Click(object sender, EventArgs e) {306 if (itemsListView.SelectedItems.Count > 0) {307 foreach (ListViewItem item in itemsListView.SelectedItems)308 Content.RemoveAt(item.Index);309 76 } 310 77 } … … 312 79 313 80 #region Content Events 314 protected virtual void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {315 if (InvokeRequired)316 Invoke(new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsAdded), sender, e);317 else318 foreach (IndexedItem<T> item in e.Items)319 InsertListViewItem(item.Index, CreateListViewItem(item.Value));320 }321 protected virtual void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {322 if (InvokeRequired)323 Invoke(new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsRemoved), sender, e);324 else {325 List<ListViewItem> listViewItems = new List<ListViewItem>();326 foreach (IndexedItem<T> item in e.Items)327 listViewItems.Add(itemsListView.Items[item.Index]);328 foreach (ListViewItem listViewItem in listViewItems)329 RemoveListViewItem(listViewItem);330 }331 }332 protected virtual void Content_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {333 if (InvokeRequired)334 Invoke(new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsReplaced), sender, e);335 else {336 int[] selected = new int[itemsListView.SelectedIndices.Count];337 itemsListView.SelectedIndices.CopyTo(selected, 0);338 339 List<ListViewItem> listViewItems = new List<ListViewItem>();340 foreach (IndexedItem<T> item in e.OldItems)341 listViewItems.Add(itemsListView.Items[item.Index]);342 foreach (ListViewItem listViewItem in listViewItems)343 RemoveListViewItem(listViewItem);344 345 foreach (IndexedItem<T> item in e.Items)346 InsertListViewItem(item.Index, CreateListViewItem(item.Value));347 348 for (int i = 0; i < selected.Length; i++)349 itemsListView.Items[selected[i]].Selected = true;350 }351 }352 protected virtual void Content_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {353 if (InvokeRequired)354 Invoke(new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_ItemsMoved), sender, e);355 else {356 foreach (IndexedItem<T> item in e.Items) {357 ListViewItem listViewItem = itemsListView.Items[item.Index];358 listViewItem.Tag = item.Value;359 UpdateListViewItemImage(listViewItem);360 UpdateListViewItemText(listViewItem);361 }362 }363 }364 protected virtual void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {365 if (InvokeRequired)366 Invoke(new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_CollectionReset), sender, e);367 else {368 List<ListViewItem> listViewItems = new List<ListViewItem>();369 foreach (IndexedItem<T> item in e.OldItems)370 listViewItems.Add(itemsListView.Items[item.Index]);371 foreach (ListViewItem listViewItem in listViewItems)372 RemoveListViewItem(listViewItem);373 374 foreach (IndexedItem<T> item in e.Items)375 InsertListViewItem(item.Index, CreateListViewItem(item.Value));376 }377 }378 81 protected virtual void Content_CheckedItemsChanged(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) { 379 82 if (InvokeRequired) … … 386 89 } 387 90 } 388 389 91 #endregion 390 391 #region Item Events392 protected virtual void Item_ItemImageChanged(object sender, EventArgs e) {393 if (InvokeRequired)394 Invoke(new EventHandler(Item_ItemImageChanged), sender, e);395 else {396 T item = (T)sender;397 foreach (ListViewItem listViewItem in itemsListView.Items) {398 if (((T)listViewItem.Tag) == item)399 UpdateListViewItemImage(listViewItem);400 }401 }402 }403 protected virtual void Item_ToStringChanged(object sender, EventArgs e) {404 if (InvokeRequired)405 Invoke(new EventHandler(Item_ToStringChanged), sender, e);406 else {407 T item = (T)sender;408 foreach (ListViewItem listViewItem in itemsListView.Items) {409 if (((T)listViewItem.Tag) == item)410 UpdateListViewItemText(listViewItem);411 }412 AdjustListViewColumnSizes();413 }414 }415 #endregion416 417 #region Helpers418 protected virtual void AdjustListViewColumnSizes() {419 if (itemsListView.Items.Count > 0) {420 for (int i = 0; i < itemsListView.Columns.Count; i++)421 itemsListView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);422 }423 }424 #endregion425 426 92 } 427 93 }
Note: See TracChangeset
for help on using the changeset viewer.