Simon Grossenbacher 3 年之前
父節點
當前提交
5781e6d802
共有 8 個文件被更改,包括 185 次插入120 次删除
  1. 33 17
      Example Config.rdproj
  2. 二進制
      RESTDebugger.exe
  3. 6 5
      prj/RESTDebugger.dproj
  4. 二進制
      prj/RESTDebugger.res
  5. 5 19
      src/_frmAddEditPreset.dfm
  6. 0 2
      src/_frmAddEditPreset.pas
  7. 74 24
      src/_frmMain.dfm
  8. 67 53
      src/_frmMain.pas

+ 33 - 17
Example Config.rdproj

@@ -1,6 +1,6 @@
 {
 {
 	"Presets": {
 	"Presets": {
-		"LastUsed": "f08ab155a960412e988e2decdcd05d1e",
+		"LastUsed": "1e43d67905584d9bad0b965b312a9291",
 		"ConfigVersion": 3
 		"ConfigVersion": 3
 	},
 	},
 	"Preset_faf2be76254543f9ad9cc8fca91cef5e": {
 	"Preset_faf2be76254543f9ad9cc8fca91cef5e": {
@@ -116,10 +116,10 @@
 		"Category": ""
 		"Category": ""
 	},
 	},
 	"Preset_cbbcebba6f30425caec540f517cb3524": {
 	"Preset_cbbcebba6f30425caec540f517cb3524": {
-		"BaseURL": "",
-		"Method": 0,
+		"BaseURL": "%BaseURL%/patch",
+		"Method": 2,
 		"URLParams": "",
 		"URLParams": "",
-		"PostData": "",
+		"PostData": "{\r\n  \"Demo\": \"Demo Data\",\r\n  \"BaseURL\": \"%BaseURL%\"\r\n}",
 		"ExtraHeaders": "",
 		"ExtraHeaders": "",
 		"PostDataContentType": "application/json",
 		"PostDataContentType": "application/json",
 		"UseBasicAuth": false,
 		"UseBasicAuth": false,
@@ -132,13 +132,13 @@
 		"Category": ""
 		"Category": ""
 	},
 	},
 	"Main": {
 	"Main": {
-		"GlobalVar": "fldType\tfldName\tfldValue\r\nStatic\t%CustomPostData%\tData 1\r\nRegEx\t(?<=User-Agent\": \")(?s)(.\\w*\\s\\w*\\s\\w*\\/)\\d*.\\d*.\\/g\t\r\nStatic\t%BaseURL%\thttps://httpbin.org\r\n",
-		"GridViewPresets": "Bhlmcm1NYWluLmN4R3JpZERCVGFibGVWaWV3BhJUY3hHcmlkREJUYWJsZVZpZXcCCQYJU291cmNlRFBJAgYCYAYGRm9vdGVyAgkGBUZhbHNlBgpHcm91cEJ5Qm94AgkGBFRydWUGDEdyb3VwRm9vdGVycwICBgEABgpOZXdJdGVtUm93AgkGBUZhbHNlBhhFZGl0Rm9ybVVzZURlZmF1bHRMYXlvdXQCCQYEVHJ1ZQYTUm93VXNlRGVmYXVsdExheW91dAIJBgRUcnVlBh9Db2x1bW5zUXVpY2tDdXN0b21pemF0aW9uU29ydGVkAgkGBUZhbHNlBgdWZXJzaW9uAgIGAQECBAYYY3hHcmlkREJUYWJsZVZpZXdmbGROYW1lBg9UY3hHcmlkREJDb2x1bW4CDAYJU291cmNlRFBJAgYCYAYRRmlsdGVyUm93T3BlcmF0b3ICAgYBAAYKR3JvdXBJbmRleAIGAsO/BhRJc0NoaWxkSW5NZXJnZWRHcm91cAIJBgVGYWxzZQYFV2lkdGgCBgJ4Bg1BbGlnbm1lbnRIb3J6AgIGAQAGBUluZGV4AgYCAAYHVmlzaWJsZQIJBgRUcnVlBglTb3J0T3JkZXICCQYGc29Ob25lBglTb3J0SW5kZXgCBgLDvwYYV2FzVmlzaWJsZUJlZm9yZUdyb3VwaW5nAgkGBUZhbHNlBgpFeHByZXNzaW9uAgkSAAAAAAIABhxjeEdyaWREQlRhYmxlVmlld2ZsZENhdGVnb3J5Bg9UY3hHcmlkREJDb2x1bW4CDAYJU291cmNlRFBJAgYCYAYRRmlsdGVyUm93T3BlcmF0b3ICAgYBAAYKR3JvdXBJbmRleAIGAsO/BhRJc0NoaWxkSW5NZXJnZWRHcm91cAIJBgVGYWxzZQYFV2lkdGgCBgJ4Bg1BbGlnbm1lbnRIb3J6AgIGAQAGBUluZGV4AgYCAQYHVmlzaWJsZQIJBgRUcnVlBglTb3J0T3JkZXICCQYGc29Ob25lBglTb3J0SW5kZXgCBgLDvwYYV2FzVmlzaWJsZUJlZm9yZUdyb3VwaW5nAgkGBUZhbHNlBgpFeHByZXNzaW9uAgkSAAAAAAIABhljeEdyaWREQlRhYmxlVmlld2ZsZE5vdGVzBg9UY3hHcmlkREJDb2x1bW4CDAYJU291cmNlRFBJAgYCYAYRRmlsdGVyUm93T3BlcmF0b3ICAgYBAAYKR3JvdXBJbmRleAIGAsO/BhRJc0NoaWxkSW5NZXJnZWRHcm91cAIJBgVGYWxzZQYFV2lkdGgCBgPDqAMGDUFsaWdubWVudEhvcnoCAgYBAAYFSW5kZXgCBgICBgdWaXNpYmxlAgkGBFRydWUGCVNvcnRPcmRlcgIJBgZzb05vbmUGCVNvcnRJbmRleAIGAsO/BhhXYXNWaXNpYmxlQmVmb3JlR3JvdXBpbmcCCQYFRmFsc2UGCkV4cHJlc3Npb24CCRIAAAAAAgAGHUNvbmRpdGlvbmFsRm9ybWF0dGluZ1Byb3ZpZGVyBiRUY3hHcmlkQ29uZGl0aW9uYWxGb3JtYXR0aW5nUHJvdmlkZXICAQYFQ291bnQCBgIAAgA="
+		"GlobalVar": "fldType\tfldName\tfldValue\r\n",
+		"GridViewPresets": "Bhlmcm1NYWluLmN4R3JpZERCVGFibGVWaWV3BhJUY3hHcmlkREJUYWJsZVZpZXcCCQYJU291cmNlRFBJAgYCYAYGRm9vdGVyAgkGBUZhbHNlBgpHcm91cEJ5Qm94AgkGBFRydWUGDEdyb3VwRm9vdGVycwICBgEABgpOZXdJdGVtUm93AgkGBUZhbHNlBhhFZGl0Rm9ybVVzZURlZmF1bHRMYXlvdXQCCQYEVHJ1ZQYTUm93VXNlRGVmYXVsdExheW91dAIJBgRUcnVlBh9Db2x1bW5zUXVpY2tDdXN0b21pemF0aW9uU29ydGVkAgkGBUZhbHNlBgdWZXJzaW9uAgIGAQECAwYYY3hHcmlkREJUYWJsZVZpZXdmbGROYW1lBg9UY3hHcmlkREJDb2x1bW4CDAYJU291cmNlRFBJAgYCYAYRRmlsdGVyUm93T3BlcmF0b3ICAgYBAAYKR3JvdXBJbmRleAIGAsO/BhRJc0NoaWxkSW5NZXJnZWRHcm91cAIJBgVGYWxzZQYFV2lkdGgCBgJ4Bg1BbGlnbm1lbnRIb3J6AgIGAQAGBUluZGV4AgYCAAYHVmlzaWJsZQIJBgRUcnVlBglTb3J0T3JkZXICCQYGc29Ob25lBglTb3J0SW5kZXgCBgLDvwYYV2FzVmlzaWJsZUJlZm9yZUdyb3VwaW5nAgkGBUZhbHNlBgpFeHByZXNzaW9uAgkSAAAAAAIABhxjeEdyaWREQlRhYmxlVmlld2ZsZENhdGVnb3J5Bg9UY3hHcmlkREJDb2x1bW4CDAYJU291cmNlRFBJAgYCYAYRRmlsdGVyUm93T3BlcmF0b3ICAgYBAAYKR3JvdXBJbmRleAIGAsO/BhRJc0NoaWxkSW5NZXJnZWRHcm91cAIJBgVGYWxzZQYFV2lkdGgCBgJ4Bg1BbGlnbm1lbnRIb3J6AgIGAQAGBUluZGV4AgYCAQYHVmlzaWJsZQIJBgRUcnVlBglTb3J0T3JkZXICCQYGc29Ob25lBglTb3J0SW5kZXgCBgLDvwYYV2FzVmlzaWJsZUJlZm9yZUdyb3VwaW5nAgkGBUZhbHNlBgpFeHByZXNzaW9uAgkSAAAAAAIABh1Db25kaXRpb25hbEZvcm1hdHRpbmdQcm92aWRlcgYkVGN4R3JpZENvbmRpdGlvbmFsRm9ybWF0dGluZ1Byb3ZpZGVyAgEGBUNvdW50AgYCAAIA"
 	},
 	},
-	"Preset_NmVkNjE2OGZhOWNiNDFlNmI5Njc3YWEzMzk5YjQ2OGI=": {
-		"BaseURL": "",
+	"Preset_f84d0bc1928042ff81d9471447391d3f": {
+		"BaseURL": "add",
 		"Method": 0,
 		"Method": 0,
-		"URLParams": "",
+		"URLParams": "      3",
 		"PostData": "",
 		"PostData": "",
 		"ExtraHeaders": "",
 		"ExtraHeaders": "",
 		"PostDataContentType": "application/json",
 		"PostDataContentType": "application/json",
@@ -146,12 +146,28 @@
 		"UseBasicAuth": false,
 		"UseBasicAuth": false,
 		"AuthUsername": "",
 		"AuthUsername": "",
 		"AuthPassword": "",
 		"AuthPassword": "",
-		"PresetName": "hoi",
-		"Guid": "NmVkNjE2OGZhOWNiNDFlNmI5Njc3YWEzMzk5YjQ2OGI=",
+		"PresetName": "add 3",
+		"Guid": "f84d0bc1928042ff81d9471447391d3f",
 		"Notes": "",
 		"Notes": "",
-		"Category": ""
+		"Category": "add"
+	},
+	"Preset_53595bd343c44106b056e39ac93a06eb": {
+		"BaseURL": "add",
+		"Method": 0,
+		"URLParams": "       lkllk",
+		"PostData": "",
+		"ExtraHeaders": "",
+		"PostDataContentType": "application/json",
+		"ResponseAutoFormat": false,
+		"UseBasicAuth": false,
+		"AuthUsername": "",
+		"AuthPassword": "",
+		"PresetName": "Copy of add",
+		"Guid": "53595bd343c44106b056e39ac93a06eb",
+		"Notes": "PGJvZHk+PHA+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnQXJpYWwnIj5TYWxpIGR6dTwvc3Bhbj48YnIvPkhvaTwvcD48cD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdBcmlhbCciPmhvaTwvc3Bhbj48L3A+PHA+U2Fsw7zDvDwvcD48cD5Kb29vPC9wPjwvYm9keT4=",
+		"Category": "add"
 	},
 	},
-	"Preset_f08ab155a960412e988e2decdcd05d1e": {
+	"Preset_1e43d67905584d9bad0b965b312a9291": {
 		"BaseURL": "",
 		"BaseURL": "",
 		"Method": 0,
 		"Method": 0,
 		"URLParams": "",
 		"URLParams": "",
@@ -162,9 +178,9 @@
 		"UseBasicAuth": false,
 		"UseBasicAuth": false,
 		"AuthUsername": "",
 		"AuthUsername": "",
 		"AuthPassword": "",
 		"AuthPassword": "",
-		"PresetName": "sali",
-		"Guid": "f08ab155a960412e988e2decdcd05d1e",
-		"Notes": "",
-		"Category": ""
+		"PresetName": "7",
+		"Guid": "1e43d67905584d9bad0b965b312a9291",
+		"Notes": "PGJvZHk+PHA+SG9pIGR1IHdpZSBnZWl0cz88L3A+PHA+RGFua2UgZ3VldDwvcD48L2JvZHk+",
+		"Category": "7"
 	}
 	}
 }
 }

