Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Data/ItemDictionaryView_T.cs @ 187

Last change on this file since 187 was 187, checked in by mkofler, 16 years ago

Added ItemDictionary and related classes (View, KeyValueEventArgs, EditKeyValueDialog) to the Core and Data projects as per Andreas' request.

File size: 6.7 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Drawing;
5using System.Data;
6using System.Text;
7using System.Windows.Forms;
8using HeuristicLab.Core;
9
10namespace HeuristicLab.Data {
11  public partial class ItemDictionaryView<K, V> : ViewBase
12    where K : IItem
13    where V : IItem {
14
15    private EditKeyValueDialog editKeyValueDialog;
16
17    public ItemDictionary<K,V> ItemDictionary {
18      get { return (ItemDictionary<K,V>) Item; }
19      set { base.Item = value; }
20    }
21
22    private ListViewItem CreateListViewItem(K key, V value) {
23      ListViewItem item = new ListViewItem(key.ToString());
24      item.Name = key.ToString();
25      item.SubItems.Add(value.ToString());
26      item.SubItems[0].Tag = key;
27      item.SubItems[1].Tag = value;
28      return item;
29    }
30
31    public ItemDictionaryView() : this(new ItemDictionary<K,V>()) { }
32
33    public ItemDictionaryView(ItemDictionary<K,V> dictionary) {
34      InitializeComponent();
35      ItemDictionary = dictionary;
36      ImageList imageListSmall = new ImageList();
37      listView.SmallImageList = imageListSmall;
38      listView.View = View.Details;
39      imageListSmall.Images.Add(Bitmap.FromFile(@"C:\Documents and Settings\Monika Kofler\Desktop\material.bmp"));
40      imageListSmall.Images.Add(Bitmap.FromFile(@"C:\Documents and Settings\Monika Kofler\Desktop\demand.bmp"));
41      imageListSmall.Images.Add(Bitmap.FromFile(@"C:\Documents and Settings\Monika Kofler\Desktop\job.bmp"));
42      imageListSmall.Images.Add(Bitmap.FromFile(@"C:\Documents and Settings\Monika Kofler\Desktop\tool.bmp"));
43      listView.Columns[0].Text = "Key";
44      listView.Columns[1].Text = "Value";
45      valueTypeTextBox.Text = typeof(V).ToString();
46      keyTypeTextBox.Text = typeof(K).ToString();
47    }
48
49    protected override void RemoveItemEvents() {
50      ItemDictionary.ItemAdded -= new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemInserted);
51      ItemDictionary.ItemRemoved -= new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemRemoved);
52      ItemDictionary.Cleared -= new EventHandler(ItemDictionary_Cleared);
53      base.RemoveItemEvents();
54    }
55
56    protected override void AddItemEvents() {
57      base.AddItemEvents();
58      ItemDictionary.ItemAdded += new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemInserted);
59      ItemDictionary.ItemRemoved += new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemRemoved);
60      ItemDictionary.Cleared += new EventHandler(ItemDictionary_Cleared);
61    }
62
63    private void listView_SelectedIndexChanged(object sender, EventArgs e) {
64      if (detailsPanel.Controls.Count > 0)
65        detailsPanel.Controls[0].Dispose();
66      if (keyPanel.Controls.Count > 0)
67        keyPanel.Controls[0].Dispose();
68      detailsPanel.Controls.Clear();
69      keyPanel.Controls.Clear();
70      detailsPanel.Enabled = false;
71      keyPanel.Enabled = false;
72      removeButton.Enabled = false;
73      if (listView.SelectedItems.Count > 0) {
74        removeButton.Enabled = true;
75      }
76      if (listView.SelectedItems.Count == 1) {
77        K key = (K) listView.SelectedItems[0].SubItems[0].Tag;
78        V data = (V) listView.SelectedItems[0].SubItems[1].Tag;
79        Control keyView = (Control) key.CreateView();
80        Control dataView = (Control) data.CreateView();
81        keyPanel.Controls.Add(keyView);
82        detailsPanel.Controls.Add(dataView);
83        detailsPanel.Enabled = true;
84      }
85      keyPanel.Enabled = false;
86    }
87
88    #region Item and ItemDictionary Events
89    private void ItemDictionary_ItemInserted(object sender, KeyValueEventArgs e) {
90      if (InvokeRequired)
91        Invoke(new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemInserted), sender, e);
92      else {
93        ListViewItem item = CreateListViewItem((K) e.Key, (V) e.Value);
94        listView.Items.Insert(listView.Items.Count, item);
95        item.Name = e.Key.ToString();
96        e.Value.Changed += new EventHandler(Item_Changed);
97        e.Key.Changed += new EventHandler(Item_Changed);
98      }
99    }
100
101    private void ItemDictionary_ItemRemoved(object sender, KeyValueEventArgs e) {
102      if (InvokeRequired)
103        Invoke(new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemRemoved), sender, e);
104      else {
105        int index = listView.Items.IndexOfKey(e.Key.ToString());
106        listView.Items.RemoveAt(index);
107        e.Key.Changed -= new EventHandler(Item_Changed);
108        e.Value.Changed += new EventHandler(Item_Changed);
109      }
110    }
111
112    private void ItemDictionary_Cleared(object sender, EventArgs e) {
113      Refresh();
114    }
115
116    private void Item_Changed(object sender, EventArgs e) {
117      if (InvokeRequired)
118        Invoke(new EventHandler(Item_Changed), sender, e);
119      else {
120        IItem data = (IItem) sender;
121        foreach (ListViewItem item in listView.Items) {
122          if (item.SubItems[0].Tag == data) {
123            item.SubItems[0].Text = data.ToString();
124            item.Name = data.ToString();
125          } else if (item.SubItems[1].Tag == data) {
126            item.SubItems[1].Text = data.ToString();
127          }
128        }
129      }
130    }
131    #endregion
132
133    #region Update Controls
134    protected override void UpdateControls() {
135      base.UpdateControls();
136      detailsPanel.Controls.Clear();
137      keyPanel.Controls.Clear();
138      detailsPanel.Enabled = false;
139      keyPanel.Enabled = false;
140      removeButton.Enabled = false;
141
142      foreach (ListViewItem item in listView.Items) {
143        ((IItem) item.SubItems[0]).Changed -= new EventHandler(Item_Changed);
144        ((IItem) item.SubItems[1]).Changed -= new EventHandler(Item_Changed);
145      }
146      listView.Items.Clear();
147      foreach (KeyValuePair<K, V> data in ItemDictionary) {
148        ListViewItem item = CreateListViewItem(data.Key, data.Value);
149        listView.Items.Add(item);
150        data.Key.Changed += new EventHandler(Item_Changed);
151        data.Value.Changed += new EventHandler(Item_Changed);
152      }
153    }
154    #endregion
155
156    #region Button Events
157    private void addButton_Click(object sender, EventArgs e) {
158      editKeyValueDialog = new EditKeyValueDialog(typeof(K), typeof(V));
159      if (editKeyValueDialog.ShowDialog(this) == DialogResult.OK) {
160        try {
161          if (!ItemDictionary.ContainsKey((K) editKeyValueDialog.Key)) {
162            ItemDictionary.Add((K) editKeyValueDialog.Key, (V) editKeyValueDialog.Value);
163          }
164        } catch (Exception ex) {
165          Auxiliary.ShowErrorMessageBox(ex);
166        }
167      }
168    }
169
170    private void removeButton_Click(object sender, EventArgs e) {
171      while (listView.SelectedIndices.Count > 0)
172        ItemDictionary.Remove((K) listView.SelectedItems[0].SubItems[0].Tag);
173    }
174    #endregion
175  }
176}
Note: See TracBrowser for help on using the repository browser.