lazarus/ide/findinfilesdlg.pas
2006-12-01 09:54:59 +00:00

236 lines
8.2 KiB
ObjectPascal

{
*****************************************************************************
* *
* See the file COPYING.modifiedLGPL, included in this distribution, *
* for details about the copyright. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
*****************************************************************************
Author: Mattias Gaertner
Abstract:
Find in files dialog form.
}
unit FindInFilesDlg;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LCLProc, LCLIntf, Controls, StdCtrls, Forms, Buttons,
ExtCtrls, LResources, FileUtil, LazarusIDEStrConsts, Dialogs, SynEditTypes,
IDEDialogs, IDEWindowIntf, InputHistory;
type
{ TLazFindInFilesDialog }
TLazFindInFilesDialog = class(TForm)
ReplaceCheckBox: TCheckBox;
ReplaceTextComboBox: TComboBox;
IncludeSubDirsCheckBox: TCheckBox;
FileMaskComboBox: TComboBox;
DirectoryBrowse: TBitBtn;
DirectoryComboBox: TComboBox;
DirectoryLabel: TLabel;
FileMaskLabel: TLabel;
OKButton: TButton;
CancelButton: TButton;
DirectoryOptionsGroupBox: TGroupBox;
OptionsCheckGroupBox: TCheckGroup;
SelectDirectoryDialog: TSelectDirectoryDialog;
TextToFindComboBox: TComboBox;
TextToFindLabel: TLabel;
WhereRadioGroup: TRadioGroup;
procedure DirectoryBrowseClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure ReplaceCheckBoxChange(Sender: TObject);
procedure WhereRadioGroupClick(Sender: TObject);
private
function GetFindText: string;
function GetOptions: TLazFindInFileSearchOptions;
function GetReplaceText: string;
function GetSynOptions: TSynSearchOptions;
procedure SetFindText(const NewFindText: string);
procedure SetOptions(NewOptions: TLazFindInFileSearchOptions);
procedure SetReplaceText(const AValue: string);
procedure SetSynOptions(NewOptions: TSynSearchOptions);
procedure UpdateReplaceCheck;
public
property Options: TLazFindInFileSearchOptions read GetOptions
write SetOptions;
property FindText: string read GetFindText write SetFindText;
property ReplaceText: string read GetReplaceText write SetReplaceText;
property SynSearchOptions: TSynSearchOptions read GetSynOptions
write SetSynOptions;
end;
var FindInFilesDialog: TLazFindInFilesDialog;
implementation
{ TLazFindInFilesDialog }
procedure TLazFindInFilesDialog.SetFindText(const NewFindText: string);
begin
TextToFindComboBox.Text := NewFindText;
TextToFindComboBox.SelectAll;
ActiveControl := TextToFindComboBox;
end;
function TLazFindInFilesDialog.GetFindText: string;
begin
Result := TextToFindComboBox.Text;
end;
function TLazFindInFilesDialog.GetReplaceText: string;
begin
Result:=ReplaceTextComboBox.Text;
end;
procedure TLazFindInFilesDialog.WhereRadioGroupClick(Sender: TObject);
begin
DirectoryOptionsGroupBox.Enabled := (WhereRadioGroup.ItemIndex = 2)
end;
procedure TLazFindInFilesDialog.DirectoryBrowseClick(Sender: TObject);
begin
InitIDEFileDialog(SelectDirectoryDialog);
if DirectoryExists(DirectoryComboBox.Text) then
SelectDirectoryDialog.InitialDir := DirectoryComboBox.Text else
SelectDirectoryDialog.InitialDir := GetCurrentDir;
if SelectDirectoryDialog.Execute then
DirectoryComboBox.Text := SelectDirectoryDialog.FileName;
StoreIDEFileDialog(SelectDirectoryDialog);
end;
procedure TLazFindInFilesDialog.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
IDEDialogLayoutList.SaveLayout(Self);
end;
procedure TLazFindInFilesDialog.FormCreate(Sender: TObject);
begin
Caption := srkmecFindInFiles;
TextToFindLabel.Caption := lisFindFileTextToFind;
ReplaceCheckBox.Caption := lisMenuReplace;
OptionsCheckGroupBox.Caption := dlgFROpts;
OptionsCheckGroupBox.Items[0] := lisFindFileCaseSensitive;
OptionsCheckGroupBox.Items[1] := lisFindFileWholeWordsOnly;
OptionsCheckGroupBox.Items[2] := lisFindFileRegularExpressions;
OptionsCheckGroupBox.Items[3] := lisFindFileMultiLine;
WhereRadioGroup.Caption:=lisFindFileWhere;
WhereRadioGroup.Items[0] := lisFindFilesearchAllFilesInProject;
WhereRadioGroup.Items[1] := lisFindFilesearchAllOpenFiles;
WhereRadioGroup.Items[2] := lisFindFilesearchInDirectories;
DirectoryOptionsGroupBox.Caption := lisFindFileDirectoryOptions;
DirectoryLabel.Caption := lisCodeToolsDefsInsertBehindDirectory;
FileMaskLabel.Caption := lisFindFileFileMaskBak;
IncludeSubDirsCheckBox.Caption := lisFindFileIncludeSubDirectories;
OkButton.Caption := lisLazBuildOk;
CancelButton.Caption := dlgCancel;
ReplaceCheckBox.Enabled:=true;
UpdateReplaceCheck;
DirectoryOptionsGroupBox.Enabled:=WhereRadioGroup.ItemIndex=2;
IDEDialogLayoutList.ApplyLayout(Self);
end;
procedure TLazFindInFilesDialog.ReplaceCheckBoxChange(Sender: TObject);
begin
UpdateReplaceCheck;
end;
procedure TLazFindInFilesDialog.SetOptions(NewOptions: TLazFindInFileSearchOptions);
begin
OptionsCheckGroupBox.Checked[0] := fifMatchCase in NewOptions;
OptionsCheckGroupBox.Checked[1] := fifWholeWord in NewOptions;
OptionsCheckGroupBox.Checked[2] := fifRegExpr in NewOptions;
OptionsCheckGroupBox.Checked[3] := fifMultiLine in NewOptions;
DirectoryOptionsGroupBox.Enabled := fifSearchDirectories in NewOptions;
IncludeSubDirsCheckBox.Checked := fifIncludeSubDirs in NewOptions;
ReplaceCheckBox.Checked := [fifReplace,fifReplaceAll]*NewOptions<>[];
if fifSearchProject in NewOptions then WhereRadioGroup.ItemIndex := 0;
if fifSearchOpen in NewOptions then WhereRadioGroup.ItemIndex := 1;
if fifSearchDirectories in NewOptions then WhereRadioGroup.ItemIndex := 2;
UpdateReplaceCheck;
end;
function TLazFindInFilesDialog.GetOptions: TLazFindInFileSearchOptions;
begin
Result := [];
if OptionsCheckGroupBox.Checked[0] then Include(Result, fifMatchCase);
if OptionsCheckGroupBox.Checked[1] then Include(Result, fifWholeWord);
if OptionsCheckGroupBox.Checked[2] then Include(Result, fifRegExpr);
if OptionsCheckGroupBox.Checked[3] then Include(Result, fifMultiLine);
if IncludeSubDirsCheckBox.Checked then Include(Result, fifIncludeSubDirs);
if ReplaceCheckBox.Checked then Include(Result, fifReplace);
case WhereRadioGroup.ItemIndex of
0: Include(Result, fifSearchProject);
1: Include(Result, fifSearchOpen);
2: Include(Result, fifSearchDirectories);
end;//case
end;
function TLazFindInFilesDialog.GetSynOptions: TSynSearchOptions;
begin
Result := [];
if OptionsCheckGroupBox.Checked[0] then Include(Result, ssoMatchCase);
if OptionsCheckGroupBox.Checked[1] then Include(Result, ssoWholeWord);
if OptionsCheckGroupBox.Checked[2] then Include(Result, ssoRegExpr);
if OptionsCheckGroupBox.Checked[3] then Include(Result, ssoRegExprMultiLine);
if ReplaceCheckBox.Checked then Include(Result, ssoReplace);
end;//GetSynOptions
procedure TLazFindInFilesDialog.SetReplaceText(const AValue: string);
begin
ReplaceTextComboBox.Text := AValue;
end;
procedure TLazFindInFilesDialog.SetSynOptions(NewOptions: TSynSearchOptions);
begin
OptionsCheckGroupBox.Checked[0] := ssoMatchCase in NewOptions;
OptionsCheckGroupBox.Checked[1] := ssoWholeWord in NewOptions;
OptionsCheckGroupBox.Checked[2] := ssoRegExpr in NewOptions;
OptionsCheckGroupBox.Checked[3] := ssoRegExprMultiLine in NewOptions;
ReplaceCheckBox.Checked := ([ssoReplace,ssoReplaceAll]*NewOptions <> []);
UpdateReplaceCheck;
end;//SetSynOptions
procedure TLazFindInFilesDialog.UpdateReplaceCheck;
begin
ReplaceTextComboBox.Enabled:=ReplaceCheckBox.Checked;
if ReplaceCheckBox.Checked then
OKButton.Caption:=lisMenuReplace
else
OKButton.Caption:=lisMenuFind;
end;
initialization
{$I findinfilesdlg.lrs}
FindInFilesDialog := nil;
end.