二進制
RESTDebugger.exe


+ 6 - 5
prj/RESTDebugger.dproj

@@ -7,7 +7,7 @@
         <Base>True</Base>
         <Base>True</Base>
         <Config Condition="'$(Config)'==''">Debug</Config>
         <Config Condition="'$(Config)'==''">Debug</Config>
         <Platform Condition="'$(Platform)'==''">Win64</Platform>
         <Platform Condition="'$(Platform)'==''">Win64</Platform>
-        <TargetedPlatforms>2</TargetedPlatforms>
+        <TargetedPlatforms>3</TargetedPlatforms>
         <AppType>Application</AppType>
         <AppType>Application</AppType>
     </PropertyGroup>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
     <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
@@ -81,7 +81,8 @@
         <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
         <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
         <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
         <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
         <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
         <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
-        <VerInfo_Keys>FileVersion=1.0.5.15;ProductVersion=1.0.0.0</VerInfo_Keys>
+        <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
+        <BT_BuildType>Debug</BT_BuildType>
     </PropertyGroup>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Base_Win64)'!=''">
     <PropertyGroup Condition="'$(Base_Win64)'!=''">
         <UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
         <UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
@@ -111,7 +112,7 @@
         <VerInfo_Build>15</VerInfo_Build>
         <VerInfo_Build>15</VerInfo_Build>
         <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
         <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
         <DCC_RemoteDebug>false</DCC_RemoteDebug>
         <DCC_RemoteDebug>false</DCC_RemoteDebug>
