init
This commit is contained in:
84
DataPRO/DataPRO.Core/Settings/SettingsChangedEventArgs.cs
Normal file
84
DataPRO/DataPRO.Core/Settings/SettingsChangedEventArgs.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
using System;
|
||||
|
||||
namespace DataPro.Core.Settings
|
||||
{
|
||||
/// <summary>
|
||||
/// Event arguments describing change to settings collection
|
||||
/// </summary>
|
||||
/// <typeparam name="TKey">key type used in collection</typeparam>
|
||||
/// <typeparam name="TItem">value type used in collection</typeparam>
|
||||
public class SettingsChangedEventArgs<TKey, TItem> : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <param name="changeType">type of scenario change</param>
|
||||
public SettingsChangedEventArgs(ChangeSettingType changeType)
|
||||
{
|
||||
ChangeType = changeType;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <param name="changeType">change type</param>
|
||||
/// <param name="key">key type used in collection</param>
|
||||
public SettingsChangedEventArgs(ChangeSettingType changeType, TKey key)
|
||||
{
|
||||
ChangeType = changeType;
|
||||
Key = key;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <param name="changeType">change type</param>
|
||||
/// <param name="key">key type used in collection</param>
|
||||
/// <param name="item">value type used in collection</param>
|
||||
public SettingsChangedEventArgs(ChangeSettingType changeType, TKey key, TItem item)
|
||||
{
|
||||
ChangeType = changeType;
|
||||
Key = key;
|
||||
Item = item;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns type of scenario change
|
||||
/// </summary>
|
||||
public ChangeSettingType ChangeType
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// key associated with changed setting
|
||||
/// </summary>
|
||||
public TKey Key
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Value associated with changed settting
|
||||
/// </summary>
|
||||
public TItem Item
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Type of settings changed
|
||||
/// </summary>
|
||||
public enum ChangeSettingType
|
||||
{
|
||||
Add = 0,
|
||||
Remove = 1,
|
||||
Modified = 3,
|
||||
ClearAll = 4
|
||||
}
|
||||
|
||||
}
|
||||
241
DataPRO/DataPRO.Core/Settings/SettingsCollection.cs
Normal file
241
DataPRO/DataPRO.Core/Settings/SettingsCollection.cs
Normal file
@@ -0,0 +1,241 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user