瀏覽代碼

- BiggerEditor
- Fixes
- HTML Support

Simon Grossenbacher 8 年之前
父節點
當前提交
1a31be4c10
共有 10 個文件被更改,包括 290 次插入93 次删除
  1. 6 6
      Example Config.rdproj
  2. 二進制
      RESTDebugger.exe
  3. 1 1
      prj/RESTDebugger.dpr
  4. 3 3
      prj/RESTDebugger.dproj
  5. 二進制
      prj/RESTDebugger.res
  6. 6 6
      prj/RESTDebugger.stat
  7. 6 5
      src/_frmBiggerEditor.dfm
  8. 33 4
      src/_frmBiggerEditor.pas
  9. 68 8
      src/_frmMain.dfm
  10. 167 60
      src/_frmMain.pas

+ 6 - 6
Example Config.rdproj

@@ -1,7 +1,7 @@
 {
 	"Presets": {
 		"Presets": "GET: Simple GET\r\nGET: GET Extra Headers\r\nGET: Use Basic Auth Example\r\nGET: Example URL Parameters\r\nPOST: Json Post Data\r\nDELETE: Delete Data\r\nPUT: Json Put Data\r\nPATCH: Json Patch Data\r\n",
-		"LastUsed": 4
+		"LastUsed": 0
 	},
 	"Preset_0": {
 		"BaseURL": "https://httpbin.org/get",
@@ -26,11 +26,11 @@
 		"AuthPassword": ""
 	},
 	"Preset_2": {
-		"BaseURL": "https://httpbin.org/basic-auth/user/pwd_",
+		"BaseURL": "https://httpbin.org/basic-auth/user/pwd",
 		"Method": 0,
 		"URLParams": "",
 		"PostData": "",
-		"ExtraHeaders": "X-TestHeader=TestValue",
+		"ExtraHeaders": "",
 		"PostDataContentType": "application/json",
 		"UseBasicAuth": true,
 		"AuthUsername": "3f0k+uBHWf2sPtwW4tYMUA==",
@@ -51,7 +51,7 @@
 		"BaseURL": "https://httpbin.org/post",
 		"Method": 1,
 		"URLParams": "",
-		"PostData": "{\r\n  \"Demo\": \"Demo Data\",\r\n \"Hurra\": \"ole\"\r\n}\r\n",
+		"PostData": "{\r\n  \"Demo\": \"Demo Data\",\r\n  \"Hurra\": \"ole\"\r\n}\r\n",
 		"ExtraHeaders": "",
 		"PostDataContentType": "application/json",
 		"UseBasicAuth": false,
@@ -73,7 +73,7 @@
 		"BaseURL": "https://httpbin.org/put",
 		"Method": 3,
 		"URLParams": "",
-		"PostData": "{\r\n\t\"Demo\": \"Demo Data\"\r\n}",
+		"PostData": "{\r\n  \"Demo\": \"Demo Data\"\r\n}",
 		"ExtraHeaders": "",
 		"PostDataContentType": "application/json",
 		"UseBasicAuth": false,
@@ -84,7 +84,7 @@
 		"BaseURL": "https://httpbin.org/patch",
 		"Method": 2,
 		"URLParams": "",
-		"PostData": "{\r\n\t\"Demo\": \"Demo Data\"\r\n}",
+		"PostData": "{\r\n  \"Demo\": \"Demo Data\"\r\n}",
 		"ExtraHeaders": "",
 		"PostDataContentType": "application/json",
 		"UseBasicAuth": false,

二進制
RESTDebugger.exe


+ 1 - 1
prj/RESTDebugger.dpr

@@ -1,7 +1,7 @@
 program RESTDebugger;
 
 uses
-  FastMM4,
+  {$IFDEF DEBUG}FastMM4,{$ENDIF}
   Vcl.Forms,
   _frmMain in '..\src\_frmMain.pas' {frmMain},
   _frmBiggerEditor in '..\src\_frmBiggerEditor.pas' {frmBiggerEditor};

File diff suppressed because it is too large
+ 3 - 3
prj/RESTDebugger.dproj


二進制
prj/RESTDebugger.res


+ 6 - 6
prj/RESTDebugger.stat

@@ -1,10 +1,10 @@
 [Stats]
-EditorSecs=15041
-DesignerSecs=4293
-InspectorSecs=2497
-CompileSecs=647851
-OtherSecs=4074
+EditorSecs=17546
+DesignerSecs=5179
+InspectorSecs=2757
+CompileSecs=818061
+OtherSecs=4657
 StartTime=27.10.2016 18:27:37
 RealKeys=0
 EffectiveKeys=0
-DebugSecs=10960
+DebugSecs=13466

+ 6 - 5
src/_frmBiggerEditor.dfm

@@ -13,9 +13,11 @@ object frmBiggerEditor: TfrmBiggerEditor
   Font.Height = -11
   Font.Name = 'Tahoma'
   Font.Style = []
+  KeyPreview = True
   OldCreateOrder = False
   Position = poDefault
   OnClose = FormClose
+  OnKeyPress = FormKeyPress
   OnShow = FormShow
   PixelsPerInch = 96
   TextHeight = 13
@@ -25,25 +27,24 @@ object frmBiggerEditor: TfrmBiggerEditor
     Width = 1210
     Height = 927
     Align = alClient
+    ActiveLineColor = 15138810
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clWindowText
     Font.Height = -13
     Font.Name = 'Courier New'
     Font.Style = []
     TabOrder = 0
+    OnKeyUp = EditorBiggerEditorKeyUp
     OnMouseUp = EditorBiggerEditorMouseUp
     Gutter.Font.Charset = DEFAULT_CHARSET
     Gutter.Font.Color = clWindowText
     Gutter.Font.Height = -11
     Gutter.Font.Name = 'Courier New'
     Gutter.Font.Style = []
-    Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoShowScrollHint, eoSmartTabDelete, eoSmartTabs, eoTabsToSpaces]
+    Gutter.ShowLineNumbers = True
+    Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceHomeKey, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoScrollPastEol, eoShowScrollHint, eoSmartTabDelete, eoTabsToSpaces]
     TabWidth = 2
     WantTabs = True
     FontSmoothing = fsmNone
