From ddf746b2a7c9527b78ca63825c598f3c780c83d2 Mon Sep 17 00:00:00 2001 From: Ian C Date: Tue, 24 Apr 2012 22:06:28 +0000 Subject: Added schema classes and initial projects. --- .../KeyboardDefinition.cs | 102 +++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs (limited to 'src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs') diff --git a/src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs b/src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs new file mode 100644 index 0000000..5ca3f47 --- /dev/null +++ b/src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs @@ -0,0 +1,102 @@ +// This file is part of the Noddybox.Emulation C# suite. +// +// Noddybox.Emulation is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Noddybox.Emulation is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Noddybox.Emulation. If not, see . +// +// Copyright (c) 2012 Ian Cowburn +// +using System; +using System.Xml; +using System.Collections.Generic; + +namespace Noddybox.Emulation.Keyboard.Schema +{ + /// + /// Provides the schema for the keyboard definition. + /// + public class KeyboardDefinition + { + #region Properties + + /// + /// Get the list of keyboard key defintiions. + /// + public List Definitions {get; private set;} + + #endregion + + #region Xml functions + + /// + /// Create the XML for this keyboard definition. + /// + /// The created XML document. + public XmlDocument CreateXML() + { + XmlDocument doc = new XmlDocument(); + + doc.AppendChild(doc.CreateXmlDeclaration("1.0", null, null)); + doc.AppendChild(doc.CreateElement("Keyboard")); + + foreach (KeyboardKey k in Definitions) + { + XmlElement e = doc.CreateElement("Key"); + k.SetElement(e); + doc.DocumentElement.AppendChild(e); + } + + return doc; + } + + /// + /// Create an object from XML. + /// + /// The XML document to load from. + /// The created object. + public static KeyboardDefinition CreateFromXML(XmlDocument doc) + { + KeyboardDefinition definition = new KeyboardDefinition(); + + if (doc.DocumentElement.Name != "Keyboard") + { + throw new ArgumentException("Root element not a keyboard"); + } + + foreach (XmlNode n in doc.DocumentElement.ChildNodes) + { + if (n is XmlElement) + { + XmlElement e = (XmlElement)n; + + if (e.Name == "Key") + { + definition.Definitions.Add(KeyboardKey.CreateFromElement(e)); + } + } + } + + return definition; + } + + #endregion + + #region Constructors + + public KeyboardDefinition() + { + Definitions = new List(); + } + + #endregion + } +} -- cgit v1.2.3