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
}
}