Free cookie consent management tool by TermsFeed Policy Generator

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

Last change on this file since 188 was 188, checked in by abeham, 16 years ago

Removed references to bitmaps
Updated project file (VS wants to add designer subtype)

File size: 6.2 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      listView.View = View.Details;
37      listView.Columns[0].Text = "Key";
38      listView.Columns[1].Text = "Value";
39      valueTypeTextBox.Text = typeof(V).ToString();
40      keyTypeTextBox.Text = typeof(K).ToString();
41    }
42
43    protected override void RemoveItemEvents() {
44      ItemDictionary.ItemAdded -= new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemInserted);
45      ItemDictionary.ItemRemoved -= new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemRemoved);
46      ItemDictionary.Cleared -= new EventHandler(ItemDictionary_Cleared);
47      base.RemoveItemEvents();
48    }
49
50    protected override void AddItemEvents() {
51      base.AddItemEvents();
52      ItemDictionary.ItemAdded += new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemInserted);
53      ItemDictionary.ItemRemoved += new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemRemoved);
54      ItemDictionary.Cleared += new EventHandler(ItemDictionary_Cleared);
55    }
56
57    private void listView_SelectedIndexChanged(object sender, EventArgs e) {
58      if (detailsPanel.Controls.Count > 0)
59        detailsPanel.Controls[0].Dispose();
60      if (keyPanel.Controls.Count > 0)
61        keyPanel.Controls[0].Dispose();
62      detailsPanel.Controls.Clear();
63      keyPanel.Controls.Clear();
64      detailsPanel.Enabled = false;
65      keyPanel.Enabled = false;
66      removeButton.Enabled = false;
67      if (listView.SelectedItems.Count > 0) {
68        removeButton.Enabled = true;
69      }
70      if (listView.SelectedItems.Count == 1) {
71        K key = (K) listView.SelectedItems[0].SubItems[0].Tag;
72        V data = (V) listView.SelectedItems[0].SubItems[1].Tag;
73        Control keyView = (Control) key.CreateView();
74        Control dataView = (Control) data.CreateView();
75        keyPanel.Controls.Add(keyView);
76        detailsPanel.Controls.Add(dataView);
77        detailsPanel.Enabled = true;
78      }
79      keyPanel.Enabled = false;
80    }
81
82    #region Item and ItemDictionary Events
83    private void ItemDictionary_ItemInserted(object sender, KeyValueEventArgs e) {
84      if (InvokeRequired)
85        Invoke(new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemInserted), sender, e);
86      else {
87        ListViewItem item = CreateListViewItem((K) e.Key, (V) e.Value);
88        listView.Items.Insert(listView.Items.Count, item);
89        item.Name = e.Key.ToString();
90        e.Value.Changed += new EventHandler(Item_Changed);
91        e.Key.Changed += new EventHandler(Item_Changed);
92      }
93    }
94
95    private void ItemDictionary_ItemRemoved(object sender, KeyValueEventArgs e) {
96      if (InvokeRequired)
97        Invoke(new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemRemoved), sender, e);
98      else {
99        int index = listView.Items.IndexOfKey(e.Key.ToString());
100        listView.Items.RemoveAt(index);
101        e.Key.Changed -= new EventHandler(Item_Changed);
102        e.Value.Changed += new EventHandler(Item_Changed);
103      }
104    }
105
106    private void ItemDictionary_Cleared(object sender, EventArgs e) {
107      Refresh();
108    }
109
110    private void Item_Changed(object sender, EventArgs e) {
111      if (InvokeRequired)
112        Invoke(new EventHandler(Item_Changed), sender, e);
113      else {
114        IItem data = (IItem) sender;
115        foreach (ListViewItem item in listView.Items) {
116          if (item.SubItems[0].Tag == data) {
117            item.SubItems[0].Text = data.ToString();
118            item.Name = data.ToString();
119          } else if (item.SubItems[1].Tag == data) {
120            item.SubItems[1].Text = data.ToString();
121          }
122        }
123      }
124    }
125    #endregion
126
127    #region Update Controls
128    protected override void UpdateControls() {
129      base.UpdateControls();
130      detailsPanel.Controls.Clear();
131      keyPanel.Controls.Clear();
132      detailsPanel.Enabled = false;
133      keyPanel.Enabled = false;
134      removeButton.Enabled = false;
135
136      foreach (ListViewItem item in listView.Items) {
137        ((IItem) item.SubItems[0]).Changed -= new EventHandler(Item_Changed);
138        ((IItem) item.SubItems[1]).Changed -= new EventHandler(Item_Changed);
139      }
140      listView.Items.Clear();
141      foreach (KeyValuePair<K, V> data in ItemDictionary) {
142        ListViewItem item = CreateListViewItem(data.Key, data.Value);
143        listView.Items.Add(item);
144        data.Key.Changed += new EventHandler(Item_Changed);
145        data.Value.Changed += new EventHandler(Item_Changed);
146      }
147    }
148    #endregion
149
150    #region Button Events
151    private void addButton_Click(object sender, EventArgs e) {
152      editKeyValueDialog = new EditKeyValueDialog(typeof(K), typeof(V));
153      if (editKeyValueDialog.ShowDialog(this) == DialogResult.OK) {
154        try {
155          if (!ItemDictionary.ContainsKey((K) editKeyValueDialog.Key)) {
156            ItemDictionary.Add((K) editKeyValueDialog.Key, (V) editKeyValueDialog.Value);
157          }
158        } catch (Exception ex) {
159          Auxiliary.ShowErrorMessageBox(ex);
160        }
161      }
162    }
163
164    private void removeButton_Click(object sender, EventArgs e) {
165      while (listView.SelectedIndices.Count > 0)
166        ItemDictionary.Remove((K) listView.SelectedItems[0].SubItems[0].Tag);
167    }
168    #endregion
169  }
170}
Note: See TracBrowser for help on using the repository browser.