using System;
using System.Collections;namespace ICSharpCode.Core.AddIns.Conditions
{
[Serializable()]
public class ConditionCollection : CollectionBase {

public ConditionCollection() {
}

public ConditionCollection(ConditionCollection value) {
this.AddRange(value);
}

public ConditionFailedAction GetCurrentConditionFailedAction(object caller)
{
ConditionFailedAction action = ConditionFailedAction.Nothing;
foreach (ICondition condition in this) {
if (!condition.IsValid(caller)) {
if (condition.Action == ConditionFailedAction.Disable) {
action = ConditionFailedAction.Disable;
} else {
return action = ConditionFailedAction.Exclude;
}
}
}
return action;
}


public ConditionCollection(ICondition[] value) {
this.AddRange(value);
}

public ICondition this[int index] {
get {
return ((ICondition)(List[index]));
}
set {
List[index] = value;
}
}

public int Add(ICondition value) {
return List.Add(value);
}

public void AddRange(ICondition[] value) {
for (int i = 0; (i < value.Length); i = (i + 1)) {
this.Add(value[i]);
}
}

public void AddRange(ConditionCollection value) {
for (int i = 0; (i < value.Count); i = (i + 1)) {
this.Add(value[i]);
}
}

public bool Contains(ICondition value) {
return List.Contains(value);
}

public void CopyTo(ICondition[] array, int index) {
List.CopyTo(array, index);
}

public int IndexOf(ICondition value) {
return List.IndexOf(value);
}

public void Insert(int index, ICondition value) {
List.Insert(index, value);
}

public new IConditionEnumerator GetEnumerator() {
return new IConditionEnumerator(this);
}

public void Remove(ICondition value) {
List.Remove(value);
}

public class IConditionEnumerator : object, IEnumerator {

private IEnumerator baseEnumerator;

private IEnumerable temp;

public IConditionEnumerator(ConditionCollection mappings) {
this.temp = ((IEnumerable)(mappings));
this.baseEnumerator = temp.GetEnumerator();
}

public ICondition Current {
get {
return ((ICondition)(baseEnumerator.Current));
}
}

object IEnumerator.Current {
get {
return baseEnumerator.Current;
}
}

public bool MoveNext() {
return baseEnumerator.MoveNext();
}

bool IEnumerator.MoveNext() {
return baseEnumerator.MoveNext();
}

public void Reset() {
baseEnumerator.Reset();
}

void IEnumerator.Reset() {
baseEnumerator.Reset();
}
}
}
}