Files
DP44/DataPRO/DataPRO.Core/Settings/SettingsCollection.cs

242 lines
7.3 KiB
C#
Raw Permalink Normal View History

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