using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using HeuristicLab.Core; namespace HeuristicLab.Problems.MetaOptimization.Views { public partial class ObjectSelectorDialog : Form where T : IItem { private bool initialized; private List items; private IEnumerable> selectableItems; private T item; public T Item { get { return item; } } public ObjectSelectorDialog(IEnumerable> selectableItems) { this.initialized = false; this.items = new List(); this.item = default(T); this.selectableItems = selectableItems; InitializeComponent(); } private void ObjectSelectorDialog_Load(object sender, EventArgs e) { if (!initialized) { itemsListView.SmallImageList = new ImageList(); foreach (IGrouping item in selectableItems) { ListViewGroup group = new ListViewGroup(item.Key); itemsListView.Groups.Add(group); foreach (T i in item) { items.Add(i); string[] columns; if(i is INamedItem) { INamedItem ni = i as INamedItem; columns = new string[] { ni.Name, ni.Description, ni.GetType().Name }; } else { columns = new string[] { i.ItemName, i.ItemDescription, i.GetType().Name }; } ListViewItem value = new ListViewItem(columns, group); itemsListView.SmallImageList.Images.Add(i.ItemImage); value.ImageIndex = itemsListView.SmallImageList.Images.Count - 1; value.Tag = i; itemsListView.Items.Add(value); } } for (int i = 0; i < itemsListView.Columns.Count; i++) itemsListView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); initialized = true; } } private void ObjectSelectorDialog_Shown(object sender, EventArgs e) { item = default(T); } private void okButton_Click(object sender, EventArgs e) { if (itemsListView.SelectedItems.Count == 1) { item = (T)itemsListView.SelectedItems[0].Tag; DialogResult = DialogResult.OK; Close(); } } private void itemsListView_DoubleClick(object sender, EventArgs e) { if (itemsListView.SelectedItems.Count == 1) { item = (T)itemsListView.SelectedItems[0].Tag; DialogResult = DialogResult.OK; Close(); } } private void itemsListView_SelectedIndexChanged(object sender, EventArgs e) { okButton.Enabled = itemsListView.SelectedItems.Count == 1; } } }