Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/03/10 17:38:05 (14 years ago)
Author:
gkronber
Message:

Changed CheckedItemCollectionView and CheckedItemListView to extend from ItemCollectionView and ItemListView. #992 (CheckedItemList and CheckedItemCollection is necessary)

File:
1 edited

Legend:

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

    r3588 r3595  
    1 #region License Information
     1#region License Information
    22/* HeuristicLab
    33 * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     
    2222using System;
    2323using System.Collections.Generic;
     24using System.ComponentModel;
    2425using System.Drawing;
     26using System.Data;
     27using System.Linq;
     28using System.Text;
    2529using System.Windows.Forms;
    2630using HeuristicLab.Collections;
    2731using HeuristicLab.MainForm;
    28 using HeuristicLab.MainForm.WindowsForms;
    2932
    3033namespace HeuristicLab.Core.Views {
     
    3538  [Content(typeof(CheckedItemList<>), true)]
    3639  [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 {
    4541    public new ICheckedItemList<T> Content {
    4642      get { return (ICheckedItemList<T>)base.Content; }
     
    4844    }
    4945
    50     public ListView ItemsListView {
    51       get { return itemsListView; }
     46    public CheckedItemListView()
     47      : base() {
     48      InitializeComponent();
    5249    }
    5350
    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();
    6054    }
    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>
    6655    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);
    7256      Content.CheckedItemsChanged -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_CheckedItemsChanged);
    7357      base.DeregisterContentEvents();
    7458    }
    7559
    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();
    8863    }
    8964
    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);
    15567      listViewItem.Checked = Content.ItemChecked(item);
    156       itemsListView.SmallImageList.Images.Add(item.ItemImage);
    157       listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
    15868      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();
    18969    }
    19070
    19171    #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 key
    254         else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
    255         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 
    27272    protected virtual void itemsListView_ItemChecked(object sender, ItemCheckedEventArgs e) {
    27373      var checkedItem = (T)e.Item.Tag;
    274       if (Content.ItemChecked(checkedItem) != e.Item.Checked)
     74      if (Content.ItemChecked(checkedItem) != e.Item.Checked) {
    27575        Content.SetItemCheckedState(checkedItem, e.Item.Checked);
    276     }
    277     #endregion
    278 
    279     #region Button Events
    280     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);
    30976      }
    31077    }
     
    31279
    31380    #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       else
    318         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     }
    37881    protected virtual void Content_CheckedItemsChanged(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
    37982      if (InvokeRequired)
     
    38689      }
    38790    }
    388 
    38991    #endregion
    390 
    391     #region Item Events
    392     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     #endregion
    416 
    417     #region Helpers
    418     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     #endregion
    425 
    42692  }
    42793}
Note: See TracChangeset for help on using the changeset viewer.