fpspreadsheet: Improved search dialog
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4318 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
parent
f9c7e354c5
commit
e633cfc677
@ -52,7 +52,8 @@ type
|
|||||||
procedure SetSearchParams(const AValue: TsSearchParams);
|
procedure SetSearchParams(const AValue: TsSearchParams);
|
||||||
protected
|
protected
|
||||||
procedure ConfirmReplacementHandler(Sender: TObject; AWorksheet: TsWorksheet;
|
procedure ConfirmReplacementHandler(Sender: TObject; AWorksheet: TsWorksheet;
|
||||||
ARow, ACol: Cardinal; const ASearchText, AReplaceText: String; var Allow: Boolean);
|
ARow, ACol: Cardinal; const ASearchText, AReplaceText: String;
|
||||||
|
var AConfirmReplacement: TsConfirmReplacementResult);
|
||||||
procedure PopulateOptions;
|
procedure PopulateOptions;
|
||||||
public
|
public
|
||||||
{ public declarations }
|
{ public declarations }
|
||||||
@ -106,12 +107,16 @@ const
|
|||||||
{ TSearchForms }
|
{ TSearchForms }
|
||||||
|
|
||||||
procedure TSearchForm.ConfirmReplacementHandler(Sender: TObject;
|
procedure TSearchForm.ConfirmReplacementHandler(Sender: TObject;
|
||||||
AWorksheet: TsWorksheet; ARow, ACol: Cardinal;
|
AWorksheet: TsWorksheet; ARow, ACol: Cardinal; const ASearchText, AReplaceText: String;
|
||||||
const ASearchText, AReplaceText: String; var Allow: Boolean);
|
var AConfirmReplacement: TsConfirmReplacementResult);
|
||||||
begin
|
begin
|
||||||
Unused(AWorksheet, ARow, ACol);
|
Unused(AWorksheet, ARow, ACol);
|
||||||
Unused(ASearchText, AReplaceText);
|
Unused(ASearchText, AReplaceText);
|
||||||
Allow := MessageDlg('Replace?', mtConfirmation, [mbYes, mbNo], 0) = mrYes;
|
case MessageDlg('Replace?', mtConfirmation, [mbYes, mbNo, mbCancel], 0) of
|
||||||
|
mrYes: AConfirmReplacement := crReplace;
|
||||||
|
mrNo : AConfirmReplacement := crIgnore;
|
||||||
|
mrCancel: AConfirmReplacement := crAbort;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSearchForm.Execute(AWorkbook: TsWorkbook);
|
procedure TSearchForm.Execute(AWorkbook: TsWorkbook);
|
||||||
|
@ -8,9 +8,11 @@ uses
|
|||||||
Classes, SysUtils, RegExpr, fpstypes, fpspreadsheet;
|
Classes, SysUtils, RegExpr, fpstypes, fpspreadsheet;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
TsConfirmReplacementResult = (crReplace, crIgnore, crAbort);
|
||||||
|
|
||||||
TsConfirmReplacementEvent = procedure (Sender: TObject; AWorksheet: TsWorksheet;
|
TsConfirmReplacementEvent = procedure (Sender: TObject; AWorksheet: TsWorksheet;
|
||||||
ARow, ACol: Cardinal; const ASearchText, AReplaceText: String;
|
ARow, ACol: Cardinal; const ASearchText, AReplaceText: String;
|
||||||
var Allow: Boolean) of object;
|
var AResult: TsConfirmReplacementResult) of object;
|
||||||
|
|
||||||
TsSearchEngine = class
|
TsSearchEngine = class
|
||||||
private
|
private
|
||||||
@ -19,6 +21,7 @@ type
|
|||||||
FSearchParams: TsSearchParams;
|
FSearchParams: TsSearchParams;
|
||||||
FReplaceParams: TsReplaceParams;
|
FReplaceParams: TsReplaceParams;
|
||||||
FRegEx: TRegExpr;
|
FRegEx: TRegExpr;
|
||||||
|
FStopping: Boolean;
|
||||||
FOnConfirmReplacement: TsConfirmReplacementEvent;
|
FOnConfirmReplacement: TsConfirmReplacementEvent;
|
||||||
protected
|
protected
|
||||||
function ExecReplace(AWorksheet: TsWorksheet; ARow, ACol: Cardinal): boolean;
|
function ExecReplace(AWorksheet: TsWorksheet; ARow, ACol: Cardinal): boolean;
|
||||||
@ -75,18 +78,21 @@ end;
|
|||||||
function TsSearchEngine.ExecReplace(AWorksheet: TsWorksheet; ARow, ACol: Cardinal) : Boolean;
|
function TsSearchEngine.ExecReplace(AWorksheet: TsWorksheet; ARow, ACol: Cardinal) : Boolean;
|
||||||
var
|
var
|
||||||
s: String;
|
s: String;
|
||||||
allow: Boolean;
|
|
||||||
flags: TReplaceFlags;
|
flags: TReplaceFlags;
|
||||||
|
confirmation: TsConfirmReplacementResult;
|
||||||
begin
|
begin
|
||||||
if roConfirm in FReplaceParams.Options then
|
if roConfirm in FReplaceParams.Options then
|
||||||
begin
|
begin
|
||||||
allow := false;
|
|
||||||
if Assigned(FOnConfirmReplacement) then
|
if Assigned(FOnConfirmReplacement) then
|
||||||
begin
|
begin
|
||||||
|
confirmation := crReplace;
|
||||||
FOnConfirmReplacement(self, AWorksheet, ARow, ACol,
|
FOnConfirmReplacement(self, AWorksheet, ARow, ACol,
|
||||||
FSearchParams.SearchText, FReplaceParams.ReplaceText, allow);
|
FSearchParams.SearchText, FReplaceParams.ReplaceText, confirmation);
|
||||||
if not allow then
|
case confirmation of
|
||||||
exit(false);
|
crReplace: ;
|
||||||
|
crIgnore : exit(false);
|
||||||
|
crAbort : begin FStopping := true; exit(false); end;
|
||||||
|
end;
|
||||||
end else
|
end else
|
||||||
raise Exception.Create('[TsSearchEngine.ExecReplace] OnConfirmReplacement handler needed.');
|
raise Exception.Create('[TsSearchEngine.ExecReplace] OnConfirmReplacement handler needed.');
|
||||||
end;
|
end;
|
||||||
@ -484,22 +490,38 @@ var
|
|||||||
r,c: Cardinal;
|
r,c: Cardinal;
|
||||||
sheet: TsWorksheet;
|
sheet: TsWorksheet;
|
||||||
begin
|
begin
|
||||||
|
FStopping := false;
|
||||||
|
|
||||||
|
if AReplaceParams.Options * [roReplaceAll, roConfirm] = [roReplaceAll] then
|
||||||
|
FWorkbook.DisableNotifications;
|
||||||
|
|
||||||
Result := FindFirst(ASearchParams, AWorksheet, ARow, ACol);
|
Result := FindFirst(ASearchParams, AWorksheet, ARow, ACol);
|
||||||
|
r := ARow;
|
||||||
|
c := ACol;
|
||||||
|
sheet := AWorksheet;
|
||||||
|
|
||||||
if Result then
|
if Result then
|
||||||
begin
|
begin
|
||||||
FReplaceParams := AReplaceParams;
|
FReplaceParams := AReplaceParams;
|
||||||
Result := ExecReplace(AWorksheet, ARow, ACol);
|
Result := ExecReplace(AWorksheet, ARow, ACol);
|
||||||
if roReplaceAll in FReplaceParams.Options then
|
if roReplaceAll in FReplaceParams.Options then
|
||||||
begin
|
begin
|
||||||
FWorkbook.DisableNotifications;
|
while (not FStopping) and FindNext(FSearchParams, AWorksheet, ARow, ACol) do
|
||||||
while FindNext(FSearchParams, AWorksheet, ARow, ACol) do
|
|
||||||
begin
|
begin
|
||||||
r := ARow;
|
r := ARow;
|
||||||
c := ACol;
|
c := ACol;
|
||||||
sheet := AWorksheet;
|
sheet := AWorksheet;
|
||||||
ExecReplace(AWorksheet, ARow, ACol);
|
ExecReplace(AWorksheet, ARow, ACol);
|
||||||
end;
|
end;
|
||||||
FWorkbook.EnableNotifications;
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if AReplaceParams.Options * [roReplaceAll, roConfirm] = [roReplaceAll] then
|
||||||
|
begin
|
||||||
|
FWorkbook.EnableNotifications;
|
||||||
|
if Result then
|
||||||
|
begin
|
||||||
|
FWorkbook.SelectWorksheet(sheet);
|
||||||
sheet.SelectCell(r, c);
|
sheet.SelectCell(r, c);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -512,7 +534,16 @@ var
|
|||||||
r, c: Cardinal;
|
r, c: Cardinal;
|
||||||
sheet: TsWorksheet;
|
sheet: TsWorksheet;
|
||||||
begin
|
begin
|
||||||
|
FStopping := false;
|
||||||
|
|
||||||
|
if AReplaceParams.Options * [roReplaceAll, roConfirm] = [roReplaceAll] then
|
||||||
|
FWorkbook.DisableNotifications;
|
||||||
|
|
||||||
Result := FindNext(ASearchParams, AWorksheet, ARow, ACol);
|
Result := FindNext(ASearchParams, AWorksheet, ARow, ACol);
|
||||||
|
r := ARow;
|
||||||
|
c := ACol;
|
||||||
|
sheet := AWorksheet;
|
||||||
|
|
||||||
if Result then
|
if Result then
|
||||||
begin
|
begin
|
||||||
FReplaceParams := AReplaceParams;
|
FReplaceParams := AReplaceParams;
|
||||||
@ -520,14 +551,22 @@ begin
|
|||||||
if roReplaceAll in FReplaceParams.Options then
|
if roReplaceAll in FReplaceParams.Options then
|
||||||
begin
|
begin
|
||||||
FWorkbook.DisableNotifications;
|
FWorkbook.DisableNotifications;
|
||||||
while FindNext(FSearchParams, AWorksheet, ARow, ACol) do
|
while (not FStopping) and FindNext(FSearchParams, AWorksheet, ARow, ACol) do
|
||||||
begin
|
begin
|
||||||
r := ARow;
|
r := ARow;
|
||||||
c := ACol;
|
c := ACol;
|
||||||
sheet := AWorksheet;
|
sheet := AWorksheet;
|
||||||
ExecReplace(AWorksheet, ARow, ACol);
|
ExecReplace(AWorksheet, ARow, ACol);
|
||||||
end;
|
end;
|
||||||
FWorkbook.EnableNotifications;
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if AReplaceParams.Options * [roReplaceAll, roConfirm] = [roReplaceAll] then
|
||||||
|
begin
|
||||||
|
FWorkbook.EnableNotifications;
|
||||||
|
if Result then
|
||||||
|
begin
|
||||||
|
FWorkbook.SelectWorksheet(sheet);
|
||||||
sheet.SelectCell(r, c);
|
sheet.SelectCell(r, c);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user