IDE: save/restore Find/Replace dialog state if dialog was canceled. Issue #31567, modified patch by FTurtle

git-svn-id: trunk@54454 -
This commit is contained in:
ondrej 2017-03-21 19:41:59 +00:00
parent 20a9ecf1d5
commit f3a6a4e47b
2 changed files with 31 additions and 2 deletions

View File

@ -43,6 +43,12 @@ type
TOnFindDlgKey = procedure(Sender: TObject; var Key: Word; Shift:TShiftState; TOnFindDlgKey = procedure(Sender: TObject; var Key: Word; Shift:TShiftState;
FindDlgComponent: TFindDlgComponent) of Object; FindDlgComponent: TFindDlgComponent) of Object;
TLazFindReplaceState = record
FindText: string;
ReplaceText: string;
Options: TSynSearchOptions;
end;
{ TLazFindReplaceDialog } { TLazFindReplaceDialog }
TLazFindReplaceDialog = class(TForm) TLazFindReplaceDialog = class(TForm)
@ -102,6 +108,8 @@ type
destructor Destroy; override; destructor Destroy; override;
procedure UpdateHints; procedure UpdateHints;
procedure ResetUserHistory; procedure ResetUserHistory;
procedure RestoreState(const AState: TLazFindReplaceState);
procedure SaveState(out AState: TLazFindReplaceState);
public public
property Options: TSynSearchOptions read GetOptions write SetOptions; property Options: TSynSearchOptions read GetOptions write SetOptions;
property EnableAutoComplete: boolean read GetEnableAutoComplete property EnableAutoComplete: boolean read GetEnableAutoComplete
@ -212,8 +220,24 @@ begin
DlgHistoryIndex[c] := -1; DlgHistoryIndex[c] := -1;
end; end;
procedure TLazFindReplaceDialog.TextToFindComboBoxKeyDown( procedure TLazFindReplaceDialog.RestoreState(const AState: TLazFindReplaceState
Sender: TObject; var Key:Word; Shift:TShiftState); );
begin
Options:=AState.Options;
FindText:=AState.FindText;
ReplaceText:=AState.ReplaceText;
end;
procedure TLazFindReplaceDialog.SaveState(out AState: TLazFindReplaceState);
begin
FillChar(AState, SizeOf(TLazFindReplaceState), 0);
AState.Options:=Options;
AState.FindText:=FindText;
AState.ReplaceText:=ReplaceText;
end;
procedure TLazFindReplaceDialog.TextToFindComboboxKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
var var
Component: TFindDlgComponent; Component: TFindDlgComponent;
HistoryList: TStringList; HistoryList: TStringList;

View File

@ -3332,7 +3332,9 @@ var
NewOptions: TSynSearchOptions; NewOptions: TSynSearchOptions;
ALeft,ATop:integer; ALeft,ATop:integer;
DlgResult: TModalResult; DlgResult: TModalResult;
AState: TLazFindReplaceState;
begin begin
LazFindReplaceDialog.SaveState(AState);
LazFindReplaceDialog.ResetUserHistory; LazFindReplaceDialog.ResetUserHistory;
//debugln('TSourceEditor.StartFindAndReplace A LazFindReplaceDialog.FindText="',dbgstr(LazFindReplaceDialog.FindText),'"'); //debugln('TSourceEditor.StartFindAndReplace A LazFindReplaceDialog.FindText="',dbgstr(LazFindReplaceDialog.FindText),'"');
if ReadOnly then Replace := False; if ReadOnly then Replace := False;
@ -3384,7 +3386,10 @@ begin
InputHistoriesSO.FindOptions:=LazFindReplaceDialog.Options*SaveOptions; InputHistoriesSO.FindOptions:=LazFindReplaceDialog.Options*SaveOptions;
InputHistoriesSO.FindAutoComplete:=LazFindReplaceDialog.EnableAutoComplete; InputHistoriesSO.FindAutoComplete:=LazFindReplaceDialog.EnableAutoComplete;
if DlgResult = mrCancel then if DlgResult = mrCancel then
begin
LazFindReplaceDialog.RestoreState(AState);
exit; exit;
end;
//debugln('TSourceEditor.StartFindAndReplace B LazFindReplaceDialog.FindText="',dbgstr(LazFindReplaceDialog.FindText),'"'); //debugln('TSourceEditor.StartFindAndReplace B LazFindReplaceDialog.FindText="',dbgstr(LazFindReplaceDialog.FindText),'"');
Replace:=ssoReplace in LazFindReplaceDialog.Options; Replace:=ssoReplace in LazFindReplaceDialog.Options;