-    ExplicitLeft = 470
-    ExplicitTop = 350
-    ExplicitWidth = 200
-    ExplicitHeight = 150
   end
 end

+ 33 - 4
src/_frmBiggerEditor.pas

@@ -13,6 +13,9 @@ type
     procedure FormClose(Sender: TObject; var Action: TCloseAction);
     procedure EditorBiggerEditorMouseUp(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);
+    procedure EditorBiggerEditorKeyUp(Sender: TObject; var Key: Word;
+      Shift: TShiftState);
+    procedure FormKeyPress(Sender: TObject; var Key: Char);
   private
     FMainActiveEditor: TSynEdit;
   public
@@ -26,7 +29,16 @@ implementation
 
 {$R *.dfm}
 
-uses _frmMain;
+uses _frmMain, System.UITypes;
+
+procedure TfrmBiggerEditor.EditorBiggerEditorKeyUp(Sender: TObject;
+  var Key: Word; Shift: TShiftState);
+begin
+  if Key = vkF11 then
+  begin
+    Close;
+  end;
+end;
 
 procedure TfrmBiggerEditor.EditorBiggerEditorMouseUp(Sender: TObject;
   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
@@ -47,6 +59,19 @@ begin
 
   frmMain.ActiveEditor := FMainActiveEditor;
   frmMain.ActiveEditor.Lines.Text := EditorBiggerEditor.Lines.Text;
+  frmMain.ActiveEditor.CaretXY := EditorBiggerEditor.CaretXY;
+  frmMain.ActiveEditor.SelStart := EditorBiggerEditor.SelStart;
+  frmMain.ActiveEditor.SelEnd := EditorBiggerEditor.SelEnd;
+
+  EditorBiggerEditor.Lines.Clear;
+end;
+
+procedure TfrmBiggerEditor.FormKeyPress(Sender: TObject; var Key: Char);
+begin
+  if Key = #27 then
+  begin
+    Close;
+  end;
 end;
 
 procedure TfrmBiggerEditor.FormShow(Sender: TObject);
@@ -69,9 +94,13 @@ begin
   Height := frmMain.MainConfig.ReadInteger('BiggerEditorPos', 'Height', 920);
 
   FMainActiveEditor := frmMain.ActiveEditor;
-  EditorBiggerEditor.Highlighter := FMainActiveEditor.Highlighter;
-  EditorBiggerEditor.Lines.Text := FMainActiveEditor.Lines.Text;
-  frmMain.ActiveEditor := EditorBiggerEditor;
+  EditorBiggerEditor.Highlighter := frmMain.ActiveEditor.Highlighter;
+  EditorBiggerEditor.Lines.Text := frmMain.ActiveEditor.Lines.Text;
+
+  EditorBiggerEditor.CaretXY := frmMain.ActiveEditor.CaretXY;
+  EditorBiggerEditor.SelStart := frmMain.ActiveEditor.SelStart;
+  EditorBiggerEditor.SelEnd := frmMain.ActiveEditor.SelEnd;
+  EditorBiggerEditor.SetFocus;
 end;
 
 end.

+ 68 - 8
src/_frmMain.dfm

@@ -147,6 +147,9 @@ object frmMain: TfrmMain
         Font.Pitch = fpFixed
         Font.Style = []
         TabOrder = 0
+        OnEnter = EditorEnter
+        OnExit = EditorExit
+        OnKeyUp = EditorContentKeyUp
         OnMouseUp = EditorContentMouseUp
         Gutter.Font.Charset = DEFAULT_CHARSET
         Gutter.Font.Color = clWindowText
@@ -154,7 +157,7 @@ object frmMain: TfrmMain
         Gutter.Font.Name = 'Courier New'
         Gutter.Font.Style = []
         Gutter.ShowLineNumbers = True
-        Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoShowScrollHint, eoSmartTabDelete, eoSmartTabs, eoTabsToSpaces]
+        Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceHomeKey, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoScrollPastEol, eoShowScrollHint, eoSmartTabDelete, eoTabsToSpaces]
         TabWidth = 2
         WantTabs = True
         FontSmoothing = fsmNone
