space-pew/Neoforce/KeyboardLayout.cs
Magnus von Wachenfeldt 2a9d8ce416 move to github
2015-12-04 10:23:49 +01:00

462 lines
14 KiB
C#
Raw Blame History

////////////////////////////////////////////////////////////////
// //
// Neoforce Controls //
// //
////////////////////////////////////////////////////////////////
// //
// File: KeyboardLayout.cs //
// //
// Version: 0.7 //
// //
// Date: 11/09/2010 //
// //
// Author: Tom Shane //
// //
////////////////////////////////////////////////////////////////
// //
// Copyright (c) by Tom Shane //
// //
////////////////////////////////////////////////////////////////
/*****
* Made Changes to the German Input, based on Kergos, input.
*****/
#region //// Using /////////////
//////////////////////////////////////////////////////////////////////////////
using Microsoft.Xna.Framework.Input;
using System.Globalization;
using System.Collections.Generic;
using System;
using System.Text;
//////////////////////////////////////////////////////////////////////////////
#endregion
namespace TomShane.Neoforce.Controls
{
public class KeyboardLayout
{
#region //// Fields ////////////
//////////////////////////////////////////////////////////////////////////
private string name = "English";
public List<int> LayoutList = new List<int>();
//////////////////////////////////////////////////////////////////////////
#endregion
#region //// Properties ////////
//////////////////////////////////////////////////////////////////////////
public virtual string Name
{
get { return name; }
set { name = value; }
}
//////////////////////////////////////////////////////////////////////////
#endregion
#region //// Constructors //////
//////////////////////////////////////////////////////////////////////////
public KeyboardLayout()
{
LayoutList.Add(1033);
}
//////////////////////////////////////////////////////////////////////////
#endregion
#region //// Methods ///////////
////////////////////////////////////////////////////////////////////////////
public virtual string GetKey(KeyEventArgs args)
{
string ret = "";
if (args.Caps && !args.Shift) ret = KeyToString(args).ToUpper();
else if (!args.Caps && args.Shift) ret = KeyToString(args).ToUpper();
else if (args.Caps && args.Shift) ret = KeyToString(args).ToLower();
else if (!args.Caps && !args.Shift) ret = KeyToString(args).ToLower();
return ret;
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
protected virtual string KeyToString(KeyEventArgs args)
{
switch (args.Key)
{
case Keys.A:
return "a";
case Keys.B:
return "b";
case Keys.C:
return "c";
case Keys.D:
return "d";
case Keys.E:
return "e";
case Keys.F:
return "f";
case Keys.G:
return "g";
case Keys.H:
return "h";
case Keys.I:
return "i";
case Keys.J:
return "j";
case Keys.K:
return "k";
case Keys.L:
return "l";
case Keys.M:
return "m";
case Keys.N:
return "n";
case Keys.O:
return "o";
case Keys.P:
return "p";
case Keys.Q:
return "q";
case Keys.R:
return "r";
case Keys.S:
return "s";
case Keys.T:
return "t";
case Keys.U:
return "u";
case Keys.V:
return "v";
case Keys.W:
return "w";
case Keys.X:
return "x";
case Keys.Y:
return "y";
case Keys.Z:
return "z";
case Keys.D0:
return (args.Shift) ? ")" : "0";
case Keys.D1:
return (args.Shift) ? "!" : "1";
case Keys.D2:
return (args.Shift) ? "@" : "2";
case Keys.D3:
return (args.Shift) ? "#" : "3";
case Keys.D4:
return (args.Shift) ? "$" : "4";
case Keys.D5:
return (args.Shift) ? "%" : "5";
case Keys.D6:
return (args.Shift) ? "^" : "6";
case Keys.D7:
return (args.Shift) ? "&" : "7";
case Keys.D8:
return (args.Shift) ? "*" : "8";
case Keys.D9:
return (args.Shift) ? "(" : "9";
case Keys.OemPlus:
return (args.Shift) ? "+" : "=";
case Keys.OemMinus:
return (args.Shift) ? "_" : "-";
case Keys.OemOpenBrackets:
return (args.Shift) ? "{" : "[";
case Keys.OemCloseBrackets:
return (args.Shift) ? "}" : "]";
case Keys.OemQuestion:
return (args.Shift) ? "?" : "/";
case Keys.OemPeriod:
return (args.Shift) ? ">" : ".";
case Keys.OemComma:
return (args.Shift) ? "<" : ",";
case Keys.OemPipe:
return (args.Shift) ? "|" : "\\";
case Keys.Space:
return " ";
case Keys.OemSemicolon:
return (args.Shift) ? ":" : ";";
case Keys.OemQuotes:
return (args.Shift) ? "\"" : "'";
case Keys.OemTilde:
return (args.Shift) ? "~" : "`";
case Keys.NumPad0:
return (args.Shift) ? "" : "0";
case Keys.NumPad1:
return (args.Shift) ? "" : "1";
case Keys.NumPad2:
return (args.Shift) ? "" : "2";
case Keys.NumPad3:
return (args.Shift) ? "" : "3";
case Keys.NumPad4:
return (args.Shift) ? "" : "4";
case Keys.NumPad5:
return (args.Shift) ? "" : "5";
case Keys.NumPad6:
return (args.Shift) ? "" : "6";
case Keys.NumPad7:
return (args.Shift) ? "" : "7";
case Keys.NumPad8:
return (args.Shift) ? "" : "8";
case Keys.NumPad9:
return (args.Shift) ? "" : "9";
case Keys.Decimal:
return (args.Shift) ? "" : ".";
case Keys.Divide:
return (args.Shift) ? "/" : "/";
case Keys.Multiply:
return (args.Shift) ? "*" : "*";
case Keys.Subtract:
return (args.Shift) ? "-" : "-";
case Keys.Add:
return (args.Shift) ? "+" : "+";
default:
return "";
}
}
////////////////////////////////////////////////////////////////////////////
#endregion
}
public class CzechKeyboardLayout: KeyboardLayout
{
#region //// Constructors //////
//////////////////////////////////////////////////////////////////////////
public CzechKeyboardLayout()
{
Name = "Czech";
LayoutList.Clear();
LayoutList.Add(1029);
}
//////////////////////////////////////////////////////////////////////////
#endregion
#region //// Methods ///////////
////////////////////////////////////////////////////////////////////////////
protected override string KeyToString(KeyEventArgs args)
{
switch (args.Key)
{
case Keys.D0:
return (args.Shift) ? "0" : "<22>";
case Keys.D1:
return (args.Shift) ? "1" : "+";
case Keys.D2:
return (args.Shift) ? "2" : "<22>";
case Keys.D3:
return (args.Shift) ? "3" : "<22>";
case Keys.D4:
return (args.Shift) ? "4" : "<22>";
case Keys.D5:
return (args.Shift) ? "5" : "<22>";
case Keys.D6:
return (args.Shift) ? "6" : "<22>";
case Keys.D7:
return (args.Shift) ? "7" : "<22>";
case Keys.D8:
return (args.Shift) ? "8" : "<22>";
case Keys.D9:
return (args.Shift) ? "9" : "<22>";
case Keys.OemPlus:
return (args.Shift) ? "<22>" : "<22>";
case Keys.OemMinus:
return (args.Shift) ? "%" : "=";
case Keys.OemOpenBrackets:
return (args.Shift) ? "/" : "<22>";
case Keys.OemCloseBrackets:
return (args.Shift) ? "(" : ")";
case Keys.OemQuestion:
return (args.Shift) ? "_" : "-";
case Keys.OemPeriod:
return (args.Shift) ? ":" : ".";
case Keys.OemComma:
return (args.Shift) ? "?" : ",";
case Keys.OemPipe:
return (args.Shift) ? "'" : "<22>";
case Keys.Space:
return " ";
case Keys.OemSemicolon:
return (args.Shift) ? "\"" : "<22>";
case Keys.OemQuotes:
return (args.Shift) ? "!" : "<22>";
case Keys.OemTilde:
return (args.Shift) ? "<22>" : ";";
case Keys.Decimal:
return (args.Shift) ? "" : ",";
default:
return base.KeyToString(args);
}
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
#endregion
}
public class GermanKeyboardLayout : KeyboardLayout
{
#region //// Constructors //////
//////////////////////////////////////////////////////////////////////////
public GermanKeyboardLayout()
{
Name = "German";
LayoutList.Clear();
LayoutList.Add(1031);
}
//////////////////////////////////////////////////////////////////////////
#endregion
#region //// Methods ///////////
////////////////////////////////////////////////////////////////////////////
protected override string KeyToString(KeyEventArgs args)
{
switch (args.Key)
{
case Keys.D0:
return (args.Shift) ? "=" : "0";
case Keys.D1:
return (args.Shift) ? "!" : "1";
case Keys.D2:
return (args.Shift) ? "\"": "2";
case Keys.D3:
return (args.Shift) ? "<22>" : "3";
case Keys.D4:
return (args.Shift) ? "$" : "4";
case Keys.D5:
return (args.Shift) ? "%" : "5";
case Keys.D6:
return (args.Shift) ? "&" : "6";
case Keys.D7:
return (args.Shift) ? "/" : "7";
case Keys.D8:
return (args.Shift) ? "(" : "8";
case Keys.D9:
return (args.Shift) ? ")" : "9";
case Keys.OemBackslash:
return (args.Shift) ? ">" : "<";
case Keys.OemPlus:
return (args.Shift) ? "*" : "+";
case Keys.OemMinus:
return (args.Shift) ? "_" : "-";
case Keys.OemOpenBrackets:
return (args.Shift) ? "?" : "<22>";
case Keys.OemCloseBrackets:
return (args.Shift) ? "`" : "<22>";
case Keys.OemQuestion:
return (args.Shift) ? "'" : "#";
case Keys.OemPeriod:
return (args.Shift) ? ":" : ".";
case Keys.OemComma:
return (args.Shift) ? ";" : ",";
case Keys.OemPipe:
return (args.Shift) ? "<22>" : "^";
case Keys.Space:
return " ";
case Keys.OemSemicolon:
return (args.Shift) ? "<22>" : "<22>";
case Keys.OemQuotes:
return (args.Shift) ? "<22>" : "<22>";
case Keys.OemTilde:
return (args.Shift) ? "<22>" : "<22>";
case Keys.Decimal:
return (args.Shift) ? "" : ".";
default:
return base.KeyToString(args);
}
}
////////////////////////////////////////////////////////////////////////////
#endregion
}
public class PolishKeyboardLayout: KeyboardLayout
{
#region //// Constructors //////
//////////////////////////////////////////////////////////////////////////
public PolishKeyboardLayout()
{
Name = "Polish";
LayoutList.Clear();
LayoutList.Add(1045);
}
//////////////////////////////////////////////////////////////////////////
#endregion
#region //// Methods ///////////
////////////////////////////////////////////////////////////////////////////
protected override string KeyToString(KeyEventArgs args)
{
if (args.Alt)
{
switch (args.Key)
{
case Keys.A:
return (args.Shift) ? "<22>" : "<22>";
case Keys.C:
return (args.Shift) ? "<22>" : "<22>";
case Keys.E:
return (args.Shift) ? "<22>" : "<22>";
case Keys.L:
return (args.Shift) ? "<22>" : "<22>";
case Keys.N:
return (args.Shift) ? "<22>" : "<22>";
case Keys.O:
return (args.Shift) ? "<22>" : "<22>";
case Keys.S:
return (args.Shift) ? "<22>" : "<22>";
case Keys.X:
return (args.Shift) ? "<22>" : "<22>";
case Keys.Z:
return (args.Shift) ? "<22>" : "<22>";
}
}
return base.KeyToString(args);
}
////////////////////////////////////////////////////////////////////////////
#endregion
}
}