source: tags/1.2.0/UCore.pas

Last change on this file was 139, checked in by chronos, 2 years ago
  • Modified: Version 1.2.0 release related changes.
File size: 7.6 KB
Line 
1unit UCore;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils, FileUtil, UApplicationInfo, ULastOpenedList, UProject,
9 UTranslator, UTarget, URegistry, Registry, Graphics, Controls, UScaleDPI,
10 UPersistentForm, UTheme, UAboutDialog, UBFTarget;
11
12type
13
14 { TCore }
15
16 TCore = class(TDataModule)
17 AboutDialog: TAboutDialog;
18 ApplicationInfo: TApplicationInfo;
19 Translator: TTranslator;
20 ImageListMain: TImageList;
21 LastOpenedList: TLastOpenedList;
22 PersistentForm1: TPersistentForm;
23 ScaleDPI1: TScaleDPI;
24 ThemeManager: TThemeManager;
25 procedure DataModuleCreate(Sender: TObject);
26 procedure DataModuleDestroy(Sender: TObject);
27 procedure TranslatorTranslate(Sender: TObject);
28 private
29 FCurrentTarget: TTarget;
30 StoredDimension: TControlDimension;
31 RecentFileRegistryContext: TRegistryContext;
32 procedure InitTargets;
33 procedure SetCurrentTarget(AValue: TTarget);
34 procedure ScaleDPI;
35 procedure TargetMessageExecute(Text: string);
36 public
37 DataDir: string;
38 Project: TProject;
39 Targets: TTargets;
40 Messages: TMessages;
41 OpenProjectOnStart: Boolean;
42 OptimizationLevel: TCompilerOptimization;
43 CellSize: Integer;
44 MemorySize: Integer;
45 DebugEnabled: Boolean;
46 OptionsFormTabIndex: Integer;
47 Optimizations: TOptimizations;
48 procedure Init;
49 procedure AddItemToLastOpenedList(FileName: string);
50 procedure LoadFromRegistry(Context: TRegistryContext);
51 procedure SaveToRegistry(Context: TRegistryContext);
52 property CurrentTarget: TTarget read FCurrentTarget write SetCurrentTarget;
53 end;
54
55var
56 Core: TCore;
57
58
59implementation
60
61{$R *.lfm}
62
63uses
64 UFormMain, Forms, LazFileUtils,
65 // Targets
66 UTargetInterpretter, UTargetFPC, UTargetJava, UTargetDelphi, UTargetJavascript,
67 UTargetPHP, UTargetC, UTargetPython, UTargetCSharp;
68
69const
70 RecentFilesRegKey = 'RecentFiles';
71
72{ TCore }
73
74procedure TCore.AddItemToLastOpenedList(FileName: string);
75begin
76 with LastOpenedList do begin
77 LoadFromRegistry(RecentFileRegistryContext);
78 AddItem(FileName);
79 SaveToRegistry(RecentFileRegistryContext);
80 end;
81end;
82
83procedure TCore.DataModuleCreate(Sender: TObject);
84{$IFDEF UNIX}
85const
86 LinuxDataDir = '/usr/share/LazFuck';
87 LinuxLanguagesDir = LinuxDataDir + '/Languages';
88{$ENDIF}
89begin
90 DataDir := '';
91 {$IFDEF UNIX}
92 // If installed in Linux system then use installation shared game directory for data files
93 if DirectoryExists(LinuxDataDir) then
94 DataDir := LinuxDataDir;
95 // If installed in Linux system then use installation directory for po files
96 if not DirectoryExists(Translator.POFilesFolder) and DirectoryExists(LinuxLanguagesDir) then
97 Translator.POFilesFolder := LinuxLanguagesDir;
98 {$ENDIF}
99
100 Project := TProject.Create;
101 Targets := TTargets.Create;
102 Messages := TMessages.Create;
103
104 StoredDimension := TControlDimension.Create;
105 InitTargets;
106 RecentFileRegistryContext := TRegistryContext.Create(ApplicationInfo.RegistryRoot,
107 ApplicationInfo.RegistryKey + '\' + RecentFilesRegKey);
108 LoadFromRegistry(Core.ApplicationInfo.GetRegistryContext);
109end;
110
111procedure TCore.DataModuleDestroy(Sender: TObject);
112begin
113 SaveToRegistry(Core.ApplicationInfo.GetRegistryContext);
114 FreeAndNil(Messages);
115 FreeAndNil(Targets);
116 FreeAndNil(Project);
117 FreeAndNil(StoredDimension);
118end;
119
120procedure TCore.TranslatorTranslate(Sender: TObject);
121begin
122 UTarget.UpdateTranslation;
123end;
124
125procedure TCore.InitTargets;
126var
127 I: Integer;
128begin
129 with Targets do begin
130 Clear;
131 Add(TTargetInterpretter.Create);
132 Add(TTargetDelphi.Create);
133 Add(TTargetFPC.Create);
134 Add(TTargetPHP.Create);
135 Add(TTargetC.Create);
136 Add(TTargetJava.Create);
137 Add(TTargetPython.Create);
138 Add(TTargetCSharp.Create);
139 Add(TTargetJavascript.Create);
140 for I := 0 to Count - 1 do
141 Items[I].OnMessage := TargetMessageExecute;
142 end;
143end;
144
145procedure TCore.LoadFromRegistry(Context: TRegistryContext);
146begin
147 with TRegistryEx.Create do
148 try
149 CurrentContext := Context;
150 OpenProjectOnStart := ReadBoolWithDefault('OpenProjectOnStart', True);
151 if ValueExists('LanguageCode') then
152 Translator.Language := Translator.Languages.SearchByCode(ReadStringWithDefault('LanguageCode', ''))
153 else Translator.Language := Translator.Languages.SearchByCode('');
154 ScaleDPI1.DPI := Point(ReadIntegerWithDefault('DPIX', 96),
155 ReadIntegerWithDefault('DPIY', 96));
156 ScaleDPI1.AutoDetect := ReadBoolWithDefault('DPIAuto', True);
157 OptimizationLevel := TCompilerOptimization(ReadIntegerWithDefault('OptimizationLevel', Integer(coNormal)));
158 MemorySize := ReadIntegerWithDefault('MemorySize', 30000);
159 CellSize := ReadIntegerWithDefault('CellSize', 256);
160 DebugEnabled := ReadBoolWithDefault('DebugEnabled', True);
161 OptionsFormTabIndex := ReadIntegerWithDefault('OptionsFormTabIndex', 0);
162 ThemeManager.Theme := ThemeManager.Themes.FindByName(ReadStringWithDefault('Theme', 'System'));
163 finally
164 Free;
165 end;
166 Targets.LoadFromRegistry(TRegistryContext.Create(Context.RootKey, Context.Key + '\Compiler'));
167 LastOpenedList.LoadFromRegistry(RecentFileRegistryContext);
168 PersistentForm1.RegistryContext := Context;
169end;
170
171procedure TCore.SaveToRegistry(Context: TRegistryContext);
172begin
173 Targets.SaveToRegistry(TRegistryContext.Create(Context.RootKey, Context.Key + '\Compiler'));
174 with TRegistryEx.Create do
175 try
176 CurrentContext := Context;
177 WriteBool('OpenProjectOnStart', OpenProjectOnStart);
178 WriteBool('DPIAuto', ScaleDPI1.AutoDetect);
179 WriteInteger('DPIX', ScaleDPI1.DPI.X);
180 WriteInteger('DPIY', ScaleDPI1.DPI.Y);
181 WriteInteger('OptimizationLevel', Integer(OptimizationLevel));
182 WriteInteger('MemorySize', MemorySize);
183 WriteInteger('CellSize', CellSize);
184 WriteBool('DebugEnabled', DebugEnabled);
185 WriteInteger('OptionsFormTabIndex', OptionsFormTabIndex);
186 if Assigned(Translator.Language) and (Translator.Language.Code <> '') then
187 WriteString('LanguageCode', Translator.Language.Code)
188 else DeleteValue('LanguageCode');
189 WriteString('Theme', ThemeManager.Theme.Name);
190 finally
191 Free;
192 end;
193end;
194
195procedure TCore.SetCurrentTarget(AValue: TTarget);
196var
197 I: Integer;
198begin
199 if FCurrentTarget = AValue then Exit;
200 FCurrentTarget := AValue;
201 for I := 0 to Targets.Count - 1 do
202 Targets[I].OnChangeState := nil;
203 if Assigned(FCurrentTarget) then begin
204 FCurrentTarget.OnChangeState := FormMain.TargetStateChanged;
205 FCurrentTarget.OnLog := FormMain.TargetLogExecute;
206 FCurrentTarget.OptimizationLevel := OptimizationLevel;
207 if FCurrentTarget is TBFTarget then begin
208 TBFTarget(FCurrentTarget).MemorySize := MemorySize;
209 TBFTarget(FCurrentTarget).CellSize := CellSize;
210 end;
211 end;
212 FormMain.UpdateTargetList;
213 FormMain.UpdateInterface;
214end;
215
216procedure TCore.ScaleDPI;
217var
218 I: Integer;
219begin
220 with ScaleDPI1 do begin
221 //DesignDPI := Point(144, 144);
222 if (DesignDPI.X <> DPI.X) or (DesignDPI.Y <> DPI.Y) then begin
223 //ApplyToAll(DesignDPI);
224 for I := 0 to Screen.FormCount - 1 do
225 if (Screen.Forms[I].WindowState = wsNormal) or
226 (Screen.Forms[I].WindowState = wsMinimized) then begin
227 StoreDimensions(Screen.Forms[I], StoredDimension);
228 ScaleDimensions(Screen.Forms[I], StoredDimension);
229 end;
230 ScaleImageList(ImageListMain, DesignDPI);
231 end;
232 end;
233end;
234
235procedure TCore.TargetMessageExecute(Text: string);
236begin
237 Messages.AddMessage(Text);
238end;
239
240procedure TCore.Init;
241begin
242 ScaleDPI;
243 Translator.Translate;
244end;
245
246end.
247
Note: See TracBrowser for help on using the repository browser.