source: trunk/UCore.pas

Last change on this file was 28, checked in by chronos, 21 months ago
  • Modified: Do not create all application forms at initialization phase but dynamically.
File size: 5.1 KB
Line 
1unit UCore;
2
3interface
4
5uses
6 Classes, SysUtils, FileUtil, Controls, ActnList, UDatabase, UTranslator,
7 UApplicationInfo, UPersistentForm, Forms, URegistry, UScaleDPI;
8
9type
10 { TCore }
11
12 TCore = class(TDataModule)
13 AAbout: TAction;
14 ADatabaseConnect: TAction;
15 ADatabaseDisconnect: TAction;
16 ApplicationInfo1: TApplicationInfo;
17 APreferences: TAction;
18 AExit: TAction;
19 ActionList1: TActionList;
20 Translator1: TTranslator;
21 ImageList1: TImageList;
22 PersistentForm1: TPersistentForm;
23 ScaleDPI1: TScaleDPI;
24 procedure AAboutExecute(Sender: TObject);
25 procedure ADatabaseConnectExecute(Sender: TObject);
26 procedure ADatabaseDisconnectExecute(Sender: TObject);
27 procedure AExitExecute(Sender: TObject);
28 procedure APreferencesExecute(Sender: TObject);
29 procedure Translator1Translate(Sender: TObject);
30 procedure DataModuleCreate(Sender: TObject);
31 procedure DataModuleDestroy(Sender: TObject);
32 private
33 FDbClient: TDbClient;
34 Initialized: Boolean;
35 procedure SetDbClient(AValue: TDbClient);
36 public
37 Preferences: TPreferences;
38 DbManager: TDbManager;
39 procedure LoadConfig;
40 procedure SaveConfig;
41 procedure Init;
42 procedure Done;
43 procedure UpdateInterface;
44 property DbClient: TDbClient read FDbClient write SetDbClient;
45 end;
46
47var
48 Core: TCore;
49
50const
51 DefaultRegKey = '\Software\Chronosoft\MyData';
52
53
54implementation
55
56uses
57 UFormTables, UFormConnect, UAboutDialog, UFormDatabases, UFormPreferences,
58 UFormMain;
59
60{$R *.lfm}
61
62{ TCore }
63
64procedure TCore.DataModuleCreate(Sender: TObject);
65begin
66 DbManager := TDbManager.Create;
67 Preferences := TPreferences.Create;
68end;
69
70procedure TCore.DataModuleDestroy(Sender: TObject);
71begin
72 DbClient := nil;
73 FreeAndNil(Preferences);
74 FreeAndNil(DbManager);
75end;
76
77procedure TCore.AExitExecute(Sender: TObject);
78begin
79 FormMain.Close;
80end;
81
82procedure TCore.ADatabaseDisconnectExecute(Sender: TObject);
83begin
84 DbClient := nil;
85end;
86
87procedure TCore.ADatabaseConnectExecute(Sender: TObject);
88begin
89 with TFormDatabases.Create(nil) do
90 try
91 if ShowModal = mrOk then begin
92 DbClient := nil;
93 DbClient := SelectedProfile.GetClient;
94 end;
95 finally
96 Free;
97 end;
98end;
99
100procedure TCore.AAboutExecute(Sender: TObject);
101begin
102 with TAboutDialog.Create(nil) do
103 try
104 ApplicationInfo := ApplicationInfo1;
105 Show;
106 finally
107 Free;
108 end;
109end;
110
111procedure TCore.APreferencesExecute(Sender: TObject);
112begin
113 with TFormPreferences.Create(nil) do
114 try
115 Load(Preferences);
116 if ShowModal = mrOk then Save(Preferences);
117 finally
118 Free;
119 end;
120end;
121
122procedure TCore.Translator1Translate(Sender: TObject);
123var
124 I: Integer;
125begin
126 for I := 0 to DbManager.DataTypes.Count - 1 do begin
127 TDataType(DbManager.DataTypes[I]).Title := Translator1.TranslateText(TDataType(DbManager.DataTypes[I]).Title, TDataType(DbManager.DataTypes[I]).Title);
128 end;
129end;
130
131procedure TCore.SetDbClient(AValue: TDbClient);
132begin
133 if FDbClient = AValue then Exit;
134 if Assigned(FDbClient) then begin
135 FormMain.FormTables.DbClient := nil;
136 DbClient.Save;
137 FreeAndNil(FDbClient);
138 end;
139 FDbClient := AValue;
140 if Assigned(FDbClient) then begin
141 DbClient.Load;
142 Preferences.LastDatabaseName := FDbClient.ConnectProfile.Name;
143 FormMain.FormTables.DbClient := DbClient;
144 end;
145 UpdateInterface;
146end;
147
148procedure TCore.LoadConfig;
149begin
150 with TRegistryEx.Create do
151 try
152 CurrentContext := TRegistryContext.Create(rrKeyCurrentUser, DefaultRegKey);
153 Preferences.RememberDatabase := GetValue('RememberDatabase', True);
154 Preferences.LastDatabaseName := GetValue('LastDatabaseName', '');
155 Translator1.Language := Translator1.Languages.SearchByCode(
156 GetValue('Language', ''));
157 finally
158 Free;
159 end;
160 DbManager.ConnectProfiles.LoadFromRegistry(TRegistryContext.Create(rrKeyCurrentUser, DefaultRegKey + '\Database'));
161end;
162
163procedure TCore.SaveConfig;
164begin
165 with TRegistryEx.Create do
166 try
167 CurrentContext := TRegistryContext.Create(rrKeyCurrentUser, DefaultRegKey);
168 SetValue('RememberDatabase', Preferences.RememberDatabase);
169 SetValue('LastDatabaseName', Preferences.LastDatabaseName);
170 SetValue('Language', Translator1.Language.Code);
171 finally
172 Free;
173 end;
174 DbManager.ConnectProfiles.SaveToRegistry(TRegistryContext.Create(rrKeyCurrentUser, DefaultRegKey + '\Database'));
175end;
176
177procedure TCore.Init;
178var
179 ConnectProfile: TDbConnectProfile;
180begin
181 if not Initialized then begin
182 {$IFDEF UNIX}
183 // If installed in Linux system then use installation directory for po files
184 if Application.ExeName = '/usr/bin/MyData' then
185 Translator1.POFilesFolder := '/usr/share/MyData/languages';
186 {$ENDIF}
187 Initialized := True;
188 LoadConfig;
189 UpdateInterface;
190 if Preferences.RememberDatabase then begin
191 ConnectProfile := DbManager.ConnectProfiles.SearchByName(Preferences.LastDatabaseName);
192 if Assigned(ConnectProfile) then begin
193 DbClient := ConnectProfile.GetClient;
194 end;
195 end else ADatabaseConnect.Execute;
196 end;
197end;
198
199procedure TCore.Done;
200begin
201 SaveConfig;
202 DbClient := nil;
203end;
204
205procedure TCore.UpdateInterface;
206begin
207 ADatabaseDisconnect.Enabled := Assigned(DbClient);
208 FormMain.UpdateInterface;
209end;
210
211end.
212
Note: See TracBrowser for help on using the repository browser.