@@ -176,6 +179,9 @@ object frmMain: TfrmMain
         Font.Pitch = fpFixed
         Font.Style = []
         TabOrder = 0
+        OnEnter = EditorEnter
+        OnExit = EditorExit
+        OnKeyUp = EditorResponseHeadersKeyUp
         OnMouseUp = EditorResponseHeadersMouseUp
         Gutter.Font.Charset = DEFAULT_CHARSET
         Gutter.Font.Color = clWindowText
@@ -183,7 +189,7 @@ object frmMain: TfrmMain
         Gutter.Font.Name = 'Courier New'
         Gutter.Font.Style = []
         Gutter.ShowLineNumbers = True
-        Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoShowScrollHint, eoSmartTabDelete, eoSmartTabs, eoTabsToSpaces]
+        Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceHomeKey, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoScrollPastEol, eoShowScrollHint, eoSmartTabDelete, eoTabsToSpaces]
         TabWidth = 2
         WantTabs = True
         FontSmoothing = fsmNone
@@ -229,9 +235,9 @@ object frmMain: TfrmMain
     object edtFullURL: TcxTextEdit
       Left = 8
       Top = 345
-      Properties.ReadOnly = True
+      Properties.OnChange = edtFullURLPropertiesChange
       TabOrder = 8
-      Width = 556
+      Width = 525
     end
     object btnRun: TcxButton
       Left = 619
@@ -369,6 +375,9 @@ object frmMain: TfrmMain
           Font.Pitch = fpFixed
           Font.Style = []
           TabOrder = 1
+          OnEnter = EditorEnter
+          OnExit = EditorExit
+          OnKeyUp = EditorURLParamsKeyUp
           OnMouseUp = EditorURLParamsMouseUp
           Gutter.Font.Charset = DEFAULT_CHARSET
           Gutter.Font.Color = clWindowText
