using System; using System.Collections; using System.Collections.Generic; namespace UIWidgets { public class DialogActions : IDictionary>, IEnumerable, ICollection>>, IEnumerable>> { private List keys = new List(); private List> values = new List>(); private List>> elements = new List>>(); public int Count { get { return elements.Count; } } public bool IsReadOnly { get { return false; } } public Func this[string key] { get { int index = keys.IndexOf(key); return elements[index].Value; } set { int index = keys.IndexOf(key); elements[index] = new KeyValuePair>(key, value); } } public ICollection Keys { get { return elements.Convert(GetKey); } } public ICollection> Values { get { return elements.Convert(GetValue); } } private string GetKey(KeyValuePair> item) { return item.Key; } private Func GetValue(KeyValuePair> item) { return item.Value; } public void Add(KeyValuePair> item) { Add(item.Key, item.Value); } public void Add(string key, Func value) { if (key == null) { throw new ArgumentNullException("key", "Key is null."); } if (ContainsKey(key)) { throw new ArgumentException(string.Format("An element with the same key ({0}) already exists.", key)); } keys.Add(key); values.Add(value); elements.Add(new KeyValuePair>(key, value)); } public void Clear() { keys.Clear(); values.Clear(); elements.Clear(); } public bool Contains(KeyValuePair> item) { return elements.Contains(item); } public bool ContainsKey(string key) { if (key == null) { throw new ArgumentNullException("key", "Key is null."); } return keys.Contains(key); } public void CopyTo(KeyValuePair>[] array, int arrayIndex) { elements.CopyTo(array, arrayIndex); } public IEnumerator>> GetEnumerator() { return elements.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return elements.GetEnumerator(); } public bool Remove(KeyValuePair> item) { if (!elements.Contains(item)) { return false; } int index = elements.IndexOf(item); keys.RemoveAt(index); values.RemoveAt(index); elements.RemoveAt(index); return true; } public bool Remove(string key) { if (key == null) { throw new ArgumentNullException("key", "Key is null."); } if (!ContainsKey(key)) { return false; } int index = keys.IndexOf(key); keys.RemoveAt(index); values.RemoveAt(index); elements.RemoveAt(index); return true; } public bool TryGetValue(string key, out Func value) { if (key == null) { throw new ArgumentNullException("key", "Key is null."); } if (!ContainsKey(key)) { value = null; return false; } value = values[keys.IndexOf(key)]; return true; } } }