-        <AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
+        <AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
     </PropertyGroup>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
     <PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
         <BT_BuildType>Debug</BT_BuildType>
         <BT_BuildType>Debug</BT_BuildType>
@@ -136,7 +137,7 @@
         <VerInfo_Release>5</VerInfo_Release>
         <VerInfo_Release>5</VerInfo_Release>
         <VerInfo_Build>15</VerInfo_Build>
         <VerInfo_Build>15</VerInfo_Build>
         <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
         <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
-        <AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
+        <AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
     </PropertyGroup>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
     <PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
         <BT_BuildType>Debug</BT_BuildType>
         <BT_BuildType>Debug</BT_BuildType>
@@ -1084,7 +1085,7 @@
                 <ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
                 <ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
             </Deployment>
             </Deployment>
             <Platforms>
             <Platforms>
-                <Platform value="Win32">False</Platform>
+                <Platform value="Win32">True</Platform>
                 <Platform value="Win64">True</Platform>
                 <Platform value="Win64">True</Platform>
             </Platforms>
             </Platforms>
         </BorlandProject>
         </BorlandProject>

二進制
prj/RESTDebugger.res


+ 5 - 19
src/_frmAddEditPreset.dfm

@@ -3,7 +3,7 @@ object frmAddEditPreset: TfrmAddEditPreset
   Top = 0
   Top = 0
   BorderStyle = bsDialog
   BorderStyle = bsDialog
   Caption = 'Preset'
   Caption = 'Preset'
-  ClientHeight = 333
+  ClientHeight = 204
   ClientWidth = 482
   ClientWidth = 482
   Color = clBtnFace
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Charset = DEFAULT_CHARSET
@@ -30,16 +30,9 @@ object frmAddEditPreset: TfrmAddEditPreset
     Height = 13
     Height = 13
     Caption = 'Category:'
     Caption = 'Category:'
   end
   end
