Show More
Commit Description:
Tweak UI appearance.
Commit Description:
Tweak UI appearance.
References:
File last commit:
Show/Diff file:
Action:
FNA/src/CurveKeyCollection.cs
227 lines | 5.2 KiB | text/x-csharp | CSharpLexer
227 lines | 5.2 KiB | text/x-csharp | CSharpLexer
r0 | #region License | |||
/* FNA - XNA4 Reimplementation for Desktop Platforms | ||||
* Copyright 2009-2020 Ethan Lee and the MonoGame Team | ||||
* | ||||
* Released under the Microsoft Public License. | ||||
* See LICENSE for details. | ||||
*/ | ||||
/* Derived from code by the Mono.Xna Team (Copyright 2006). | ||||
* Released under the MIT License. See monoxna.LICENSE for details. | ||||
*/ | ||||
#endregion | ||||
#region Using Statements | ||||
using System; | ||||
using System.Collections; | ||||
using System.Collections.Generic; | ||||
#endregion | ||||
namespace Microsoft.Xna.Framework | ||||
{ | ||||
/// <summary> | ||||
/// The collection of the <see cref="CurveKey"/> elements and a part of the <see cref="Curve"/> class. | ||||
/// </summary> | ||||
public class CurveKeyCollection : ICollection<CurveKey>, IEnumerable<CurveKey>, IEnumerable | ||||
{ | ||||
#region Public Properties | ||||
/// <summary> | ||||
/// Returns the count of keys in this collection. | ||||
/// </summary> | ||||
public int Count | ||||
{ | ||||
get | ||||
{ | ||||
return innerlist.Count; | ||||
} | ||||
} | ||||
/// <summary> | ||||
/// Returns false because it is not a read-only collection. | ||||
/// </summary> | ||||
public bool IsReadOnly | ||||
{ | ||||
get | ||||
{ | ||||
return this.isReadOnly; | ||||
} | ||||
} | ||||
/// <summary> | ||||
/// Indexer. | ||||
/// </summary> | ||||
/// <param name="index">The index of key in this collection.</param> | ||||
/// <returns><see cref="CurveKey"/> at <paramref name="index"/> position.</returns> | ||||
public CurveKey this[int index] | ||||
{ | ||||
get | ||||
{ | ||||
return innerlist[index]; | ||||
} | ||||
set | ||||
{ | ||||
if (value == null) | ||||
{ | ||||
throw new ArgumentNullException("value"); | ||||
} | ||||
if (index >= innerlist.Count) | ||||
{ | ||||
throw new IndexOutOfRangeException(); | ||||
} | ||||
if (MathHelper.WithinEpsilon(innerlist[index].Position, value.Position)) | ||||
{ | ||||
innerlist[index] = value; | ||||
} | ||||
else | ||||
{ | ||||
innerlist.RemoveAt(index); | ||||
innerlist.Add(value); | ||||
} | ||||
} | ||||
} | ||||
#endregion | ||||
#region Private Fields | ||||
private bool isReadOnly = false; | ||||
private List<CurveKey> innerlist; | ||||
#endregion | ||||
#region Public Constructors | ||||
/// <summary> | ||||
/// Creates a new instance of <see cref="CurveKeyCollection"/> class. | ||||
/// </summary> | ||||
public CurveKeyCollection() | ||||
{ | ||||
innerlist = new List<CurveKey>(); | ||||
} | ||||
#endregion | ||||
#region Public Methods | ||||
/// <summary> | ||||
/// Adds a key to this collection. | ||||
/// </summary> | ||||
/// <param name="item">New key for the collection.</param> | ||||
/// <exception cref="ArgumentNullException">Throws if <paramref name="item"/> is null.</exception> | ||||
/// <remarks>The new key would be added respectively to a position of that key and the position of other keys.</remarks> | ||||
public void Add(CurveKey item) | ||||
{ | ||||
if (item == null) | ||||
{ | ||||
throw new ArgumentNullException("item"); | ||||
} | ||||
if (innerlist.Count == 0) | ||||
{ | ||||
this.innerlist.Add(item); | ||||
return; | ||||
} | ||||
for (int i = 0; i < this.innerlist.Count; i += 1) | ||||
{ | ||||
if (item.Position < this.innerlist[i].Position) | ||||
{ | ||||
this.innerlist.Insert(i, item); | ||||
return; | ||||
} | ||||
} | ||||
this.innerlist.Add(item); | ||||
} | ||||
/// <summary> | ||||
/// Removes all keys from this collection. | ||||
/// </summary> | ||||
public void Clear() | ||||
{ | ||||
innerlist.Clear(); | ||||
} | ||||
/// <summary> | ||||
/// Creates a copy of this collection. | ||||
/// </summary> | ||||
/// <returns>A copy of this collection.</returns> | ||||
public CurveKeyCollection Clone() | ||||
{ | ||||
CurveKeyCollection ckc = new CurveKeyCollection(); | ||||
foreach (CurveKey key in this.innerlist) | ||||
{ | ||||
ckc.Add(key); | ||||
} | ||||
return ckc; | ||||
} | ||||
/// <summary> | ||||
/// Determines whether this collection contains a specific key. | ||||
/// </summary> | ||||
/// <param name="item">The key to locate in this collection.</param> | ||||
/// <returns><c>true</c> if the key is found; <c>false</c> otherwise.</returns> | ||||
public bool Contains(CurveKey item) | ||||
{ | ||||
return innerlist.Contains(item); | ||||
} | ||||
/// <summary> | ||||
/// Copies the keys of this collection to an array, starting at the array index provided. | ||||
/// </summary> | ||||
/// <param name="array">Destination array where elements will be copied.</param> | ||||
/// <param name="arrayIndex">The zero-based index in the array to start copying from.</param> | ||||
public void CopyTo(CurveKey[] array, int arrayIndex) | ||||
{ | ||||
innerlist.CopyTo(array, arrayIndex); | ||||
} | ||||
/// <summary> | ||||
/// Returns an enumerator that iterates through the collection. | ||||
/// </summary> | ||||
/// <returns>An enumerator for the <see cref="CurveKeyCollection"/>.</returns> | ||||
public IEnumerator<CurveKey> GetEnumerator() | ||||
{ | ||||
return innerlist.GetEnumerator(); | ||||
} | ||||
/// <summary> | ||||
/// Finds element in the collection and returns its index. | ||||
/// </summary> | ||||
/// <param name="item">Element for the search.</param> | ||||
/// <returns>Index of the element; or -1 if item is not found.</returns> | ||||
public int IndexOf(CurveKey item) | ||||
{ | ||||
return innerlist.IndexOf(item); | ||||
} | ||||
/// <summary> | ||||
/// Removes specific element. | ||||
/// </summary> | ||||
/// <param name="item">The element</param> | ||||
/// <returns><c>true</c> if item is successfully removed; <c>false</c> otherwise. This method also returns <c>false</c> if item was not found.</returns> | ||||
public bool Remove(CurveKey item) | ||||
{ | ||||
return innerlist.Remove(item); | ||||
} | ||||
/// <summary> | ||||
/// Removes element at the specified index. | ||||
/// </summary> | ||||
/// <param name="index">The index which element will be removed.</param> | ||||
public void RemoveAt(int index) | ||||
{ | ||||
innerlist.RemoveAt(index); | ||||
} | ||||
IEnumerator IEnumerable.GetEnumerator() | ||||
{ | ||||
return innerlist.GetEnumerator(); | ||||
} | ||||
#endregion | ||||
} | ||||
} | ||||