src/keymap.pas1.8 KB · ObjectPascal
Raw
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
unit Keymap;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, fgl, Constants, LCLType, LCLProc, Grids;

type
  TKeybindings = specialize TFPGmap<Word, Integer>;

procedure LoadDefaultKeybindings;
procedure LoadCustomKeybindings(Grid: TStringGrid);

var
  Keybindings: TKeybindings;

implementation

procedure LoadDefaultKeybindings;
begin
  Keybindings.Clear;

  Keybindings.Add(VK_Q, C_3);
  Keybindings.Add(VK_W, CS3);
  Keybindings.Add(VK_E, D_3);
  Keybindings.Add(VK_R, DS3);
  Keybindings.Add(VK_T, E_3);
  Keybindings.Add(VK_Y, F_3);
  Keybindings.Add(VK_U, FS3);
  Keybindings.Add(VK_I, G_3);
  Keybindings.Add(VK_O, GS3);
  Keybindings.Add(VK_P, A_3);
  Keybindings.Add(VK_OEM_4, AS3);
  Keybindings.Add(VK_OEM_6, B_3);
  Keybindings.Add(VK_OEM_5, B_4);
  Keybindings.Add(VK_A, C_4);
  Keybindings.Add(VK_S, CS4);
  Keybindings.Add(VK_D, D_4);
  Keybindings.Add(VK_F, DS4);
  Keybindings.Add(VK_G, E_4);
  Keybindings.Add(VK_H, F_4);
  Keybindings.Add(VK_J, FS4);
  Keybindings.Add(VK_K, G_4);
  Keybindings.Add(VK_L, GS4);
  Keybindings.Add(VK_OEM_1, A_4);
  Keybindings.Add(VK_OEM_7, AS4);
  Keybindings.Add(VK_Z, C_5);
  Keybindings.Add(VK_X, CS5);
  Keybindings.Add(VK_C, D_5);
  Keybindings.Add(VK_V, DS5);
  Keybindings.Add(VK_B, E_5);
  Keybindings.Add(VK_N, F_5);
  Keybindings.Add(VK_M, FS5);
  Keybindings.Add(VK_OEM_COMMA, G_5);
  Keybindings.Add(VK_OEM_PERIOD, GS5);
  Keybindings.Add(VK_OEM_2, A_5);
end;

procedure LoadCustomKeybindings(Grid: TStringGrid);
var
  I: Integer;
  SC: TShortCut;
begin
  Keybindings.Clear;

  for I := 1 to Grid.RowCount-1 do begin
    SC := TextToShortCut(Grid.Cells[0, I]);

    if SC = 0 then Continue;
    if NoteToCodeMap.IndexOf(Grid.Cells[1, I]) = -1 then Continue;

    Keybindings.Add(SC, NoteToCodeMap.KeyData[Grid.Cells[1, I]]);
  end;
end;

begin
  Keybindings := TKeybindings.Create;
end.