-  object Label4: TLabel
-    Left = 25
-    Top = 157
-    Width = 32
-    Height = 13
-    Caption = 'Notes:'
-  end
   object cxButton1: TcxButton
   object cxButton1: TcxButton
-    Left = 140
-    Top = 295
+    Left = 135
+    Top = 165
     Width = 75
     Width = 75
     Height = 25
     Height = 25
     Caption = 'Ok'
     Caption = 'Ok'
@@ -47,8 +40,8 @@ object frmAddEditPreset: TfrmAddEditPreset
     OnClick = cxButton1Click
     OnClick = cxButton1Click
   end
   end
   object cxButton2: TcxButton
   object cxButton2: TcxButton
-    Left = 225
-    Top = 295
+    Left = 220
+    Top = 165
     Width = 75
     Width = 75
     Height = 25
     Height = 25
     Caption = 'Cancel'
     Caption = 'Cancel'
@@ -91,11 +84,4 @@ object frmAddEditPreset: TfrmAddEditPreset
     TabOrder = 4
     TabOrder = 4
     Width = 351
     Width = 351
   end
   end
-  object memNotes: TcxMemo
-    Left = 105
-    Top = 154
-    TabOrder = 5
-    Height = 117
-    Width = 351
-  end
 end
 end

+ 0 - 2
src/_frmAddEditPreset.pas

@@ -18,8 +18,6 @@ type
     edtPresetName: TcxTextEdit;
     edtPresetName: TcxTextEdit;
     edtCategory: TcxTextEdit;
     edtCategory: TcxTextEdit;
     Label3: TLabel;
     Label3: TLabel;
-    Label4: TLabel;
-    memNotes: TcxMemo;
     procedure cxButton1Click(Sender: TObject);
     procedure cxButton1Click(Sender: TObject);
     procedure cxButton2Click(Sender: TObject);
     procedure cxButton2Click(Sender: TObject);
     procedure FormShow(Sender: TObject);
     procedure FormShow(Sender: TObject);

+ 74 - 24
src/_frmMain.dfm

@@ -247,14 +247,14 @@ object frmMain: TfrmMain
     end
     end
     object Label3: TLabel
     object Label3: TLabel
       Left = 362
       Left = 362
-      Top = 75
+      Top = 11
       Width = 49
       Width = 49
       Height = 13
       Height = 13
       Caption = 'Base URL:'
       Caption = 'Base URL:'
     end
     end
     object Label4: TLabel
     object Label4: TLabel
       Left = 275
       Left = 275
-      Top = 329
+      Top = 324
       Width = 42
       Width = 42
       Height = 13
       Height = 13
       Anchors = [akLeft, akBottom]
       Anchors = [akLeft, akBottom]
@@ -262,7 +262,7 @@ object frmMain: TfrmMain
     end
     end
     object Label6: TLabel
     object Label6: TLabel
       Left = 273
       Left = 273
-      Top = 74
+      Top = 11
       Width = 40
       Width = 40
       Height = 13
       Height = 13
       Caption = 'Method:'
       Caption = 'Method:'
@@ -289,7 +289,7 @@ object frmMain: TfrmMain
     end
     end
     object edtBaseURL: TcxTextEdit
     object edtBaseURL: TcxTextEdit
       Left = 362
       Left = 362
-      Top = 91
+      Top = 27
       Anchors = [akLeft, akTop, akRight]
       Anchors = [akLeft, akTop, akRight]
       Properties.OnChange = edtBaseURLPropertiesChange
       Properties.OnChange = edtBaseURLPropertiesChange
       TabOrder = 5
       TabOrder = 5
@@ -301,7 +301,6 @@ object frmMain: TfrmMain
       Width = 25
       Width = 25
       Height = 25
       Height = 25
       Hint = 'Add Preset'
       Hint = 'Add Preset'
-      Anchors = [akTop, akRight]
       OptionsImage.ImageIndex = 0
       OptionsImage.ImageIndex = 0
       OptionsImage.Images = cxImageList
       OptionsImage.Images = cxImageList
       ParentShowHint = False
       ParentShowHint = False
@@ -315,7 +314,6 @@ object frmMain: TfrmMain
       Width = 25
       Width = 25
       Height = 25
       Height = 25
       Hint = 'Delete Preset'
       Hint = 'Delete Preset'
-      Anchors = [akTop, akRight]
       OptionsImage.ImageIndex = 3
       OptionsImage.ImageIndex = 3
       OptionsImage.Images = cxImageList
       OptionsImage.Images = cxImageList
       ParentShowHint = False
       ParentShowHint = False
@@ -329,7 +327,6 @@ object frmMain: TfrmMain
       Width = 25
       Width = 25
       Height = 25
       Height = 25
       Hint = 'Edit Preset'
       Hint = 'Edit Preset'
-      Anchors = [akTop, akRight]
       OptionsImage.ImageIndex = 2
       OptionsImage.ImageIndex = 2
       OptionsImage.Images = cxImageList
       OptionsImage.Images = cxImageList
       ParentShowHint = False
       ParentShowHint = False
@@ -343,7 +340,6 @@ object frmMain: TfrmMain
       Width = 25
       Width = 25
       Height = 25
       Height = 25
       Hint = 'Copy Preset'
       Hint = 'Copy Preset'
-      Anchors = [akTop, akRight]
       OptionsImage.ImageIndex = 1
       OptionsImage.ImageIndex = 1
       OptionsImage.Images = cxImageList
       OptionsImage.Images = cxImageList
       ParentShowHint = False
       ParentShowHint = False
