Module
Path
C:\PROJEKT\PSearch\psform.pas
Last Modified
2007-05-17 15:55:36
Comments
Open Todo-items for PsForm (1)
Units Used in Interface
Classes
Procedures
Global Variables
Module Source
1 unit PsForm;
2 // Main form (and only form) in TurboSearch
3
4 (*$I GDEFINE.INC*)
5
6 interface
7
8 uses
9 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
10 StdCtrls, Buttons, StBase, SsBase, StBrowsr, RzButton, ExtCtrls,
11 RzPanel, RzStatus, PsEngine, GDebuObj, Menus;
12
13 type
14 TPSMainForm = class(TForm)
15 Memo: TMemo;
16 CmdSave: TBitBtn;
17 StBrowser: TStBrowser;
18 CmdSearch: TBitBtn;
19 Label3: TLabel;
20 SaveDialog: TSaveDialog;
21 GroupBox1: TGroupBox;
22 Label1: TLabel;
23 Label2: TLabel;
24 chkIncludeSubFolders: TCheckBox;
25 CmdSelStartDir: TButton;
26 GroupBox2: TGroupBox;
27 chkAllFiles: TCheckBox;
28 chkOnlyWeb: TCheckBox;
29 chkOnlyInc: TCheckBox;
30 chkOnlySql: TCheckBox;
31 chkOnlyVB: TCheckBox;
32 chkOnlyDelphi: TCheckBox;
33 chkOnlyTxt: TCheckBox;
34 Bevel1: TBevel;
35 Label4: TLabel;
36 chkListAllSearched: TCheckBox;
37 RzStatusBar: TRzStatusBar;
38 RzClockStatus: TRzClockStatus;
39 RzStatusPane: TRzStatusPane;
40 RzStatusPane1: TRzStatusPane;
41 CmdStop: TBitBtn;
42 chkCaseSensitive: TCheckBox;
43 CmdQuit: TBitBtn;
44 cmbRootDir: TComboBox;
45 cmbPattern: TComboBox;
46 chkClearResults: TCheckBox;
47 MainMenu1: TMainMenu;
48 File1: TMenuItem;
49 Help1: TMenuItem;
50 Quit1: TMenuItem;
51 Contents1: TMenuItem;
52 About1: TMenuItem;
53 N1: TMenuItem;
54 procedure CmdSearchClick(Sender: TObject);
55 procedure CmdSaveClick(Sender: TObject);
56 procedure CmdSelStartDirClick(Sender: TObject);
57 procedure FormCreate(Sender: TObject);
58 procedure FormDestroy(Sender: TObject);
59 procedure cmbPatternChange(Sender: TObject);
60 procedure chkAllFilesClick(Sender: TObject);
61 procedure FormShow(Sender: TObject);
62 procedure CmdStopClick(Sender: TObject);
63 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
64 procedure CmdQuitClick(Sender: TObject);
65 procedure cmbRootDirChange(Sender: TObject);
66 procedure MemoDblClick(Sender: TObject);
67 procedure Quit1Click(Sender: TObject);
68 procedure About1Click(Sender: TObject);
69 procedure cmbRootDirExit(Sender: TObject);
70 private
71 AllowClickEvents : boolean;
72 Analyzing : boolean;
73
74 SF : TSearchedFilesSet;
75 SearchInfo : TList;
76
77 FRootDirs : TStringList;
78 FPatterns : TStringList;
79
80 procedure GeneralSearch;
81 procedure UpdateStatus;
82 end;
83
84 var
85 PSMainForm: TPSMainForm;
86
87 implementation
88
89 {$R *.DFM}
90
91 uses
92 IniFiles, StStrL, GAsmCode, GVcl, BAbout, BGuard, BUtils;
93
94 procedure TPSMainForm.GeneralSearch;
95 // this is the GeneralSearch method
96 var
97 PS : TPatternSearcher;
98 IsEval : boolean;
99 begin
100 (*$IFDEF Eval*)
101 IsEval := true;
102 (*$ELSE*)
103 IsEval := false;
104 (*$ENDIF*)
105
106 PS := TPatternSearcher.Create(cmbRootDir.Text, cmbPattern.Text,
107 chkIncludeSubFolders.Checked, chkListAllSearched.Checked,
108 chkCaseSensitive.Checked, SF, Memo.Lines, nil, IsEval);
109 try
110 PS.Search;
111 finally
112 PS.Free;
113 end;
114 end;
115
116 procedure TPSMainForm.CmdSearchClick(Sender: TObject);
117 var
118 Idx : integer;
119 S : string;
120 begin
121 Screen.Cursor := crHourGlass;
122
123 try
124 S := cmbPattern.Text;
125 Idx := cmbPattern.Items.IndexOf(S);
126
127 if Idx <> -1 then // existing item modified
128 cmbPattern.Items[Idx] := S
129 else
130 begin // new item added
131 cmbPattern.Items.Add(S);
132 Idx := cmbPattern.Items.Count-1;
133 end;
134
135 cmbPattern.Text := S;
136 cmbPattern.ItemIndex := Idx;
137
138 if chkClearResults.Checked then
139 Memo.Clear;
140
141 SF := [];
142
143 if chkAllFiles.Checked then
144 SF := [sfAll]
145 else
146 begin
147 if chkOnlyInc.Checked then
148 Include(SF, sfOnlyInc);
149
150 if chkOnlyWeb.Checked then
151 Include(SF, sfOnlyWeb);
152
153 if chkOnlySql.Checked then
154 Include(SF, sfOnlySql);
155
156 if chkOnlyDelphi.Checked then
157 Include(SF, sfOnlyDelphi);
158
159 if chkOnlyVB.Checked then
160 Include(SF, sfOnlyVB);
161
162 if chkOnlyTxt.Checked then
163 Include(SF, sfOnlyTxt);
164 end;
165
166 CmdSearch.Enabled := false;
167 CmdSave.Enabled := false;
168 CmdStop.Enabled := true;
169 CmdQuit.Enabled := false;
170
171 PsEngine.gStopped := false;
172 Analyzing := true;
173
174 GeneralSearch;
175
176 Memo.SetFocus;
177 UpdateStatus;
178
179 finally
180 Analyzing := false;
181 CmdSearch.Enabled := true;
182 CmdStop.Enabled := false;
183 CmdQuit.Enabled := true;
184
185 UpdateStatus;
186 Screen.Cursor := crDefault;
187 end;
188 end;
189
190 procedure TPSMainForm.CmdSaveClick(Sender: TObject);
191 begin
192 if SaveDialog.Execute then
193 begin
194 Screen.Cursor := crHourglass;
195
196 try
197 Memo.Lines.SaveToFile(SaveDialog.FileName);
198 finally
199 Screen.Cursor := crDefault;
200 end;
201 end;
202 end;
203
204 procedure TPSMainForm.CmdSelStartDirClick(Sender: TObject);
205 var
206 Idx : integer;
207 S : string;
208 begin
209 StBrowser.AdditionalText := 'Select a root directory';
210 StBrowser.SelectedFolder := cmbRootDir.Text;
211
212 if StBrowser.Execute then
213 begin
214 S := StBrowser.Path;
215 Idx := cmbRootDir.Items.IndexOf(S);
216
217 if Idx <> -1 then // existing item modified
218 cmbRootDir.Items[Idx] := S
219 else
220 begin // new item added
221 cmbRootDir.Items.Add(S);
222 Idx := cmbRootDir.Items.Count-1;
223 end;
224
225 cmbRootDir.Text := S;
226 cmbRootDir.ItemIndex := Idx;
227 end;
228 end;
229
230 procedure TPSMainForm.FormCreate(Sender: TObject);
231 var
232 IniFile : TIniFile;
233 I, RootDirIndex, PatternIndex : integer;
234 S : string;
235 begin
236 RzStatusPane.Caption := 'Version '+GetFileVersion;
237 RzStatusPane1.Caption := GetCopyright;
238
239 FRootDirs := TStringList.Create;
240 FPatterns := TStringList.Create;
241
242 SearchInfo := TList.Create;
243 IniFile := TIniFile.Create(ForceExtensionL(Application.ExeName, 'ini'));
244
245 try
246 I := 1;
247
248 repeat
249 S := IniFile.ReadString('Options', 'RootDir'+_FastIntToStr(I), '');
250 inc(I);
251
252 if S <> '' then
253 FRootDirs.Add(S);
254 until S = '';
255
256 RootDirIndex := IniFile.ReadInteger('Options', 'RootDirIndex', -1);
257 cmbRootDir.Items.Assign(FRootDirs);
258 CmbSelItem(cmbRootDir, RootDirIndex);
259
260 I := 1;
261
262 repeat
263 S := IniFile.ReadString('Options', 'Pattern'+_FastIntToStr(I), '');
264 inc(I);
265
266 if S <> '' then
267 FPatterns.Add(S);
268 until S = '';
269
270 PatternIndex := IniFile.ReadInteger('Options', 'PatternIndex', -1);
271 cmbPattern.Items.Assign(FPatterns);
272 CmbSelItem(cmbPattern, PatternIndex);
273
274 chkIncludeSubFolders.Checked := IniFile.ReadBool('Options', 'IncludeSubFolders', true);
275 chkListAllSearched.Checked := IniFile.ReadBool('Options', 'ListAllSearched', true);
276 chkCaseSensitive.Checked := IniFile.ReadBool('Options', 'CaseSensitive', false);
277 chkClearResults.Checked := IniFile.ReadBool('Options', 'ClearResults', true);
278
279 Height := IniFile.ReadInteger('Options', 'Height', 460);
280 Width := IniFile.ReadInteger('Options', 'Width', 620);
281
282 chkAllFiles.Checked := IniFile.ReadBool('FileTypes', 'AllFiles', true);
283 chkOnlyInc.Checked := IniFile.ReadBool('FileTypes', 'OnlyInc', false);
284 chkOnlyWeb.Checked := IniFile.ReadBool('FileTypes', 'OnlyWeb', false);
285 chkOnlySql.Checked := IniFile.ReadBool('FileTypes', 'OnlySQL', false);
286 chkOnlyDelphi.Checked := IniFile.ReadBool('FileTypes', 'OnlyDelphi', false);
287 chkOnlyVB.Checked := IniFile.ReadBool('FileTypes', 'OnlyVB', false);
288 chkOnlyTxt.Checked := IniFile.ReadBool('FileTypes', 'OnlyTxt', false);
289
290 finally
291 IniFile.Free;
292 end;
293 end;
294
295 procedure TPSMainForm.FormDestroy(Sender: TObject);
296 var
297 IniFile : TIniFile;
298 I, RootDirIndex, PatternIndex : integer;
299 begin
300 IniFile := TIniFile.Create(ForceExtensionL(Application.ExeName, 'ini'));
301
302 try
303 SetListFromCombo(FRootDirs, RootDirIndex, cmbRootDir);
304
305 for I := 1 to FRootDirs.Count do
306 IniFile.WriteString('Options', 'RootDir'+_FastIntToStr(I), FRootDirs[I-1]);
307
308 IniFile.WriteInteger('Options', 'RootDirIndex', RootDirIndex);
309
310 SetListFromCombo(FPatterns, PatternIndex, cmbPattern);
311
312 for I := 1 to FPatterns.Count do
313 IniFile.WriteString('Options', 'Pattern'+_FastIntToStr(I), FPatterns[I-1]);
314
315 IniFile.WriteInteger('Options', 'PatternIndex', PatternIndex);
316
317 IniFile.WriteBool('Options', 'IncludeSubFolders', chkIncludeSubFolders.Checked);
318 IniFile.WriteBool('Options', 'ListAllSearched', chkListAllSearched.Checked);
319 IniFile.WriteBool('Options', 'CaseSensitive', chkCaseSensitive.Checked);
320 IniFile.WriteBool('Options', 'ClearResults', chkClearResults.Checked);
321
322 IniFile.WriteInteger('Options', 'Height', Height);
323 IniFile.WriteInteger('Options', 'Width', Width);
324
325 IniFile.WriteBool('FileTypes', 'AllFiles', chkAllFiles.Checked);
326 IniFile.WriteBool('FileTypes', 'OnlyInc', chkOnlyInc.Checked);
327 IniFile.WriteBool('FileTypes', 'OnlyWeb', chkOnlyWeb.Checked);
328 IniFile.WriteBool('FileTypes', 'OnlySQL', chkOnlySql.Checked);
329 IniFile.WriteBool('FileTypes', 'OnlyDelphi', chkOnlyDelphi.Checked);
330 IniFile.WriteBool('FileTypes', 'OnlyVB', chkOnlyVB.Checked);
331 IniFile.WriteBool('FileTypes', 'OnlyTxt', chkOnlyTxt.Checked);
332
333 finally
334 IniFile.Free;
335 end;
336
337 SearchInfo.Free;
338 FPatterns.Free;
339 FRootDirs.Free;
340 end;
341
342 procedure TPSMainForm.cmbPatternChange(Sender: TObject);
343 begin
344 if AllowClickEvents then
345 UpdateStatus;
346 end;
347
348 procedure TPSMainForm.UpdateStatus;
349 var
350 Enable : boolean;
351 begin
352 CmdSearch.Enabled := (cmbRootDir.Text <> '') and
353 (cmbPattern.Text <> '');
354
355 CmdStop.Enabled := false;
356 CmdSave.Enabled := Memo.Lines.Count > 0;
357
358 Enable := not chkAllFiles.Checked;
359 chkOnlyInc.Enabled := Enable;
360 chkOnlyWeb.Enabled := Enable;
361 chkOnlySql.Enabled := Enable;
362 chkOnlyDelphi.Enabled := Enable;
363 chkOnlyVB.Enabled := Enable;
364 chkOnlyTxt.Enabled := Enable;
365 end;
366
367 procedure TPSMainForm.FormShow(Sender: TObject);
368 begin
369 UpdateStatus;
370 AllowClickEvents := true;
371 end;
372
373 procedure TPSMainForm.chkAllFilesClick(Sender: TObject);
374 begin
375 if AllowClickEvents then
376 UpdateStatus;
377 end;
378
379 procedure TPSMainForm.CmdStopClick(Sender: TObject);
380 begin
381 PsEngine.gStopped := true;
382 end;
383
384 procedure TPSMainForm.FormCloseQuery(Sender: TObject;
385 var CanClose: Boolean);
386 begin
387 if Analyzing then
388 CanClose := false;
389 end;
390
391 procedure TPSMainForm.CmdQuitClick(Sender: TObject);
392 begin
393 Close;
394 end;
395
396 procedure TPSMainForm.cmbRootDirChange(Sender: TObject);
397 begin
398 if AllowClickEvents then
399 UpdateStatus;
400 end;
401
402 procedure TPSMainForm.MemoDblClick(Sender: TObject);
403 begin
404 // TODO : double-click to open in app
405 end;
406
407 procedure TPSMainForm.Quit1Click(Sender: TObject);
408 begin
409 Close;
410 end;
411
412 procedure TPSMainForm.About1Click(Sender: TObject);
413 begin
414 ShowAboutBox(BGuard.gGuardKey_TurboSearch, '3@Q.!%4%.', '3@Q.!%4%.',
415 Icon, false);
416
417 UpdateStatus;
418 end;
419
420 procedure TPSMainForm.cmbRootDirExit(Sender: TObject);
421 var
422 Txt : string;
423 Idx : integer;
424 begin
425 Txt := cmbRootDir.Text;
426
427 if Txt <> '' then
428 begin
429 Idx := cmbRootDir.Items.IndexOf(Txt);
430
431 if Idx = -1 then
432 cmbRootDir.Items.Add(Txt);
433 end;
434 end;
435
436 end.
Module Calls (2 levels)
PsForm
└PsEngine
Module Called-By (2 levels)
PsForm
ts┘