using System; using System.Collections; using System.Collections.Generic; namespace DataPro.Core.Settings { /// /// Implements a dictionary with events when an item is changed /// /// key type /// value type /// /// /// {01/22/2014}. {RCD}. {Initial Version} /// /// public class SettingsCollection : IDictionary { /// /// Event fired when an item changes in dictionary /// public event EventHandler> CollectionItemPropertyChanged; /// /// List of stored items /// private readonly Dictionary _items = new Dictionary(); #region IDictionary /// /// Add item /// /// key /// value public void Add(TKey key, TItem value) { _items.Add(key, value); FireItemChangedEvent(ChangeSettingType.Add, key, value); } /// /// Returns true if item contains key /// /// key /// true if key exists public bool ContainsKey(TKey key) { return _items.ContainsKey(key); } /// /// Returns all keys in collection /// public ICollection Keys { get { return _items.Keys; } } /// /// Removes key /// /// key /// true if key removed public bool Remove(TKey key) { var res = _items.Remove(key); if (res) FireItemChangedEvent(ChangeSettingType.Remove, key); return res; } /// /// Trys to get specified value /// /// key /// value if key exists /// true if key exists; false if it doesn't exist public bool TryGetValue(TKey key, out TItem value) { return _items.TryGetValue(key, out value); } /// /// List of values in collection /// public ICollection Values { get { return _items.Values; } } /// /// Gets/sets item in collection (overloads [] operator) /// /// key /// item in collection public TItem this[TKey key] { get { return _items[key]; } set { _items[key] = value; FireItemChangedEvent(ChangeSettingType.Add, key, value); } } /// /// Adds new item /// /// new item to add public void Add(KeyValuePair item) { _items.Add(item.Key, item.Value); FireItemChangedEvent(ChangeSettingType.Add, item.Key, item.Value); } /// /// Clears entire collection /// public void Clear() { _items.Clear(); FireItemChangedEvent(ChangeSettingType.ClearAll); } /// /// Returns true if item is in collection /// /// item to check /// true if item exists public bool Contains(KeyValuePair item) { return _items.ContainsKey(item.Key) && _items.ContainsValue(item.Value); } /// /// Copys items to array /// /// /// public void CopyTo(KeyValuePair[] array, int arrayIndex) { throw new NotImplementedException(); } /// /// Returns count of items /// public int Count { get { return _items.Count; } } /// /// Returns true if readonly collection /// public bool IsReadOnly { get { return false; } } /// /// Removes specified item /// /// item to remove /// true if item removed public bool Remove(KeyValuePair item) { var res = _items.Remove(item.Key); if (res) FireItemChangedEvent(ChangeSettingType.Remove, item.Key); return res; } /// /// Return enumerator for collection /// /// enumerator public IEnumerator> GetEnumerator() { return _items.GetEnumerator(); } /// /// Return enumerator for collection /// /// enumerator IEnumerator IEnumerable.GetEnumerator() { return _items.GetEnumerator(); } #endregion #region Private methods /// /// Fires collection change event /// /// type of change private void FireItemChangedEvent(ChangeSettingType changeType) { if (CollectionItemPropertyChanged != null) { CollectionItemPropertyChanged(this, new SettingsChangedEventArgs(changeType)); } } /// /// Fires collection change event /// /// type of change /// key private void FireItemChangedEvent(ChangeSettingType changeType, TKey key) { if (CollectionItemPropertyChanged != null) { CollectionItemPropertyChanged(this, new SettingsChangedEventArgs(changeType, key)); } } /// /// Fires collection change event /// /// type of change /// key /// item private void FireItemChangedEvent(ChangeSettingType changeType, TKey key, TItem item) { if (CollectionItemPropertyChanged != null) { CollectionItemPropertyChanged(this, new SettingsChangedEventArgs(changeType, key, item)); } } #endregion } }