@@ -353,7 +349,7 @@ object frmMain: TfrmMain
     end
     end
     object comboMethod: TcxComboBox
     object comboMethod: TcxComboBox
       Left = 273
       Left = 273
-      Top = 90
+      Top = 27
       Properties.DropDownListStyle = lsFixedList
       Properties.DropDownListStyle = lsFixedList
       Properties.Items.Strings = (
       Properties.Items.Strings = (
         'GET'
         'GET'
@@ -367,14 +363,14 @@ object frmMain: TfrmMain
     end
     end
     object PageControlParams: TcxPageControl
     object PageControlParams: TcxPageControl
       Left = 273
       Left = 273
-      Top = 127
+      Top = 60
       Width = 436
       Width = 436
-      Height = 191
+      Height = 258
       Anchors = [akLeft, akTop, akRight, akBottom]
       Anchors = [akLeft, akTop, akRight, akBottom]
       TabOrder = 6
       TabOrder = 6
       Properties.ActivePage = tabURLParams
       Properties.ActivePage = tabURLParams
       Properties.CustomButtons.Buttons = <>
       Properties.CustomButtons.Buttons = <>
-      ClientRectBottom = 189
+      ClientRectBottom = 256
       ClientRectLeft = 2
       ClientRectLeft = 2
       ClientRectRight = 434
       ClientRectRight = 434
       ClientRectTop = 23
       ClientRectTop = 23
@@ -401,7 +397,7 @@ object frmMain: TfrmMain
           Left = 0
           Left = 0
           Top = 27
           Top = 27
           Width = 432
           Width = 432
-          Height = 139
+          Height = 206
           Align = alBottom
           Align = alBottom
           Anchors = [akLeft, akTop, akRight, akBottom]
           Anchors = [akLeft, akTop, akRight, akBottom]
           Font.Charset = DEFAULT_CHARSET
           Font.Charset = DEFAULT_CHARSET
@@ -461,7 +457,7 @@ object frmMain: TfrmMain
           Left = 0
           Left = 0
           Top = 27
           Top = 27
           Width = 432
           Width = 432
-          Height = 139
+          Height = 206
           Align = alBottom
           Align = alBottom
           Anchors = [akLeft, akTop, akRight, akBottom]
           Anchors = [akLeft, akTop, akRight, akBottom]
           Font.Charset = DEFAULT_CHARSET
           Font.Charset = DEFAULT_CHARSET
@@ -570,7 +566,7 @@ object frmMain: TfrmMain
           Left = 0
           Left = 0
           Top = 52
           Top = 52
           Width = 432
           Width = 432
-          Height = 114
+          Height = 181
           Align = alBottom
           Align = alBottom
           Anchors = [akLeft, akTop, akRight, akBottom]
           Anchors = [akLeft, akTop, akRight, akBottom]
           Font.Charset = DEFAULT_CHARSET
           Font.Charset = DEFAULT_CHARSET
@@ -606,6 +602,69 @@ object frmMain: TfrmMain
           FontSmoothing = fsmNone
           FontSmoothing = fsmNone
         end
         end
       end
       end
+      object tabNotes: TcxTabSheet
+        Caption = 'Notes'
+        ImageIndex = 4
+        object Panel6: TPanel
+          Left = 0
+          Top = 0
+          Width = 432
+          Height = 35
+          Align = alTop
+          BevelOuter = bvNone
+          TabOrder = 0
+          object Label11: TLabel
+            Left = 15
+            Top = 10
+            Width = 32
+            Height = 13
+            Caption = 'Notes:'
+          end
+        end
+        object HtmlEditor: THtmlEditor
+          Left = 0
+          Top = 35
+          Width = 432
+          Height = 198
+          Align = alClient
+          Caption = 'HtmlEditor'
+          Color = clWindow
+          Font.Charset = DEFAULT_CHARSET
+          Font.Color = clWindowText
+          Font.Height = 16
+          Font.Name = 'Times New Roman'
+          Font.Style = []
+          ParentBackground = False
+          ParentFont = False
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 1
+          TabStop = True
+          Touch.InteractiveGestures = [igZoom, igPan, igPressAndTap]
+          Touch.InteractiveGestureOptions = [igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanInertia]
+          Touch.ParentTabletOptions = False
+          Touch.TabletOptions = [toPressAndHold, toSmoothScrolling]
+          HTML.Strings = (
+            '<p>&nbsp;</p>')
+          Styles.Strings = (
+            'body {margin: 8 8; font-size: 11pt; } '
+            'td, th {resize: horizontal}'
+            'img {draggable: true; resize: both}'
+            ''
+            'atd {border: solid red 1px !important}'
+            'atable {border: solid green 1px !important}'
+            'xtemplate {background: #aa80ef70; }'
+            ''
+            '')
+          TouchScroll = False
+          HighlightTextColor = 0
+          PreserveStyleOnNewBlock = True
+          BlockHighlightColor = 1350598816
+          Encoding = heUTF8
+          Options = [eoCaretVisible, eoAnimateCaret, eoEmbedDroppedImages, eoEmbedPastedImages, eoEmbedPastedStyles, eoAddColMarks, eoAddRowMarks, eoUrlDetection, eoSelectionToolbar, eoHighlightCurrentBlock]
+          DefaultParaTag = 'p'
+        end
+      end
     end
     end
     object btnCopyFullURL: TcxButton
     object btnCopyFullURL: TcxButton
       Left = 587
       Left = 587
@@ -680,11 +739,6 @@ object frmMain: TfrmMain
           DataBinding.FieldName = 'fldCategory'
           DataBinding.FieldName = 'fldCategory'
           Width = 120
           Width = 120
         end
         end
-        object cxGridDBTableViewfldNotes: TcxGridDBColumn
-          Caption = 'Notes'
-          DataBinding.FieldName = 'fldNotes'
-          Width = 1000
-        end
       end
       end
       object cxGridLevel1: TcxGridLevel
       object cxGridLevel1: TcxGridLevel
         GridView = cxGridDBTableView
         GridView = cxGridDBTableView
@@ -1972,10 +2026,6 @@ object frmMain: TfrmMain
       FieldName = 'fldCategory'
       FieldName = 'fldCategory'
       Size = 50
       Size = 50
     end
     end
-    object memDataPresetsfldNotes: TStringField
-      FieldName = 'fldNotes'
-      Size = 1000
-    end
   end
   end
   object dsPresets: TDataSource
   object dsPresets: TDataSource
     DataSet = memDataPresets
     DataSet = memDataPresets

+ 67 - 53
src/_frmMain.pas

@@ -19,7 +19,8 @@ uses
   SynEditCodeFolding, dxCore, Data.DB, dxmdaset, cxStyles, cxCustomData,
   SynEditCodeFolding, dxCore, Data.DB, dxmdaset, cxStyles, cxCustomData,
   cxFilter, cxData, cxDataStorage, cxNavigator, dxDateRanges,
   cxFilter, cxData, cxDataStorage, cxNavigator, dxDateRanges,
   dxScrollbarAnnotations, cxDBData, cxGridLevel, cxGridCustomView,
   dxScrollbarAnnotations, cxDBData, cxGridLevel, cxGridCustomView,
-  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid;
+  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, cxMemo,
+  htmlcomp, htmledit;
 
 
 type
 type
   TMethodType = (mtGET, mtPOST, mtPATCH, mtPUT, mtDELETE);
   TMethodType = (mtGET, mtPOST, mtPATCH, mtPUT, mtDELETE);
@@ -139,8 +140,10 @@ type
     cxGridDBTableViewfldCategory: TcxGridDBColumn;
     cxGridDBTableViewfldCategory: TcxGridDBColumn;
     memDataPresetsfldGuid: TStringField;
     memDataPresetsfldGuid: TStringField;
     cxStyleRepository1: TcxStyleRepository;
     cxStyleRepository1: TcxStyleRepository;
-    memDataPresetsfldNotes: TStringField;
-    cxGridDBTableViewfldNotes: TcxGridDBColumn;
+    tabNotes: TcxTabSheet;
+    Panel6: TPanel;
+    Label11: TLabel;
+    HtmlEditor: THtmlEditor;
     procedure FormShow(Sender: TObject);
     procedure FormShow(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
@@ -222,7 +225,7 @@ type
     procedure SaveProject;
     procedure SaveProject;
     procedure SaveProjectAs(const LoadAfterSave: Boolean);
     procedure SaveProjectAs(const LoadAfterSave: Boolean);
     procedure Run;
     procedure Run;
-    procedure AddPreset(const APresetName: string; const APresetCategory: string; APresetNote: string);
+    procedure AddPreset(const AGuid: string; const APresetName: string; const APresetCategory: string);
     procedure LoadPreset;
     procedure LoadPreset;
     procedure SavePreset;
     procedure SavePreset;
     procedure ShowError(const AErrorText: string);
     procedure ShowError(const AErrorText: string);
@@ -230,6 +233,8 @@ type
     procedure DoPOSTRequest(const AMethodType: TMethodType);
     procedure DoPOSTRequest(const AMethodType: TMethodType);
     procedure UpdateEditor(const AText: string);
     procedure UpdateEditor(const AText: string);
     procedure CheckForUpdate;
     procedure CheckForUpdate;
+    procedure DeactivatePresetEvents;
+    procedure ActivatePresetEvents;
     function GenerateGuid: string;
     function GenerateGuid: string;
     function Encode(const AText: string): string;
     function Encode(const AText: string): string;
     function Decode(const AText: string): string;
     function Decode(const AText: string): string;
@@ -356,19 +361,27 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TfrmMain.AddPreset(const APresetName: string; const APresetCategory: string; APresetNote: string);
-var
-  guid: string;
+procedure TfrmMain.ActivatePresetEvents;
 begin
 begin
-  guid := GenerateGuid;
+  memDataPresets.BeforeScroll := memDataPresetsBeforeScroll;
+  memDataPresets.AfterScroll := memDataPresetsAfterScroll;
+  memDataPresets.AfterEdit := memDataPresetsAfterEdit;
+end;
+
+procedure TfrmMain.AddPreset(const AGuid: string; const APresetName: string; const APresetCategory: string);
+begin
+  DeactivatePresetEvents;
 
 
   memDataPresets.Append;
   memDataPresets.Append;
   memDataPresetsfldName.Value := APresetName;
   memDataPresetsfldName.Value := APresetName;
   memDataPresetsfldCategory.Value := APresetCategory;
   memDataPresetsfldCategory.Value := APresetCategory;
-  memDataPresetsfldNotes.Value := APresetNote;
-  memDataPresetsfldGuid.Value := guid;
+  memDataPresetsfldGuid.Value := AGuid;
   memDataPresets.Post;
   memDataPresets.Post;
 
 
+  LoadPreset;
+
+  ActivatePresetEvents;
+
   SavePreset;
   SavePreset;
 end;
 end;
 
 
@@ -376,7 +389,8 @@ procedure TfrmMain.btnAddClick(Sender: TObject);
 begin
 begin
   if frmAddEditPreset.ShowModal = mrOk then
   if frmAddEditPreset.ShowModal = mrOk then
   begin
   begin
-    AddPreset(frmAddEditPreset.edtPresetName.Text, frmAddEditPreset.edtCategory.Text, frmAddEditPreset.memNotes.Text);
+    SavePreset;
+    AddPreset(GenerateGuid, frmAddEditPreset.edtPresetName.Text, frmAddEditPreset.edtCategory.Text);
   end;
   end;
 end;
 end;
 
 
@@ -390,31 +404,28 @@ begin
   begin
   begin
     if MessageDlg('Really delete preset "' + memDataPresetsfldName.Value + '"?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     if MessageDlg('Really delete preset "' + memDataPresetsfldName.Value + '"?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     begin
     begin
-      showmessage(memDataPresetsfldGuid.Value);
+      DeactivatePresetEvents;
       FProjectConfig.DeleteSection('Preset_' + memDataPresetsfldGuid.Value);
       FProjectConfig.DeleteSection('Preset_' + memDataPresetsfldGuid.Value);
       memDataPresets.Delete;
       memDataPresets.Delete;
       FProjectConfig.Save;
       FProjectConfig.Save;
+      LoadPreset;
+      ActivatePresetEvents;
     end;
     end;
   end;
   end;
 end;
 end;
 
 
 procedure TfrmMain.btnEditClick(Sender: TObject);
 procedure TfrmMain.btnEditClick(Sender: TObject);
-var
-  dmy: string;
-  idx: Integer;
-begin
-  ShowMessage('not implemented yet');
-//  SavePreset;
-//  dmy := comboPresets.Text;
-//  idx := comboPresets.ItemIndex;
-//  if InputQuery('Edit Preset', 'Rename preset:', dmy) then
-//  begin
-//    comboPresets.Properties.Items[comboPresets.ItemIndex] := dmy;
-//    FPresetsList.ValueFromIndex[idx] := Encode(dmy);
-//    comboPresets.ItemIndex := idx;
-//
-//    FProjectConfig.WriteString('Presets', 'Presets', FPresetsList.Text);
-//  end;
+begin
+  frmAddEditPreset.edtPresetName.Text := memDataPresetsfldName.Value;
+  frmAddEditPreset.edtCategory.Text := memDataPresetsfldCategory.Value;
+  if frmAddEditPreset.ShowModal = mrOk then
+  begin
+    SavePreset;
+    memDataPresets.Edit;
+    memDataPresetsfldName.Value := frmAddEditPreset.edtPresetName.Text;
+    memDataPresetsfldCategory.Value := frmAddEditPreset.edtCategory.Text;
+    memDataPresets.Post;
+  end;
 end;
 end;
 
 
 procedure TfrmMain.btnPasteFullURLClick(Sender: TObject);
 procedure TfrmMain.btnPasteFullURLClick(Sender: TObject);
@@ -432,13 +443,16 @@ end;
 
 
 procedure TfrmMain.btnCopyPresetClick(Sender: TObject);
 procedure TfrmMain.btnCopyPresetClick(Sender: TObject);
 var
 var
-  idx: Integer;
+  guid: string;
+  name, category: string;
 begin
 begin
-  SavePreset;
-//  idx := comboPresets.ItemIndex;
-//  AddPreset('Copy of ' + comboPresets.Text);
-//  FProjectConfig.CopySection('Preset_' + FPresetsList.Names[idx], 'Preset_' + FPresetsList.Names[comboPresets.ItemIndex]);
-//  LoadPreset;
+  guid := GenerateGuid;
+  FProjectConfig.CopySection('Preset_' + memDataPresetsfldGuid.Value, 'Preset_' + guid);
+  FProjectConfig.WriteString('Preset_' + guid, 'Guid', guid);
+  SaveProject;
+  name := 'Copy of ' + memDataPresetsfldName.Value;
+  category := memDataPresetsfldCategory.Value;
+  AddPreset(guid, name, category);
 end;
 end;
 
 
 procedure TfrmMain.btnRunClick(Sender: TObject);
 procedure TfrmMain.btnRunClick(Sender: TObject);
@@ -668,9 +682,20 @@ begin
   ActiveEditor.CutToClipboard;
   ActiveEditor.CutToClipboard;
 end;
 end;
 
 
+procedure TfrmMain.DeactivatePresetEvents;
+begin
+  memDataPresets.BeforeScroll := nil;
+  memDataPresets.AfterScroll := nil;
+  memDataPresets.AfterEdit := nil;
+end;
+
 function TfrmMain.Decode(const AText: string): string;
 function TfrmMain.Decode(const AText: string): string;
 begin
 begin
-  Result := TNetEncoding.Base64.Decode(AText);
+  try
+    Result := TNetEncoding.Base64.Decode(AText);
+  except
+    Result := '';
+  end;
 end;
 end;
 
 
 procedure TfrmMain.DoGETRequest(const AMethodType: TMethodType);
 procedure TfrmMain.DoGETRequest(const AMethodType: TMethodType);
@@ -1197,6 +1222,8 @@ begin
     comboPostContentType.Text := FProjectConfig.ReadString(preset, 'PostDataContentType', 'application/json');
     comboPostContentType.Text := FProjectConfig.ReadString(preset, 'PostDataContentType', 'application/json');
     chkResponseAutoformat.Checked := FProjectConfig.ReadBool(preset, 'ResponseAutoFormat', false);
     chkResponseAutoformat.Checked := FProjectConfig.ReadBool(preset, 'ResponseAutoFormat', false);
 
 
+    HtmlEditor.HTML.Text := Decode(FProjectConfig.ReadString(preset, 'Notes', ''));
+
     chkUseBasicAuth.Checked := FProjectConfig.ReadBool(preset, 'UseBasicAuth');
     chkUseBasicAuth.Checked := FProjectConfig.ReadBool(preset, 'UseBasicAuth');
     edtAuthUsername.Text := TEncryptStr.DecryptString(FProjectConfig.ReadString(preset, 'AuthUsername'));
     edtAuthUsername.Text := TEncryptStr.DecryptString(FProjectConfig.ReadString(preset, 'AuthUsername'));
     edtAuthPassword.Text := TEncryptStr.DecryptString(FProjectConfig.ReadString(preset, 'AuthPassword'));
     edtAuthPassword.Text := TEncryptStr.DecryptString(FProjectConfig.ReadString(preset, 'AuthPassword'));
@@ -1211,11 +1238,7 @@ var
   strstream: TStringStream;
   strstream: TStringStream;
   strlist: TStringList;
   strlist: TStringList;
 begin
 begin
-  memDataPresets.AfterEdit := nil;
-  memDataPresets.AfterScroll := nil;
-  memDataPresets.BeforeScroll := nil;
-  memDataPresets.AfterEdit := nil;
-
+  DeactivatePresetEvents;
 
 
   if FIsTempProjectLoaded then
   if FIsTempProjectLoaded then
   begin
   begin
@@ -1272,7 +1295,7 @@ begin
           memDataPresets.Append;
           memDataPresets.Append;
           memDataPresetsfldGuid.Value := FProjectConfig.ReadString(strlist[i], 'Guid');
           memDataPresetsfldGuid.Value := FProjectConfig.ReadString(strlist[i], 'Guid');
           memDataPresetsfldName.Value := FProjectConfig.ReadString(strlist[i], 'PresetName');
           memDataPresetsfldName.Value := FProjectConfig.ReadString(strlist[i], 'PresetName');
-          memDataPresetsfldNotes.Value := FProjectConfig.ReadString(strlist[i], 'Notes');
+          memDataPresetsfldCategory.Value := FProjectConfig.ReadString(strlist[i], 'Category');
           memDataPresets.Post;
           memDataPresets.Post;
         end;
         end;
       end;
       end;
@@ -1288,7 +1311,7 @@ begin
   if memDataPresets.RecordCount = 0 then
   if memDataPresets.RecordCount = 0 then
   begin
   begin
     // Add default
     // Add default
-    AddPreset('Default', '', '');
+    AddPreset(GenerateGuid, 'Default', '');
     FProjectConfig.Save;
     FProjectConfig.Save;
   end
   end
   else
   else
@@ -1320,20 +1343,11 @@ begin
     strstream.Free;
     strstream.Free;
   end;
   end;
 
 
-  memDataPresets.BeforeScroll := memDataPresetsBeforeScroll;
-  memDataPresets.AfterScroll := memDataPresetsAfterScroll;
-  memDataPresets.AfterEdit := memDataPresetsAfterEdit;
-
+  ActivatePresetEvents;
 end;
 end;
 
 
 procedure TfrmMain.memDataPresetsAfterEdit(DataSet: TDataSet);
 procedure TfrmMain.memDataPresetsAfterEdit(DataSet: TDataSet);
-var
-  idx: Integer;
 begin
 begin
-//  idx := FPresetsList.inde
-//  FPresetsList.ValueFromIndex[idx] := memDataPresetsfldName.Value;
-//  FProjectConfig.WriteString('Presets', 'Presets', FPresetsList.Text);
-//
   SavePreset;
   SavePreset;
 end;
 end;
 
 
@@ -1650,7 +1664,7 @@ begin
 
 
     FProjectConfig.WriteString(preset, 'PresetName', memDataPresetsfldName.Value);
     FProjectConfig.WriteString(preset, 'PresetName', memDataPresetsfldName.Value);
     FProjectConfig.WriteString(preset, 'Guid', memDataPresetsfldGuid.Value);
     FProjectConfig.WriteString(preset, 'Guid', memDataPresetsfldGuid.Value);
-    FProjectConfig.WriteString(preset, 'Notes', memDataPresetsfldNotes.Value);
+    FProjectConfig.WriteString(preset, 'Notes', Encode(HtmlEditor.Doc.OuterHTML));
     FProjectConfig.WriteString(preset, 'Category', memDataPresetsfldCategory.Value);
     FProjectConfig.WriteString(preset, 'Category', memDataPresetsfldCategory.Value);
 
 
     FProjectConfig.WriteString('Presets', 'LastUsed', memDataPresetsfldGuid.Value);
     FProjectConfig.WriteString('Presets', 'LastUsed', memDataPresetsfldGuid.Value);