|
@@ -14,7 +14,8 @@ uses
|
|
cxButtons, dxSkinscxPCPainter,
|
|
cxButtons, dxSkinscxPCPainter,
|
|
dxBarBuiltInMenu, cxPC, System.ImageList, Vcl.ImgList, cxCheckBox, cxImageList,
|
|
dxBarBuiltInMenu, cxPC, System.ImageList, Vcl.ImgList, cxCheckBox, cxImageList,
|
|
SynEdit, SynHighlighterJSON, SynEditHighlighter, SynHighlighterIni,
|
|
SynEdit, SynHighlighterJSON, SynEditHighlighter, SynHighlighterIni,
|
|
- SynHighlighterXML, SynHighlighterHtml;
|
|
|
|
|
|
+ SynHighlighterXML, SynHighlighterHtml, SynEditRegexSearch, SynEditMiscClasses,
|
|
|
|
+ SynEditSearch, _SearchTextHightlighterSynEditPlugin, SynEditTypes;
|
|
|
|
|
|
type
|
|
type
|
|
TMethodType = (mtGET, mtPOST, mtPATCH, mtPUT, mtDELETE);
|
|
TMethodType = (mtGET, mtPOST, mtPATCH, mtPUT, mtDELETE);
|
|
@@ -105,6 +106,8 @@ type
|
|
pmnuBiggerEditor: TdxBarButton;
|
|
pmnuBiggerEditor: TdxBarButton;
|
|
btnPasteFullURL: TcxButton;
|
|
btnPasteFullURL: TcxButton;
|
|
SynHTMLSyn: TSynHTMLSyn;
|
|
SynHTMLSyn: TSynHTMLSyn;
|
|
|
|
+ SynEditSearch: TSynEditSearch;
|
|
|
|
+ SynEditRegexSearch: TSynEditRegexSearch;
|
|
procedure FormShow(Sender: TObject);
|
|
procedure FormShow(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
@@ -175,6 +178,7 @@ type
|
|
FIsTempProjectLoaded: Boolean;
|
|
FIsTempProjectLoaded: Boolean;
|
|
FTempProjectFile: string;
|
|
FTempProjectFile: string;
|
|
FRoamingSavePath: string;
|
|
FRoamingSavePath: string;
|
|
|
|
+ FSearchFromCaret: Boolean;
|
|
function GetTempProjectFile: string;
|
|
function GetTempProjectFile: string;
|
|
function GetAppVersion: string;
|
|
function GetAppVersion: string;
|
|
procedure UpdateFullURL;
|
|
procedure UpdateFullURL;
|
|
@@ -193,8 +197,24 @@ type
|
|
public
|
|
public
|
|
MainConfig: TJSONConfig;
|
|
MainConfig: TJSONConfig;
|
|
ActiveEditor: TSynEdit;
|
|
ActiveEditor: TSynEdit;
|
|
|
|
+ procedure DoSearchReplaceText(AReplace: Boolean; ABackwards: Boolean);
|
|
|
|
+ procedure ShowSearchReplaceDialog(AReplace: Boolean);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+var
|
|
|
|
+ gbSearchBackwards: Boolean;
|
|
|
|
+ gbSearchCaseSensitive: Boolean;
|
|
|
|
+ gbSearchFromCaret: Boolean;
|
|
|
|
+ gbSearchSelectionOnly: Boolean;
|
|
|
|
+ gbSearchTextAtCaret: Boolean;
|
|
|
|
+ gbSearchWholeWords: Boolean;
|
|
|
|
+ gbSearchRegex: Boolean;
|
|
|
|
+
|
|
|
|
+ gsSearchText: string;
|
|
|
|
+ gsSearchTextHistory: string;
|
|
|
|
+ gsReplaceText: string;
|
|
|
|
+ gsReplaceTextHistory: string;
|
|
|
|
+
|
|
var
|
|
var
|
|
frmMain: TfrmMain;
|
|
frmMain: TfrmMain;
|
|
|
|
|
|
@@ -203,7 +223,7 @@ implementation
|
|
{$R *.dfm}
|
|
{$R *.dfm}
|
|
|
|
|
|
uses System.NetEncoding, System.UITypes, _EncryptStr, JsonDataObjects, IdGlobal, System.IOUtils, uRwXmlDOM,
|
|
uses System.NetEncoding, System.UITypes, _EncryptStr, JsonDataObjects, IdGlobal, System.IOUtils, uRwXmlDOM,
|
|
- _frmBiggerEditor, IdUri;
|
|
|
|
|
|
+ _frmBiggerEditor, IdUri, _frmSearch;
|
|
|
|
|
|
procedure TfrmMain.tbbtnRunClick(Sender: TObject);
|
|
procedure TfrmMain.tbbtnRunClick(Sender: TObject);
|
|
begin
|
|
begin
|
|
@@ -577,6 +597,35 @@ begin
|
|
UpdateEditor(HTTP.Response.RawHeaders.Text);
|
|
UpdateEditor(HTTP.Response.RawHeaders.Text);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TfrmMain.DoSearchReplaceText(AReplace, ABackwards: Boolean);
|
|
|
|
+var
|
|
|
|
+ Options: TSynSearchOptions;
|
|
|
|
+begin
|
|
|
|
+ if AReplace then
|
|
|
|
+ Options := [ssoPrompt, ssoReplace, ssoReplaceAll]
|
|
|
|
+ else
|
|
|
|
+ Options := [];
|
|
|
|
+ if ABackwards then
|
|
|
|
+ Include(Options, ssoBackwards);
|
|
|
|
+ if gbSearchCaseSensitive then
|
|
|
|
+ Include(Options, ssoMatchCase);
|
|
|
|
+ if not FSearchFromCaret then
|
|
|
|
+ Include(Options, ssoEntireScope);
|
|
|
|
+ if gbSearchSelectionOnly then
|
|
|
|
+ Include(Options, ssoSelectedOnly);
|
|
|
|
+ if gbSearchWholeWords then
|
|
|
|
+ Include(Options, ssoWholeWord);
|
|
|
|
+ if gbSearchRegex then
|
|
|
|
+ ActiveEditor.SearchEngine := SynEditRegexSearch
|
|
|
|
+ else
|
|
|
|
+ ActiveEditor.SearchEngine := SynEditSearch;
|
|
|
|
+
|
|
|
|
+ if ActiveEditor.SearchReplace(gsSearchText, gsReplaceText, Options) = 0 then
|
|
|
|
+ begin
|
|
|
|
+ MessageDlg('Text not found.', mtInformation, [mbOK], 0);
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TfrmMain.dxBarButton6Click(Sender: TObject);
|
|
procedure TfrmMain.dxBarButton6Click(Sender: TObject);
|
|
begin
|
|
begin
|
|
Close;
|
|
Close;
|
|
@@ -610,6 +659,18 @@ begin
|
|
ActiveEditor := EditorContent;
|
|
ActiveEditor := EditorContent;
|
|
pmnuBiggerEditorClick(Sender);
|
|
pmnuBiggerEditorClick(Sender);
|
|
end;
|
|
end;
|
|
|
|
+
|
|
|
|
+ if Key = vkF3 then
|
|
|
|
+ begin
|
|
|
|
+ ActiveEditor := EditorContent;
|
|
|
|
+ DoSearchReplaceText(false, false);
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ if (Key = 70) and (Shift = [ssCtrl]) then
|
|
|
|
+ begin
|
|
|
|
+ ActiveEditor := EditorContent;
|
|
|
|
+ ShowSearchReplaceDialog(false);
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.EditorContentMouseUp(Sender: TObject; Button: TMouseButton;
|
|
procedure TfrmMain.EditorContentMouseUp(Sender: TObject; Button: TMouseButton;
|
|
@@ -739,6 +800,20 @@ begin
|
|
MainConfig.WriteInteger('MainWindowPos', 'Height', Height);
|
|
MainConfig.WriteInteger('MainWindowPos', 'Height', Height);
|
|
MainConfig.WriteBool('MainWindowPos', 'StayOnTop', FormStyle = fsStayOnTop);
|
|
MainConfig.WriteBool('MainWindowPos', 'StayOnTop', FormStyle = fsStayOnTop);
|
|
|
|
|
|
|
|
+ MainConfig.WriteBool('Search', 'gbSearchBackwards', gbSearchBackwards);
|
|
|
|
+ MainConfig.WriteBool('Search', 'gbSearchCaseSensitive', gbSearchCaseSensitive);
|
|
|
|
+ MainConfig.WriteBool('Search', 'gbSearchFromCaret', gbSearchFromCaret);
|
|
|
|
+ MainConfig.WriteBool('Search', 'gbSearchSelectionOnly', gbSearchSelectionOnly);
|
|
|
|
+ MainConfig.WriteBool('Search', 'gbSearchTextAtCaret', gbSearchTextAtCaret);
|
|
|
|
+ MainConfig.WriteBool('Search', 'gbSearchWholeWords', gbSearchWholeWords);
|
|
|
|
+ MainConfig.WriteBool('Search', 'gbSearchRegex', gbSearchRegex);
|
|
|
|
+
|
|
|
|
+ MainConfig.WriteString('Search', 'gsSearchText', gsSearchText);
|
|
|
|
+ MainConfig.WriteString('Search', 'gsSearchTextHistory', gsSearchTextHistory);
|
|
|
|
+ MainConfig.WriteString('Search', 'gsReplaceText', gsReplaceText);
|
|
|
|
+ MainConfig.WriteString('Search', 'gsReplaceTextHistory', gsReplaceTextHistory);
|
|
|
|
+
|
|
|
|
+
|
|
SavePreset;
|
|
SavePreset;
|
|
|
|
|
|
if FProjectConfig.FileModified then
|
|
if FProjectConfig.FileModified then
|
|
@@ -811,6 +886,12 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+
|
|
|
|
+ with TSearchTextHightlighterSynEditPlugin.Create(EditorContent) do
|
|
|
|
+ begin
|
|
|
|
+ Attribute.Background := $0078AAFF;
|
|
|
|
+ end;
|
|
|
|
+
|
|
LoadProject;
|
|
LoadProject;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -865,6 +946,20 @@ begin
|
|
|
|
|
|
dxStatusBar.Panels[1].Text := '';
|
|
dxStatusBar.Panels[1].Text := '';
|
|
dxStatusBar.Panels[2].Text := '';
|
|
dxStatusBar.Panels[2].Text := '';
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ gbSearchBackwards := MainConfig.ReadBool('Search', 'gbSearchBackwards', gbSearchBackwards);
|
|
|
|
+ gbSearchCaseSensitive := MainConfig.ReadBool('Search', 'gbSearchCaseSensitive', gbSearchCaseSensitive);
|
|
|
|
+ gbSearchFromCaret :=MainConfig.ReadBool('Search', 'gbSearchFromCaret', gbSearchFromCaret);
|
|
|
|
+ gbSearchSelectionOnly := MainConfig.ReadBool('Search', 'gbSearchSelectionOnly', gbSearchSelectionOnly);
|
|
|
|
+ gbSearchTextAtCaret := MainConfig.ReadBool('Search', 'gbSearchTextAtCaret', gbSearchTextAtCaret);
|
|
|
|
+ gbSearchWholeWords := MainConfig.ReadBool('Search', 'gbSearchWholeWords', gbSearchWholeWords);
|
|
|
|
+ gbSearchRegex := MainConfig.ReadBool('Search', 'gbSearchRegex', gbSearchRegex);
|
|
|
|
+
|
|
|
|
+ gsSearchText := MainConfig.ReadString('Search', 'gsSearchText', gsSearchText);
|
|
|
|
+ gsSearchTextHistory := MainConfig.ReadString('Search', 'gsSearchTextHistory', gsSearchTextHistory);
|
|
|
|
+ gsReplaceText := MainConfig.ReadString('Search', 'gsReplaceText', gsReplaceText);
|
|
|
|
+ gsReplaceTextHistory := MainConfig.ReadString('Search', 'gsReplaceTextHistory', gsReplaceTextHistory);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TfrmMain.GetAppVersion: string;
|
|
function TfrmMain.GetAppVersion: string;
|
|
@@ -1240,4 +1335,46 @@ begin
|
|
MessageDlg(AErrorText, mtError, [mbOK], 0);
|
|
MessageDlg(AErrorText, mtError, [mbOK], 0);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TfrmMain.ShowSearchReplaceDialog(AReplace: Boolean);
|
|
|
|
+begin
|
|
|
|
+ with frmSearch do
|
|
|
|
+ begin
|
|
|
|
+ // assign search options
|
|
|
|
+ SearchBackwards := gbSearchBackwards;
|
|
|
|
+ SearchCaseSensitive := gbSearchCaseSensitive;
|
|
|
|
+ SearchFromCursor := gbSearchFromCaret;
|
|
|
|
+ SearchInSelectionOnly := gbSearchSelectionOnly;
|
|
|
|
+ // start with last search text
|
|
|
|
+ SearchText := gsSearchText;
|
|
|
|
+ if gbSearchTextAtCaret then
|
|
|
|
+ begin
|
|
|
|
+ // if something is selected search for that text
|
|
|
|
+ if ActiveEditor.SelAvail and (ActiveEditor.BlockBegin.Line = ActiveEditor.BlockEnd.Line)
|
|
|
|
+ then
|
|
|
|
+ SearchText := ActiveEditor.SelText
|
|
|
|
+ else
|
|
|
|
+ SearchText := ActiveEditor.GetWordAtRowCol(ActiveEditor.CaretXY);
|
|
|
|
+ end;
|
|
|
|
+ SearchTextHistory := gsSearchTextHistory;
|
|
|
|
+ SearchWholeWords := gbSearchWholeWords;
|
|
|
|
+ if ShowModal = mrOK then
|
|
|
|
+ begin
|
|
|
|
+ gbSearchBackwards := SearchBackwards;
|
|
|
|
+ gbSearchCaseSensitive := SearchCaseSensitive;
|
|
|
|
+ gbSearchFromCaret := SearchFromCursor;
|
|
|
|
+ gbSearchSelectionOnly := SearchInSelectionOnly;
|
|
|
|
+ gbSearchWholeWords := SearchWholeWords;
|
|
|
|
+ gbSearchRegex := SearchRegularExpression;
|
|
|
|
+ gsSearchText := SearchText;
|
|
|
|
+ gsSearchTextHistory := SearchTextHistory;
|
|
|
|
+ FSearchFromCaret := gbSearchFromCaret;
|
|
|
|
+ if gsSearchText <> '' then
|
|
|
|
+ begin
|
|
|
|
+ DoSearchReplaceText(AReplace, gbSearchBackwards);
|
|
|
|
+ FSearchFromCaret := TRUE;
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
end.
|
|
end.
|