@@ -377,9 +386,10 @@ object frmMain: TfrmMain
           Gutter.Font.Style = []
           Gutter.ShowLineNumbers = True
           Highlighter = SynIniSyn
-          Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoShowScrollHint, eoSmartTabDelete, eoSmartTabs, eoTabsToSpaces]
+          Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceHomeKey, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoScrollPastEol, eoShowScrollHint, eoSmartTabDelete, eoTabsToSpaces]
           TabWidth = 2
           WantTabs = True
+          OnChange = EditorURLParamsChange
           FontSmoothing = fsmNone
         end
       end
@@ -415,6 +425,9 @@ object frmMain: TfrmMain
           Font.Pitch = fpFixed
           Font.Style = []
           TabOrder = 1
+          OnEnter = EditorEnter
+          OnExit = EditorExit
+          OnKeyUp = EditorExtraHeadersKeyUp
           OnMouseUp = EditorExtraHeadersMouseUp
           Gutter.Font.Charset = DEFAULT_CHARSET
           Gutter.Font.Color = clWindowText
@@ -423,7 +436,7 @@ object frmMain: TfrmMain
           Gutter.Font.Style = []
           Gutter.ShowLineNumbers = True
           Highlighter = SynIniSyn
-          Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoShowScrollHint, eoSmartTabDelete, eoSmartTabs, eoTabsToSpaces]
+          Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceHomeKey, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoScrollPastEol, eoShowScrollHint, eoSmartTabDelete, eoTabsToSpaces]
           TabWidth = 2
           WantTabs = True
           FontSmoothing = fsmNone
@@ -490,6 +503,7 @@ object frmMain: TfrmMain
             Properties.Items.Strings = (
               'application/json'
               'text/xml'
+              'text/html'
               'text/plain'
               'application/x-www-form-urlencoded')
             Properties.OnChange = comboPostContentTypePropertiesChange
@@ -510,6 +524,9 @@ object frmMain: TfrmMain
           Font.Pitch = fpFixed
           Font.Style = []
           TabOrder = 1
+          OnEnter = EditorEnter
+          OnExit = EditorExit
+          OnKeyUp = EditorPostDataKeyUp
           OnMouseUp = EditorPostDataMouseUp
           Gutter.Font.Charset = DEFAULT_CHARSET
           Gutter.Font.Color = clWindowText
@@ -518,7 +535,7 @@ object frmMain: TfrmMain
           Gutter.Font.Style = []
           Gutter.ShowLineNumbers = True
           Highlighter = SynJSONSyn
-          Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoShowScrollHint, eoSmartTabDelete, eoSmartTabs, eoTabsToSpaces]
+          Options = [eoAutoIndent, eoDragDropEditing, eoEnhanceHomeKey, eoEnhanceEndKey, eoGroupUndo, eoHideShowScrollbars, eoScrollPastEol, eoShowScrollHint, eoSmartTabDelete, eoTabsToSpaces]
           TabWidth = 2
           WantTabs = True
           FontSmoothing = fsmNone
@@ -538,6 +555,19 @@ object frmMain: TfrmMain
       TabOrder = 10
       OnClick = btnCopyFullURLClick
     end
+    object btnPasteFullURL: TcxButton
+      Left = 539
+      Top = 341
+      Width = 25
+      Height = 25
+      Hint = 'Paste Full URL'
+      OptionsImage.ImageIndex = 19
+      OptionsImage.Images = cxImageList
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 11
+      OnClick = btnPasteFullURLClick
+    end
   end
   object OpenDialog: TOpenDialog
     Filter = 'REST Debugger Project (*.rdproj)|*.rdproj'
@@ -819,7 +849,7 @@ object frmMain: TfrmMain
       Hint = 'Bigger Editor'
       Visible = ivAlways
       ImageIndex = 18
-      ShortCut = 16454
+      ShortCut = 122
       OnClick = pmnuBiggerEditorClick
     end
     object pmnuCutJsonContent: TdxBarButton
