1 | unit UKeyBindings;
|
---|
2 |
|
---|
3 | {$mode delphi}
|
---|
4 |
|
---|
5 | interface
|
---|
6 |
|
---|
7 | uses
|
---|
8 | Classes, SysUtils, fgl, LCLProc, LCLType, Menus;
|
---|
9 |
|
---|
10 | type
|
---|
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 |
|
---|
27 | var
|
---|
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 |
|
---|
49 | implementation
|
---|
50 |
|
---|
51 | { TKeyBindings }
|
---|
52 |
|
---|
53 | function TKeyBindings.AddItem(const ShortName, FullName: string; ShortCut: TShortCut
|
---|
54 | ): TKeyBinding;
|
---|
55 | begin
|
---|
56 | Result := TKeyBinding.Create;
|
---|
57 | Result.ShortName := ShortName;
|
---|
58 | Result.FullName := FullName;
|
---|
59 | Result.ShortCut := ShortCut;
|
---|
60 | Add(Result);
|
---|
61 | end;
|
---|
62 |
|
---|
63 | function TKeyBindings.AddItem(const ShortName, FullName: string;
|
---|
64 | ShortCutText: string): TKeyBinding;
|
---|
65 | begin
|
---|
66 | Result := AddItem(ShortName, FullName, TextToShortCut(ShortCutText));
|
---|
67 | end;
|
---|
68 |
|
---|
69 | function TKeyBindings.Search(ShortName: string): TKeyBinding;
|
---|
70 | var
|
---|
71 | I: Integer;
|
---|
72 | begin
|
---|
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;
|
---|
77 | end;
|
---|
78 |
|
---|
79 | procedure TKeyBindings.LoadFromFile(FileName: string);
|
---|
80 | var
|
---|
81 | Lines: TStringList;
|
---|
82 | I: Integer;
|
---|
83 | KeyBinding: TKeyBinding;
|
---|
84 | N: Integer;
|
---|
85 | begin
|
---|
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;
|
---|
99 | end;
|
---|
100 |
|
---|
101 | procedure TKeyBindings.SaveToFile(FileName: string);
|
---|
102 | var
|
---|
103 | Lines: TStringList;
|
---|
104 | I: Integer;
|
---|
105 | begin
|
---|
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;
|
---|
116 | end;
|
---|
117 |
|
---|
118 |
|
---|
119 | initialization
|
---|
120 |
|
---|
121 | KeyBindings := TKeyBindings.Create;
|
---|
122 | with 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, []));
|
---|
141 | end;
|
---|
142 |
|
---|
143 |
|
---|
144 | finalization
|
---|
145 |
|
---|
146 | FreeAndNil(KeyBindings);
|
---|
147 |
|
---|
148 | end.
|
---|
149 |
|
---|