// 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 } }