@@ -1590,6 +1620,29 @@ object frmMain: TfrmMain
           3CC094D8E0E5060A11F61660B4F27C1ABED819BED81A60AA717F43C59FB0F4F3
           C7777AF4E0B1D30F2F6BC0B7D3CFF4AF3073F16572842FB68E54F5F71A30DEF7
           01965B5A410000000049454E44AE426082}
+      end
+      item
+        ImageClass = 'TdxPNGImage'
+        Image.Data = {
+          89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+          6100000021744558745469746C650050617374653B426172733B526962626F6E
+          3B5374616E646172643B259B079D000001EF49444154785E75523B681451143D
+          6F77418D86A056DB0AC26A61A512035A8C168A59B0102C5C2C836817145448E3
+          070C2954B00AC4C23695209A66D32A29B7B6B050D2C8261A7666DFE7DEEBDC97
+          9D0167DD03877BE631E7BC3B87312282024FDF7CD6D18541A2C7C20266C26090
+          6D3A3BBC7C78F32E142FBFA428502BC4B7F54EF712DE0A33270B9D8B98BDD0C2
+          F9B916CECD9E427FA79F246655EEDC6F775141A3106A6C5D5FC4A7B51E9E3CDB
+          867316DE79386B71FCE01E4ECE77B0D3FB904C0E20C1D16333B83DF713DBDF7F
+          00C6A05ECBD9A8E1C8D40198BD3EB2D46262000546A30EB4CE9C40B33983DD5F
+          BB00044669540A606A58FE9A1D5A8E071000AE2CB1F7EEA69CBEB188D0DF8277
+          0E2B1B6721C239B5C89C3183A316D267C6ABA5F654B941F0040916E22D82B5DA
+          099E3FB882FFC113E3E18B8F2AEB6500B900D0101C2CC8E72482E277EA2190A8
+          45460440C46A336580B701EC33B0B3FB648682D55C1A254E551CE8DF80603DD8
+          65FA0991C46A8D09718A1453A20E24E31B884F630FE41C288C0A4434A82E8354
+          108F6DE0202103FB7C9203094723AB510C507EC2E40E36BAABEFAFEA4DE93080
+          9AED7D33974645D1C578C0FCEBAD6B8536C64C2F3CE23F1C572F8AAC0471A583
+          0A586FB8F7783DBEC8C2A31EB8BA519814305C5BB9353DFAD50D14E393000CFE
+          023DB570481AE91B650000000049454E44AE426082}
       end>
   end
   object PopupEditor: TdxBarPopupMenu
@@ -1672,4 +1725,11 @@ object frmMain: TfrmMain
     Left = 640
     Top = 256
   end
+  object SynHTMLSyn: TSynHTMLSyn
+    Options.AutoDetectEnabled = False
+    Options.AutoDetectLineLimit = 0
+    Options.Visible = False
+    Left = 640
+    Top = 331
+  end
 end

+ 167 - 60
src/_frmMain.pas

@@ -14,7 +14,7 @@ uses
   cxButtons, dxSkinscxPCPainter,
   dxBarBuiltInMenu, cxPC, System.ImageList, Vcl.ImgList, cxCheckBox, cxImageList,
   SynEdit, SynHighlighterJSON, SynEditHighlighter, SynHighlighterIni,
-  SynHighlighterXML;
+  SynHighlighterXML, SynHighlighterHtml;
 
 type
   TMethodType = (mtGET, mtPOST, mtPATCH, mtPUT, mtDELETE);
@@ -103,6 +103,8 @@ type
     pmnuFormatXML: TdxBarButton;
     pmnuCompactXML: TdxBarButton;
     pmnuBiggerEditor: TdxBarButton;
