source: branches/AlphaChannel/UKeyBindings.pas

Last change on this file was 264, checked in by chronos, 4 years ago
  • Fixed: ShortCut text is localizable so it can't be directly used for space key.
File size: 3.8 KB
Line 
1unit UKeyBindings;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils, fgl, LCLProc, LCLType, Menus;
9
10type
11 TKeyBinding = class
12 ShortName: string;
13 FullName: string;
14 ShortCut: TShortCut;
15 end;
16
17 { TKeyBindings }
18
19 TKeyBindings = class(TFPGObjectList<TKeyBinding>)
20 function AddItem(const ShortName, FullName: string; ShortCut: TShortCut): TKeyBinding; overload;
21 function AddItem(const ShortName, FullName: string; ShortCutText: string): TKeyBinding; overload;
22 function Search(ShortName: string): TKeyBinding;
23 procedure LoadFromFile(FileName: string);
24 procedure SaveToFile(FileName: string);
25 end;
26
27var
28 KeyBindings: TKeyBindings;
29 BEndTurn: TKeyBinding;
30 BHelp: TKeyBinding;
31 BUnitStat: TKeyBinding;
32 BCityStat: TKeyBinding;
33 BScienceStat: TKeyBinding;
34 BEUnitStat: TKeyBinding;
35 BDiagram: TKeyBinding;
36 BWonders: TKeyBinding;
37 BShips: TKeyBinding;
38 BNations: TKeyBinding;
39 BEmpire: TKeyBinding;
40 BResign: TKeyBinding;
41 BRandomMap: TKeyBinding;
42 BDisbandUnit: TKeyBinding;
43 BFortify: TKeyBinding;
44 BCenterUnit: TKeyBinding;
45 BStay: TKeyBinding;
46 BNoOrders: TKeyBinding;
47
48
49implementation
50
51{ TKeyBindings }
52
53function TKeyBindings.AddItem(const ShortName, FullName: string; ShortCut: TShortCut
54 ): TKeyBinding;
55begin
56 Result := TKeyBinding.Create;
57 Result.ShortName := ShortName;
58 Result.FullName := FullName;
59 Result.ShortCut := ShortCut;
60 Add(Result);
61end;
62
63function TKeyBindings.AddItem(const ShortName, FullName: string;
64 ShortCutText: string): TKeyBinding;
65begin
66 Result := AddItem(ShortName, FullName, TextToShortCut(ShortCutText));
67end;
68
69function TKeyBindings.Search(ShortName: string): TKeyBinding;
70var
71 I: Integer;
72begin
73 I := 0;
74 while (I < Count) and (Items[I].ShortName <> ShortName) do Inc(I);
75 if I < Count then Result := Items[I]
76 else Result := nil;
77end;
78
79procedure TKeyBindings.LoadFromFile(FileName: string);
80var
81 Lines: TStringList;
82 I: Integer;
83 KeyBinding: TKeyBinding;
84 N: Integer;
85begin
86 Lines := TStringList.Create;
87 Lines.NameValueSeparator := '=';
88 try
89 Lines.LoadFromFile(FileName);
90 for I := 0 to Lines.Count - 1 do begin
91 KeyBinding := Search(Lines.Names[I]);
92 if Assigned(KeyBinding) then begin
93 KeyBinding.ShortCut := TextToShortCut(Lines.ValueFromIndex[I]);
94 end;
95 end;
96 finally
97 Lines.Free;
98 end;
99end;
100
101procedure TKeyBindings.SaveToFile(FileName: string);
102var
103 Lines: TStringList;
104 I: Integer;
105begin
106 Lines := TStringList.Create;
107 Lines.NameValueSeparator := '=';
108 try
109 for I := 0 to Count - 1 do begin
110 Lines.Add(TKeyBinding(Items[I]).ShortName + '=' + ShortCutToText(TKeyBinding(Items[I]).ShortCut));
111 end;
112 Lines.SaveToFile(FileName);
113 finally
114 Lines.Free;
115 end;
116end;
117
118
119initialization
120
121KeyBindings := TKeyBindings.Create;
122with KeyBindings do begin
123 BEndTurn := AddItem('EndTurn', 'End turn', 'NumPlus');
124 BHelp := AddItem('Help', 'Help', 'F1');
125 BUnitStat := AddItem('UnitStat', 'Unit stat', 'F2');
126 BCityStat := AddItem('CityStat', 'City stat', 'F3');
127 BScienceStat := AddItem('ScienceStat', 'Science research', 'F4');
128 BEUnitStat := AddItem('EnemyUnitStat', 'Enemy unit stat', 'F5');
129 BDiagram := AddItem('Diagram', 'Charts', 'F6');
130 BWonders := AddItem('Wonders', 'World wonders', 'F7');
131 BShips := AddItem('Ships', 'Colonization ships', 'F8');
132 BNations := AddItem('Nations', 'Nations', 'F9');
133 BEmpire := AddItem('Empire', 'Empire', 'F10');
134 BResign := AddItem('Resign', 'Resign', 'Ctrl+Q');
135 BRandomMap := AddItem('RandomMap', 'Random map', 'Ctrl+R');
136 BDisbandUnit := AddItem('DisbandUnit', 'Disband unit', 'Ctrl+D');
137 BFortify := AddItem('Fortify', 'Fortify', 'F');
138 BCenterUnit := AddItem('CenterUnit', 'Center', 'C');
139 BStay := AddItem('Stay', 'Stay', 'S');
140 BNoOrders := AddItem('NoOrders', 'No orders', ShortCut(VK_SPACE, []));
141end;
142
143
144finalization
145
146FreeAndNil(KeyBindings);
147
148end.
149
Note: See TracBrowser for help on using the repository browser.