source: tags/1.0.0/UCore.pas

Last change on this file was 96, checked in by chronos, 6 years ago
  • Added: Theming support.
  • Modified: Items in Options dialog divided to two pages.
File size: 6.2 KB
Line 
1unit UCore;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils, FileUtil, UApplicationInfo, ULastOpenedList, UProject,
9 UCoolTranslator, UTarget, URegistry, Registry, Graphics, Controls, UScaleDPI,
10 UPersistentForm, UTheme, UBFTarget;
11
12type
13
14 { TCore }
15
16 TCore = class(TDataModule)
17 ApplicationInfo: TApplicationInfo;
18 CoolTranslator1: TCoolTranslator;
19 ImageListMain: TImageList;
20 LastOpenedList: TLastOpenedList;
21 PersistentForm1: TPersistentForm;
22 ScaleDPI1: TScaleDPI;
23 ThemeManager: TThemeManager;
24 procedure DataModuleCreate(Sender: TObject);
25 procedure DataModuleDestroy(Sender: TObject);
26 private
27 FCurrentTarget: TTarget;
28 StoredDimension: TControlDimension;
29 procedure SetCurrentTarget(AValue: TTarget);
30 procedure ScaleDPI;
31 public
32 Project: TProject;
33 Targets: TTargetList;
34 OpenProjectOnStart: Boolean;
35 OptimizationLevel: TCompilerOptimization;
36 CellSize: Integer;
37 MemorySize: Integer;
38 Optimizations: TOptimizations;
39 procedure Init;
40 procedure LoadFromRegistry(Context: TRegistryContext);
41 procedure SaveToRegistry(Context: TRegistryContext);
42 property CurrentTarget: TTarget read FCurrentTarget write SetCurrentTarget;
43 end;
44
45var
46 Core: TCore;
47
48
49implementation
50
51{$R *.lfm}
52
53uses
54 UFormMain, Forms, LazFileUtils,
55 // Targets
56 UTargetInterpretter, UTargetFPC, UTargetJava, UTargetDelphi,
57 UTargetPHP, UTargetC, UTargetPython, UTargetCSharp;
58
59const
60 RecentFilesRegKey = 'RecentFiles';
61
62{ TCore }
63
64procedure TCore.DataModuleCreate(Sender: TObject);
65begin
66 Project := TProject.Create;
67 Targets := TTargetList.Create;
68 StoredDimension := TControlDimension.Create;
69
70 // Init targets list
71 Targets.Add(TTargetInterpretter.Create);
72 Targets.Add(TTargetDelphi.Create);
73 Targets.Add(TTargetFPC.Create);
74 Targets.Add(TTargetPHP.Create);
75 Targets.Add(TTargetC.Create);
76 Targets.Add(TTargetJava.Create);
77 Targets.Add(TTargetPython.Create);
78 Targets.Add(TTargetCSharp.Create);
79
80 {$IFDEF Linux}
81 // If installed in Linux system then use installation directory for po files
82 if Application.ExeName = '/usr/bin/' + ExtractFileNameOnly(Application.ExeName) then
83 CoolTranslator1.POFilesFolder := '/usr/share/' + ExtractFileNameOnly(Application.ExeName) + '/languages';
84 {$ENDIF}
85
86 LoadFromRegistry(Core.ApplicationInfo.GetRegistryContext);
87end;
88
89procedure TCore.DataModuleDestroy(Sender: TObject);
90begin
91 SaveToRegistry(Core.ApplicationInfo.GetRegistryContext);
92 FreeAndNil(Targets);
93 FreeAndNil(Project);
94 FreeAndNil(StoredDimension);
95end;
96
97procedure TCore.LoadFromRegistry(Context: TRegistryContext);
98begin
99 with TRegistryEx.Create do
100 try
101 CurrentContext := Context;
102 OpenProjectOnStart := ReadBoolWithDefault('OpenProjectOnStart', True);
103 if ValueExists('LanguageCode') then
104 CoolTranslator1.Language := CoolTranslator1.Languages.SearchByCode(ReadStringWithDefault('LanguageCode', ''))
105 else CoolTranslator1.Language := CoolTranslator1.Languages.SearchByCode('');
106 ScaleDPI1.DPI := Point(ReadIntegerWithDefault('DPIX', 96),
107 ReadIntegerWithDefault('DPIY', 96));
108 ScaleDPI1.AutoDetect := ReadBoolWithDefault('DPIAuto', True);
109 OptimizationLevel := TCompilerOptimization(ReadIntegerWithDefault('OptimizationLevel', Integer(coNormal)));
110 MemorySize := ReadIntegerWithDefault('MemorySize', 30000);
111 CellSize := ReadIntegerWithDefault('CellSize', 256);
112 ThemeManager.Theme := ThemeManager.Themes.FindByName(ReadStringWithDefault('Theme', 'System'));
113 finally
114 Free;
115 end;
116 LastOpenedList.LoadFromRegistry(TRegistryContext.Create(Context.RootKey, Context.Key + '\' + RecentFilesRegKey));
117 Targets.LoadFromRegistry(TRegistryContext.Create(Context.RootKey, Context.Key + '\Compiler'));
118 PersistentForm1.RegistryContext := Context;
119end;
120
121procedure TCore.SaveToRegistry(Context: TRegistryContext);
122begin
123 Targets.SaveToRegistry(TRegistryContext.Create(Context.RootKey, Context.Key + '\Compiler'));
124 LastOpenedList.SaveToRegistry(TRegistryContext.Create(Context.RootKey, Context.Key + '\' + RecentFilesRegKey));
125 with TRegistryEx.Create do
126 try
127 CurrentContext := Context;
128 WriteBool('OpenProjectOnStart', OpenProjectOnStart);
129 WriteBool('DPIAuto', ScaleDPI1.AutoDetect);
130 WriteInteger('DPIX', ScaleDPI1.DPI.X);
131 WriteInteger('DPIY', ScaleDPI1.DPI.Y);
132 WriteInteger('OptimizationLevel', Integer(OptimizationLevel));
133 WriteInteger('MemorySize', MemorySize);
134 WriteInteger('CellSize', CellSize);
135 if Assigned(CoolTranslator1.Language) and (CoolTranslator1.Language.Code <> '') then
136 WriteString('LanguageCode', CoolTranslator1.Language.Code)
137 else DeleteValue('LanguageCode');
138 WriteString('Theme', ThemeManager.Theme.Name);
139 finally
140 Free;
141 end;
142end;
143
144procedure TCore.SetCurrentTarget(AValue: TTarget);
145var
146 I: Integer;
147begin
148 if FCurrentTarget = AValue then Exit;
149 FCurrentTarget := AValue;
150 for I := 0 to Targets.Count - 1 do
151 TTarget(Targets[I]).OnChangeState := nil;
152 if Assigned(FCurrentTarget) then begin
153 FCurrentTarget.OnChangeState := FormMain.TargetStateChanged;
154 FCurrentTarget.OnLog := FormMain.TargetLogExecute;
155 FCurrentTarget.OptimizationLevel := OptimizationLevel;
156 FCurrentTarget.Messages.OnChange := FormMain.MessagesChanged;
157 if FCurrentTarget is TBFTarget then begin
158 TBFTarget(FCurrentTarget).MemorySize := MemorySize;
159 TBFTarget(FCurrentTarget).CellSize := CellSize;
160 end;
161 end;
162 FormMain.UpdateTargetList;
163 FormMain.UpdateInterface;
164end;
165
166procedure TCore.ScaleDPI;
167var
168 I: Integer;
169begin
170 with ScaleDPI1 do begin
171 //DesignDPI := Point(144, 144);
172 if (DesignDPI.X <> DPI.X) or (DesignDPI.Y <> DPI.Y) then begin
173 //ApplyToAll(DesignDPI);
174 for I := 0 to Screen.FormCount - 1 do
175 if (Screen.Forms[I].WindowState = wsNormal) or
176 (Screen.Forms[I].WindowState = wsMinimized) then begin
177 StoreDimensions(Screen.Forms[I], StoredDimension);
178 ScaleDimensions(Screen.Forms[I], StoredDimension);
179 end;
180 ScaleImageList(ImageListMain, DesignDPI);
181 end;
182 end;
183end;
184
185procedure TCore.Init;
186begin
187 ScaleDPI;
188 CoolTranslator1.Translate;
189end;
190
191end.
192
Note: See TracBrowser for help on using the repository browser.