8
Classes, SysUtils, FileUtil, LResources, Forms, Grids, Dialogs, Controls,
9
LCLProc, LCLType, Menus, StdCtrls, LazConfigStorage,
10
IDEOptionsIntf, BaseIDEIntf,
11
EnvironmentOpts, IDEOptionDefs, LazarusIDEStrConsts;
14
FileDialogFilterConfigFile = 'filefilters.xml';
17
{ TFileFiltersOptionsFrame }
19
TFileFiltersOptionsFrame = class(TAbstractIDEOptionsEditor)
20
grdFileFilters: TStringGrid;
22
SetDefaultMenuItem: TMenuItem;
28
procedure grdFileFiltersKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
29
procedure pmiAddRowClick(Sender: TObject);
30
procedure pmiDelRowClick(Sender: TObject);
31
procedure pmiInsRowClick(Sender: TObject);
32
procedure SetDefaultMenuItemClick(Sender: TObject);
38
constructor Create(TheOwner: TComponent); override;
39
destructor Destroy; override;
40
function GetTitle: String; override;
41
procedure Setup(ADialog: TAbstractOptionsEditorDialog); override;
42
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
43
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
44
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
48
procedure LoadFileDialogFilter;
49
procedure SaveFileDialogFilter;
50
function GetDefaultFileDialogFilter: string;
51
function GetFileDialogFilterFromGrid(Grid: TStringGrid): string;
52
procedure LoadGridFromFileDialogFilter(Grid: TStringGrid; Filter: string;
53
AddEmptyRow: boolean);
61
KeyFilterCount = 'Count';
62
KeyFilterName = 'Name';
63
KeyFilterMask = 'Mask';
66
procedure LoadFileDialogFilter;
68
cFilter = '%s (%s)|%s|'; // each filter is seperated by another | sign
77
cfg := GetIDEConfigStorage(FileDialogFilterConfigFile, True);
79
cnt := cfg.GetValue(KeyFilterCount, 0);
83
lName := cfg.GetValue(KeyFilter+IntToStr(i) + '/' + KeyFilterName, '');
84
lMask := cfg.GetValue(KeyFilter+IntToStr(i) + '/' + KeyFilterMask, '*');
85
if (lName='') or (lMask='') then continue;
88
Filter:=Filter+lName+'|'+lMask;
91
Filter:=GetDefaultFileDialogFilter;
95
EnvironmentOptions.FileDialogFilter:=Filter;
98
procedure SaveFileDialogFilter;
109
Filter:=EnvironmentOptions.FileDialogFilter;
110
if Filter=GetDefaultFileDialogFilter then
112
cfg := GetIDEConfigStorage(FileDialogFilterConfigFile,false);
115
if Filter<>'' then begin
121
while not (p^ in ['|',#0]) do inc(p);
123
Caption:=copy(Filter,CaptionStart-PChar(Filter)+1,p-CaptionStart);
127
while not (p^ in ['|',#0]) do inc(p);
128
if p>MaskStart then begin
130
CurMask:=copy(Filter,MaskStart-PChar(Filter)+1,p-MaskStart);
131
cfg.SetValue(KeyFilter+IntToStr(Cnt) + '/' + KeyFilterName, Caption);
132
cfg.SetValue(KeyFilter+IntToStr(Cnt) + '/' + KeyFilterMask, CurMask);
138
cfg.SetValue(KeyFilterCount, Cnt);
140
end else if FileExistsUTF8(cfg.GetFilename) then begin
141
// delete unneeded file
142
DeleteFileUTF8(cfg.GetFilename);
149
function GetDefaultFileDialogFilter: string;
151
Result := lisLazarusUnit + ' (*.pas;*.pp)|*.pas;*.pp'
152
+ '|' + lisLazarusProject + ' (*.lpi)|*.lpi'
153
+ '|' + lisLazarusForm + ' (*.lfm;*.dfm)|*.lfm;*.dfm'
154
+ '|' + lisLazarusPackage + ' (*.lpk)|*.lpk'
155
+ '|' + lisLazarusProjectSource + ' (*.lpr)|*.lpr'
156
+ '|' + lisLazarusOtherFile + ' (*.inc;*.lrs;*.lpl)|*.inc;*.lrs;*.lpl';
159
function GetFileDialogFilterFromGrid(Grid: TStringGrid): string;
166
for i := 1 to Grid.RowCount-1 do
168
CurCaption:=Grid.Cells[1, i];
169
CurMask:=Grid.Cells[2, i];
170
CurCaption:=StringReplace(CurCaption,'|',',',[rfReplaceAll]);
171
CurMask:=StringReplace(CurMask,'|',',',[rfReplaceAll]);
172
if (CurCaption='') or (CurMask='') then continue;
175
Result:=Result+CurCaption+'|'+CurMask;
179
procedure LoadGridFromFileDialogFilter(Grid: TStringGrid; Filter: string;
180
AddEmptyRow: boolean);
182
procedure ReadList(var Cnt: integer; Scan: boolean);
191
if Filter<>'' then begin
197
while not (p^ in ['|',#0]) do inc(p);
199
CurCaption:=copy(Filter,CaptionStart-PChar(Filter)+1,p-CaptionStart);
204
while not (p^ in ['|',#0]) do inc(p);
205
if p>MaskStart then begin
206
CurMask:=copy(Filter,MaskStart-PChar(Filter)+1,p-MaskStart);
208
if not Scan then begin
209
Grid.Cells[1, Cnt] := CurCaption;
210
Grid.Cells[2, Cnt] := CurMask;
213
if p^='|' then break;
228
inc(Cnt,Grid.FixedRows);
229
if AddEmptyRow then inc(Cnt);
230
Grid.RowCount := Cnt;
231
if AddEmptyRow then begin
232
Grid.Cells[1, Cnt-1] := '';
233
Grid.Cells[2, Cnt-1] := '';
237
Grid.EndUpdate(true);
241
{ TFileFiltersOptionsFrame }
243
procedure TFileFiltersOptionsFrame.grdFileFiltersKeyDown(Sender: TObject; var Key: Word;
246
if Key = VK_INSERT then
247
grdFileFilters.RowCount := grdFileFilters.RowCount + 1;
250
procedure TFileFiltersOptionsFrame.pmiAddRowClick(Sender: TObject);
252
grdFileFilters.RowCount := grdFileFilters.RowCount + 1;
255
procedure TFileFiltersOptionsFrame.pmiDelRowClick(Sender: TObject);
257
grdFileFilters.DeleteColRow(False, grdFileFilters.Row);
260
procedure TFileFiltersOptionsFrame.pmiInsRowClick(Sender: TObject);
262
grdFileFilters.InsertColRow(False, grdFileFilters.Row);
265
procedure TFileFiltersOptionsFrame.SetDefaultMenuItemClick(Sender: TObject);
267
if MessageDlg(lisConfirm,
268
lisResetAllFileFiltersToDefaults, mtConfirmation, [mbCancel, mbOK], 0)<>mrOk
270
LoadGridFromFileDialogFilter(grdFileFilters,GetDefaultFileDialogFilter,false);
273
constructor TFileFiltersOptionsFrame.Create(TheOwner: TComponent);
275
inherited Create(TheOwner);
276
FList := TStringList.Create;
279
destructor TFileFiltersOptionsFrame.Destroy;
285
function TFileFiltersOptionsFrame.GetTitle: String;
287
Result := lisFileFilters;
290
procedure TFileFiltersOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
292
lblTitle.Caption := lisFileFiltersTitle;
293
grdFileFilters.DefaultColWidth := 40;
294
grdFileFilters.RowCount := 1;
296
grdFileFilters.Columns[0].Title.Caption := lisName;
297
grdFileFilters.Columns[1].Title.Caption := lisFileFiltersMask;
299
pmiAddRow.Caption := lisFileFiltersAddRow;
300
pmiDelRow.Caption := lisFileFiltersDeleteRow;
301
pmiInsRow.Caption := lisFileFiltersInsertRow;
303
SetDefaultMenuItem.Caption := lisFileFiltersSetDefaults;
306
procedure TFileFiltersOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
308
if fLoaded then exit;
311
LoadGridFromFileDialogFilter(grdFileFilters,EnvironmentOptions.FileDialogFilter,false);
314
procedure TFileFiltersOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
321
Filter:=GetFileDialogFilterFromGrid(grdFileFilters);
323
if EnvironmentOptions.FileDialogFilter<>Filter then begin
324
//debugln(['TFileFiltersOptionsFrame.WriteSettings ']);
325
EnvironmentOptions.FileDialogFilter:=Filter;
326
SaveFileDialogFilter;
330
class function TFileFiltersOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
332
Result := TEnvironmentOptions;
336
RegisterIDEOptionsEditor(GroupEnvironment, TFileFiltersOptionsFrame, EnvOptionsFileFilters);