From c75c3bbbffd0044c4dd2c5d580699b87ed6cfa87 Mon Sep 17 00:00:00 2001 From: Vlas Zyrianov Date: Tue, 17 Sep 2019 14:19:20 -0400 Subject: [PATCH 1/6] Implement prototype of supporting translations from other languages --- Bukva/Bukva/KeyPressListener.cs | 33 ++++++++++++++++++++------------- Bukva/Bukva/Win32.cs | 6 ++++++ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/Bukva/Bukva/KeyPressListener.cs b/Bukva/Bukva/KeyPressListener.cs index b86381f..a955fcc 100644 --- a/Bukva/Bukva/KeyPressListener.cs +++ b/Bukva/Bukva/KeyPressListener.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; +using System.Text; using System.Threading; using System.Windows.Forms; using System.Windows.Input; @@ -24,14 +25,17 @@ protected void RaiseKeyPressedEvent(string keyPressed) class LowLevelKeyboardHook : KeyPressListener , IDisposable { - private Win32.CallBackHandler callBackHandler; private IntPtr hookID = IntPtr.Zero; private bool trap; + private byte[] keyboardState; + private StringBuilder converterBuffer; + public LowLevelKeyboardHook() { + callBackHandler = HookCallback; trap = false; HookKeyboard(); @@ -51,6 +55,19 @@ public void Dispose() Win32.UnhookWindowsHookEx(hookID); } + private string VirtualKeyToString(int virtualKeyCode) + { + keyboardState = new byte[256]; + if (Control.ModifierKeys.HasFlag(Keys.Shift)) + keyboardState[(int) Keys.ShiftKey] = 0xff; + //else + //keyboardState[(int) Keys.ShiftKey] = 0x0; + + converterBuffer = new StringBuilder(256); + Win32.ToUnicode((uint)virtualKeyCode, 0, keyboardState, converterBuffer, 256, 0); + return converterBuffer.ToString(); + } + private bool userKey = true; private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { @@ -62,19 +79,9 @@ private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) if (nCode >= 0 && (wParam == (IntPtr)Win32.WM_KEYDOWN || wParam == (IntPtr)Win32.WM_SYSKEYDOWN) && Listen) { int virtualKeyCode = Marshal.ReadInt32(lParam); - Console.WriteLine(virtualKeyCode.ToString()); - Key pressedKey = KeyInterop.KeyFromVirtualKey(virtualKeyCode); - string key; - - if (Control.ModifierKeys.HasFlag(Keys.Shift)) - { - key = pressedKey.ToString().ToUpper(); - } - else - { - key = pressedKey.ToString().ToLower(); - } + string key = VirtualKeyToString(virtualKeyCode); + Console.WriteLine(key); if (key.ToUpper() == "OEMPERIOD") { diff --git a/Bukva/Bukva/Win32.cs b/Bukva/Bukva/Win32.cs index 3b9ab0d..c6a0dbc 100644 --- a/Bukva/Bukva/Win32.cs +++ b/Bukva/Bukva/Win32.cs @@ -1,5 +1,6 @@ using System; using System.Runtime.InteropServices; +using System.Text; namespace Bukva { @@ -25,5 +26,10 @@ public class Win32 public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); public delegate IntPtr CallBackHandler(int nCode, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll")] + public static extern int ToUnicode(uint virtualKeyCode, uint scanCode, byte[] keyboardState, + [Out, MarshalAs(UnmanagedType.LPWStr, SizeConst = 64)] StringBuilder receivingBuffer, + int bufferSize, uint flags); } } From 2bf3bf59a0572f0cf6a44bdf236d45f4d42cac1a Mon Sep 17 00:00:00 2001 From: Vlas Zyrianov Date: Tue, 24 Sep 2019 16:32:59 -0400 Subject: [PATCH 2/6] Prototype support for Russian to English --- Languages/ru2en.buk | 65 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Languages/ru2en.buk diff --git a/Languages/ru2en.buk b/Languages/ru2en.buk new file mode 100644 index 0000000..bdaa6aa --- /dev/null +++ b/Languages/ru2en.buk @@ -0,0 +1,65 @@ +б,b +а,a +ц,c +д,d +е,e +ф,f +г,g +х,h +и,i +й,j +к,k +л,l +м,m +н,n +о,o +п,p +р,r +с,s +т,t +у,u +в,v +щ,w +ы,y +з,z +ya,YA +э,e +ё,yo +zh,ж +ch,ч +sh,ш +yu,ю +ju,ю +ye,э + +А,A +Б,B +Ц,C +Д,D +Е,E +Ф,F +Г,G +Х,H +И,I +Й,J +К,K +Л,L +М,M +Н,N +О,O +П,P +Я,YA +Р,R +С,S +Т,T +У,U +В,V +Щ,W +Ы,Y +З,Z +Э,EH +Ё,YO +Ж,ZH +Ч,CH +Ш,SH +Ю,YU \ No newline at end of file From ff79b869218d027d8e0750ed323d0a4c114c7323 Mon Sep 17 00:00:00 2001 From: vzyrianov Date: Wed, 12 Aug 2020 19:31:08 -0400 Subject: [PATCH 3/6] Fix letters not being replaced on backspace and use scrlk as on/off key --- Bukva/Bukva/Bukva.csproj | 5 +- Bukva/Bukva/KeyPressListener.cs | 14 +- Bukva/Bukva/KeyTranslator/IKeyTranslator.cs | 14 ++ .../KeyStateKeyTranslator.cs} | 14 +- .../KeyTranslator/LowLevelKeyTranslator.cs | 146 ++++++++++++++++++ Bukva/Bukva/MainWindow.xaml.cs | 4 +- Languages/miscellaneous/Franktur.buk | 53 +++++++ 7 files changed, 237 insertions(+), 13 deletions(-) create mode 100644 Bukva/Bukva/KeyTranslator/IKeyTranslator.cs rename Bukva/Bukva/{KeyTranslator.cs => KeyTranslator/KeyStateKeyTranslator.cs} (94%) create mode 100644 Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs create mode 100644 Languages/miscellaneous/Franktur.buk diff --git a/Bukva/Bukva/Bukva.csproj b/Bukva/Bukva/Bukva.csproj index 381e987..f643a0c 100644 --- a/Bukva/Bukva/Bukva.csproj +++ b/Bukva/Bukva/Bukva.csproj @@ -56,6 +56,9 @@ MSBuild:Compile Designer + + + MSBuild:Compile @@ -67,7 +70,6 @@ - MainWindow.xaml @@ -100,5 +102,6 @@ + \ No newline at end of file diff --git a/Bukva/Bukva/KeyPressListener.cs b/Bukva/Bukva/KeyPressListener.cs index a955fcc..ac9e76f 100644 --- a/Bukva/Bukva/KeyPressListener.cs +++ b/Bukva/Bukva/KeyPressListener.cs @@ -4,6 +4,7 @@ using System.Runtime.InteropServices; using System.Text; using System.Threading; +using System.Threading.Tasks; using System.Windows.Forms; using System.Windows.Input; @@ -16,7 +17,12 @@ abstract class KeyPressListener protected void RaiseKeyPressedEvent(string keyPressed) { - OnKeyPressed(this, new KeyPressedEventArgs(keyPressed)); + OnKeyPressed(this, new KeyPressedEventArgs(keyPressed, false)); + } + + protected void RaiseKeyPressedEvent(string keyPressed, bool scrollLockPressed) + { + OnKeyPressed(this, new KeyPressedEventArgs(keyPressed, scrollLockPressed)); } public abstract void DeleteLastKeyPressed(); @@ -88,7 +94,7 @@ private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) key = "."; } - RaiseKeyPressedEvent(key); + RaiseKeyPressedEvent(key, virtualKeyCode == 145 ? true : false); if(trap) { trap = false; @@ -187,10 +193,12 @@ public override void EmitBackspace() public class KeyPressedEventArgs : EventArgs { public string KeyPressed { get; private set; } + public bool ScrollLockPressed { get; private set; } - public KeyPressedEventArgs(string key) + public KeyPressedEventArgs(string key, bool scrollLockPressed) { KeyPressed = key; + ScrollLockPressed = scrollLockPressed; } } } \ No newline at end of file diff --git a/Bukva/Bukva/KeyTranslator/IKeyTranslator.cs b/Bukva/Bukva/KeyTranslator/IKeyTranslator.cs new file mode 100644 index 0000000..7f9d177 --- /dev/null +++ b/Bukva/Bukva/KeyTranslator/IKeyTranslator.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bukva +{ + interface IKeyTranslator + { + void Start(); + void Stop(); + } +} diff --git a/Bukva/Bukva/KeyTranslator.cs b/Bukva/Bukva/KeyTranslator/KeyStateKeyTranslator.cs similarity index 94% rename from Bukva/Bukva/KeyTranslator.cs rename to Bukva/Bukva/KeyTranslator/KeyStateKeyTranslator.cs index 2dbe604..fe61de5 100644 --- a/Bukva/Bukva/KeyTranslator.cs +++ b/Bukva/Bukva/KeyTranslator/KeyStateKeyTranslator.cs @@ -1,25 +1,23 @@ using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; using System.Windows.Forms; namespace Bukva { - class KeyTranslator + class KeyStateKeyTranslator { FixedLengthQueue buffer; LetterTable letterTable; KeyPressListener keyPressListener; - public KeyTranslator(LetterTable letterTable) + public KeyStateKeyTranslator(LetterTable letterTable) { buffer = new FixedLengthQueue(3); buffer.Clear(""); this.letterTable = letterTable; - + //keyPressListener = new KeyStateListener(); - keyPressListener = new LowLevelKeyboardHook(); + keyPressListener = new KeyStateListener(); keyPressListener.Listen = false; keyPressListener.OnKeyPressed += OnKeyPressed; } @@ -42,7 +40,9 @@ private void OnKeyPressed(object sender, KeyPressedEventArgs e) if (Control.ModifierKeys.HasFlag(Keys.Control) || key == "none") return; - if (key == "back") + Console.WriteLine(key); + + if (key == "\b" || key == "back") { HandleUndo(); } diff --git a/Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs b/Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs new file mode 100644 index 0000000..87d6957 --- /dev/null +++ b/Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs @@ -0,0 +1,146 @@ +using System; +using System.Windows.Forms; + +namespace Bukva +{ + class LowLevelKeyTranslator : IKeyTranslator + { + FixedLengthQueue buffer; + LetterTable letterTable; + + KeyPressListener keyPressListener; + + public bool Translate { get; set; } + + public LowLevelKeyTranslator(LetterTable letterTable) + { + buffer = new FixedLengthQueue(3); + buffer.Clear(""); + this.letterTable = letterTable; + + //keyPressListener = new KeyStateListener(); + keyPressListener = new LowLevelKeyboardHook(); + keyPressListener.Listen = false; + keyPressListener.OnKeyPressed += OnKeyPressed; + } + + public void Start() + { + keyPressListener.Listen = true; + } + + public void Stop() + { + keyPressListener.Listen = false; + buffer.Clear(""); //What if OnKeyPressed is being executed at this time? + } + + private void OnKeyPressed(object sender, KeyPressedEventArgs e) + { + string key = e.KeyPressed; + + if (e.ScrollLockPressed) + { + Translate = !Translate; + return; + } + + if (!Translate) + return; + + + if (Control.ModifierKeys.HasFlag(Keys.Control) || key == "none" || key == "") + return; + + Console.WriteLine(key); + + if (key == "\b" || key == "back") + { + HandleUndo(); + } + else + { + HandleKeyPress(key); + } + + buffer.Insert(key); + } + + private void HandleKeyPress(string key) + { + if (letterTable.ContainsKey(buffer.At(1) + buffer.At(2) + key)) + { + if (letterTable.ContainsKey(buffer.At(2)) || letterTable.ContainsKey(buffer.At(1) + buffer.At(2))) + { + keyPressListener.EmitBackspace(); //Replace previous translation with new one, if it existed + } + + if (!letterTable.ContainsKey(buffer.At(1) + buffer.At(2))) + keyPressListener.EmitBackspace(); + + keyPressListener.DeleteLastKeyPressed(); + + SendKeys.SendWait(letterTable[buffer.At(1) + buffer.At(2) + key]); + } + else if (letterTable.ContainsKey(buffer.At(2) + key)) + { + keyPressListener.DeleteLastKeyPressed(); + + if (letterTable.ContainsKey(buffer.At(2))) + keyPressListener.EmitBackspace(); //Replace previous translation with new one, if it existed + + + SendKeys.SendWait(letterTable[buffer.At(2) + key]); + } + else if (letterTable.ContainsKey(key)) + { + keyPressListener.DeleteLastKeyPressed(); + + SendKeys.SendWait(letterTable[key]); + } + } + + private void HandleUndo() + { + keyPressListener.EmitBackspace(); + keyPressListener.DeleteLastKeyPressed(); + + if (letterTable.ContainsKey(buffer.At(0) + buffer.At(1) + buffer.At(2))) + { + if (letterTable.ContainsKey(buffer.At(0) + buffer.At(1))) + { + SendKeys.SendWait(letterTable[buffer.At(0) + buffer.At(1)]); + + if (letterTable.ContainsKey(buffer.At(2))) + SendKeys.SendWait(letterTable[buffer.At(2)]); + else + SendKeys.SendWait(buffer.At(2)); + } + else + { + if (letterTable.ContainsKey(buffer.At(0))) + SendKeys.SendWait(letterTable[buffer.At(0)]); + else + SendKeys.SendWait(buffer.At(0)); + + + if (letterTable.ContainsKey(buffer.At(1))) + SendKeys.SendWait(letterTable[buffer.At(1)]); + else + SendKeys.SendWait(buffer.At(1)); + + + if (letterTable.ContainsKey(buffer.At(2))) + SendKeys.SendWait(letterTable[buffer.At(2)]); + else + SendKeys.SendWait(buffer.At(2)); + } + } + else if (letterTable.ContainsKey(buffer.At(1) + buffer.At(2))) + { + SendKeys.SendWait(letterTable[buffer.At(1)]); + SendKeys.SendWait(letterTable[buffer.At(2)]); + } + } + } +} diff --git a/Bukva/Bukva/MainWindow.xaml.cs b/Bukva/Bukva/MainWindow.xaml.cs index b2faa98..0d8268a 100644 --- a/Bukva/Bukva/MainWindow.xaml.cs +++ b/Bukva/Bukva/MainWindow.xaml.cs @@ -13,7 +13,7 @@ namespace Bukva /// public partial class MainWindow : Window { - KeyTranslator keyTranslator; + IKeyTranslator keyTranslator; LetterTable letterTable; bool Enabled; @@ -24,7 +24,7 @@ public MainWindow() Enabled = false; letterTable = new LetterTable(); - keyTranslator = new KeyTranslator(letterTable); + keyTranslator = new LowLevelKeyTranslator(letterTable); StatusLabel.Content = "Language: \n" + letterTable.Filename; } diff --git a/Languages/miscellaneous/Franktur.buk b/Languages/miscellaneous/Franktur.buk new file mode 100644 index 0000000..cc63d4c --- /dev/null +++ b/Languages/miscellaneous/Franktur.buk @@ -0,0 +1,53 @@ +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,𝔷 + +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,ℨ \ No newline at end of file From dcca0443f8e2a2cfa9937c8bd3b48d37e96ea8e2 Mon Sep 17 00:00:00 2001 From: vzyrianov Date: Wed, 12 Aug 2020 19:33:51 -0400 Subject: [PATCH 4/6] Fix misspelling --- Languages/miscellaneous/{Franktur.buk => fraktur.buk} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Languages/miscellaneous/{Franktur.buk => fraktur.buk} (100%) diff --git a/Languages/miscellaneous/Franktur.buk b/Languages/miscellaneous/fraktur.buk similarity index 100% rename from Languages/miscellaneous/Franktur.buk rename to Languages/miscellaneous/fraktur.buk From e98ef850a8052461a77512f904fb1fe51d958bd6 Mon Sep 17 00:00:00 2001 From: vzyrianov Date: Wed, 12 Aug 2020 21:33:12 -0400 Subject: [PATCH 5/6] Improve scroll lock key funcitonality --- .../KeyTranslator/LowLevelKeyTranslator.cs | 11 ---- Bukva/Bukva/MainWindow.xaml.cs | 45 ++++++++++++---- Languages/miscellaneous/fraktur.buk | 53 ------------------- 3 files changed, 36 insertions(+), 73 deletions(-) delete mode 100644 Languages/miscellaneous/fraktur.buk diff --git a/Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs b/Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs index 87d6957..1b41925 100644 --- a/Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs +++ b/Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs @@ -10,8 +10,6 @@ class LowLevelKeyTranslator : IKeyTranslator KeyPressListener keyPressListener; - public bool Translate { get; set; } - public LowLevelKeyTranslator(LetterTable letterTable) { buffer = new FixedLengthQueue(3); @@ -38,15 +36,6 @@ public void Stop() private void OnKeyPressed(object sender, KeyPressedEventArgs e) { string key = e.KeyPressed; - - if (e.ScrollLockPressed) - { - Translate = !Translate; - return; - } - - if (!Translate) - return; if (Control.ModifierKeys.HasFlag(Keys.Control) || key == "none" || key == "") diff --git a/Bukva/Bukva/MainWindow.xaml.cs b/Bukva/Bukva/MainWindow.xaml.cs index 0d8268a..8d40bda 100644 --- a/Bukva/Bukva/MainWindow.xaml.cs +++ b/Bukva/Bukva/MainWindow.xaml.cs @@ -16,6 +16,7 @@ public partial class MainWindow : Window IKeyTranslator keyTranslator; LetterTable letterTable; bool Enabled; + LowLevelKeyboardHook scrollLockListener; public MainWindow() { @@ -26,25 +27,51 @@ public MainWindow() letterTable = new LetterTable(); keyTranslator = new LowLevelKeyTranslator(letterTable); StatusLabel.Content = "Language: \n" + letterTable.Filename; - + + scrollLockListener = new LowLevelKeyboardHook(); + scrollLockListener.Listen = true; + scrollLockListener.OnKeyPressed += OnKeyPressed; + } private void ToggleButtonClick(object sender, RoutedEventArgs e) + { + Toggle(); + } + + private void Toggle() { if (!Enabled) { - keyTranslator.Start(); - ToggleButton.Background = Brushes.DeepSkyBlue; - ToggleButton.Content = "On"; - Enabled = true; + Enable(); } else { - keyTranslator.Stop(); - ToggleButton.Background = Brushes.SteelBlue; - ToggleButton.Content = "Off"; - Enabled = false; + Disable(); } + + } + + private void Enable() + { + keyTranslator.Start(); + ToggleButton.Background = Brushes.DeepSkyBlue; + ToggleButton.Content = "On"; + Enabled = true; + } + + private void Disable() + { + keyTranslator.Stop(); + ToggleButton.Background = Brushes.SteelBlue; + ToggleButton.Content = "Off"; + Enabled = false; + } + + private void OnKeyPressed(object sender, KeyPressedEventArgs e) + { + if (e.ScrollLockPressed) + Toggle(); } } } diff --git a/Languages/miscellaneous/fraktur.buk b/Languages/miscellaneous/fraktur.buk deleted file mode 100644 index cc63d4c..0000000 --- a/Languages/miscellaneous/fraktur.buk +++ /dev/null @@ -1,53 +0,0 @@ -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,𝔷 - -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,ℨ \ No newline at end of file From ccbc5f1593522ced90557cc8cfb25c8cbe38606c Mon Sep 17 00:00:00 2001 From: vzyrianov Date: Tue, 22 Dec 2020 01:40:27 -0500 Subject: [PATCH 6/6] Experimental package manager --- .gitignore | 1 + Bukva/Bukva/Bukva.csproj | 7 ++ Bukva/Bukva/KeyPressListener.cs | 1 + Bukva/Bukva/KeyTranslator/IKeyTranslator.cs | 1 + .../KeyTranslator/KeyStateKeyTranslator.cs | 6 + .../KeyTranslator/LowLevelKeyTranslator.cs | 5 + Bukva/Bukva/LetterTable.cs | 14 ++- Bukva/Bukva/MainWindow.xaml | 9 +- Bukva/Bukva/MainWindow.xaml.cs | 79 +++++++++++- Bukva/Bukva/PackageManager.xaml | 20 +++ Bukva/Bukva/PackageManager.xaml.cs | 114 ++++++++++++++++++ 11 files changed, 246 insertions(+), 11 deletions(-) create mode 100644 Bukva/Bukva/PackageManager.xaml create mode 100644 Bukva/Bukva/PackageManager.xaml.cs diff --git a/.gitignore b/.gitignore index fbdc4d0..f40418b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. +.idea/ # User-specific files *.suo diff --git a/Bukva/Bukva/Bukva.csproj b/Bukva/Bukva/Bukva.csproj index f643a0c..5ac26d1 100644 --- a/Bukva/Bukva/Bukva.csproj +++ b/Bukva/Bukva/Bukva.csproj @@ -59,6 +59,9 @@ + + PackageManager.xaml + MSBuild:Compile @@ -75,6 +78,10 @@ MainWindow.xaml Code + + Designer + MSBuild:Compile + diff --git a/Bukva/Bukva/KeyPressListener.cs b/Bukva/Bukva/KeyPressListener.cs index ac9e76f..0cf61cc 100644 --- a/Bukva/Bukva/KeyPressListener.cs +++ b/Bukva/Bukva/KeyPressListener.cs @@ -111,6 +111,7 @@ private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) public override void DeleteLastKeyPressed() { trap = true; + //Backspace(); } public override void EmitBackspace() diff --git a/Bukva/Bukva/KeyTranslator/IKeyTranslator.cs b/Bukva/Bukva/KeyTranslator/IKeyTranslator.cs index 7f9d177..3c96748 100644 --- a/Bukva/Bukva/KeyTranslator/IKeyTranslator.cs +++ b/Bukva/Bukva/KeyTranslator/IKeyTranslator.cs @@ -10,5 +10,6 @@ interface IKeyTranslator { void Start(); void Stop(); + void SetLetterTable(LetterTable newLetterTable); } } diff --git a/Bukva/Bukva/KeyTranslator/KeyStateKeyTranslator.cs b/Bukva/Bukva/KeyTranslator/KeyStateKeyTranslator.cs index fe61de5..6fd8353 100644 --- a/Bukva/Bukva/KeyTranslator/KeyStateKeyTranslator.cs +++ b/Bukva/Bukva/KeyTranslator/KeyStateKeyTranslator.cs @@ -3,6 +3,7 @@ namespace Bukva { + class KeyStateKeyTranslator { FixedLengthQueue buffer; @@ -22,6 +23,11 @@ public KeyStateKeyTranslator(LetterTable letterTable) keyPressListener.OnKeyPressed += OnKeyPressed; } + public void SetLetterTable(LetterTable newLetterTable) + { + letterTable = newLetterTable; + } + public void Start() { keyPressListener.Listen = true; diff --git a/Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs b/Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs index 1b41925..ebbd02e 100644 --- a/Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs +++ b/Bukva/Bukva/KeyTranslator/LowLevelKeyTranslator.cs @@ -22,6 +22,11 @@ public LowLevelKeyTranslator(LetterTable letterTable) keyPressListener.OnKeyPressed += OnKeyPressed; } + public void SetLetterTable(LetterTable newLetterTable) + { + letterTable = newLetterTable; + } + public void Start() { keyPressListener.Listen = true; diff --git a/Bukva/Bukva/LetterTable.cs b/Bukva/Bukva/LetterTable.cs index b115460..f44db73 100644 --- a/Bukva/Bukva/LetterTable.cs +++ b/Bukva/Bukva/LetterTable.cs @@ -8,11 +8,17 @@ class LetterTable : Dictionary { public string Filename { get; private set; } + + //Empty Letter table public LetterTable() : base() { - List list = GetCandidateFiles(); - Filename = list[0].Split('\\').Last(); - ReadInFromFile(list[0]); + + } + + public LetterTable(string filename) : base() + { + Filename = filename.Split('\\').Last(); + ReadInFromFile(filename); } public void ReadInFromFile(string filename) @@ -34,7 +40,7 @@ public void ReadInFromFile(string filename) } } - List GetCandidateFiles() + public static List GetCandidateFiles() { List languageFiles = new List(); string[] files = Directory.GetFiles("."); diff --git a/Bukva/Bukva/MainWindow.xaml b/Bukva/Bukva/MainWindow.xaml index 839b3fc..d45090e 100644 --- a/Bukva/Bukva/MainWindow.xaml +++ b/Bukva/Bukva/MainWindow.xaml @@ -5,10 +5,13 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Bukva" mc:Ignorable="d" - Title="Bukva" Height="127.768" Width="244.905" ResizeMode="CanMinimize"> + Title="Bukva" Height="150" Width="310" ResizeMode="CanMinimize"> -