space-pew/SpacePew/KeyboardHelper.cs

664 lines
9.1 KiB
C#
Raw Normal View History

2015-12-04 10:23:49 +01:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Input;
namespace SpacePew
{
[Flags]
public enum KbModifiers
{
None = 0,
Ctrl = 1,
Shift = 2,
Alt = 4,
}
public static class KeyboardHelper
{
public static bool TreadNumpadAsNumeric = true;
private static readonly string[] _unShiftedKeysString = new string[256]
{
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
" ",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"",
"",
"",
"",
"",
"",
"",
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
"",
"",
"",
"",
"",
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"*",
"+",
"",
"-",
".",
"/",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
";",
"=",
",",
"-",
".",
"/",
"`",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"[",
"\\",
"]",
"'",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
""
};
private static string[] shiftedkeysstring = new string[256]
{
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
" ",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
")",
"!",
"@",
"#",
"$",
"%",
"^",
"&",
"*",
"(",
"",
"",
"",
"",
"",
"",
"",
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"*",
"+",
"",
"-",
".",
"/",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
":",
"+",
"<",
"_",
">",
"?",
"~",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"{",
"|",
"}",
"\"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
""
};
static KeyboardHelper()
{
}
public static bool IsKeyAlpha(Keys k)
{
return k >= Keys.A && k <= Keys.Z;
}
public static bool IsKeyNumber(Keys k)
{
return k >= Keys.D0 && k <= Keys.D9;
}
public static bool IsKeyNumberpad(Keys k)
{
return k >= Keys.NumPad0 && k <= Keys.NumPad9;
}
public static bool IsKeyNumeric(Keys k)
{
return KeyboardHelper.IsKeyNumber(k) || KeyboardHelper.TreadNumpadAsNumeric && KeyboardHelper.IsKeyNumberpad(k);
}
public static bool IsKeyAlphanumeric(Keys k)
{
return KeyboardHelper.IsKeyAlpha(k) || KeyboardHelper.IsKeyNumeric(k);
}
public static bool IsFkey(Keys k)
{
return k >= Keys.F1 && k <= Keys.F12;
}
public static bool IsKeySpace(Keys k)
{
return k == Keys.Space;
}
public static bool IsShift(Keys k)
{
return k == Keys.LeftShift || k == Keys.RightShift;
}
public static bool IsCtrl(Keys k)
{
return k == Keys.LeftControl || k == Keys.RightControl;
}
public static bool IsAlt(Keys k)
{
return k == Keys.LeftAlt || k == Keys.RightAlt;
}
public static bool IsShiftDown(KbModifiers m)
{
return (KbModifiers.Shift & m) == KbModifiers.Shift;
}
public static bool IsCtrlDown(KbModifiers m)
{
return (KbModifiers.Ctrl & m) == KbModifiers.Ctrl;
}
public static bool IsAltDown(KbModifiers m)
{
return (KbModifiers.Alt & m) == KbModifiers.Alt;
}
public static bool IsMod(Keys k)
{
return KeyboardHelper.IsShift(k) || KeyboardHelper.IsAlt(k) || KeyboardHelper.IsCtrl(k);
}
public static KbModifiers IsShiftM(Keys k)
{
return k == Keys.LeftShift || k == Keys.RightShift ? KbModifiers.Shift : KbModifiers.None;
}
public static KbModifiers IsCtrlM(Keys k)
{
return k == Keys.LeftControl || k == Keys.RightControl ? KbModifiers.Ctrl : KbModifiers.None;
}
public static KbModifiers IsAltM(Keys k)
{
return k == Keys.LeftAlt || k == Keys.RightAlt ? KbModifiers.Alt : KbModifiers.None;
}
public static string ToPrintableString(Keys k, KbModifiers m)
{
return KeyboardHelper.ToPrintableString(k, m, true, true, true, false);
}
public static string ToPrintableString(Keys k, KbModifiers m, bool selectspecials)
{
return KeyboardHelper.ToPrintableString(k, m, selectspecials, true, true, false);
}
public static string ToPrintableString(Keys k, KbModifiers m, bool selectspecials, bool selectalphas, bool selectnumerics)
{
return KeyboardHelper.ToPrintableString(k, m, selectspecials, selectalphas, selectnumerics, false);
}
public static string ToPrintableString(Keys k, KbModifiers m, bool selectspecials, bool selectalphas, bool selectnumerics, bool suppressspace)
{
if (KeyboardHelper.IsKeySpace(k) && !suppressspace)
return " ";
if (KeyboardHelper.IsKeyAlpha(k) && selectalphas || KeyboardHelper.IsKeyNumber(k) && selectnumerics || KeyboardHelper.TreadNumpadAsNumeric && KeyboardHelper.IsKeyNumberpad(k) && selectnumerics || selectspecials && (!KeyboardHelper.IsKeyAlpha(k) && !KeyboardHelper.IsKeyNumeric(k) || KeyboardHelper.IsKeyNumber(k) && KeyboardHelper.IsShiftDown(m)))
{
if (!KeyboardHelper.IsShiftDown(m))
return KeyboardHelper._unShiftedKeysString[k.GetHashCode()];
if (selectspecials || !KeyboardHelper.IsKeyNumber(k))
return KeyboardHelper.shiftedkeysstring[k.GetHashCode()];
}
return "";
}
public static KbModifiers GetModifiers(KeyboardState ks)
{
return ks.GetPressedKeys().Aggregate(KbModifiers.None, (current, k) => current | KeyboardHelper.IsShiftM(k) | KeyboardHelper.IsAltM(k) | KeyboardHelper.IsCtrlM(k));
}
}
}