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 +++++++++++++++++++ .../KeyboardKey.cs | 112 +++++++++++++++++++++ 2 files changed, 214 insertions(+) create mode 100644 src/Noddybox.Emulation.Keyboard.Schema/KeyboardDefinition.cs create mode 100644 src/Noddybox.Emulation.Keyboard.Schema/KeyboardKey.cs (limited to 'src') 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 + } +} diff --git a/src/Noddybox.Emulation.Keyboard.Schema/KeyboardKey.cs b/src/Noddybox.Emulation.Keyboard.Schema/KeyboardKey.cs new file mode 100644 index 0000000..54f2efe --- /dev/null +++ b/src/Noddybox.Emulation.Keyboard.Schema/KeyboardKey.cs @@ -0,0 +1,112 @@ +// 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; + +namespace Noddybox.Emulation.Keyboard.Schema +{ + /// + /// Provides an element for the keyboard definition. + /// + public class KeyboardKey + { + #region Properties + + /// + /// The symbol the key will be represented by in an enumerated type. + /// Type checking will only be performed by the actual keyboard implementation + /// where the value will be used as a key (the other sort). + /// + public string KeySymbol {get; set;} + + /// + /// The X-offset of the hit box + /// + public int X { get; set; } + + /// + /// The Y-offset of the hit box + /// + public int Y { get; set; } + + /// + /// The width of the hit box + /// + public int Width { get; set; } + + /// + /// The height of the hit box + /// + public int Height { get; set; } + + /// + /// Whether the key is sticky (stays pressed until pressed again). + /// + public bool Sticky { get; set; } + + #endregion + + #region Xml members + + /// + /// Set up an XmlElement with the contents of this object. + /// + /// The document the element is to be attached to. + public void SetElement(XmlElement element) + { + element.SetAttribute("KeySymbol", KeySymbol); + element.SetAttribute("X", X.ToString()); + element.SetAttribute("Y", Y.ToString()); + element.SetAttribute("Width", Width.ToString()); + element.SetAttribute("Height", Height.ToString()); + element.SetAttribute("Sticky", Sticky.ToString()); + } + + /// + /// Create an instance of this object from an XmlElement. + /// + /// The document the element is to be attached to. + /// The XML element. + public static KeyboardKey CreateFromElement(XmlElement element) + { + XmlAttribute symbol = element.Attributes["KeySymbol"]; + XmlAttribute x = element.Attributes["X"]; + XmlAttribute y = element.Attributes["Y"]; + XmlAttribute width = element.Attributes["Width"]; + XmlAttribute height = element.Attributes["Height"]; + XmlAttribute sticky = element.Attributes["Sticky"]; + + if (symbol == null || x == null || y == null || width == null || height == null || sticky == null) + { + throw new ArgumentException("Element does not contain expected attributes"); + } + + return new KeyboardKey() + { + KeySymbol = symbol.Value, + X = Convert.ToInt32(x.Value), + Y = Convert.ToInt32(y.Value), + Width = Convert.ToInt32(width.Value), + Height = Convert.ToInt32(height.Value), + Sticky = Convert.ToBoolean(sticky.Value) + }; + } + + #endregion + } +} -- cgit v1.2.3