summaryrefslogtreecommitdiff
path: root/src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs')
-rw-r--r--src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs62
1 files changed, 28 insertions, 34 deletions
diff --git a/src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs b/src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs
index 5ca3f47..10a1c51 100644
--- a/src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs
+++ b/src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs
@@ -16,7 +16,7 @@
// Copyright (c) 2012 Ian Cowburn
//
using System;
-using System.Xml;
+using System.IO;
using System.Collections.Generic;
namespace Noddybox.Emulation.Keyboard.Schema
@@ -26,6 +26,12 @@ namespace Noddybox.Emulation.Keyboard.Schema
/// </summary>
public class KeyboardDefinition
{
+ #region Version
+
+ private const string magic = "KEYBDEF1.0";
+
+ #endregion
+
#region Properties
/// <summary>
@@ -35,57 +41,45 @@ namespace Noddybox.Emulation.Keyboard.Schema
#endregion
- #region Xml functions
+ #region Load/Save
/// <summary>
- /// Create the XML for this keyboard definition.
+ /// Save this keybaord definition to the stream.
/// </summary>
- /// <returns>The created XML document.</returns>
- public XmlDocument CreateXML()
+ /// <param name="stream">The stream to write to.</param>
+ public void Save(BinaryWriter stream)
{
- XmlDocument doc = new XmlDocument();
-
- doc.AppendChild(doc.CreateXmlDeclaration("1.0", null, null));
- doc.AppendChild(doc.CreateElement("Keyboard"));
-
+ stream.Write(magic);
+ stream.Write(Definitions.Count);
+
foreach (KeyboardKey k in Definitions)
{
- XmlElement e = doc.CreateElement("Key");
- k.SetElement(e);
- doc.DocumentElement.AppendChild(e);
+ k.Save(stream);
}
-
- return doc;
}
/// <summary>
- /// Create an object from XML.
+ /// Load a keyboard definition from the passed stream.
/// </summary>
- /// <param name="doc">The XML document to load from.</param>
- /// <returns>The created object.</returns>
- public static KeyboardDefinition CreateFromXML(XmlDocument doc)
+ /// <param name="stream">The stream to read from.</param>
+ /// <returns>The KeyboardDefinition object.</returns>
+ public static KeyboardDefinition Load(BinaryReader stream)
{
- KeyboardDefinition definition = new KeyboardDefinition();
-
- if (doc.DocumentElement.Name != "Keyboard")
+ if (stream.ReadString() != magic)
{
- throw new ArgumentException("Root element not a keyboard");
+ throw new ArgumentException("Stream has wrong magic");
}
- foreach (XmlNode n in doc.DocumentElement.ChildNodes)
+ KeyboardDefinition keyboard = new KeyboardDefinition();
+
+ int count = stream.ReadInt32();
+
+ for(int f = 0; f < count ; f++)
{
- if (n is XmlElement)
- {
- XmlElement e = (XmlElement)n;
-
- if (e.Name == "Key")
- {
- definition.Definitions.Add(KeyboardKey.CreateFromElement(e));
- }
- }
+ keyboard.Definitions.Add(KeyboardKey.Load(stream));
}
- return definition;
+ return keyboard;
}
#endregion