天津23维预案
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

237 lines
5.7 KiB

using UnityEngine;
using System.Collections.Generic;
using System.Collections;
using System;
namespace UIWidgets {
/// <summary>
/// Dialog actions.
/// Key - button name.
/// Value - action on click.
/// </summary>
public class DialogActions : IDictionary<string,Func<bool>> {
List<string> keys = new List<string>();
List<Func<bool>> values = new List<Func<bool>>();
List<KeyValuePair<string,Func<bool>>> elements = new List<KeyValuePair<string,Func<bool>>>();
/// <summary>
/// Gets the number of elements contained in the dictionary.
/// </summary>
/// <value>The count.</value>
public int Count {
get {
return elements.Count;
}
}
/// <summary>
/// Gets a value indicating whether this instance is read only.
/// </summary>
/// <value><c>true</c> if this instance is read only; otherwise, <c>false</c>.</value>
public bool IsReadOnly {
get {
return false;
}
}
/// <summary>
/// Gets or sets the element with the specified key.
/// </summary>
/// <returns>The element with the specified key.</returns>
/// <param name="key">The key of the element to get or set.</param>
public Func<bool> this[string key] {
get {
var index = keys.IndexOf(key);
return elements[index].Value;
}
set {
var index = keys.IndexOf(key);
elements[index] = new KeyValuePair<string, Func<bool>>(key, value);
}
}
/// <summary>
/// Gets an ICollection<string> containing the keys of the dictionary.
/// </summary>
/// <value>The keys.</value>
public ICollection<string> Keys {
get {
return elements.Convert<KeyValuePair<string,Func<bool>>,string>(GetKey);
}
}
string GetKey(KeyValuePair<string,Func<bool>> item)
{
return item.Key;
}
/// <summary>
/// Gets an ICollection<Func<bool>> containing the values in the dictionary.
/// </summary>
/// <value>The values.</value>
public ICollection<Func<bool>> Values {
get {
return elements.Convert<KeyValuePair<string,Func<bool>>,Func<bool>>(GetValue);
}
}
Func<bool> GetValue(KeyValuePair<string, Func<bool>> item)
{
return item.Value;
}
/// <summary>
/// Add the specified item.
/// </summary>
/// <param name="item">Item.</param>
public void Add(KeyValuePair<string,Func<bool>> item)
{
Add(item.Key, item.Value);
}
/// <summary>
/// Add the specified key and value.
/// </summary>
/// <param name="key">Key.</param>
/// <param name="value">Value.</param>
public void Add(string key, Func<bool> 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<string, Func<bool>>(key, value));
}
/// <summary>
/// Removes all items.
/// </summary>
public void Clear()
{
keys.Clear();
values.Clear();
elements.Clear();
}
/// <summary>
/// Determines whether contains a specific value.
/// </summary>
/// <param name="item">Item.</param>
public bool Contains(KeyValuePair<string,Func<bool>> item)
{
return elements.Contains(item);
}
/// <summary>
/// Determines whether the IDictionary<TKey,TValue> contains an element with the specified key.
/// </summary>
/// <param name="key">Key.</param>
/// <returns><c>true</c>, if key was containsed, <c>false</c> otherwise.</returns>
public bool ContainsKey(string key)
{
if (key==null)
{
throw new ArgumentNullException("key", "Key is null.");
}
return keys.Contains(key);
}
/// <summary>
/// Copies the elements of the KeyValuePair<string,Func<bool>> to an Array, starting at a particular Array index.
/// </summary>
/// <param name="array">Array.</param>
/// <param name="arrayIndex">Array index.</param>
public void CopyTo(KeyValuePair<string,Func<bool>>[] array, int arrayIndex)
{
elements.CopyTo(array, arrayIndex);
}
/// <summary>
/// Returns an enumerator that iterates through the collection.
/// </summary>
public IEnumerator<KeyValuePair<string,Func<bool>>> GetEnumerator()
{
return elements.GetEnumerator();
}
/// <summary>
/// Returns an enumerator that iterates through the collection.
/// </summary>
IEnumerator IEnumerable.GetEnumerator()
{
return elements.GetEnumerator();
}
/// <summary>
/// Removes the first occurrence of a specific object from the dictionary.
/// </summary>
/// <param name="item">Item.</param>
public bool Remove(KeyValuePair<string,Func<bool>> item)
{
if (!elements.Contains(item))
{
return false;
}
var index = elements.IndexOf(item);
keys.RemoveAt(index);
values.RemoveAt(index);
elements.RemoveAt(index);
return true;
}
/// <summary>
/// Removes the element with the specified key from the dictionary.
/// </summary>
/// <param name="key">Key.</param>
public bool Remove(string key)
{
if (key==null)
{
throw new ArgumentNullException("key", "Key is null.");
}
if (!ContainsKey(key))
{
return false;
}
var index = keys.IndexOf(key);
keys.RemoveAt(index);
values.RemoveAt(index);
elements.RemoveAt(index);
return true;
}
/// <summary>
/// Gets the value associated with the specified key.
/// </summary>
/// <returns><c>true</c>, if get value was tryed, <c>false</c> otherwise.</returns>
/// <param name="key">Key.</param>
/// <param name="value">Value.</param>
public bool TryGetValue(string key, out Func<bool> value)
{
if (key==null)
{
throw new ArgumentNullException("key", "Key is null.");
}
if (!ContainsKey(key))
{
value = default(Func<bool>);
return false;
}
value = values[keys.IndexOf(key)];
return true;
}
}
}