+    btnPasteFullURL: TcxButton;
+    SynHTMLSyn: TSynHTMLSyn;
     procedure FormShow(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
@@ -152,6 +154,20 @@ type
     procedure pmnuCompactXMLClick(Sender: TObject);
     procedure comboPostContentTypePropertiesChange(Sender: TObject);
     procedure pmnuBiggerEditorClick(Sender: TObject);
+    procedure EditorContentKeyUp(Sender: TObject; var Key: Word;
+      Shift: TShiftState);
+    procedure edtFullURLPropertiesChange(Sender: TObject);
+    procedure btnPasteFullURLClick(Sender: TObject);
+    procedure EditorResponseHeadersKeyUp(Sender: TObject; var Key: Word;
+      Shift: TShiftState);
+    procedure EditorURLParamsKeyUp(Sender: TObject; var Key: Word;
+      Shift: TShiftState);
+    procedure EditorExtraHeadersKeyUp(Sender: TObject; var Key: Word;
+      Shift: TShiftState);
+    procedure EditorPostDataKeyUp(Sender: TObject; var Key: Word;
+      Shift: TShiftState);
+    procedure EditorEnter(Sender: TObject);
+    procedure EditorExit(Sender: TObject);
   private
     FProjectConfig: TJSONConfig;
     FActiveProject: string;
@@ -186,8 +202,8 @@ implementation
 
 {$R *.dfm}
 
-uses System.NetEncoding, System.UITypes, _EncryptStr, JsonDataObjects, Clipbrd, IdGlobal, System.IOUtils, uRwXmlDOM,
-  _frmBiggerEditor;
+uses System.NetEncoding, System.UITypes, _EncryptStr, JsonDataObjects, IdGlobal, System.IOUtils, uRwXmlDOM,
+  _frmBiggerEditor, IdUri;
 
 procedure TfrmMain.tbbtnRunClick(Sender: TObject);
 begin
@@ -208,59 +224,6 @@ end;
 
 procedure TfrmMain.UpdateEditor(const AText: string);
 begin
-  if ActiveEditor = EditorContent then
-  begin
-    if Pos('application/json', HTTP.Response.ContentType) > 0 then
-    begin
-      ActiveEditor.Highlighter := SynJSONSyn;
-    end
-    else
-    if Pos('text/xml', HTTP.Response.ContentType) > 0 then
-    begin
-      ActiveEditor.Highlighter := SynXMLSyn;
-    end
-    else
-    begin
-      ActiveEditor.Highlighter := nil;
-    end;
-  end
-  else
-  if ActiveEditor = EditorURLParams then
-  begin
-    ActiveEditor.Highlighter := SynIniSyn;
-  end
-  else
-  if ActiveEditor = EditorExtraHeaders then
-  begin
-    ActiveEditor.Highlighter := SynIniSyn;
-  end
-  else
-  if ActiveEditor = EditorPostData then
-  begin
-    if Pos('application/json', comboPostContentType.Text) > 0 then
-    begin
-      ActiveEditor.Highlighter := SynJSONSyn;
-    end
-    else
-    if Pos('text/xml', comboPostContentType.Text) > 0 then
-    begin
-      ActiveEditor.Highlighter := SynXMLSyn;
-    end
-    else
-    begin
-      ActiveEditor.Highlighter := nil;
-    end;
-  end
-  else
-  if ActiveEditor = EditorResponseHeaders then
-  begin
-    ActiveEditor.Highlighter := nil;
-  end
-  else
-  begin
-    ActiveEditor.Highlighter := nil;
-  end;
-
   ActiveEditor.Lines.Text := AText;
 end;
 
@@ -373,9 +336,17 @@ begin
   end;
 end;
 
+procedure TfrmMain.btnPasteFullURLClick(Sender: TObject);
+begin
+  edtFullURL.Clear;
+  edtFullURL.SetFocus;
+  edtFullURL.PasteFromClipboard;
+end;
+
 procedure TfrmMain.btnCopyFullURLClick(Sender: TObject);
 begin
-  Clipboard.SetTextBuf(PChar(edtFullURL.Text));
+  edtFullURL.SelectAll;
+  edtFullURL.CopyToClipboard;
 end;
 
 procedure TfrmMain.btnCopyPresetClick(Sender: TObject);
@@ -422,8 +393,24 @@ end;
 
 procedure TfrmMain.comboPostContentTypePropertiesChange(Sender: TObject);
 begin
-  ActiveEditor := EditorPostData;
-  UpdateEditor(EditorPostData.Lines.Text);
+  if Pos('application/json', comboPostContentType.Text) > 0 then
+  begin
+    EditorPostData.Highlighter := SynJSONSyn;
+  end
+  else
+  if Pos('text/xml', comboPostContentType.Text) > 0 then
+  begin
+    EditorPostData.Highlighter := SynXMLSyn;
+  end
+  else
+  if Pos('text/html', comboPostContentType.Text) > 0 then
+  begin
+    EditorPostData.Highlighter := SynHTMLSyn;
+  end
+  else
+  begin
+    EditorPostData.Highlighter := nil;
+  end;
 end;
 
 procedure TfrmMain.comboPresetsPropertiesChange(Sender: TObject);
@@ -440,6 +427,7 @@ end;
 procedure TfrmMain.pmnuBiggerEditorClick(Sender: TObject);
 begin
   frmBiggerEditor.ShowModal;
+  UpdateFullURL;
 end;
 
 procedure TfrmMain.pmnuCompactJsonClick(Sender: TObject);
@@ -454,6 +442,7 @@ begin
       if ActiveEditor.Lines[0][1] = '{' then
       begin
         jo := TJsonObject.Create;
+        Screen.Cursor := crHourGlass;
         try
           try
             jo.FromJSON(ActiveEditor.Lines.Text);
@@ -465,6 +454,7 @@ begin
           end;
           UpdateEditor(jo.ToJSON(True));
         finally
+          Screen.Cursor := crDefault;
           jo.Free;
         end;
       end
@@ -472,6 +462,7 @@ begin
       if ActiveEditor.Lines[0][1] = '[' then
       begin
         ja := TJsonArray.Create;
+        Screen.Cursor := crHourGlass;
         try
           try
             ja.FromJSON(ActiveEditor.Lines.Text);
@@ -483,6 +474,7 @@ begin
           end;
           UpdateEditor(ja.ToJSON(True));
         finally
+          Screen.Cursor := crDefault;
           ja.Free;
         end;
       end;
@@ -600,6 +592,26 @@ begin
   btnSave.Enabled := not FIsTempProjectLoaded;
 end;
 
+procedure TfrmMain.EditorEnter(Sender: TObject);
+begin
+  (Sender as TSynEdit).ActiveLineColor := $00E6FFFA;
+end;
+
+procedure TfrmMain.EditorExit(Sender: TObject);
+begin
+  (Sender as TSynEdit).ActiveLineColor := clNone;
+end;
+
+procedure TfrmMain.EditorContentKeyUp(Sender: TObject; var Key: Word;
+  Shift: TShiftState);
+begin
+  if Key = vkF11 then
+  begin
+    ActiveEditor := EditorContent;
+    pmnuBiggerEditorClick(Sender);
+  end;
+end;
+
 procedure TfrmMain.EditorContentMouseUp(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
@@ -610,6 +622,16 @@ begin
   end;
 end;
 
+procedure TfrmMain.EditorExtraHeadersKeyUp(Sender: TObject; var Key: Word;
+  Shift: TShiftState);
+begin
+  if Key = vkF11 then
+  begin
+    ActiveEditor := EditorExtraHeaders;
+    pmnuBiggerEditorClick(Sender);
+  end;
+end;
+
 procedure TfrmMain.EditorExtraHeadersMouseUp(Sender: TObject;
   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 begin
@@ -620,6 +642,16 @@ begin
   end;
 end;
 
+procedure TfrmMain.EditorResponseHeadersKeyUp(Sender: TObject; var Key: Word;
+  Shift: TShiftState);
+begin
+  if Key = vkF11 then
+  begin
+    ActiveEditor := EditorResponseHeaders;
+    pmnuBiggerEditorClick(Sender);
+  end;
+end;
+
 procedure TfrmMain.EditorResponseHeadersMouseUp(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
@@ -630,6 +662,16 @@ begin
   end;
 end;
 
+procedure TfrmMain.EditorPostDataKeyUp(Sender: TObject; var Key: Word;
+  Shift: TShiftState);
+begin
+  if Key = vkF11 then
+  begin
+    ActiveEditor := EditorPostData;
+    pmnuBiggerEditorClick(Sender);
+  end;
+end;
+
 procedure TfrmMain.EditorPostDataMouseUp(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
@@ -645,6 +687,16 @@ begin
   UpdateFullURL;
 end;
 
+procedure TfrmMain.EditorURLParamsKeyUp(Sender: TObject; var Key: Word;
+  Shift: TShiftState);
+begin
+  if Key = vkF11 then
+  begin
+    ActiveEditor := EditorURLParams;
+    pmnuBiggerEditorClick(Sender);
+  end;
+end;
+
 procedure TfrmMain.EditorURLParamsMouseUp(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
@@ -657,7 +709,26 @@ end;
 
 procedure TfrmMain.edtBaseURLPropertiesChange(Sender: TObject);
 begin
-  UpdateFullURL;
+  if edtBaseURL.Focused then
+  begin
+    UpdateFullURL;
+  end;
+end;
+
+procedure TfrmMain.edtFullURLPropertiesChange(Sender: TObject);
+var
+  uri: TIdURI;
+begin
+  if edtFullURL.Focused then
+  begin
+    uri := TIdURI.Create(edtFullURL.Text);
+    try
+      EditorURLParams.Lines.Text := StringReplace(uri.Params, '&', #13#10, [rfReplaceAll]);
+      edtBaseURL.Text := StringReplace(edtFullURL.Text, '?' + uri.Params, '', [rfReplaceAll]);
+    finally
+      uri.Free;
+    end;
+  end;
 end;
 
 procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
@@ -946,6 +1017,15 @@ begin
     pmnuFormatXML.Visible := ivNever;
     pmnuCompactXML.Visible := ivNever;
   end;
+
+  if ActiveEditor = frmBiggerEditor.EditorBiggerEditor then
+  begin
+    pmnuBiggerEditor.Visible := ivNever;
+  end
+  else
+  begin
+    pmnuBiggerEditor.Visible := ivAlways;
+  end;
 end;
 
 procedure TfrmMain.pmnuFormatJsonContentClick(Sender: TObject);
@@ -960,6 +1040,7 @@ begin
       if ActiveEditor.Lines[0][1] = '{' then
       begin
         jo := TJsonObject.Create;
+        Screen.Cursor := crHourGlass;
         try
           try
             jo.FromJSON(ActiveEditor.Lines.Text);
@@ -971,6 +1052,7 @@ begin
           end;
           UpdateEditor(jo.ToJSON(False));
         finally
+          Screen.Cursor := crDefault;
           jo.Free;
         end;
       end
@@ -978,6 +1060,7 @@ begin
       if ActiveEditor.Lines[0][1] = '[' then
       begin
         ja := TJsonArray.Create;
+        Screen.Cursor := crHourGlass;
         try
           try
             ja.FromJSON(ActiveEditor.Lines.Text);
@@ -989,6 +1072,7 @@ begin
           end;
           UpdateEditor(ja.ToJSON(False));
         finally
+          Screen.Cursor := crDefault;
           ja.Free;
         end;
       end;
@@ -1067,6 +1151,29 @@ begin
       DoGETRequest(mtDELETE);
     end;
   finally
+
+    if Pos('application/json', HTTP.Response.ContentType) > 0 then
+    begin
+      EditorContent.Highlighter := SynJSONSyn;
+    end
+    else
+    if Pos('text/xml', HTTP.Response.ContentType) > 0 then
+    begin
+      EditorContent.Highlighter := SynXMLSyn;
+    end
+    else
+    if Pos('text/html', HTTP.Response.ContentType) > 0 then
+    begin
+      EditorContent.Highlighter := SynHTMLSyn;
+    end
+    else
+    begin
+      EditorContent.Highlighter := nil;
+    end;
+
+    EditorContent.SetFocus;
+
+
     dxStatusBar.Panels[1].Text := FormatFloat('Response Time: 0, ms', GetTickCount - tick);
     dxStatusBar.Panels[2].Text := 'Response Code: ' + HTTP.ResponseCode.ToString;
     Screen.Cursor := crDefault;

Some files were not shown because too many files changed in this diff