mirror of https://gitlab.com/basile.b/dexed.git
search widget, get rid of the centralized option system
+ checkbox state saved in addition to MRUs
This commit is contained in:
parent
35c7d0a2ed
commit
f475ef18b8
|
|
@ -133,9 +133,9 @@ inherited CESearchWidget: TCESearchWidget
|
||||||
TabOrder = 3
|
TabOrder = 3
|
||||||
object chkWWord: TCheckBox
|
object chkWWord: TCheckBox
|
||||||
Left = 8
|
Left = 8
|
||||||
Height = 21
|
Height = 23
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 84
|
Width = 86
|
||||||
Caption = 'whole word'
|
Caption = 'whole word'
|
||||||
Checked = True
|
Checked = True
|
||||||
State = cbChecked
|
State = cbChecked
|
||||||
|
|
@ -143,17 +143,17 @@ inherited CESearchWidget: TCESearchWidget
|
||||||
end
|
end
|
||||||
object chkBack: TCheckBox
|
object chkBack: TCheckBox
|
||||||
Left = 8
|
Left = 8
|
||||||
Height = 21
|
Height = 23
|
||||||
Top = 24
|
Top = 24
|
||||||
Width = 73
|
Width = 75
|
||||||
Caption = 'backward'
|
Caption = 'backward'
|
||||||
TabOrder = 2
|
TabOrder = 2
|
||||||
end
|
end
|
||||||
object chkFromCur: TCheckBox
|
object chkFromCur: TCheckBox
|
||||||
Left = 8
|
Left = 8
|
||||||
Height = 21
|
Height = 23
|
||||||
Top = 48
|
Top = 48
|
||||||
Width = 84
|
Width = 86
|
||||||
Caption = 'from cursor'
|
Caption = 'from cursor'
|
||||||
Checked = True
|
Checked = True
|
||||||
State = cbChecked
|
State = cbChecked
|
||||||
|
|
@ -161,25 +161,25 @@ inherited CESearchWidget: TCESearchWidget
|
||||||
end
|
end
|
||||||
object chkCaseSens: TCheckBox
|
object chkCaseSens: TCheckBox
|
||||||
Left = 128
|
Left = 128
|
||||||
Height = 21
|
Height = 23
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 93
|
Width = 95
|
||||||
Caption = 'case sensitive'
|
Caption = 'case sensitive'
|
||||||
TabOrder = 4
|
TabOrder = 4
|
||||||
end
|
end
|
||||||
object chkPrompt: TCheckBox
|
object chkPrompt: TCheckBox
|
||||||
Left = 128
|
Left = 128
|
||||||
Height = 21
|
Height = 23
|
||||||
Top = 24
|
Top = 24
|
||||||
Width = 62
|
Width = 64
|
||||||
Caption = 'prompt'
|
Caption = 'prompt'
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
end
|
end
|
||||||
object chkRegex: TCheckBox
|
object chkRegex: TCheckBox
|
||||||
Left = 128
|
Left = 128
|
||||||
Height = 21
|
Height = 23
|
||||||
Top = 48
|
Top = 48
|
||||||
Width = 117
|
Width = 119
|
||||||
Caption = 'regular expression'
|
Caption = 'regular expression'
|
||||||
Checked = True
|
Checked = True
|
||||||
State = cbChecked
|
State = cbChecked
|
||||||
|
|
@ -244,10 +244,10 @@ inherited CESearchWidget: TCESearchWidget
|
||||||
ClientWidth = 386
|
ClientWidth = 386
|
||||||
TabOrder = 5
|
TabOrder = 5
|
||||||
object cbReplaceWth: TComboBox
|
object cbReplaceWth: TComboBox
|
||||||
Left = 92
|
Left = 94
|
||||||
Height = 23
|
Height = 23
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 294
|
Width = 292
|
||||||
Align = alClient
|
Align = alClient
|
||||||
Anchors = [akTop, akLeft, akBottom]
|
Anchors = [akTop, akLeft, akBottom]
|
||||||
ItemHeight = 15
|
ItemHeight = 15
|
||||||
|
|
@ -258,7 +258,7 @@ inherited CESearchWidget: TCESearchWidget
|
||||||
Left = 0
|
Left = 0
|
||||||
Height = 23
|
Height = 23
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 92
|
Width = 94
|
||||||
Align = alLeft
|
Align = alLeft
|
||||||
Caption = 'Replace with '
|
Caption = 'Replace with '
|
||||||
OnChange = chkEnableRepChange
|
OnChange = chkEnableRepChange
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,41 @@ interface
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
||||||
Menus, StdCtrls, actnList, Buttons, SynEdit, SynEditSearch, SynEditTypes,
|
Menus, StdCtrls, actnList, Buttons, SynEdit, SynEditSearch, SynEditTypes,
|
||||||
ce_common, ce_mru, ce_widget, ce_synmemo, ce_interfaces, ce_observer;
|
ce_common, ce_mru, ce_widget, ce_synmemo, ce_interfaces, ce_observer,
|
||||||
|
ce_writableComponent;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
{ TCESearchWidget }
|
// TCESearchWidget persistents settings
|
||||||
|
TCESearchOptions = class(TWritableLfmTextComponent)
|
||||||
|
private
|
||||||
|
fPrompt: boolean;
|
||||||
|
fFromCur: boolean;
|
||||||
|
fRegex: boolean;
|
||||||
|
fCaseSens:boolean;
|
||||||
|
fBackWard: boolean;
|
||||||
|
fWholeWord: boolean;
|
||||||
|
fMrSearches: TStringList;
|
||||||
|
fMrReplacements: TStringList;
|
||||||
|
procedure setMrSearches(aValue: TStringList);
|
||||||
|
procedure setMrReplacements(aValue: TStringList);
|
||||||
|
published
|
||||||
|
property prompt: boolean read fPrompt write fPrompt;
|
||||||
|
property fromCursor: boolean read fFromCur write fFromCur;
|
||||||
|
property regex: boolean read fRegex write fRegex;
|
||||||
|
property caseSensistive: boolean read fCaseSens write fCaseSens;
|
||||||
|
property backward: boolean read fBackWard write fBackWard;
|
||||||
|
property wholeWord: boolean read fWholeWord write fWholeWord;
|
||||||
|
property recentSearches: TStringList read fMrSearches write setMrSearches;
|
||||||
|
property recentReplacements: TStringList read fMrReplacements write setMrReplacements;
|
||||||
|
public
|
||||||
|
constructor create(aOwner: TComponent); override;
|
||||||
|
destructor destroy; override;
|
||||||
|
procedure Assign(aValue: TPersistent); override;
|
||||||
|
procedure AssignTo(aValue: TPersistent); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TCESearchWidget }
|
||||||
TCESearchWidget = class(TCEWidget, ICEMultiDocObserver)
|
TCESearchWidget = class(TCEWidget, ICEMultiDocObserver)
|
||||||
btnFind: TBitBtn;
|
btnFind: TBitBtn;
|
||||||
btnReplace: TBitBtn;
|
btnReplace: TBitBtn;
|
||||||
|
|
@ -42,10 +71,6 @@ type
|
||||||
fCancelAll: boolean;
|
fCancelAll: boolean;
|
||||||
fHasSearched: boolean;
|
fHasSearched: boolean;
|
||||||
fHasRestarted: boolean;
|
fHasRestarted: boolean;
|
||||||
procedure optset_SearchMru(aReader: TReader);
|
|
||||||
procedure optget_SearchMru(aWriter: TWriter);
|
|
||||||
procedure optset_ReplaceMru(aReader: TReader);
|
|
||||||
procedure optget_ReplaceMru(aWriter: TWriter);
|
|
||||||
function getOptions: TSynSearchOptions;
|
function getOptions: TSynSearchOptions;
|
||||||
procedure actReplaceAllExecute(sender: TObject);
|
procedure actReplaceAllExecute(sender: TObject);
|
||||||
procedure replaceEvent(Sender: TObject; const ASearch, AReplace:
|
procedure replaceEvent(Sender: TObject; const ASearch, AReplace:
|
||||||
|
|
@ -65,8 +90,6 @@ type
|
||||||
function contextActionCount: integer; override;
|
function contextActionCount: integer; override;
|
||||||
function contextAction(index: integer): TAction; override;
|
function contextAction(index: integer): TAction; override;
|
||||||
//
|
//
|
||||||
procedure sesoptDeclareProperties(aFiler: TFiler); override;
|
|
||||||
//
|
|
||||||
procedure actFindNextExecute(sender: TObject);
|
procedure actFindNextExecute(sender: TObject);
|
||||||
procedure actReplaceNextExecute(sender: TObject);
|
procedure actReplaceNextExecute(sender: TObject);
|
||||||
end;
|
end;
|
||||||
|
|
@ -74,8 +97,77 @@ type
|
||||||
implementation
|
implementation
|
||||||
{$R *.lfm}
|
{$R *.lfm}
|
||||||
|
|
||||||
|
const
|
||||||
|
OptsFname = 'search.txt';
|
||||||
|
|
||||||
|
{$REGION TCESearchOptions ------------------------------------------------------}
|
||||||
|
constructor TCESearchOptions.create(aOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
fMrReplacements := TStringList.Create;
|
||||||
|
fMrSearches := TStringList.Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TCESearchOptions.destroy;
|
||||||
|
begin
|
||||||
|
fMrSearches.Free;
|
||||||
|
fMrReplacements.Free;
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESearchOptions.Assign(aValue: TPersistent);
|
||||||
|
var
|
||||||
|
widg: TCESearchWidget;
|
||||||
|
begin
|
||||||
|
if aValue is TCESearchWidget then
|
||||||
|
begin
|
||||||
|
widg := TCESearchWidget(aValue);
|
||||||
|
fMrSearches.Assign(widg.cbToFind.Items);
|
||||||
|
fMrReplacements.Assign(widg.cbReplaceWth.Items);
|
||||||
|
fPrompt := widg.chkPrompt.Checked;
|
||||||
|
fBackWard := widg.chkBack.Checked;
|
||||||
|
fCaseSens := widg.chkCaseSens.Checked;
|
||||||
|
fRegex := widg.chkRegex.Checked;
|
||||||
|
fFromCur := widg.chkFromCur.Checked;
|
||||||
|
fWholeWord := widg.chkWWord.Checked;
|
||||||
|
end
|
||||||
|
else inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESearchOptions.AssignTo(aValue: TPersistent);
|
||||||
|
var
|
||||||
|
widg: TCESearchWidget;
|
||||||
|
begin
|
||||||
|
if aValue is TCESearchWidget then
|
||||||
|
begin
|
||||||
|
widg := TCESearchWidget(aValue);
|
||||||
|
widg.cbToFind.Items.Assign(fMrSearches);
|
||||||
|
widg.cbReplaceWth.Items.Assign(fMrReplacements);
|
||||||
|
widg.chkPrompt.Checked := fPrompt;
|
||||||
|
widg.chkBack.Checked := fBackWard;
|
||||||
|
widg.chkCaseSens.Checked:= fCaseSens;
|
||||||
|
widg.chkRegex.Checked := fRegex;
|
||||||
|
widg.chkFromCur.Checked := fFromCur;
|
||||||
|
widg.chkWWord.Checked := fWholeWord;
|
||||||
|
end
|
||||||
|
else inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESearchOptions.setMrSearches(aValue: TStringList);
|
||||||
|
begin
|
||||||
|
fMrSearches.Assign(aValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESearchOptions.setMrReplacements(aValue: TStringList);
|
||||||
|
begin
|
||||||
|
fMrReplacements.Assign(aValue);
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION Standard Comp/Obj------------------------------------------------------}
|
{$REGION Standard Comp/Obj------------------------------------------------------}
|
||||||
constructor TCESearchWidget.Create(aOwner: TComponent);
|
constructor TCESearchWidget.Create(aOwner: TComponent);
|
||||||
|
var
|
||||||
|
fname: string;
|
||||||
begin
|
begin
|
||||||
fActFindNext := TAction.Create(self);
|
fActFindNext := TAction.Create(self);
|
||||||
fActFindNext.Caption := 'Find';
|
fActFindNext.Caption := 'Find';
|
||||||
|
|
@ -88,6 +180,15 @@ begin
|
||||||
fActReplaceAll.OnExecute := @actReplaceAllExecute;
|
fActReplaceAll.OnExecute := @actReplaceAllExecute;
|
||||||
inherited;
|
inherited;
|
||||||
//
|
//
|
||||||
|
fname := getCoeditDocPath + OptsFname;
|
||||||
|
if FileExists(fname) then with TCESearchOptions.create(nil) do
|
||||||
|
try
|
||||||
|
loadFromFile(fname);
|
||||||
|
AssignTo(self);
|
||||||
|
finally
|
||||||
|
free;
|
||||||
|
end;
|
||||||
|
//
|
||||||
btnFind.Action := fActFindNext;
|
btnFind.Action := fActFindNext;
|
||||||
btnReplace.Action := fActReplaceNext;
|
btnReplace.Action := fActReplaceNext;
|
||||||
btnReplaceAll.Action := fActReplaceAll;
|
btnReplaceAll.Action := fActReplaceAll;
|
||||||
|
|
@ -100,6 +201,14 @@ end;
|
||||||
|
|
||||||
destructor TCESearchWidget.Destroy;
|
destructor TCESearchWidget.Destroy;
|
||||||
begin
|
begin
|
||||||
|
with TCESearchOptions.create(nil) do
|
||||||
|
try
|
||||||
|
Assign(self);
|
||||||
|
saveToFile(getCoeditDocPath + OptsFname);
|
||||||
|
finally
|
||||||
|
free;
|
||||||
|
end;
|
||||||
|
//
|
||||||
EntitiesConnector.removeObserver(self);
|
EntitiesConnector.removeObserver(self);
|
||||||
fSearchMru.Free;
|
fSearchMru.Free;
|
||||||
fReplaceMru.Free;
|
fReplaceMru.Free;
|
||||||
|
|
@ -107,36 +216,6 @@ begin
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION ICESessionOptionsObserver ---------------------------------------------}
|
|
||||||
procedure TCESearchWidget.sesoptDeclareProperties(aFiler: TFiler);
|
|
||||||
begin
|
|
||||||
inherited;
|
|
||||||
aFiler.DefineProperty(Name + '_FindMRU', @optset_SearchMru, @optget_SearchMru, true);
|
|
||||||
aFiler.DefineProperty(Name + '_ReplaceMRU', @optset_ReplaceMru, @optget_ReplaceMru, true);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCESearchWidget.optset_SearchMru(aReader: TReader);
|
|
||||||
begin
|
|
||||||
fSearchMru.DelimitedText := aReader.ReadString;
|
|
||||||
cbToFind.Items.DelimitedText := fSearchMru.DelimitedText;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCESearchWidget.optget_SearchMru(aWriter: TWriter);
|
|
||||||
begin
|
|
||||||
aWriter.WriteString(fSearchMru.DelimitedText);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCESearchWidget.optset_ReplaceMru(aReader: TReader);
|
|
||||||
begin
|
|
||||||
fReplaceMru.DelimitedText := aReader.ReadString;
|
|
||||||
cbReplaceWth.Items.DelimitedText := fReplaceMru.DelimitedText ;
|
|
||||||
end;
|
|
||||||
procedure TCESearchWidget.optget_ReplaceMru(aWriter: TWriter);
|
|
||||||
begin
|
|
||||||
aWriter.WriteString(fReplaceMru.DelimitedText);
|
|
||||||
end;
|
|
||||||
{$ENDREGION}
|
|
||||||
|
|
||||||
{$REGION ICEContextualActions---------------------------------------------------}
|
{$REGION ICEContextualActions---------------------------------------------------}
|
||||||
function TCESearchWidget.contextName: string;
|
function TCESearchWidget.contextName: string;
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue