265 lines
6.3 KiB
C#
265 lines
6.3 KiB
C#
using System;
|
||
using System.CodeDom.Compiler;
|
||
using System.Collections.Generic;
|
||
using System.Drawing.Drawing2D;
|
||
using System.Runtime.ConstrainedExecution;
|
||
using System.Security.Policy;
|
||
using System.Text;
|
||
using System.Windows.Controls;
|
||
using System.Windows.Controls.Primitives;
|
||
using System.Windows.Input;
|
||
using System.Xml;
|
||
using System.Xml.Linq;
|
||
using static System.Net.Mime.MediaTypeNames;
|
||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||
|
||
namespace Qrakhen.Qamp.Editor.Input;
|
||
|
||
public interface IInputHandler
|
||
{
|
||
|
||
}
|
||
|
||
public enum ActionId
|
||
{
|
||
None,
|
||
Undo,
|
||
Redo,
|
||
Copy,
|
||
Paste,
|
||
Delete,
|
||
MoveUp,
|
||
MoveDown,
|
||
MoveRight,
|
||
MoveLeft,
|
||
Submit,
|
||
Close
|
||
}
|
||
|
||
public delegate void KeyEventListener();
|
||
|
||
public class InputService : IInputHandler
|
||
{
|
||
public static bool LeftCtrlHeld => Keyboard.IsKeyDown(Key.LeftCtrl);
|
||
public static bool LeftShiftHeld => Keyboard.IsKeyDown(Key.LeftShift);
|
||
public static bool LeftAltHeld => Keyboard.IsKeyDown(Key.LeftAlt);
|
||
public static bool RightCtrlHeld => Keyboard.IsKeyDown(Key.RightCtrl);
|
||
public static bool RightShiftHeld => Keyboard.IsKeyDown(Key.RightShift);
|
||
public static bool RightAltHeld => Keyboard.IsKeyDown(Key.RightAlt);
|
||
public static bool CtrlHeld => LeftCtrlHeld || RightCtrlHeld;
|
||
public static bool ShiftHeld => LeftShiftHeld || RightShiftHeld;
|
||
public static bool AltHeld => LeftAltHeld || RightAltHeld;
|
||
|
||
public static void AddKeyListener(Key key, params Key[] modifiers)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
public static class KeyHelper
|
||
{
|
||
private static readonly Dictionary<Key, char[]> _chars = [];
|
||
|
||
public static char Get(Key key, int modifier = 0)
|
||
{
|
||
return _chars[key][modifier];
|
||
}
|
||
|
||
static KeyHelper()
|
||
{
|
||
for (Key i = Key.A; i <= Key.Z; i++) {
|
||
char c = i.ToString()[^1];
|
||
Add(i, char.ToLower(c), char.ToUpper(c));
|
||
}
|
||
|
||
_chars[Key.Q] = ['q', 'Q', '@'];
|
||
|
||
Add(Key.None);
|
||
Add(Key.Cancel);
|
||
Add(Key.Back);
|
||
Add(Key.Tab, '\t');
|
||
Add(Key.LineFeed);
|
||
Add(Key.Clear);
|
||
Add(Key.Enter, '\n');
|
||
Add(Key.Return);
|
||
Add(Key.Pause);
|
||
Add(Key.Capital);
|
||
Add(Key.CapsLock);
|
||
Add(Key.HangulMode);
|
||
Add(Key.KanaMode);
|
||
Add(Key.JunjaMode);
|
||
Add(Key.FinalMode);
|
||
Add(Key.HanjaMode);
|
||
Add(Key.KanjiMode);
|
||
Add(Key.Escape);
|
||
Add(Key.ImeConvert);
|
||
Add(Key.ImeNonConvert);
|
||
Add(Key.ImeAccept);
|
||
Add(Key.ImeModeChange);
|
||
Add(Key.Space, ' ');
|
||
Add(Key.PageUp);
|
||
Add(Key.Prior);
|
||
Add(Key.Next);
|
||
Add(Key.PageDown);
|
||
Add(Key.End);
|
||
Add(Key.Home);
|
||
Add(Key.Left);
|
||
Add(Key.Up);
|
||
Add(Key.Right);
|
||
Add(Key.Down);
|
||
Add(Key.Select);
|
||
Add(Key.Print);
|
||
Add(Key.Execute);
|
||
Add(Key.PrintScreen);
|
||
Add(Key.Snapshot);
|
||
Add(Key.Insert);
|
||
Add(Key.Delete);
|
||
Add(Key.Help);
|
||
Add(Key.LWin);
|
||
Add(Key.RWin);
|
||
Add(Key.Apps);
|
||
Add(Key.Sleep);
|
||
Add(Key.D0, '0', '=', '}');
|
||
Add(Key.D1, '1', '!');
|
||
Add(Key.D2, '2', '"', '²');
|
||
Add(Key.D3, '3', '§', '³');
|
||
Add(Key.D4, '4', '$');
|
||
Add(Key.D5, '5', '%');
|
||
Add(Key.D6, '6', '&');
|
||
Add(Key.D7, '7', '/', '{');
|
||
Add(Key.D8, '8', '(', '[');
|
||
Add(Key.D9, '9', ')', ']');
|
||
Add(Key.NumPad0, '0');
|
||
Add(Key.NumPad1, '1');
|
||
Add(Key.NumPad2, '2');
|
||
Add(Key.NumPad3, '3');
|
||
Add(Key.NumPad4, '4');
|
||
Add(Key.NumPad5, '5');
|
||
Add(Key.NumPad6, '6');
|
||
Add(Key.NumPad7, '7');
|
||
Add(Key.NumPad8, '8');
|
||
Add(Key.NumPad9, '9');
|
||
Add(Key.Multiply, '*');
|
||
Add(Key.Add, '+');
|
||
Add(Key.Separator, '.');
|
||
Add(Key.Subtract, '-');
|
||
Add(Key.Decimal, ',');
|
||
Add(Key.Divide, '/');
|
||
Add(Key.F1);
|
||
Add(Key.F2);
|
||
Add(Key.F3);
|
||
Add(Key.F4);
|
||
Add(Key.F5);
|
||
Add(Key.F6);
|
||
Add(Key.F7);
|
||
Add(Key.F8);
|
||
Add(Key.F9);
|
||
Add(Key.F10);
|
||
Add(Key.F11);
|
||
Add(Key.F12);
|
||
Add(Key.F13);
|
||
Add(Key.F14);
|
||
Add(Key.F15);
|
||
Add(Key.F16);
|
||
Add(Key.F17);
|
||
Add(Key.F18);
|
||
Add(Key.F19);
|
||
Add(Key.F20);
|
||
Add(Key.F21);
|
||
Add(Key.F22);
|
||
Add(Key.F23);
|
||
Add(Key.F24);
|
||
Add(Key.NumLock);
|
||
Add(Key.Scroll);
|
||
Add(Key.LeftShift);
|
||
Add(Key.RightShift);
|
||
Add(Key.LeftCtrl);
|
||
Add(Key.RightCtrl);
|
||
Add(Key.LeftAlt);
|
||
Add(Key.RightAlt);
|
||
Add(Key.BrowserBack);
|
||
Add(Key.BrowserForward);
|
||
Add(Key.BrowserRefresh);
|
||
Add(Key.BrowserStop);
|
||
Add(Key.BrowserSearch);
|
||
Add(Key.BrowserFavorites);
|
||
Add(Key.BrowserHome);
|
||
Add(Key.VolumeMute);
|
||
Add(Key.VolumeDown);
|
||
Add(Key.VolumeUp);
|
||
Add(Key.MediaNextTrack);
|
||
Add(Key.MediaPreviousTrack);
|
||
Add(Key.MediaStop);
|
||
Add(Key.MediaPlayPause);
|
||
Add(Key.LaunchMail);
|
||
Add(Key.SelectMedia);
|
||
Add(Key.LaunchApplication1);
|
||
Add(Key.LaunchApplication2);
|
||
Add(Key.Oem1, 'ü', 'Ü');
|
||
Add(Key.OemSemicolon, ',', ';');
|
||
Add(Key.OemPlus, '+', '*', '~');
|
||
Add(Key.OemComma, ',', ';');
|
||
Add(Key.OemMinus, '-', '_');
|
||
Add(Key.OemPeriod, '.', ':');
|
||
Add(Key.Oem2);
|
||
Add(Key.OemQuestion, '#', '\'');
|
||
Add(Key.Oem3, 'ö', 'Ö');
|
||
Add(Key.OemTilde);
|
||
Add(Key.AbntC1);
|
||
Add(Key.AbntC2);
|
||
Add(Key.Oem4);
|
||
Add(Key.OemOpenBrackets);
|
||
Add(Key.Oem5, '^', '°');
|
||
Add(Key.OemPipe);
|
||
Add(Key.Oem6, '´', '`');
|
||
Add(Key.OemCloseBrackets);
|
||
Add(Key.Oem7, 'ß', '?');
|
||
Add(Key.OemQuotes, 'ä', 'Ä');
|
||
Add(Key.Oem8);
|
||
Add(Key.Oem102);
|
||
Add(Key.OemBackslash, '<', '>', '|');
|
||
Add(Key.ImeProcessed);
|
||
Add(Key.System);
|
||
Add(Key.DbeAlphanumeric);
|
||
Add(Key.OemAttn);
|
||
Add(Key.DbeKatakana);
|
||
Add(Key.OemFinish);
|
||
Add(Key.DbeHiragana);
|
||
Add(Key.OemCopy);
|
||
Add(Key.DbeSbcsChar);
|
||
Add(Key.OemAuto);
|
||
Add(Key.DbeDbcsChar);
|
||
Add(Key.OemEnlw);
|
||
Add(Key.DbeRoman);
|
||
Add(Key.OemBackTab);
|
||
Add(Key.Attn);
|
||
Add(Key.DbeNoRoman);
|
||
Add(Key.CrSel);
|
||
Add(Key.DbeEnterWordRegisterMode);
|
||
Add(Key.DbeEnterImeConfigureMode);
|
||
Add(Key.ExSel);
|
||
Add(Key.DbeFlushString);
|
||
Add(Key.EraseEof);
|
||
Add(Key.DbeCodeInput);
|
||
Add(Key.Play);
|
||
Add(Key.DbeNoCodeInput);
|
||
Add(Key.Zoom);
|
||
Add(Key.DbeDetermineString);
|
||
Add(Key.NoName);
|
||
Add(Key.DbeEnterDialogConversionMode);
|
||
Add(Key.Pa1);
|
||
Add(Key.OemClear);
|
||
Add(Key.DeadCharProcessed);
|
||
|
||
}
|
||
|
||
private static void Add(Key key, params char[] chars)
|
||
{
|
||
char[] padded = new char[3];
|
||
for (int i = 0; i < chars.Length; i++)
|
||
padded[i] = chars[i];
|
||
if (_chars.ContainsKey(key) && _chars[key][0] > 0)
|
||
return;
|
||
_chars[key] = padded;
|
||
}
|
||
} |