| 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 |
|
|---|