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 _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; } }