DirectOutputR1
DirectOutput framework R1 for virtual pinball cabinets.
Go to:
Overview 
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros Pages
CabinetOutputList.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Runtime.Serialization;
6 using DirectOutput.Cab.Out;
7 namespace DirectOutput.Cab
8 {
12  public class CabinetOutputList : IEnumerable<IOutput>
13  {
14  private Cabinet _Cabinet;
15  private OutputControllerList OutputControllers { get { return _Cabinet.OutputControllers; } }
16  #region Enumerator
17 
22  public IEnumerator<IOutput> GetEnumerator()
23  {
24  return new Enumerator(this);
25  }
26 
27  System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
28  {
29  return this.GetEnumerator();
30  }
31 
32 
36  public class Enumerator : IEnumerator<IOutput>
37  {
38  private CabinetOutputList _CabinetOutputList;
39  private int _Index;
40  private IOutput _Current;
41 
43  {
44  this._CabinetOutputList = CabinetOutputList;
45  this._Index = 0;
46  this._Current = null;
47  }
48 
49  public IOutput Current
50  {
51  get { return this._Current; }
52  }
53 
54  public void Dispose()
55  {
56  this.Reset();
57  }
58 
59  object System.Collections.IEnumerator.Current
60  {
61  get { return this.Current; }
62  }
63 
64  public bool MoveNext()
65  {
66 
67  if (_Index < _CabinetOutputList.Count)
68  {
69  _Current = _CabinetOutputList[_Index];
70  _Index++;
71  return true;
72  }
73  return false;
74  }
75 
76  public void Reset()
77  {
78  this._Index = 0;
79  this._Current = null;
80  }
81  }
82  #endregion
83  #region Indexer
84 
92  public IOutput this[string Name]
93  {
94  get
95  {
96  string[] N = Name.Replace("/", "\\").Split('\\');
97  if (N.Length==2)
98  {
99  //it is a path
100  if (OutputControllers.Contains(N[0]))
101  {
102  IOutputController OC = OutputControllers[N[0]];
103  if (OC.Outputs.Contains(N[1]))
104  {
105  return OC.Outputs[N[1]];
106  }
107  }
108  }
109  else
110  {
111  //just a simple name
112  foreach (OutputControllerBase OC in this.OutputControllers)
113  {
114  if (OC.Outputs.Contains(Name))
115  {
116  return (IOutput)OC.Outputs[Name];
117  }
118  }
119  }
120  return null;
121  }
122  }
123 
124 
130  public IOutput this[int Index]
131  {
132  get
133  {
134  int Cnt = this.Count;
135  if (Index < Cnt)
136  {
137  foreach (OutputControllerBase OC in this.OutputControllers)
138  {
139  if (Index < OC.Outputs.Count)
140  {
141  return OC.Outputs[Index];
142  }
143  Cnt -= OC.Outputs.Count;
144  if (Cnt < 0) break;
145  }
146  }
147  throw new Exception("Enumeration index of CabinateOutputList out of range");
148  }
149  }
150  #endregion
151 
152  #region Contains
153 
154 
155 
156 
157 
158  public bool Contains(IOutput Output)
159  {
160  foreach (IOutputController OC in this.OutputControllers)
161  {
162  if (OC.Outputs.Contains(Output)) return true;
163 
164  }
165  return false;
166  }
173  public bool Contains(string Name)
174  {
175  return (this[Name] != null);
176 
177  }
178 
179 
180  #endregion
181 
182 
183  #region Count
184 
185 
186 
187  public int Count
188  {
189  get
190  {
191  int Cnt = 0;
192  foreach (OutputControllerBase OC in OutputControllers)
193  {
194  Cnt += OC.Outputs.Count;
195  }
196  return Cnt;
197  }
198  }
199  #endregion
200 
206  {
207  _Cabinet = Cabinet;
208  }
209 
210 
211  }
212 }