qamp/Qrakhen.Qamp.Editor/InputService.cs

264 lines
6.7 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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