DirectOutputR1
DirectOutput framework R1 for virtual pinball cabinets.
Go to:
Overview 
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros Pages
Table.cs
Go to the documentation of this file.
1 using System;
2 using System.IO;
3 using System.Text;
4 using System.Xml.Serialization;
5 using DirectOutput.FX;
6 
7 
11 namespace DirectOutput.Table
12 {
13 
17  public class Table
18  {
19  #region Properties
20 
21 
22 
23 
24  public TableElementList TableElements { get; set; }
25 
32  [XmlIgnoreAttribute]
33  public Pinball Pinball { get; private set; }
34 
35 
36 
37  #region TableName
38  private string _TableName;
43  public string TableName
44  {
45  get { return _TableName; }
46  set
47  {
48  if (_TableName != value)
49  {
50  _TableName = value;
51  if (TableNameChanged != null)
52  {
53  TableNameChanged(this, new EventArgs());
54  }
55  }
56  }
57  }
61  public event EventHandler<EventArgs> TableNameChanged;
62  #endregion
63 
64  #region RomName
65  private string _RomName;
70  [XmlIgnoreAttribute]
71  public string RomName
72  {
73  get { return _RomName; }
74  set
75  {
76  if (_RomName != value)
77  {
78  _RomName = value;
79  if (RomNameChanged != null)
80  {
81  RomNameChanged(this, new EventArgs());
82  }
83  }
84  }
85  }
89  public event EventHandler<EventArgs> RomNameChanged;
90  #endregion
91 
98  [XmlIgnoreAttribute]
99  public string TableFilename { get; set; }
100 
107  [XmlIgnoreAttribute]
108  public string TableConfigurationFilename { get; set; }
109 
110 
111  private bool _AddLedControlConfig=false;
112 
119  public bool AddLedControlConfig
120  {
121  get { return _AddLedControlConfig; }
122  set { _AddLedControlConfig = value; }
123  }
124 
125 
126  private TableConfigSourceEnum _ConfigurationSource=TableConfigSourceEnum.Unknown;
127 
134  [XmlIgnoreAttribute]
135  public TableConfigSourceEnum ConfigurationSource
136  {
137  get { return _ConfigurationSource; }
138  set { _ConfigurationSource = value; }
139  }
140 
141 
142 
143 
144  private EffectList _Effects;
148  public EffectList Effects
149  {
150  get { return _Effects; }
151  set { _Effects = value; }
152  }
153 
154  private AssignedEffectList _AssignedStaticEffects;
162  public AssignedEffectList AssignedStaticEffects
163  {
164  get
165  {
166  return _AssignedStaticEffects;
167  }
168  set
169  {
170  _AssignedStaticEffects = value;
171  }
172  }
173 
174  #endregion
175 
176 
177 
178 
179  public void UpdateTableElement(TableElementData Data)
180  {
181  TableElements.UpdateState(Data.TableElementType, Data.Number, Data.Value);
182  }
183 
184 
188  public void TriggerStaticEffects()
189  {
190  AssignedStaticEffects.Trigger(new TableElementData(TableElementTypeEnum.Unknown,0,1));
191  }
192 
197  public void Init(Pinball Pinball)
198  {
199  this.Pinball = Pinball;
200  Effects.Init(this);
201 
202  TableElements.InitAssignedEffects(this);
203  AssignedStaticEffects.Init(this);
204  }
205 
209  public void Finish()
210  {
211  AssignedStaticEffects.Finish();
212  TableElements.FinishAssignedEffects();
213  Effects.Finish();
214  Pinball = null;
215  }
216 
217 
218  #region Serialization
219 
224  public string GetConfigXml()
225  {
226  string Xml = "";
227  using (MemoryStream ms = new MemoryStream())
228  {
229  new XmlSerializer(typeof(Table)).Serialize(ms, this);
230  ms.Position = 0;
231 
232  using (StreamReader sr = new StreamReader(ms, Encoding.Default))
233  {
234  Xml = sr.ReadToEnd();
235 
236  }
237 
238  }
239  return Xml;
240  }
241 
242 
247  public void SaveConfigXmlFile(string FileName)
248  {
249  GetConfigXml().WriteToFile(FileName);
250  }
251 
252 
258  public static Table GetTableFromConfigXmlFile(string FileName)
259  {
260  string Xml;
261 
262  try
263  {
264  Xml = General.FileReader.ReadFileToString(FileName);
265 
266 
267 
268  }
269  catch (Exception E)
270  {
271  Log.Exception("Could not read Table Config file {0}".Build(FileName), E);
272  throw new Exception("Could not read Table Config file {0}".Build(FileName), E);
273  }
274  return GetTableFromConfigXml(Xml);
275  }
276 
282  public static Table GetTableFromConfigXmlFile(FileInfo TableConfigFile)
283  {
284  return GetTableFromConfigXmlFile(TableConfigFile.FullName);
285  }
286 
292  public static Table GetTableFromConfigXml(string ConfigXml)
293  {
294 
295  try
296  {
297  byte[] xmlBytes = Encoding.Default.GetBytes(ConfigXml);
298  using (MemoryStream ms = new MemoryStream(xmlBytes))
299  {
300  Table T = (Table)new XmlSerializer(typeof(Table)).Deserialize(ms);
301  T.ConfigurationSource = TableConfigSourceEnum.TableConfigurationFile;
302  return T;
303  }
304  }
305  catch (Exception E)
306  {
307 
308  Exception Ex= new Exception("Could not deserialize Table config from XML Data",E);
309  Ex.Data.Add("XMLData", ConfigXml);
310  Log.Exception(Ex);
311  throw Ex;
312  }
313  }
314  #endregion
315 
316 
317 
321  public Table()
322  {
323  Effects = new FX.EffectList();
324  TableElements = new TableElementList();
325  AssignedStaticEffects = new AssignedEffectList();
326  }
327 
328 
329 
330  }
331 }