source: tags/1.0.0/UCore.pas

Last change on this file was 21, checked in by chronos, 5 years ago
  • Added: Debian packaging information.
File size: 3.4 KB
Line 
1unit UCore;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils, UTheme, UPersistentForm, UApplicationInfo, UTranslator,
9 URegistry, UGame, ActnList, Forms, Controls;
10
11type
12
13 { TCore }
14
15 TCore = class(TDataModule)
16 AAbout: TAction;
17 AUndo: TAction;
18 ASettings: TAction;
19 ActionList1: TActionList;
20 AExit: TAction;
21 ANew: TAction;
22 ApplicationInfo1: TApplicationInfo;
23 PersistentForm1: TPersistentForm;
24 ThemeManager1: TThemeManager;
25 Translator1: TTranslator;
26 procedure AAboutExecute(Sender: TObject);
27 procedure AExitExecute(Sender: TObject);
28 procedure ANewExecute(Sender: TObject);
29 procedure ASettingsExecute(Sender: TObject);
30 procedure AUndoExecute(Sender: TObject);
31 procedure DataModuleCreate(Sender: TObject);
32 procedure DataModuleDestroy(Sender: TObject);
33 private
34 procedure GameChange(Sender: TObject);
35 public
36 Game: TGame;
37 procedure UpdateInterface;
38 procedure LoadConfig;
39 procedure SaveConfig;
40 end;
41
42var
43 Core: TCore;
44
45implementation
46
47{$R *.lfm}
48
49uses
50 UFormMain, UFormSettings, UFormAbout, UFormNew;
51
52{ TCore }
53
54procedure TCore.DataModuleCreate(Sender: TObject);
55begin
56 {$IFDEF Linux}
57 // If installed in Linux system then use installation directory for po files
58 if Application.ExeName = '/usr/bin/Game2048' then
59 Translator1.POFilesFolder := '/usr/share/Game2048/languages';
60 {$ENDIF}
61
62 Randomize;
63 Game := TGame.Create;
64 Game.Board.Size := Point(4, 4);
65 Game.OnChange := GameChange;
66 LoadConfig;
67end;
68
69procedure TCore.ASettingsExecute(Sender: TObject);
70begin
71 FormSettings := TFormSettings.Create(nil);
72 try
73 FormSettings.ShowModal;
74 finally
75 FreeAndNil(FormSettings);
76 end;
77end;
78
79procedure TCore.AUndoExecute(Sender: TObject);
80begin
81 Game.Undo;
82end;
83
84procedure TCore.AAboutExecute(Sender: TObject);
85begin
86 FormAbout := TFormAbout.Create(nil);
87 try
88 FormAbout.ApplicationInfo := Core.ApplicationInfo1;
89 FormAbout.ShowModal;
90 finally
91 FreeAndNil(FormAbout);
92 end;
93end;
94
95procedure TCore.AExitExecute(Sender: TObject);
96begin
97 FormMain.Close;
98end;
99
100procedure TCore.ANewExecute(Sender: TObject);
101begin
102 FormNew := TFormNew.Create(nil);
103 try
104 FormNew.Load(Core.Game);
105 if FormNew.ShowModal = mrOk then begin
106 FormNew.Save(Core.Game);
107 Game.New;
108 end;
109 finally
110 FreeAndNil(FormNew);
111 end;
112end;
113
114procedure TCore.DataModuleDestroy(Sender: TObject);
115begin
116 SaveConfig;
117 FreeAndNil(Game);
118end;
119
120procedure TCore.GameChange(Sender: TObject);
121begin
122 FormMain.Redraw;
123 UpdateInterface;
124end;
125
126procedure TCore.UpdateInterface;
127begin
128 AUndo.Enabled := Game.CanUndo;;
129end;
130
131procedure TCore.LoadConfig;
132begin
133 with TRegistryEx.Create do
134 try
135 CurrentContext := ApplicationInfo1.GetRegistryContext;
136
137 if ValueExists('LanguageCode') then
138 Translator1.Language := Translator1.Languages.SearchByCode(ReadStringWithDefault('LanguageCode', ''))
139 else Translator1.Language := Translator1.Languages.SearchByCode('');
140 finally
141 Free;
142 end;
143 Game.LoadFromRegistry(ApplicationInfo1.GetRegistryContext);
144end;
145
146procedure TCore.SaveConfig;
147begin
148 with TRegistryEx.Create do
149 try
150 CurrentContext := ApplicationInfo1.GetRegistryContext;
151
152 if Assigned(Translator1.Language) and (Translator1.Language.Code <> '') then
153 WriteString('LanguageCode', Translator1.Language.Code)
154 else DeleteValue('LanguageCode');
155 finally
156 Free;
157 end;
158 Game.SaveToRegistry(ApplicationInfo1.GetRegistryContext);
159end;
160
161end.
162
Note: See TracBrowser for help on using the repository browser.