|
@@ -15,7 +15,7 @@ uses
|
|
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, SynEditRegexSearch, SynEditMiscClasses,
|
|
SynHighlighterXML, SynHighlighterHtml, SynEditRegexSearch, SynEditMiscClasses,
|
|
- SynEditSearch, _SearchTextHightlighterSynEditPlugin, SynEditTypes;
|
|
|
|
|
|
+ SynEditSearch, _SearchTextHightlighterSynEditPlugin, SynEditTypes, cxSplitter;
|
|
|
|
|
|
type
|
|
type
|
|
TMethodType = (mtGET, mtPOST, mtPATCH, mtPUT, mtDELETE);
|
|
TMethodType = (mtGET, mtPOST, mtPATCH, mtPUT, mtDELETE);
|
|
@@ -47,7 +47,7 @@ type
|
|
PageControlResponse: TcxPageControl;
|
|
PageControlResponse: TcxPageControl;
|
|
tabContent: TcxTabSheet;
|
|
tabContent: TcxTabSheet;
|
|
tabHeaders: TcxTabSheet;
|
|
tabHeaders: TcxTabSheet;
|
|
- Panel2: TPanel;
|
|
|
|
|
|
+ pnlHeader: TPanel;
|
|
dxBarSubItem4: TdxBarSubItem;
|
|
dxBarSubItem4: TdxBarSubItem;
|
|
tbbtnStayOnTop: TdxBarButton;
|
|
tbbtnStayOnTop: TdxBarButton;
|
|
edtBaseURL: TcxTextEdit;
|
|
edtBaseURL: TcxTextEdit;
|
|
@@ -107,6 +107,7 @@ type
|
|
SynHTMLSyn: TSynHTMLSyn;
|
|
SynHTMLSyn: TSynHTMLSyn;
|
|
SynEditSearch: TSynEditSearch;
|
|
SynEditSearch: TSynEditSearch;
|
|
SynEditRegexSearch: TSynEditRegexSearch;
|
|
SynEditRegexSearch: TSynEditRegexSearch;
|
|
|
|
+ cxSplitter1: TcxSplitter;
|
|
procedure FormShow(Sender: TObject);
|
|
procedure FormShow(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
@@ -178,6 +179,7 @@ type
|
|
FTempProjectFile: string;
|
|
FTempProjectFile: string;
|
|
FRoamingSavePath: string;
|
|
FRoamingSavePath: string;
|
|
FSearchFromCaret: Boolean;
|
|
FSearchFromCaret: Boolean;
|
|
|
|
+ FPresetsList: TStringList;
|
|
FHTTP: TIdHTTP;
|
|
FHTTP: TIdHTTP;
|
|
function GetTempProjectFile: string;
|
|
function GetTempProjectFile: string;
|
|
function GetAppVersion: string;
|
|
function GetAppVersion: string;
|
|
@@ -194,7 +196,11 @@ type
|
|
procedure DoGETRequest(const AMethodType: TMethodType);
|
|
procedure DoGETRequest(const AMethodType: TMethodType);
|
|
procedure DoPOSTRequest(const AMethodType: TMethodType);
|
|
procedure DoPOSTRequest(const AMethodType: TMethodType);
|
|
procedure UpdateEditor(const AText: string);
|
|
procedure UpdateEditor(const AText: string);
|
|
|
|
+ procedure UpdatePresetsCombobox;
|
|
procedure CheckForUpdate;
|
|
procedure CheckForUpdate;
|
|
|
|
+ function GenerateGuid: string;
|
|
|
|
+ function Encode(const AText: string): string;
|
|
|
|
+ function Decode(const AText: string): string;
|
|
public
|
|
public
|
|
MainConfig: TJSONConfig;
|
|
MainConfig: TJSONConfig;
|
|
ActiveEditor: TSynEdit;
|
|
ActiveEditor: TSynEdit;
|
|
@@ -214,6 +220,9 @@ type
|
|
procedure ShowSearchReplaceDialog(AReplace: Boolean);
|
|
procedure ShowSearchReplaceDialog(AReplace: Boolean);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+const
|
|
|
|
+ iCurrentConfigVersion: Integer = 2;
|
|
|
|
+
|
|
|
|
|
|
var
|
|
var
|
|
frmMain: TfrmMain;
|
|
frmMain: TfrmMain;
|
|
@@ -276,6 +285,17 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TfrmMain.UpdatePresetsCombobox;
|
|
|
|
+var
|
|
|
|
+ i: Integer;
|
|
|
|
+begin
|
|
|
|
+ comboPresets.Properties.Items.Clear;
|
|
|
|
+ for i := 0 to FPresetsList.Count - 1 do
|
|
|
|
+ begin
|
|
|
|
+ comboPresets.Properties.Items.Add(Decode(FPresetsList.ValueFromIndex[i]));
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TfrmMain.tbbtnAutoOpenLastUsedClick(Sender: TObject);
|
|
procedure TfrmMain.tbbtnAutoOpenLastUsedClick(Sender: TObject);
|
|
begin
|
|
begin
|
|
MainConfig.WriteBool('Project', 'AutoOpenLastUsed', tbbtnAutoOpenLastUsed.Down);
|
|
MainConfig.WriteBool('Project', 'AutoOpenLastUsed', tbbtnAutoOpenLastUsed.Down);
|
|
@@ -307,10 +327,11 @@ end;
|
|
|
|
|
|
procedure TfrmMain.AddPreset(const APresetName: string);
|
|
procedure TfrmMain.AddPreset(const APresetName: string);
|
|
begin
|
|
begin
|
|
- comboPresets.Properties.Items.Add(APresetName);
|
|
|
|
|
|
+ FPresetsList.AddPair(GenerateGuid, Encode(APresetName));
|
|
|
|
+ UpdatePresetsCombobox;
|
|
comboPresets.ItemIndex := comboPresets.Properties.Items.Count - 1;
|
|
comboPresets.ItemIndex := comboPresets.Properties.Items.Count - 1;
|
|
|
|
|
|
- FProjectConfig.WriteString('Presets', 'Presets', comboPresets.Properties.Items.Text);
|
|
|
|
|
|
+ FProjectConfig.WriteString('Presets', 'Presets', FPresetsList.Text);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.btnAddClick(Sender: TObject);
|
|
procedure TfrmMain.btnAddClick(Sender: TObject);
|
|
@@ -334,7 +355,7 @@ begin
|
|
if MessageDlg('Really delete preset "' + comboPresets.Text + '"?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
|
|
if MessageDlg('Really delete preset "' + comboPresets.Text + '"?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
|
|
begin
|
|
begin
|
|
DeletePreset(comboPresets.ItemIndex);
|
|
DeletePreset(comboPresets.ItemIndex);
|
|
- FProjectConfig.WriteString('Presets', 'Presets', comboPresets.Properties.Items.Text);
|
|
|
|
|
|
+ FProjectConfig.WriteString('Presets', 'Presets', FPresetsList.Text);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
@@ -350,9 +371,10 @@ begin
|
|
if InputQuery('Edit Preset', 'Rename preset:', dmy) then
|
|
if InputQuery('Edit Preset', 'Rename preset:', dmy) then
|
|
begin
|
|
begin
|
|
comboPresets.Properties.Items[comboPresets.ItemIndex] := dmy;
|
|
comboPresets.Properties.Items[comboPresets.ItemIndex] := dmy;
|
|
|
|
+ FPresetsList.ValueFromIndex[idx] := Encode(dmy);
|
|
comboPresets.ItemIndex := idx;
|
|
comboPresets.ItemIndex := idx;
|
|
|
|
|
|
- FProjectConfig.WriteString('Presets', 'Presets', comboPresets.Properties.Items.Text);
|
|
|
|
|
|
+ FProjectConfig.WriteString('Presets', 'Presets', FPresetsList.Text);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -376,7 +398,7 @@ begin
|
|
SavePreset;
|
|
SavePreset;
|
|
idx := comboPresets.ItemIndex;
|
|
idx := comboPresets.ItemIndex;
|
|
AddPreset('Copy of ' + comboPresets.Text);
|
|
AddPreset('Copy of ' + comboPresets.Text);
|
|
- FProjectConfig.CopySection('Preset_' + idx.ToString, 'Preset_' + comboPresets.ItemIndex.ToString);
|
|
|
|
|
|
+ FProjectConfig.CopySection('Preset_' + FPresetsList.Names[idx], 'Preset_' + FPresetsList.Names[comboPresets.ItemIndex]);
|
|
LoadPreset;
|
|
LoadPreset;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -614,33 +636,23 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.DeletePreset(const AID: Integer);
|
|
procedure TfrmMain.DeletePreset(const AID: Integer);
|
|
-var
|
|
|
|
- i: Integer;
|
|
|
|
- strlist: TStringList;
|
|
|
|
begin
|
|
begin
|
|
comboPresets.Properties.OnChange := nil;
|
|
comboPresets.Properties.OnChange := nil;
|
|
- comboPresets.ItemIndex := comboPresets.Properties.Items.Count - 1;
|
|
|
|
comboPresets.Properties.Items.Delete(AID);
|
|
comboPresets.Properties.Items.Delete(AID);
|
|
- FProjectConfig.DeleteSection('Preset_' + AID.ToString);
|
|
|
|
-
|
|
|
|
- //Rename Section Names - skip first section. This is the global configuration
|
|
|
|
- strlist := TStringList.Create;
|
|
|
|
- try
|
|
|
|
- FProjectConfig.ReadSections(strlist);
|
|
|
|
-
|
|
|
|
- for i := 1 to strlist.Count - 1 do
|
|
|
|
- begin
|
|
|
|
- FProjectConfig.RenameSection(strlist[i], 'Preset_' + (i - 1).ToString);
|
|
|
|
- end;
|
|
|
|
- finally
|
|
|
|
- strlist.Free;
|
|
|
|
- end;
|
|
|
|
|
|
+ FProjectConfig.DeleteSection('Preset_' + FPresetsList.Names[AID]);
|
|
|
|
+ FPresetsList.Delete(AID);
|
|
|
|
+ comboPresets.ItemIndex := comboPresets.Properties.Items.Count - 1;
|
|
|
|
|
|
FActivePreset := comboPresets.Text;
|
|
FActivePreset := comboPresets.Text;
|
|
LoadPreset;
|
|
LoadPreset;
|
|
comboPresets.Properties.OnChange := comboPresetsPropertiesChange;
|
|
comboPresets.Properties.OnChange := comboPresetsPropertiesChange;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function TfrmMain.Decode(const AText: string): string;
|
|
|
|
+begin
|
|
|
|
+ Result := TNetEncoding.Base64.Decode(AText);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TfrmMain.DoGETRequest(const AMethodType: TMethodType);
|
|
procedure TfrmMain.DoGETRequest(const AMethodType: TMethodType);
|
|
var
|
|
var
|
|
dmy: string;
|
|
dmy: string;
|
|
@@ -898,6 +910,11 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function TfrmMain.Encode(const AText: string): string;
|
|
|
|
+begin
|
|
|
|
+ Result := TNetEncoding.Base64.Encode(AText);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
|
|
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
|
|
begin
|
|
begin
|
|
MainConfig.WriteInteger('MainWindowPos', 'Left', Left);
|
|
MainConfig.WriteInteger('MainWindowPos', 'Left', Left);
|
|
@@ -905,6 +922,7 @@ begin
|
|
MainConfig.WriteInteger('MainWindowPos', 'Width', Width);
|
|
MainConfig.WriteInteger('MainWindowPos', 'Width', Width);
|
|
MainConfig.WriteInteger('MainWindowPos', 'Height', Height);
|
|
MainConfig.WriteInteger('MainWindowPos', 'Height', Height);
|
|
MainConfig.WriteBool('MainWindowPos', 'StayOnTop', FormStyle = fsStayOnTop);
|
|
MainConfig.WriteBool('MainWindowPos', 'StayOnTop', FormStyle = fsStayOnTop);
|
|
|
|
+ MainConfig.WriteInteger('MainWindowPos', 'HeaderHeight', pnlHeader.Height);
|
|
|
|
|
|
MainConfig.WriteBool('Search', 'gbSearchBackwards', gbSearchBackwards);
|
|
MainConfig.WriteBool('Search', 'gbSearchBackwards', gbSearchBackwards);
|
|
MainConfig.WriteBool('Search', 'gbSearchCaseSensitive', gbSearchCaseSensitive);
|
|
MainConfig.WriteBool('Search', 'gbSearchCaseSensitive', gbSearchCaseSensitive);
|
|
@@ -959,6 +977,9 @@ begin
|
|
FActiveProject := '';
|
|
FActiveProject := '';
|
|
FActivePreset := '';
|
|
FActivePreset := '';
|
|
|
|
|
|
|
|
+ FPresetsList := TStringList.Create;
|
|
|
|
+ FPresetsList.NameValueSeparator := ':';
|
|
|
|
+
|
|
ActiveEditor := nil;
|
|
ActiveEditor := nil;
|
|
|
|
|
|
if (not MainConfig.ReadBool('Main', 'FirstStartShown')) and (FileExists(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'Example Config.rdproj')) then
|
|
if (not MainConfig.ReadBool('Main', 'FirstStartShown')) and (FileExists(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'Example Config.rdproj')) then
|
|
@@ -1001,6 +1022,7 @@ end;
|
|
|
|
|
|
procedure TfrmMain.FormDestroy(Sender: TObject);
|
|
procedure TfrmMain.FormDestroy(Sender: TObject);
|
|
begin
|
|
begin
|
|
|
|
+ FPresetsList.Free;
|
|
FProjectConfig.Free;
|
|
FProjectConfig.Free;
|
|
MainConfig.Free;
|
|
MainConfig.Free;
|
|
end;
|
|
end;
|
|
@@ -1042,6 +1064,8 @@ begin
|
|
tbbtnStayOnTop.Down := False;
|
|
tbbtnStayOnTop.Down := False;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+ pnlHeader.Height := MainConfig.ReadInteger('MainWindowPos', 'HeaderHeight', 370);
|
|
|
|
+
|
|
tbbtnAutoOpenLastUsed.Down := MainConfig.ReadBool('Project', 'AutoOpenLastUsed', True);
|
|
tbbtnAutoOpenLastUsed.Down := MainConfig.ReadBool('Project', 'AutoOpenLastUsed', True);
|
|
tbbtnAutoSaveProject.Down := MainConfig.ReadBool('Project', 'AutoSaveProject', True);
|
|
tbbtnAutoSaveProject.Down := MainConfig.ReadBool('Project', 'AutoSaveProject', True);
|
|
|
|
|
|
@@ -1069,6 +1093,18 @@ begin
|
|
CheckForUpdate;
|
|
CheckForUpdate;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function TfrmMain.GenerateGuid: string;
|
|
|
|
+var
|
|
|
|
+ guid: TGUID;
|
|
|
|
+begin
|
|
|
|
+ CreateGUID(guid);
|
|
|
|
+ Result := GUIDToString(guid);
|
|
|
|
+ Result := StringReplace(Result, '{', '', [rfReplaceAll]);
|
|
|
|
+ Result := StringReplace(Result, '}', '', [rfReplaceAll]);
|
|
|
|
+ Result := StringReplace(Result, '-', '', [rfReplaceAll]);
|
|
|
|
+ Result := LowerCase(Result);
|
|
|
|
+end;
|
|
|
|
+
|
|
function TfrmMain.GetAppVersion: string;
|
|
function TfrmMain.GetAppVersion: string;
|
|
var
|
|
var
|
|
VerInfoSize: DWORD;
|
|
VerInfoSize: DWORD;
|
|
@@ -1121,7 +1157,7 @@ begin
|
|
idx := comboPresets.Properties.Items.IndexOf(FActivePreset);
|
|
idx := comboPresets.Properties.Items.IndexOf(FActivePreset);
|
|
if idx > -1 then
|
|
if idx > -1 then
|
|
begin
|
|
begin
|
|
- preset := 'Preset_' + idx.ToString;
|
|
|
|
|
|
+ preset := 'Preset_' + FPresetsList.Names[idx];
|
|
edtBaseURL.Text := FProjectConfig.ReadString(preset, 'BaseURL');
|
|
edtBaseURL.Text := FProjectConfig.ReadString(preset, 'BaseURL');
|
|
comboMethod.ItemIndex := FProjectConfig.ReadInteger(preset, 'Method', 0);
|
|
comboMethod.ItemIndex := FProjectConfig.ReadInteger(preset, 'Method', 0);
|
|
EditorURLParams.Lines.Text := FProjectConfig.ReadString(preset, 'URLParams');
|
|
EditorURLParams.Lines.Text := FProjectConfig.ReadString(preset, 'URLParams');
|
|
@@ -1138,6 +1174,9 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.LoadProject;
|
|
procedure TfrmMain.LoadProject;
|
|
|
|
+var
|
|
|
|
+ strlist: TStringList;
|
|
|
|
+ i: Integer;
|
|
begin
|
|
begin
|
|
if FIsTempProjectLoaded then
|
|
if FIsTempProjectLoaded then
|
|
begin
|
|
begin
|
|
@@ -1156,9 +1195,37 @@ begin
|
|
FProjectConfig.Free;
|
|
FProjectConfig.Free;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+
|
|
FProjectConfig := TJSONConfig.Create(FActiveProject, False);
|
|
FProjectConfig := TJSONConfig.Create(FActiveProject, False);
|
|
FProjectConfig.AutoSave := False;
|
|
FProjectConfig.AutoSave := False;
|
|
- comboPresets.Properties.Items.Text := FProjectConfig.ReadString('Presets', 'Presets');
|
|
|
|
|
|
+
|
|
|
|
+ if FProjectConfig.ReadInteger('Presets', 'ConfigVersion') <> iCurrentConfigVersion then
|
|
|
|
+ begin
|
|
|
|
+ //Upgrade config to newest version
|
|
|
|
+ strlist := TStringList.Create;
|
|
|
|
+ try
|
|
|
|
+ strlist.Text := FProjectConfig.ReadString('Presets', 'Presets');
|
|
|
|
+ FPresetsList.Clear;
|
|
|
|
+ for i := 0 to strlist.Count - 1 do
|
|
|
|
+ begin
|
|
|
|
+ FPresetsList.AddPair(GenerateGuid, Encode(strlist[i]));
|
|
|
|
+ FProjectConfig.RenameSection('Preset_' + i.ToString, 'Preset_' + FPresetsList.Names[i]);
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ FProjectConfig.WriteString('Presets', 'Presets', FPresetsList.Text);
|
|
|
|
+ FProjectConfig.WriteInteger('Presets', 'ConfigVersion', iCurrentConfigVersion);
|
|
|
|
+ FProjectConfig.Save;
|
|
|
|
+ finally
|
|
|
|
+ strlist.Free;
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ FPresetsList.Clear;
|
|
|
|
+ FPresetsList.DelimitedText := FProjectConfig.ReadString('Presets', 'Presets');
|
|
|
|
+
|
|
|
|
+ UpdatePresetsCombobox;
|
|
|
|
+
|
|
if comboPresets.Properties.Items.Count = 0 then
|
|
if comboPresets.Properties.Items.Count = 0 then
|
|
begin
|
|
begin
|
|
// Add default
|
|
// Add default
|
|
@@ -1402,7 +1469,7 @@ begin
|
|
idx := comboPresets.Properties.Items.IndexOf(FActivePreset);
|
|
idx := comboPresets.Properties.Items.IndexOf(FActivePreset);
|
|
if idx > -1 then
|
|
if idx > -1 then
|
|
begin
|
|
begin
|
|
- preset := 'Preset_' + idx.ToString;
|
|
|
|
|
|
+ preset := 'Preset_' + FPresetsList.Names[idx];
|
|
FProjectConfig.WriteString(preset, 'BaseURL', edtBaseURL.Text);
|
|
FProjectConfig.WriteString(preset, 'BaseURL', edtBaseURL.Text);
|
|
FProjectConfig.WriteInteger(preset, 'Method', comboMethod.ItemIndex);
|
|
FProjectConfig.WriteInteger(preset, 'Method', comboMethod.ItemIndex);
|
|
FProjectConfig.WriteString(preset, 'URLParams', EditorURLParams.Lines.Text);
|
|
FProjectConfig.WriteString(preset, 'URLParams', EditorURLParams.Lines.Text);
|
|
@@ -1421,6 +1488,7 @@ end;
|
|
procedure TfrmMain.SaveProject;
|
|
procedure TfrmMain.SaveProject;
|
|
begin
|
|
begin
|
|
SavePreset;
|
|
SavePreset;
|
|
|
|
+ FProjectConfig.WriteInteger('Presets', 'ConfigVersion', iCurrentConfigVersion);
|
|
FProjectConfig.Save;
|
|
FProjectConfig.Save;
|
|
end;
|
|
end;
|
|
|
|
|