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. --- .../KeyboardKey.cs | 112 +++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 src/Noddybox.Emulation.Keyboard.Schema/KeyboardKey.cs (limited to 'src/Noddybox.Emulation.Keyboard.Schema/KeyboardKey.cs') 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