WingMan – Diff between revs 4 and 5

Subversion Repositories:
Rev:
Show entire fileIgnore whitespace
Rev 4 Rev 5
Line 1... Line 1...
1 using System; 1 using System;
2 using System.Collections.Concurrent; -  
3 using System.Collections.Generic; 2 using System.Collections.Generic;
4 using System.ComponentModel; -  
5 using System.Data; -  
6 using System.Drawing; 3 using System.Drawing;
7 using System.Globalization; -  
8 using System.Linq; 4 using System.Linq;
9 using System.Net; 5 using System.Net;
10 using System.Resources; -  
11 using System.Text; -  
12 using System.Threading; -  
13 using System.Threading.Tasks; -  
14 using System.Windows.Forms; 6 using System.Windows.Forms;
15 using Gma.System.MouseKeyHook; 7 using Gma.System.MouseKeyHook;
16 using WingMan.Communication; 8 using WingMan.Communication;
17 using WingMan.Host; 9 using WingMan.MouseKey;
-   10 using WingMan.Properties;
Line 18... Line 11...
18   11  
19 namespace WingMan 12 namespace WingMan
20 { 13 {
21 public partial class WingManForm : Form 14 public partial class WingManForm : Form
-   15 {
-   16 public WingManForm()
22 { 17 {
Line 23... Line 18...
23 private MQTTServer MQTTServer { get; set; } 18 InitializeComponent();
Line 24... Line 19...
24   19  
Line -... Line 20...
-   20 MQTTCommunication = new MQTTCommunication();
-   21  
-   22 MouseKeyBindings = new MouseKeyBindings(new List<MouseKeyBinding>());
-   23  
-   24 HelmBindingSource = new BindingSource
-   25 {
25 private MQTTClient MQTTClient { get; set; } 26 DataSource = MouseKeyBindings.Bindings
Line 26... Line 27...
26   27 };
-   28 HelmBindingsListBox.DisplayMember = "DisplayName";
-   29 HelmBindingsListBox.ValueMember = "Keys";
-   30 HelmBindingsListBox.DataSource = HelmBindingSource;
-   31  
-   32 MouseKeyBindingsExchange = new MouseKeyBindingsExchange();
-   33 WingBindingSource = new BindingSource
-   34 {
Line -... Line 35...
-   35 DataSource = MouseKeyBindingsExchange.ExchangeBindings
-   36 };
27 private SemaphoreSlim MQTTServerSemaphore {get; set;} = new SemaphoreSlim(1, 1); 37 WingBindingsComboBox.DisplayMember = "Nick";
Line 28... Line 38...
28   38 WingBindingsComboBox.ValueMember = "Names";
-   39 WingBindingsComboBox.DataSource = WingBindingSource;
-   40  
-   41 // Start lobby message synchronizer.
Line -... Line 42...
-   42 LobbyMessageSynchronizer = new LobbyMessageSynchronizer(MQTTCommunication);
-   43 LobbyMessageSynchronizer.OnLobbyMessageReceived += OnLobbyMessageReceived;
-   44  
-   45 // Start mouse key bindings synchronizer.
29 private SemaphoreSlim MQTTClientSemaphore { get; set; } = new SemaphoreSlim(1, 1); 46 MouseKeyBindingsSynchronizer = new MouseKeyBindingsSynchronizer(MouseKeyBindings, MQTTCommunication);
-   47 MouseKeyBindingsSynchronizer.OnMouseKeyBindingsSynchronized += OnMouseKeyBindingsSynchronized;
-   48 }
-   49  
Line 30... Line -...
30   -  
Line -... Line 50...
-   50 private void OnMouseKeyBindingsSynchronized(object sender, MouseKeyBindingsSynchronizedEventArgs e)
31 private static IKeyboardMouseEvents MouseKeyApplicationHook { get; set; } 51 {
Line -... Line 52...
-   52 this.Invoke((MethodInvoker) delegate
32   53 {
33 private static IKeyboardMouseEvents MouseKeyGlobalHook { get; set; } 54 foreach (var binding in e.ExchangeBindings)
-   55 {
34   56 ActivityTextBox.AppendText(
-   57 $"{Strings.Synchronized_bindings_with_client} : {binding.Nick} : {binding.Names.Count}{Environment.NewLine}");
Line -... Line 58...
-   58  
35 private List<string> MouseKeyCombo { get; set; } 59  
Line 36... Line 60...
36   60 var exchangeBindings = MouseKeyBindingsExchange.ExchangeBindings.FirstOrDefault(exchangeBinding =>
-   61 string.Equals(exchangeBinding.Nick, binding.Nick, StringComparison.Ordinal));
-   62  
37 private HelmBindings HelmBindings { get; set; } 63 // If the nick has not been registered add it.
Line 38... Line 64...
38   64 if (exchangeBindings == null)
39 private BindingSource HelmBindingSource { get; set; } 65 {
-   66 MouseKeyBindingsExchange.ExchangeBindings.Add(binding);
-   67 continue;
Line 40... Line 68...
40   68 }
41 public ConcurrentDictionary<string, HelmBindings> WingBindings { get; set; } -  
Line 42... Line 69...
42   69  
-   70 // If the nick has been added, then update the binding names.
-   71 exchangeBindings.Names = binding.Names;
-   72  
-   73 // Update wing list box.
-   74 var selectedExchangeBinding = (MouseKeyBindingExchange)WingBindingsComboBox.SelectedItem;
-   75 if (selectedExchangeBinding == null || !string.Equals(selectedExchangeBinding.Nick, binding.Nick))
-   76 continue;
-   77  
43 public WingManForm() 78 WingBindingsListBox.Items.Clear();
-   79 WingBindingsListBox.DisplayMember = "Name";
44 { 80 WingBindingsListBox.ValueMember = "Name";
-   81 WingBindingsListBox.Items.AddRange(exchangeBindings.Names.Select(name => (object)name).ToArray());
-   82  
-   83 }
-   84  
-   85 WingBindingSource.ResetBindings(false);
-   86  
-   87 });
-   88 }
Line 45... Line 89...
45 InitializeComponent(); 89  
-   90 private static IKeyboardMouseEvents MouseKeyApplicationHook { get; set; }
-   91  
-   92 private List<string> MouseKeyCombo { get; set; }
-   93  
-   94 private MouseKeyBindings MouseKeyBindings { get; }
-   95  
-   96 private BindingSource HelmBindingSource { get; }
46   97  
Line 47... Line 98...
47 MouseKeyGlobalHook = Hook.GlobalEvents(); 98 private BindingSource WingBindingSource { get; set; }
48   99  
49 MQTTClient = new MQTTClient(this); 100 private MouseKeyBindingsExchange MouseKeyBindingsExchange { get; set; }
Line 73... Line 124...
73 } 124 }
Line 74... Line 125...
74   125  
75 private async void HostButtonClickAsync(object sender, EventArgs e) 126 private async void HostButtonClickAsync(object sender, EventArgs e)
76 { 127 {
77 // Stop the MQTT server if it is running. 128 // Stop the MQTT server if it is running.
78 if (MQTTServer.ServerRunning) 129 if (MQTTCommunication.Running)
79 { 130 {
80 await StopServer(); 131 await MQTTCommunication.Stop().ConfigureAwait(false);
81 toolStripStatusLabel.Text = Properties.Strings.Server_stopped; 132 toolStripStatusLabel.Text = Strings.Server_stopped;
Line 82... Line 133...
82 HostButton.BackColor = Color.Empty; 133 HostButton.BackColor = Color.Empty;
83   134  
84 // Enable controls. 135 // Enable controls.
-   136 ConnectButton.Enabled = true;
-   137 Address.Enabled = true;
-   138 Port.Enabled = true;
85 ConnectButton.Enabled = true; 139 Nick.Enabled = true;
86 EnableConnectionControls(); 140  
Line 87... Line 141...
87 return; 141 return;
88 } 142 }
Line 89... Line 143...
89   143  
90 if (!ValidateAddressPort(out var ipAddress, out var port, out var nick)) 144 if (!ValidateAddressPort(out var ipAddress, out var port, out var nick))
91 return; 145 return;
92   146  
Line 93... Line 147...
93 // Start the MQTT server. 147 // Start the MQTT server.
94 await StartServer(ipAddress, port, nick); 148 await MQTTCommunication.Start(MQTTCommunicationType.Server, ipAddress, port, nick).ConfigureAwait(false);
95 toolStripStatusLabel.Text = Properties.Strings.Server_started; -  
96 HostButton.BackColor = Color.Aquamarine; -  
97   -  
98 // Disable controls -  
99 ConnectButton.Enabled = false; -  
100 DisableConnectionControls(); 149 toolStripStatusLabel.Text = Strings.Server_started;
101 } 150 HostButton.BackColor = Color.Aquamarine;
102   151  
103 private void DisableConnectionControls() 152 // Disable controls
Line 104... Line -...
104 { -  
105 Address.Enabled = false; -  
106 Port.Enabled = false; -  
107 Nick.Enabled = false; -  
108 } -  
109   -  
110 private void EnableConnectionControls() -  
111 { 153 ConnectButton.Enabled = false;
112 Address.Enabled = true; 154 Address.Enabled = false;
113 Port.Enabled = true; 155 Port.Enabled = false;
114 Nick.Enabled = true; 156 Nick.Enabled = false;
115 } 157 }
Line 157... Line 199...
157 Nick.BackColor = Color.Empty; 199 Nick.BackColor = Color.Empty;
Line 158... Line 200...
158   200  
159 return true; 201 return true;
Line 160... Line -...
160 } -  
161   -  
162 private async Task StartServer(IPAddress ipAddress, int port, string nick) -  
163 { -  
164 await MQTTServerSemaphore.WaitAsync(); -  
165 try -  
166 { -  
167 await MQTTServer.Start(ipAddress, port, nick); -  
168 } -  
169 finally -  
170 { -  
171 MQTTServerSemaphore.Release(); -  
172 } -  
173 } -  
174   -  
175 private async Task StopServer() -  
176 { -  
177 await MQTTServerSemaphore.WaitAsync(); -  
178 try -  
179 { -  
180 await MQTTServer.Stop(); -  
181 } -  
182 finally -  
183 { -  
184 MQTTServerSemaphore.Release(); -  
185 } -  
186 } 202 }
187   203  
188 private async void ConnectButtonClickAsync(object sender, EventArgs e) 204 private async void ConnectButtonClickAsync(object sender, EventArgs e)
189 { 205 {
190 if (MQTTClient.ClientRunning) 206 if (MQTTCommunication.Running)
191 { 207 {
192 await StopClient(); 208 await MQTTCommunication.Stop().ConfigureAwait(false);
Line 193... Line 209...
193 ConnectButton.Text = Properties.Strings.Connect; 209 ConnectButton.Text = Strings.Connect;
-   210 ConnectButton.BackColor = Color.Empty;
-   211  
194 ConnectButton.BackColor = Color.Empty; 212 Address.Enabled = true;
195   213 Port.Enabled = true;
196 EnableConnectionControls(); 214 Nick.Enabled = true;
Line 197... Line 215...
197 HostButton.Enabled = true; 215 HostButton.Enabled = true;
198 return; 216 return;
Line 199... Line 217...
199 } 217 }
Line 200... Line 218...
200   218  
201 if (!ValidateAddressPort(out var ipAddress, out var port, out var nick)) 219 if (!ValidateAddressPort(out var ipAddress, out var port, out var nick))
202 return; 220 return;
Line 203... Line 221...
203   221  
204 await StartClient(ipAddress, port, nick); 222 await MQTTCommunication.Start(MQTTCommunicationType.Client, ipAddress, port, nick).ConfigureAwait(false);
205   -  
206 toolStripStatusLabel.Text = Properties.Strings.Client_started; -  
207 ConnectButton.Text = Properties.Strings.Disconnect; -  
208 ConnectButton.BackColor = Color.Aquamarine; -  
209   -  
210 HostButton.Enabled = false; -  
211 DisableConnectionControls(); -  
212 } -  
213   -  
214 private async Task StopClient() 223  
215 { -  
216 await MQTTClientSemaphore.WaitAsync(); -  
217 try -  
218 { -  
219 await MQTTClient.Stop(); -  
220 } -  
221 finally -  
222 { -  
223 MQTTClientSemaphore.Release(); -  
224 } -  
225 } -  
226   -  
227 private async Task StartClient(IPAddress ipAddress, int port, string nick) 224 toolStripStatusLabel.Text = Strings.Client_started;
228 { -  
229 await MQTTClientSemaphore.WaitAsync(); -  
230 try -  
231 { 225 ConnectButton.Text = Strings.Disconnect;
Line 232... Line 226...
232 await MQTTClient.Start(ipAddress, port, nick); 226 ConnectButton.BackColor = Color.Aquamarine;
233 } 227  
234 finally 228 HostButton.Enabled = false;
235 { 229 Address.Enabled = false;
Line 236... Line -...
236 MQTTClientSemaphore.Release(); -  
237 } -  
238 } 230 Port.Enabled = false;
239   -  
240 private async void LobbySayTextBoxKeyDown(object sender, KeyEventArgs e) -  
241 { -  
242 if (e.KeyCode != Keys.Enter) -  
243 return; -  
244   -  
Line -... Line 231...
-   231 Nick.Enabled = false;
245 if (MQTTServer.ServerRunning) 232 }
Line 246... Line 233...
246 { 233  
247 await MQTTServer.BroadcastLobbyMessage(LobbySayTextBox.Text); 234 private async void LobbySayTextBoxKeyDown(object sender, KeyEventArgs e)
248 } 235 {
Line 269... Line 256...
269 MouseKeyApplicationHook = Hook.AppEvents(); 256 MouseKeyApplicationHook = Hook.AppEvents();
270 MouseKeyApplicationHook.MouseDown += MouseKeyHookOnMouseDown; 257 MouseKeyApplicationHook.MouseDown += MouseKeyHookOnMouseDown;
271 MouseKeyApplicationHook.KeyUp += MouseKeyHookOnKeyUp; 258 MouseKeyApplicationHook.KeyUp += MouseKeyHookOnKeyUp;
272 MouseKeyApplicationHook.KeyDown += MouseKeyHookOnKeyDown; 259 MouseKeyApplicationHook.KeyDown += MouseKeyHookOnKeyDown;
273 MouseKeyApplicationHook.MouseUp += MouseKeyHookOnMouseUp; 260 MouseKeyApplicationHook.MouseUp += MouseKeyHookOnMouseUp;
274   -  
275 } 261 }
Line 276... Line 262...
276   262  
277 private void MouseKeyHookOnKeyUp(object sender, KeyEventArgs e) 263 private void MouseKeyHookOnKeyUp(object sender, KeyEventArgs e)
278 { 264 {
279 HelmBindings.Bindings.Add(new HelmBinding -  
280 { -  
281 Keys = MouseKeyCombo, -  
282 Name = HelmNameTextBox.Text -  
Line 283... Line 265...
283 }); 265 MouseKeyBindings.Bindings.Add(new MouseKeyBinding(HelmNameTextBox.Text, MouseKeyCombo));
Line 284... Line 266...
284   266  
285 HelmBindingSource.ResetBindings(false); 267 HelmBindingSource.ResetBindings(false);
-   268  
-   269 MouseKeyApplicationHook.KeyDown -= MouseKeyHookOnKeyDown;
Line 286... Line 270...
286   270 MouseKeyApplicationHook.KeyUp -= MouseKeyHookOnKeyUp;
Line 287... Line 271...
287 MouseKeyApplicationHook.KeyDown -= MouseKeyHookOnKeyDown; 271 MouseKeyApplicationHook.KeyDown -= MouseKeyHookOnKeyDown;
288 MouseKeyApplicationHook.KeyUp -= MouseKeyHookOnKeyUp; 272 MouseKeyApplicationHook.KeyUp -= MouseKeyHookOnKeyUp;
289   273  
Line 290... Line 274...
290 MouseKeyApplicationHook.Dispose(); 274 MouseKeyApplicationHook.Dispose();
291   275  
292 HelmNameTextBox.Text = string.Empty; 276 HelmNameTextBox.Text = string.Empty;
293 HelmAddButton.Enabled = true; -  
294 } -  
295   -  
296 private void MouseKeyHookOnMouseUp(object sender, MouseEventArgs e) -  
Line 297... Line 277...
297 { 277 HelmAddButton.Enabled = true;
Line 298... Line 278...
298 HelmBindings.Bindings.Add(new HelmBinding 278 }
299 { 279  
-   280 private void MouseKeyHookOnMouseUp(object sender, MouseEventArgs e)
-   281 {
Line 300... Line 282...
300 Keys = MouseKeyCombo, 282 MouseKeyBindings.Bindings.Add(new MouseKeyBinding(HelmNameTextBox.Text, MouseKeyCombo));
Line 301... Line 283...
301 Name = HelmNameTextBox.Text 283  
302 }); 284 HelmBindingSource.ResetBindings(false);
303   285  
Line 304... Line 286...
304 HelmBindingSource.ResetBindings(false); 286 MouseKeyApplicationHook.KeyDown -= MouseKeyHookOnKeyDown;
305   287 MouseKeyApplicationHook.KeyUp -= MouseKeyHookOnKeyUp;
306 MouseKeyApplicationHook.KeyDown -= MouseKeyHookOnKeyDown; 288 MouseKeyApplicationHook.KeyDown -= MouseKeyHookOnKeyDown;
307 MouseKeyApplicationHook.KeyUp -= MouseKeyHookOnKeyUp; 289 MouseKeyApplicationHook.KeyUp -= MouseKeyHookOnKeyUp;
Line 308... Line 290...
308   290  
309 MouseKeyApplicationHook.Dispose(); 291 MouseKeyApplicationHook.Dispose();
310   292  
Line 311... Line 293...
311 HelmNameTextBox.Text = string.Empty; 293 HelmNameTextBox.Text = string.Empty;
312 HelmAddButton.Enabled = true; 294 HelmAddButton.Enabled = true;
Line 313... Line 295...
313 } 295 }
314   296  
315   297  
316 private void MouseKeyHookOnMouseDown(object sender, MouseEventArgs e) 298 private void MouseKeyHookOnMouseDown(object sender, MouseEventArgs e)
Line 317... Line 299...
317 { 299 {
318 MouseKeyCombo.Add(MouseButtonToName(e.Button)); 300 MouseKeyCombo.Add(e.Button.ToDisplayName());
319 } -  
320   -  
321 private void MouseKeyHookOnKeyDown(object sender, KeyEventArgs e) -  
322 { -  
323 e.SuppressKeyPress = true; 301 }
324   -  
325 MouseKeyCombo.Add(KeyCodeToName((int) e.KeyCode)); 302  
326 } -  
327   -  
328 private void HelmNameTextBoxClick(object sender, EventArgs e) -  
329 { -  
330 HelmNameTextBox.BackColor = Color.Empty; 303 private void MouseKeyHookOnKeyDown(object sender, KeyEventArgs e)
331 } -  
Line -... Line 304...
-   304 {
332   305 e.SuppressKeyPress = true;
333 private string MouseButtonToName(MouseButtons button) 306  
Line 334... Line 307...
334 { 307 MouseKeyCombo.Add(e.KeyCode.ToDisplayName());
335 var mouseButton = string.Empty; 308 }
336 switch (button) -  
337 { -  
338 case MouseButtons.Left: -  
339 mouseButton = "Left Mouse Button"; -  
340 break; -  
341 case MouseButtons.Middle: -  
342 mouseButton = "Middle Mouse Button"; -  
343 break; -  
344 case MouseButtons.Right: -  
345 mouseButton = "Right Mouse Button"; -  
346 break; -  
347 } -  
348   -  
349 return mouseButton; -  
350 } -  
351   -  
352 private string KeyCodeToName(int code) -  
353 { -  
354 var keyString = string.Empty; -  
355 switch (code) -  
356 { -  
357 case 0: -  
358 break; -  
359 case 1: -  
360 keyString = "Mouse Left"; -  
361 break; -  
362 case 2: -  
363 keyString = "Mouse Right"; -  
364 break; -  
365 case 3: -  
366 keyString = "Cancel"; -  
367 break; -  
368 case 4: -  
369 keyString = "Mouse Middle"; -  
370 break; -  
371 case 5: -  
372 keyString = "Special 1"; -  
373 break; -  
374 case 6: -  
375 keyString = "Special 2"; -  
376 break; -  
377 case 8: -  
378 keyString = "Back"; -  
379 break; -  
380 case 9: -  
381 keyString = "TAB"; -  
382 break; -  
383 case 12: -  
384 keyString = "Clear"; -  
385 break; -  
386 case 13: -  
387 keyString = "Enter"; 309  
388 break; -  
389 case 16: -  
390 keyString = "Shift"; -  
391 break; -  
392 case 17: -  
393 keyString = "Ctrl"; -  
394 break; -  
395 case 18: -  
396 keyString = "Menu"; -  
397 break; -  
398 case 19: -  
399 keyString = "Pause"; -  
400 break; -  
401 case 20: -  
402 keyString = "Caps Lock"; -  
403 break; -  
404 case 21: -  
405 keyString = "Kana/Hangul"; -  
406 break; -  
407 case 23: -  
408 keyString = "Junja"; -  
409 break; -  
410 case 24: -  
411 keyString = "Final"; -  
412 break; -  
413 case 25: -  
414 keyString = "Hanja/Kanji"; -  
415 break; -  
416 case 27: -  
417 keyString = "Esc"; -  
418 break; -  
419 case 28: -  
420 keyString = "Convert"; -  
421 break; -  
422 case 29: -  
423 keyString = "NonConvert"; -  
424 break; -  
425 case 30: -  
426 keyString = "Accept"; -  
427 break; -  
428 case 31: -  
429 keyString = "Mode"; -  
430 break; -  
431 case 32: -  
432 keyString = "Space"; -  
433 break; -  
434 case 33: -  
435 keyString = "Page Up"; -  
436 break; -  
437 case 34: -  
438 keyString = "Page Down"; -  
439 break; -  
440 case 35: -  
441 keyString = "End"; -  
442 break; -  
443 case 36: -  
444 keyString = "Home"; -  
445 break; -  
446 case 37: -  
447 keyString = "Left"; -  
448 break; -  
449 case 38: -  
450 keyString = "Up"; -  
451 break; -  
452 case 39: -  
453 keyString = "Right"; -  
454 break; -  
455 case 40: -  
456 keyString = "Down"; -  
457 break; -  
458 case 41: -  
459 keyString = "Select"; -  
460 break; -  
461 case 42: -  
462 keyString = "Print"; -  
463 break; -  
464 case 43: -  
465 keyString = "Execute"; -  
466 break; -  
467 case 44: -  
468 keyString = "Snapshot"; -  
469 break; -  
470 case 45: -  
471 keyString = "Insert"; -  
472 break; -  
473 case 46: -  
474 keyString = "Delete"; -  
475 break; -  
476 case 47: -  
477 keyString = "Help"; -  
478 break; -  
479 case 48: -  
480 keyString = "Num 0"; -  
481 break; -  
482 case 49: -  
483 keyString = "Num 1"; -  
484 break; -  
485 case 50: -  
486 keyString = "Num 2"; -  
487 break; -  
488 case 51: -  
489 keyString = "Num 3"; -  
490 break; -  
491 case 52: -  
492 keyString = "Num 4"; -  
493 break; -  
494 case 53: -  
495 keyString = "Num 5"; -  
496 break; -  
497 case 54: -  
498 keyString = "Num 6"; -  
499 break; -  
500 case 55: -  
501 keyString = "Num 7"; -  
502 break; -  
503 case 56: -  
504 keyString = "Num 8"; -  
505 break; -  
506 case 57: -  
507 keyString = "Num 9"; -  
508 break; -  
509 case 65: -  
510 keyString = "A"; -  
511 break; -  
512 case 66: -  
513 keyString = "B"; -  
514 break; -  
515 case 67: -  
516 keyString = "C"; -  
517 break; -  
518 case 68: -  
519 keyString = "D"; -  
520 break; -  
521 case 69: -  
522 keyString = "E"; -  
523 break; -  
524 case 70: -  
525 keyString = "F"; -  
526 break; -  
527 case 71: -  
528 keyString = "G"; -  
529 break; -  
530 case 72: -  
531 keyString = "H"; -  
532 break; -  
533 case 73: -  
534 keyString = "I"; -  
535 break; -  
536 case 74: -  
537 keyString = "J"; -  
538 break; -  
539 case 75: -  
540 keyString = "K"; -  
541 break; -  
542 case 76: -  
543 keyString = "L"; -  
544 break; -  
545 case 77: -  
546 keyString = "M"; -  
547 break; -  
548 case 78: -  
549 keyString = "N"; -  
550 break; -  
551 case 79: -  
552 keyString = "O"; -  
553 break; -  
554 case 80: -  
555 keyString = "P"; -  
556 break; -  
557 case 81: -  
558 keyString = "Q"; -  
559 break; -  
560 case 82: -  
561 keyString = "R"; -  
562 break; -  
563 case 83: -  
564 keyString = "S"; -  
565 break; -  
566 case 84: -  
567 keyString = "T"; -  
568 break; -  
569 case 85: -  
570 keyString = "U"; -  
571 break; -  
572 case 86: -  
573 keyString = "V"; -  
574 break; -  
575 case 87: -  
576 keyString = "W"; -  
577 break; -  
578 case 88: -  
579 keyString = "X"; -  
580 break; -  
581 case 89: -  
582 keyString = "Y"; -  
583 break; -  
584 case 90: -  
585 keyString = "Z"; -  
586 break; -  
587 case 91: -  
588 keyString = "Windows Left"; -  
589 break; -  
590 case 92: -  
591 keyString = "Windows Right"; -  
592 break; -  
593 case 93: -  
594 keyString = "Application"; -  
595 break; -  
596 case 95: -  
597 keyString = "Sleep"; -  
598 break; -  
599 case 96: -  
600 keyString = "NumPad 0"; -  
601 break; -  
602 case 97: -  
603 keyString = "NumPad 1"; -  
604 break; -  
605 case 98: -  
606 keyString = "NumPad 2"; -  
607 break; -  
608 case 99: -  
609 keyString = "NumPad 3"; -  
610 break; -  
611 case 100: -  
612 keyString = "NumPad 4"; -  
613 break; -  
614 case 101: -  
615 keyString = "NumPad 5"; -  
616 break; -  
617 case 102: -  
618 keyString = "NumPad 6"; -  
619 break; -  
620 case 103: -  
621 keyString = "NumPad 7"; -  
622 break; -  
623 case 104: -  
624 keyString = "NumPad 8"; -  
625 break; -  
626 case 105: -  
627 keyString = "NumPad 9"; -  
628 break; -  
629 case 106: -  
630 keyString = "NumPad *"; -  
631 break; -  
632 case 107: -  
633 keyString = "NumPad +"; -  
634 break; -  
635 case 108: -  
636 keyString = "NumPad ."; -  
637 break; -  
638 case 109: -  
639 keyString = "NumPad -"; -  
640 break; -  
641 case 110: -  
642 keyString = "NumPad ,"; -  
643 break; -  
644 case 111: -  
645 keyString = "NumPad /"; -  
646 break; -  
647 case 112: -  
648 keyString = "F1"; -  
649 break; -  
650 case 113: -  
651 keyString = "F2"; -  
652 break; -  
653 case 114: -  
654 keyString = "F3"; -  
655 break; -  
656 case 115: -  
657 keyString = "F4"; -  
658 break; -  
659 case 116: -  
660 keyString = "F5"; -  
661 break; -  
662 case 117: -  
663 keyString = "F6"; -  
664 break; -  
665 case 118: -  
666 keyString = "F7"; -  
667 break; -  
668 case 119: -  
669 keyString = "F8"; -  
670 break; -  
671 case 120: -  
672 keyString = "F9"; -  
673 break; -  
674 case 121: -  
675 keyString = "F10"; -  
676 break; -  
677 case 122: -  
678 keyString = "F11"; -  
679 break; -  
680 case 123: -  
681 keyString = "F12"; -  
682 break; -  
683 case 124: -  
684 keyString = "F13"; -  
685 break; -  
686 case 125: -  
687 keyString = "F14"; -  
688 break; -  
689 case 126: -  
690 keyString = "F15"; -  
691 break; -  
692 case 127: -  
693 keyString = "F16"; -  
694 break; -  
695 case 128: -  
696 keyString = "F17"; -  
697 break; -  
698 case 129: -  
699 keyString = "F18"; -  
700 break; -  
701 case 130: -  
702 keyString = "F19"; -  
703 break; -  
704 case 131: -  
705 keyString = "F20"; -  
706 break; -  
707 case 132: -  
708 keyString = "F21"; -  
709 break; -  
710 case 133: -  
711 keyString = "F22"; -  
712 break; -  
713 case 134: -  
714 keyString = "F23"; -  
715 break; -  
716 case 135: -  
717 keyString = "F24"; -  
718 break; -  
719 case 144: -  
720 keyString = "Num lock"; -  
721 break; -  
722 case 145: -  
723 keyString = "Scroll"; -  
724 break; -  
725 case 160: -  
726 keyString = "Shift Left"; -  
727 break; -  
Line 728... Line 310...
728 case 161: 310 private void HelmNameTextBoxClick(object sender, EventArgs e)
729 keyString = "Shift Right"; 311 {
Line 730... Line 312...
730 break; 312 HelmNameTextBox.BackColor = Color.Empty;
731 case 162: 313 }
732 keyString = "Ctrl Left"; 314  
733 break; 315 private void HelmRemoveButtonClick(object sender, EventArgs e)
734 case 163: 316 {
Line 735... Line 317...
735 keyString = "Ctrl Right"; 317 var helmBinding = (MouseKeyBinding) HelmBindingsListBox.SelectedItem;
-   318 if (helmBinding == null)
736 break; 319 return;
-   320  
737 case 164: 321 MouseKeyBindings.Bindings.Remove(helmBinding);
738 keyString = "Menu Left"; 322 HelmBindingSource.ResetBindings(false);
739 break; 323 }