mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-07 12:32:37 +02:00
236 lines
8.2 KiB
ObjectPascal
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.
|
|
|