Browse Source

CH: Initial Release on http://luaforge.net + Added lots of new features

Jean-Francois Goulet 20 years ago
parent
commit
73397f5671

+ 2 - 2
LuaEdit/AddBreakpoint.pas

@@ -115,8 +115,8 @@ begin
   TLuaUnit(cboUnits.Items.Objects[cboUnits.ItemIndex]).pDebugInfos.lstBreakpoint.Add(pBreakpoint);
   frmBreakpoints.RefreshBreakpointList;
 
-  if Assigned(pCurrentSynEdit) then
-    pCurrentSynEdit.Refresh;
+  if Assigned(frmMain.jvUnitBar.SelectedTab.Data) then
+    TLuaUnit(frmMain.jvUnitBar.SelectedTab.Data).synUnit.Refresh;
     
   ModalResult := mrOk;
 end;

BIN
LuaEdit/Bin/HdrBld.dll


BIN
LuaEdit/Bin/LuaEdit.exe


+ 240 - 241
LuaEdit/Breakpoints.dfm

@@ -153,7 +153,7 @@ object frmBreakpoints: TfrmBreakpoints
     Left = 56
     Top = 80
     Bitmap = {
-      494C01010A000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C01010A000E00040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000004000000001002000000000000040
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -285,39 +285,39 @@ object frmBreakpoints: TfrmBreakpoints
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100414141004141
+      4100414141004141410041414100FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000041414100414141004141
-      4100414141004141410041414100000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0041414100FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000041414100FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0041414100000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000041414100FFFFFF00FFFFFF00FFFF
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFFFF00FFFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00414141000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000004141
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF004141
       41004141410041414100414141004141410041414100FFFFFF00FFFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00414141000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -325,7 +325,7 @@ object frmBreakpoints: TfrmBreakpoints
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       00000000000084848400C6C6C60084848400C6C6C60084848400000000000000
-      0000000000000000000000000000000000000000000000000000000000004141
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF004141
       4100FFFFFF00FFFFFF00FFFFFF0041414100FFFFFF0041414100FFFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00414141000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -333,7 +333,7 @@ object frmBreakpoints: TfrmBreakpoints
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000084848400C6C6C60084848400C6C6C60084848400C6C6C600848484000000
-      000000000000000000000000000000000000000000000000000041414100FFFF
+      000000000000000000000000000000000000FF00FF00FF00FF0041414100FFFF
       FF00FFFFFF00FFFFFF0041414100FFFFFF004141410041414100FFFFFF004141
       4100FFFFFF0041414100FFFFFF00414141000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -341,7 +341,7 @@ object frmBreakpoints: TfrmBreakpoints
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000C6C6C60084848400C6C6C60084848400C6C6C60084848400C6C6C6000000
-      000000000000000000000000000000000000000000000000000041414100FFFF
+      000000000000000000000000000000000000FF00FF00FF00FF0041414100FFFF
       FF00FFFFFF00FFFFFF004141410041414100FFFFFF0041414100FFFFFF004141
       4100FFFFFF0041414100FFFFFF00414141000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -349,7 +349,7 @@ object frmBreakpoints: TfrmBreakpoints
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000084848400C6C6C60084848400C6C6C60084848400C6C6C600848484000000
-      0000000000000000000000000000000000000000000041414100FFFFFF004141
+      000000000000000000000000000000000000FF00FF0041414100FFFFFF004141
       4100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0041414100FFFFFF004141
       4100FFFFFF0041414100FFFFFF00414141000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -365,307 +365,307 @@ object frmBreakpoints: TfrmBreakpoints
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000084848400C6C6C60084848400C6C6C60084848400C6C6C600848484000000
-      0000000000000000000000000000000000004141410041414100000000004141
+      0000000000000000000000000000000000004141410041414100FF00FF004141
       4100FFFFFF0041414100FFFFFF0041414100FFFFFF0041414100FFFFFF004141
-      4100FFFFFF004141410041414100000000000000000000000000000000000000
+      4100FFFFFF004141410041414100FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       00000000000084848400C6C6C60084848400C6C6C60084848400000000000000
-      0000000000000000000000000000000000000000000000000000000000004141
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF004141
       4100FFFFFF0041414100FFFFFF0041414100FFFFFF00FFFFFF00414141004141
-      4100FFFFFF004141410000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000004141
-      4100FFFFFF0041414100FFFFFF0041414100FFFFFF0041414100000000004141
-      4100414141000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000004141
-      4100FFFFFF0041414100FFFFFF00414141004141410000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      4100FFFFFF0041414100FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00004141410041414100FFFFFF00414141000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF004141
+      4100FFFFFF0041414100FFFFFF0041414100FFFFFF0041414100FF00FF004141
+      410041414100FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000004141410041414100000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF004141
+      4100FFFFFF0041414100FFFFFF004141410041414100FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000009D4141009D4141009D4141009D41
-      41009D4141009D41410000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF004141410041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF004141410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000041414100FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF004141410000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF009D4141009D4141009D4141009D41
+      41009D4141009D414100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000000000000000000000000000041414100FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0041414100000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000008000000000000000000042424200424242004242
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF0041414100FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF0000008000FF00FF00FF00FF0042424200424242004242
       4200424242004242420042424200424242004242420042424200424242004242
       4200424242004242420042424200424242000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000004141
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF004141
       410041414100414141009D9D9D0041414100FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0041414100414141000000000000000000000000000000
-      000000008000FFFFFF0000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000042424200FFFFFF0042FF
+      FF00FFFFFF00FFFFFF004141410041414100FF00FF00FF00FF00FF00FF00FF00
+      FF0000008000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0042424200FFFFFF0042FF
       FF00FFFFFF0042FFFF00FFFFFF0042FFFF00FFFFFF0042FFFF00FFFFFF0042FF
       FF00FFFFFF0042FFFF00FFFFFF00424242000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000004141
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF004141
       4100FFFFFF00FFFFFF0041414100FFFFFF0041414100FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0041414100FFFFFF000000000000000000000000000000
-      80000000800000008000FFFFFF00000000000000000000000000000000000000
-      00000000000000008000FFFFFF0000000000000000004242420042FFFF009D9D
+      FF00FFFFFF00FFFFFF0041414100FFFFFF00FF00FF00FF00FF00FF00FF000000
+      80000000800000008000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF0000008000FFFFFF00FF00FF00FF00FF004242420042FFFF009D9D
       9D009D9D9D009D9D9D009D9D9D009D9D9D009D9D9D00FFFFFF009D9D9D009D9D
       9D009D9D9D009D9D9D0042FFFF00424242000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000004141
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF004141
       4100FFFFFF0041414100FFFFFF004141410041414100FFFFFF0041414100FFFF
-      FF0041414100FFFFFF0041414100FFFFFF000000000000000000000000000000
-      80000000800000008000FFFFFF00000000000000000000000000000000000000
-      000000008000FFFFFF0000000000000000000000000042424200FFFFFF0042FF
+      FF0041414100FFFFFF0041414100FFFFFF00FF00FF00FF00FF00FF00FF000000
+      80000000800000008000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF0000008000FFFFFF00FF00FF00FF00FF00FF00FF0042424200FFFFFF0042FF
       FF004242420042424200FFFFFF0042FFFF00FFFFFF0042FFFF00FFFFFF0042FF
       FF00FFFFFF0042FFFF00FFFFFF00424242000000000000000000000000000000
       0000000000000000800000008000000080000000800000008000000000000000
-      0000000000000000000000000000000000000000000000000000000000004141
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF004141
       4100FFFFFF004141410041414100FFFFFF0041414100FFFFFF0041414100FFFF
-      FF0041414100FFFFFF0041414100FFFFFF000000000000000000000000000000
-      0000000080000000800000008000FFFFFF000000000000000000000000000000
-      800000008000FFFFFF0000000000000000000000000042424200424242004242
+      FF0041414100FFFFFF0041414100FFFFFF00FF00FF00FF00FF00FF00FF00FF00
+      FF00000080000000800000008000FFFFFF00FF00FF00FF00FF00FF00FF000000
+      800000008000FFFFFF00FF00FF00FF00FF00FF00FF0042424200424242004242
       420042424200FFFFFF0042424200424242004242420042424200424242004242
       4200424242004242420042424200424242000000000000000000000000000000
       0000000080000000800000008000000080000000800000008000000080000000
-      0000000000000000000000000000000000000000000000000000000000004141
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF004141
       4100FFFFFF00FFFFFF00FFFFFF00FFFFFF0041414100FFFFFF0041414100FFFF
-      FF0041414100FFFFFF0041414100FFFFFF000000000000000000000000000000
-      000000000000000080000000800000008000FFFFFF0000000000000080000000
-      8000FFFFFF000000000000000000000000000000000000000000000000004242
-      4200FFFFFF004242420000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF0041414100FFFFFF0041414100FFFFFF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00000080000000800000008000FFFFFF00FF00FF00000080000000
+      8000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004242
+      4200FFFFFF0042424200FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000080000000800000008000000080000000800000008000000080000000
-      0000000000000000000000000000000000000000000041FFFF00000000004141
+      000000000000000000000000000000000000FF00FF0041FFFF00FF00FF004141
       41009D9D9D00FFFFFF0041FFFF00FFFFFF0041414100FFFFFF0041414100FFFF
-      FF0041414100FFFFFF0041414100FFFFFF000000000000000000000000000000
-      000000000000000000000000800000008000000080000000800000008000FFFF
-      FF00000000000000000000000000000000004242420042424200000000004242
-      4200FFFFFF004242420000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF0041414100FFFFFF0041414100FFFFFF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF000000800000008000000080000000800000008000FFFF
+      FF00FF00FF00FF00FF00FF00FF00FF00FF004242420042424200FF00FF004242
+      4200FFFFFF0042424200FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000080000000800000008000000080000000800000008000000080000000
-      000000000000000000000000000000000000000000009D9D9D00FFFFFF004141
+      000000000000000000000000000000000000FF00FF009D9D9D00FFFFFF004141
       41009D9D9D0041FFFF00FFFFFF00FFFFFF0041414100FFFFFF0041414100FFFF
-      FF004141410041414100FFFFFF00FFFFFF000000000000000000000000000000
-      0000000000000000000000000000000080000000800000008000FFFFFF000000
-      00000000000000000000000000000000000042424200FFFFFF0042424200FFFF
-      FF00424242000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF004141410041414100FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00000080000000800000008000FFFFFF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF0042424200FFFFFF0042424200FFFF
+      FF0042424200FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000080000000800000008000000080000000800000008000000080000000
-      00000000000000000000000000000000000000000000000000000000000041FF
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF0041FF
       FF009D9D9D00FFFFFF00FFFFFF00FFFFFF00FFFFFF004141410041414100FFFF
-      FF0041414100FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
-      000000000000000000000000800000008000000080000000800000008000FFFF
-      FF000000000000000000000000000000000042424200FFFFFF00FFFFFF00FFFF
-      FF00424242004242420000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF0041414100FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF000000800000008000000080000000800000008000FFFF
+      FF00FF00FF00FF00FF00FF00FF00FF00FF0042424200FFFFFF00FFFFFF00FFFF
+      FF004242420042424200FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000080000000800000008000000080000000800000008000000080000000
-      000000000000000000000000000000000000000000009D9D9D009D9D9D009D9D
+      000000000000000000000000000000000000FF00FF009D9D9D009D9D9D009D9D
       9D00FFFFFF0041FFFF0041FFFF00FFFFFF00FFFFFF00FFFFFF00414141004141
-      4100FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
-      000000000000000080000000800000008000FFFFFF000000000000008000FFFF
-      FF000000000000000000000000000000000042424200FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF004242420000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      4100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00000080000000800000008000FFFFFF00FF00FF0000008000FFFF
+      FF00FF00FF00FF00FF00FF00FF00FF00FF0042424200FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF0042424200FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000800000008000000080000000800000008000000000000000
-      0000000000000000000000000000000000000000000041FFFF00FFFFFF009D9D
+      000000000000000000000000000000000000FF00FF0041FFFF00FFFFFF009D9D
       9D0041FFFF00FFFFFF009D9D9D0041FFFF009D4141009D4141009D4141009D41
-      41009D4141009D4141009D4141009D4141000000000000000000000000000000
-      8000000080000000800000008000FFFFFF000000000000000000000000000000
-      800000008000FFFFFF00000000000000000042424200FFFFFF00FFFFFF00FFFF
-      FF00424242000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000CDCDCD009D9D9D0041FF
-      FF009D9D9D0041FFFF00000000009D9D9D0041FFFF009D4141009D4141009D41
-      41009D4141009D4141009D4141009D4141000000000000000000000080000000
-      80000000800000008000FFFFFF00000000000000000000000000000000000000
-      00000000800000008000FFFFFF000000000042424200FFFFFF00FFFFFF004242
-      4200000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000000000000000000000000000000000000000000009D9D9D0041FFFF000000
-      00009D9D9D00FFFFFF0000000000000000009D9D9D0000000000000000000000
-      0000000000000000000000000000000000000000000000000000000080000000
-      8000FFFFFF000000000000000000000000000000000000000000000000000000
-      00000000000000008000000080000000000042424200FFFFFF00424242000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000041FFFF00000000000000
-      00009D9D9D0041FFFF0000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000004242420042424200000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00009D9D9D000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000009D9D9D0000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000041419D009D9D9D0000000000000000000000000041414100414141009D9D
-      9D00414141004141410041414100000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000009D9D9D009D9D9D00000000000000
-      0000000000000000000000000000000000000000000041414100414141004141
-      4100414141004141410041414100000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000041419D0041419D00000000000000000041414100FFFFFF009D9D9D004141
-      9D00FFFFFF00FFFFFF0041414100000000000000000000000000000000000000
-      0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF000000000000000000000000009D9D9D009D9D9D009D9D9D000000
-      0000000000000000000000000000000000000000000041414100FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0041414100000000000000000000000000000000000000
+      41009D4141009D4141009D4141009D414100FF00FF00FF00FF00FF00FF000000
+      8000000080000000800000008000FFFFFF00FF00FF00FF00FF00FF00FF000000
+      800000008000FFFFFF00FF00FF00FF00FF0042424200FFFFFF00FFFFFF00FFFF
+      FF0042424200FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00CDCDCD009D9D9D0041FF
+      FF009D9D9D0041FFFF00FF00FF009D9D9D0041FFFF009D4141009D4141009D41
+      41009D4141009D4141009D4141009D414100FF00FF00FF00FF00000080000000
+      80000000800000008000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF000000800000008000FFFFFF00FF00FF0042424200FFFFFF00FFFFFF004242
+      4200FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF009D9D9D0041FFFF00FF00
+      FF009D9D9D00FFFFFF00FF00FF00FF00FF009D9D9D00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000080000000
+      8000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF000000800000008000FF00FF0042424200FFFFFF0042424200FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF0041FFFF00FF00FF00FF00
+      FF009D9D9D0041FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF004242420042424200FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF009D9D9D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF0041419D009D9D9D00FF00FF00FF00FF00FF00FF0041414100414141009D9D
+      9D00414141004141410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF0000000000000000000000000000000000000000000000
+      00000000000000000000FF00FF00FF00FF009D9D9D009D9D9D00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100414141004141
+      4100414141004141410041414100FF00FF00FF00FF00FF00FF00FF00FF000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF0041419D0041419D00FF00FF00FF00FF0041414100FFFFFF009D9D9D004141
+      9D00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF0000000000FF00FF00FF00FF009D9D9D009D9D9D009D9D9D00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00FF000000
       0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF
-      0000000000000000000000000000000000000000000000000000000000000000
-      000041419D0041419D009D9D9D0000000000414141009D9D9D0041419D009D9D
-      9D00FFFFFF00FFFFFF00FFFFFF00414141000000000000000000000000000000
-      00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000000000009D9D9D009D9D9D009D9D9D009D9D
-      9D000000000000000000000000000000000041414100FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00414141000000000000000000000000000000
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF0041419D0041419D009D9D9D00FF00FF00414141009D9D9D0041419D009D9D
+      9D00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF009D9D9D009D9D9D009D9D9D009D9D
+      9D00FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       0000FFFF0000840000008400000084000000840000008400000084000000FFFF
-      FF00000000000000000000000000000000000000000000000000000000004141
+      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004141
       41009D9D9D0041419D0041419D009D9D9D009D9D9D0041419D0041419D00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00414141000000000000000000000000000000
-      000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000000000009D9D9D009D9D9D009D9D9D004141
+      FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00
+      FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF009D9D9D009D9D9D009D9D9D004141
       41004141410041414100414141004141410041414100FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00414141000000000000000000000000000000
+      FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
-      FF00000000000000000000000000000000000000000000000000000000004141
+      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004141
       4100FFFFFF00CDCDCD0041419D0041419D0041419D0041419D00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00414141000000000000000000000000000000
-      000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000000000009D9D9D009D9D9D009D9D9D004141
+      FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00
+      FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF009D9D9D009D9D9D009D9D9D004141
       4100CDCDCD00CDCDCD00FFFFFF0041414100FFFFFF0041414100FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00414141000000000000000000000000000000
+      FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       00000000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
-      FF0000000000000000000000000000000000000000000000000041414100FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFF
       FF00FFFFFF004141410041419D0041419D0041419D0041414100FFFFFF004141
-      4100FFFFFF0041414100FFFFFF00414141000000000000000000000000000000
+      4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       0000FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000000000009D9D9D009D9D9D0041414100CDCD
+      FF00FFFFFF00FFFFFF0000000000FF00FF009D9D9D009D9D9D0041414100CDCD
       CD00CDCDCD00CDCDCD0041414100FFFFFF004141410041414100FFFFFF004141
-      4100FFFFFF0041414100FFFFFF00414141000000000000000000000000000000
+      4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
-      FF0000000000000000000000000000000000000000000000000041414100FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFF
       FF00FFFFFF0041419D0041419D0041419D0041419D009D9D9D00FFFFFF004141
-      4100FFFFFF0041414100FFFFFF0041414100000000000000000000000000FFFF
+      4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF000000000000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF0000000000FFFFFF0000000000000000009D9D9D009D9D9D0041414100CDCD
+      FF0000000000FFFFFF0000000000FF00FF009D9D9D009D9D9D0041414100CDCD
       CD00CDCDCD00CDCDCD004141410041414100FFFFFF0041414100FFFFFF004141
-      4100FFFFFF0041414100FFFFFF00414141000000000000000000000000000000
+      4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       0000FFFF0000840000008400000084000000840000008400000084000000FFFF
-      FF00000000000000000000000000000000000000000041414100FFFFFF004141
+      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFFFF004141
       9D0041419D0041419D009D9D9D00FFFFFF0041419D0041419D009D9D9D004141
-      4100FFFFFF0041414100FFFFFF00414141000000000000000000000000000000
-      0000000000000000000000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF0000000000FFFFFF0000000000000000009D9D9D0041414100CDCDCD004141
+      4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00000000000000
+      000000000000FF00FF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
+      FF0000000000FFFFFF0000000000FF00FF009D9D9D0041414100CDCDCD004141
       4100CDCDCD00CDCDCD00CDCDCD00CDCDCD00CDCDCD0041414100FFFFFF004141
-      4100FFFFFF0041414100FFFFFF00414141000000000000000000000000000000
+      4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF
-      00000000000000000000000000000000000041414100FFFFFF00414141009D9D
+      000000000000FF00FF00FF00FF00FF00FF0041414100FFFFFF00414141009D9D
       9D00FFFFFF009D9D9D00FFFFFF0041414100FFFFFF0041419D0041419D009D9D
-      9D00FFFFFF0041414100FFFFFF00414141000000000000000000000000000000
-      0000000000000000000000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF0000000000FFFFFF00000000000000000041414100CDCDCD00414141004141
+      9D00FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
+      FF0000000000FFFFFF0000000000FF00FF0041414100CDCDCD00414141004141
       4100CDCDCD0041414100CDCDCD0041414100CDCDCD0041414100FFFFFF004141
-      4100FFFFFF0041414100FFFFFF00414141000000000000000000000000000000
+      4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       0000FFFF0000840000008400000084000000FFFF000000000000000000000000
-      0000000000000000000000000000000000004141410041414100000000004141
+      000000000000FF00FF00FF00FF00FF00FF004141410041414100FF00FF004141
       4100FFFFFF0041414100FFFFFF0041414100FFFFFF004141410041419D004141
-      9D009D9D9D004141410041414100000000000000000000000000000000000000
-      0000000000000000000000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF0000000000FFFFFF00000000000000000041414100414141009D9D9D004141
+      9D009D9D9D004141410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
+      FF0000000000FFFFFF0000000000FF00FF0041414100414141009D9D9D004141
       4100CDCDCD0041414100CDCDCD0041414100CDCDCD0041414100FFFFFF004141
-      4100FFFFFF004141410041414100000000000000000000000000000000000000
+      4100FFFFFF004141410041414100FF00FF00FF00FF00FF00FF00FF00FF000000
       0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF0000000000FFFFFF000000
-      0000000000000000000000000000000000000000000000000000000000004141
-      4100FFFFFF0041414100FFFFFF0041414100FFFFFF0041414100000000004141
-      4100414141004141410000000000000000000000000000000000000000000000
-      0000000000000000000000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF00000000000000000000000000000000009D9D9D009D9D9D009D9D9D004141
+      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004141
+      4100FFFFFF0041414100FFFFFF0041414100FFFFFF0041414100FF00FF004141
+      41004141410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
+      FF000000000000000000FF00FF00FF00FF009D9D9D009D9D9D009D9D9D004141
       4100CDCDCD0041414100CDCDCD0041414100CDCDCD00CDCDCD00414141004141
-      4100FFFFFF004141410000000000000000000000000000000000000000000000
-      0000FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000004141
-      4100FFFFFF0041414100FFFFFF0041414100FFFFFF0041414100000000004141
-      4100414141000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF00000000000000000000000000000000009D9D9D009D9D9D009D9D9D004141
+      4100FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
+      0000FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF00000000000000000000FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004141
+      4100FFFFFF0041414100FFFFFF0041414100FFFFFF0041414100FF00FF004141
+      410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF009D9D9D009D9D9D009D9D9D004141
       4100CDCDCD0041414100CDCDCD0041414100CDCDCD00414141009D9D9D004141
-      4100414141000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000004141
-      4100FFFFFF0041414100FFFFFF00414141004141410000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000FFFFFF00000000000000
-      0000000000000000000000000000000000009D9D9D009D9D9D009D9D9D004141
+      410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
+      0000000000000000000000000000000000000000000000000000FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004141
+      4100FFFFFF0041414100FFFFFF004141410041414100FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF000000000000000000FFFFFF00000000000000
+      0000FF00FF00FF00FF00FF00FF00FF00FF009D9D9D009D9D9D009D9D9D004141
       4100CDCDCD0041414100CDCDCD0041414100414141009D9D9D009D9D9D009D9D
-      9D009D9D9D009D9D9D0000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00004141410041414100FFFFFF00414141000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000009D9D9D009D9D9D009D9D9D009D9D
+      9D009D9D9D009D9D9D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF004141410041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF009D9D9D009D9D9D009D9D9D009D9D
       9D004141410041414100CDCDCD00414141009D9D9D009D9D9D009D9D9D009D9D
-      9D009D9D9D009D9D9D009D9D9D00000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000004141410041414100000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000009D9D9D009D9D9D009D9D9D009D9D
+      9D009D9D9D009D9D9D009D9D9D00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF004141410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF009D9D9D009D9D9D009D9D9D009D9D
       9D009D9D9D0041414100414141009D9D9D009D9D9D009D9D9D009D9D9D009D9D
       9D009D9D9D009D9D9D009D9D9D009D9D9D00424D3E000000000000003E000000
       2800000040000000400000000100010000000000000200000000000000000000
@@ -673,20 +673,19 @@ object frmBreakpoints: TfrmBreakpoints
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000FFFFFFFF00000000FFFFFF8100000000
-      FFFFFF8100000000FFFFFF0000000000F83FE00000000000F01FE00000000000
-      E00FC00000000000E00FC00000000000E00F800000000000E00F000000000000
-      E00F200100000000F01FE00300000000F83FE02700000000FFFFE07F00000000
-      FFFFF0FF00000000FFFFF9FF00000000FF03FFFFFFFFFFFFFF03FFFFFFFFFFFF
-      FE01FFFD8000FFFFE000F3FF8000FFFFE000E1F98000F83FE000E1F38000F01F
-      E000F0E38000E00FE000F847E3FFE00FA000FC0F23FFE00F8000FE1F07FFE00F
-      E000FC0F03FFE00F8000F84F03FFF01F8000E0E307FFF83F8200C1F10FFFFFFF
-      937FC7F91FFFFFFFB3FFFFFF3FFFFFFFFFFFF7FFFFFF7FFFFFFFF381FC033F81
-      E007F301FC031F81E007F100F8010F00E007E000F0010000E007E000F0010000
-      E007C000E0010000E007C000C0010000E0078000C4010000E0070000FC010000
-      E0072001FC010001E00FE023FC030003E01FE027FC070007E03FE07FFE0F0003
-      FFFFF0FFFF3F0001FFFFF9FFFFFF000000000000000000000000000000000000
-      000000000000}
+      00000000000000000000000000000000FFFF000000000000FFFF000000000000
+      FFFF000000000000FFFF000000000000F83F000000000000F01F000000000000
+      E00F000000000000E00F000000000000E00F000000000000E00F000000000000
+      E00F000000000000F01F000000000000F83F000000000000FFFF000000000000
+      FFFF000000000000FFFF000000000000000000000000FFFF000000000000FFFF
+      000000000000FFFF000000000000FFFF000000000000F83F000000000000F01F
+      000000000000E00F000000000000E00F000000000000E00F000000000000E00F
+      000000000000E00F000000000000F01F000000000000F83F000000000000FFFF
+      000000000000FFFF000000000000FFFF00000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000000000000000}
   end
   object popmBreakpoints: TPopupMenu
     OnPopup = popmBreakpointsPopup

+ 13 - 13
LuaEdit/Breakpoints.pas

@@ -144,7 +144,7 @@ begin
     end
     else
     begin
-      frmMain.GetAssociatedTab(TLuaUnit(lvwBreakpoints.Selected.Data)).Selected := True;
+      frmMain.jvUnitBar.SelectedTab := frmMain.GetAssociatedTab(TLuaUnit(lvwBreakpoints.Selected.Data));
     end;
 
     TLuaUnit(lvwBreakpoints.Selected.Data).synUnit.GotoLineAndCenter(StrToInt(lvwBreakpoints.Selected.SubItems.Strings[2]));
@@ -210,8 +210,8 @@ begin
           Item.ImageIndex := 8;
         end;
 
-        if Assigned(pCurrentSynEdit) then
-          pCurrentSynEdit.Refresh;
+        if Assigned(frmMain.jvUnitBar.SelectedTab.Data) then
+          TLuaUnit(frmMain.jvUnitBar.SelectedTab.Data).synUnit.Refresh;
       end;
     end;
   end;
@@ -225,8 +225,8 @@ begin
     lvwBreakpoints.Selected.Delete;
   end;
 
-  if Assigned(pCurrentSynEdit) then
-    pCurrentSynEdit.Refresh;
+  if Assigned(frmMain.jvUnitBar.SelectedTab.Data) then
+    TLuaUnit(frmMain.jvUnitBar.SelectedTab.Data).synUnit.Refresh;
 end;
 
 procedure TfrmBreakpoints.tbtnToggleClick(Sender: TObject);
@@ -247,8 +247,8 @@ begin
     end;
   end;
 
-  if Assigned(pCurrentSynEdit) then
-    pCurrentSynEdit.Refresh;
+  if Assigned(frmMain.jvUnitBar.SelectedTab.Data) then
+    TLuaUnit(frmMain.jvUnitBar.SelectedTab.Data).synUnit.Refresh;
 end;
 
 procedure TfrmBreakpoints.lvwBreakpointsDblClick(Sender: TObject);
@@ -265,8 +265,8 @@ begin
     lvwBreakpoints.Items[x].Checked := False;
   end;
 
-  if Assigned(pCurrentSynEdit) then
-    pCurrentSynEdit.Refresh;
+  if Assigned(frmMain.jvUnitBar.SelectedTab.Data) then
+    TLuaUnit(frmMain.jvUnitBar.SelectedTab.Data).synUnit.Refresh;
 end;
 
 procedure TfrmBreakpoints.tbtnEnableAllBreakpointsClick(Sender: TObject);
@@ -278,8 +278,8 @@ begin
     lvwBreakpoints.Items[x].Checked := True;
   end;
 
-  if Assigned(pCurrentSynEdit) then
-    pCurrentSynEdit.Refresh;
+  if Assigned(frmMain.jvUnitBar.SelectedTab.Data) then
+    TLuaUnit(frmMain.jvUnitBar.SelectedTab.Data).synUnit.Refresh;
 end;
 
 procedure TfrmBreakpoints.tbtnAllRemoveClick(Sender: TObject);
@@ -292,8 +292,8 @@ begin
       lvwBreakpoints.Items[0].Delete;
     end;
 
-    if Assigned(pCurrentSynEdit) then
-      pCurrentSynEdit.Refresh;
+    if Assigned(frmMain.jvUnitBar.SelectedTab.Data) then
+      TLuaUnit(frmMain.jvUnitBar.SelectedTab.Data).synUnit.Refresh;
   end;
 end;
 

+ 12 - 4
LuaEdit/EditorSettings.dfm

@@ -120,7 +120,7 @@ object frmEditorSettings: TfrmEditorSettings
       Top = 0
       Width = 492
       Height = 375
-      ActivePage = TabSheet1
+      ActivePage = stabGeneral
       Align = alClient
       TabOrder = 0
       object stabGeneral: TTabSheet
@@ -294,9 +294,9 @@ object frmEditorSettings: TfrmEditorSettings
             TabOrder = 4
           end
           object chkSaveBreakpoints: TCheckBox
-            Left = 16
-            Top = 48
-            Width = 217
+            Left = 272
+            Top = 72
+            Width = 161
             Height = 17
             Caption = 'Save Breakpoints'
             TabOrder = 1
@@ -309,6 +309,14 @@ object frmEditorSettings: TfrmEditorSettings
             Caption = 'Show Extended Save Dialog on Exit'
             TabOrder = 2
           end
+          object chkKeepReportOpened: TCheckBox
+            Left = 16
+            Top = 48
+            Width = 225
+            Height = 17
+            Caption = 'Keep Find in Files Report Opened'
+            TabOrder = 5
+          end
         end
       end
       object TabSheet1: TTabSheet

+ 105 - 97
LuaEdit/EditorSettings.pas

@@ -73,6 +73,7 @@ type
     txtLibraries: TEdit;
     Label10: TLabel;
     btnBrowseLibraries: TButton;
+    chkKeepReportOpened: TCheckBox;
     procedure cboFontsMeasureItem(Control: TWinControl; Index: Integer;  var Height: Integer);
     procedure cboFontsDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
     procedure FormCreate(Sender: TObject);
@@ -82,7 +83,6 @@ type
     procedure txtUndoLimitKeyPress(Sender: TObject; var Key: Char);
     procedure txtTabWidthKeyPress(Sender: TObject; var Key: Char);
     procedure txtGutterWidthKeyPress(Sender: TObject; var Key: Char);
-    procedure WriteEditorSettings;
     procedure btnOKClick(Sender: TObject);
     procedure chkShowGutterClick(Sender: TObject);
     procedure lstElementClick(Sender: TObject);
@@ -95,8 +95,7 @@ type
     procedure FormDestroy(Sender: TObject);
     procedure synEditSpecialLineColors(Sender: TObject; Line: Integer; var Special: Boolean; var FG, BG: TColor);
     procedure chkFileAssociateClick(Sender: TObject);
-    procedure cboFontSizeMeasureItem(Control: TWinControl; Index: Integer;
-      var Height: Integer);
+    procedure cboFontSizeMeasureItem(Control: TWinControl; Index: Integer; var Height: Integer);
     procedure btnBrowseLibrariesClick(Sender: TObject);
   private
     { Private declarations }
@@ -104,6 +103,8 @@ type
     { Public declarations }
     procedure UMMeasureFonts(var msg: TMessage); message UM_MEASUREFONTS;
     procedure NotifyRestart(Notify: Boolean);
+    procedure LoadEditorSettings;
+    procedure WriteEditorSettings;
   end;
 
 var
@@ -343,6 +344,7 @@ begin
   pIniFile.WriteBool('General', 'SaveUnitsInc', chkSaveUnitsInc.Checked);
   pIniFile.WriteBool('General', 'AssociateFiles', chkFileAssociate.Checked);
   pIniFile.WriteBool('General', 'ShowExSaveDlg', chkShowExSaveDlg.Checked);
+  pIniFile.WriteBool('General', 'KeepSIFWindowOpened', chkKeepReportOpened.Checked);
 
   if AssociateFiles <> chkFileAssociate.Checked then
   begin
@@ -410,6 +412,105 @@ begin
   Screen.Cursor := crDefault;
 end;
 
+procedure TfrmEditorSettings.LoadEditorSettings;
+begin
+  lstEditorColorsTemp.Assign(EditorColors);
+  Options := EditorOptions;
+
+  if eoAutoIndent in Options then
+    chkAutoIndent.Checked := True
+  else
+    chkAutoIndent.Checked := False;
+
+  if eoGroupUndo in Options then
+    chkGroupUndo.Checked := True
+  else
+    chkGroupUndo.Checked := False;
+
+  if eoTabIndent in Options then
+    chkTabIndent.Checked := True
+  else
+    chkTabIndent.Checked := False;
+
+  if eoSmartTabs in Options then
+    chkSmartTab.Checked := True
+  else
+    chkSmartTab.Checked := False;
+
+  if eoRightMouseMovesCursor in Options then
+    chkRightMouseMovesCursor.Checked := True
+  else
+    chkRightMouseMovesCursor.Checked := False;
+
+  if eoEnhanceHomeKey in Options then
+    chkEHomeKey.Checked := True
+  else
+    chkEHomeKey.Checked := False;
+
+  if eoTabsToSpaces in Options then
+    chkTabsToSpaces.Checked := True
+  else
+    chkTabsToSpaces.Checked := False;
+
+  if eoHideShowScrollbars in Options then
+    chkHideScrollBars.Checked := True
+  else
+    chkHideScrollBars.Checked := False;
+
+  if eoScrollPastEof in Options then
+    chkScrollPastEOF.Checked := True
+  else
+    chkScrollPastEOF.Checked := False;
+
+  if eoScrollPastEol in Options then
+    chkScrollPastEOL.Checked := True
+  else
+    chkScrollPastEOL.Checked := False;
+
+  if eoKeepCaretX in Options then
+    chkKeepCaretX.Checked := True
+  else
+    chkKeepCaretX.Checked := False;
+
+  if eoTrimTrailingSpaces in Options then
+    chkTrailBlanks.Checked := True
+  else
+    chkTrailBlanks.Checked := False;
+
+  chkFileAssociate.Checked := AssociateFiles;
+  chkSaveProjectsInc.Checked := SaveProjectsInc;
+  chkSaveUnitsInc.Checked := SaveUnitsInc;
+  chkShowExSaveDlg.Checked := ShowExSaveDlg;
+  chkSaveBreakpoints.Checked := SaveBreakpoints;
+  chkKeepReportOpened.Checked := KeepSIFWindowOpened;
+  txtUndoLimit.Text := IntToStr(Main.UndoLimit);
+  txtTabWidth.Text := IntToStr(Main.TabWidth);
+  txtLibraries.Text := LibrariesSearchPaths.CommaText;
+  chkShowGutter.Checked := Main.ShowGutter;
+  chkShowLineNumbers.Checked := Main.ShowLineNumbers;
+  chkLeadingZeros.Checked := Main.LeadingZeros;
+  txtGutterWidth.Text := IntToStr(Main.GutterWidth);
+  cboGutterColor.Selected := StringToColor(Main.GutterColor);
+  cboFonts.ItemIndex := cboFonts.Items.IndexOf(Main.FontName);
+  cboFontSize.ItemIndex := cboFontSize.Items.IndexOf(IntToStr(Main.FontSize));
+
+  lstElement.Items.Clear;
+  lstElement.Items.AddObject('Background', lstEditorColorsTemp.Items[0]);
+  lstElement.Items.AddObject('Comment', lstEditorColorsTemp.Items[1]);
+  lstElement.Items.AddObject('Error Line', lstEditorColorsTemp.Items[2]);
+  lstElement.Items.AddObject('Execution Line', lstEditorColorsTemp.Items[3]);
+  lstElement.Items.AddObject('Identifier', lstEditorColorsTemp.Items[4]);
+  lstElement.Items.AddObject('Numbers', lstEditorColorsTemp.Items[5]);
+  lstElement.Items.AddObject('Reserved Words', lstEditorColorsTemp.Items[6]);
+  lstElement.Items.AddObject('Selection', lstEditorColorsTemp.Items[7]);
+  lstElement.Items.AddObject('Strings', lstEditorColorsTemp.Items[8]);
+  lstElement.Items.AddObject('Valid Breakpoint', lstEditorColorsTemp.Items[9]);
+
+  frmMain.ApplyValuesToEditor(synSample, lstEditorColorsTemp);
+  lstElement.ItemIndex := 0;
+  lstElementClick(lstElement);
+end;
+
 procedure TfrmEditorSettings.btnOKClick(Sender: TObject);
 begin
   ModalResult := mrNone;
@@ -529,100 +630,7 @@ procedure TfrmEditorSettings.FormShow(Sender: TObject);
 begin
   pgcDebuggerSettings.ActivePageIndex := 0;
   lstEditorColorsTemp.Clear;
-  lstEditorColorsTemp.Assign(Main.EditorColors);
-  Options := Main.EditorOptions;
-
-  if eoAutoIndent in Options then
-    chkAutoIndent.Checked := True
-  else
-    chkAutoIndent.Checked := False;
-
-  if eoGroupUndo in Options then
-    chkGroupUndo.Checked := True
-  else
-    chkGroupUndo.Checked := False;
-
-  if eoTabIndent in Options then
-    chkTabIndent.Checked := True
-  else
-    chkTabIndent.Checked := False;
-
-  if eoSmartTabs in Options then
-    chkSmartTab.Checked := True
-  else
-    chkSmartTab.Checked := False;
-
-  if eoRightMouseMovesCursor in Options then
-    chkRightMouseMovesCursor.Checked := True
-  else
-    chkRightMouseMovesCursor.Checked := False;
-
-  if eoEnhanceHomeKey in Options then
-    chkEHomeKey.Checked := True
-  else
-    chkEHomeKey.Checked := False;
-
-  if eoTabsToSpaces in Options then
-    chkTabsToSpaces.Checked := True
-  else
-    chkTabsToSpaces.Checked := False;
-
-  if eoHideShowScrollbars in Options then
-    chkHideScrollBars.Checked := True
-  else
-    chkHideScrollBars.Checked := False;
-
-  if eoScrollPastEof in Options then
-    chkScrollPastEOF.Checked := True
-  else
-    chkScrollPastEOF.Checked := False;
-
-  if eoScrollPastEol in Options then
-    chkScrollPastEOL.Checked := True
-  else
-    chkScrollPastEOL.Checked := False;
-
-  if eoKeepCaretX in Options then
-    chkKeepCaretX.Checked := True
-  else
-    chkKeepCaretX.Checked := False;
-
-  if eoTrimTrailingSpaces in Options then
-    chkTrailBlanks.Checked := True
-  else
-    chkTrailBlanks.Checked := False;
-
-  chkFileAssociate.Checked := AssociateFiles;
-  chkSaveProjectsInc.Checked := SaveProjectsInc;
-  chkSaveUnitsInc.Checked := SaveUnitsInc;
-  chkShowExSaveDlg.Checked := ShowExSaveDlg;
-  chkSaveBreakpoints.Checked := SaveBreakpoints;
-  txtUndoLimit.Text := IntToStr(Main.UndoLimit);
-  txtTabWidth.Text := IntToStr(Main.TabWidth);
-  txtLibraries.Text := LibrariesSearchPaths.CommaText;
-  chkShowGutter.Checked := Main.ShowGutter;
-  chkShowLineNumbers.Checked := Main.ShowLineNumbers;
-  chkLeadingZeros.Checked := Main.LeadingZeros;
-  txtGutterWidth.Text := IntToStr(Main.GutterWidth);
-  cboGutterColor.Selected := StringToColor(Main.GutterColor);
-  cboFonts.ItemIndex := cboFonts.Items.IndexOf(Main.FontName);
-  cboFontSize.ItemIndex := cboFontSize.Items.IndexOf(IntToStr(Main.FontSize));
-
-  lstElement.Items.Clear;
-  lstElement.Items.AddObject('Background', lstEditorColorsTemp.Items[0]);
-  lstElement.Items.AddObject('Comment', lstEditorColorsTemp.Items[1]);
-  lstElement.Items.AddObject('Error Line', lstEditorColorsTemp.Items[2]);
-  lstElement.Items.AddObject('Execution Line', lstEditorColorsTemp.Items[3]);
-  lstElement.Items.AddObject('Identifier', lstEditorColorsTemp.Items[4]);
-  lstElement.Items.AddObject('Numbers', lstEditorColorsTemp.Items[5]);
-  lstElement.Items.AddObject('Reserved Words', lstEditorColorsTemp.Items[6]);
-  lstElement.Items.AddObject('Selection', lstEditorColorsTemp.Items[7]);
-  lstElement.Items.AddObject('Strings', lstEditorColorsTemp.Items[8]);
-  lstElement.Items.AddObject('Valid Breakpoint', lstEditorColorsTemp.Items[9]);
-
-  frmMain.ApplyValuesToEditor(synSample, lstEditorColorsTemp);
-  lstElement.ItemIndex := 0;
-  lstElementClick(lstElement);
+  LoadEditorSettings;
 
   // Hide notification
   NotifyRestart(False);

+ 217 - 0
LuaEdit/FindInFiles.dfm

@@ -0,0 +1,217 @@
+object frmFindInFiles: TfrmFindInFiles
+  Left = 485
+  Top = 245
+  BorderStyle = bsSingle
+  Caption = 'Find Text'
+  ClientHeight = 313
+  ClientWidth = 336
+  Color = clBtnFace
+  Font.Charset = DEFAULT_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -11
+  Font.Name = 'MS Sans Serif'
+  Font.Style = []
+  Icon.Data = {
+    0000010001001010000001001800680300001600000028000000100000002000
+    0000010018000000000040030000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    C6C6C6000000000000000000000000000000000000000000C6C6C60000000000
+    0000000000000000000000000000000000000000000084848400000000000000
+    0000848484000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    00000000000000000000000000000000C6C6C6000000000000000000000000C6
+    C6C6000000000000000000000000000000000000000000000000000000000000
+    C6C6C6000000000000000000000000C6C6C60000000000000000000000008484
+    8400000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000C6C6C600FFFF00000000FFFF000000
+    0000000000000000000000008484840000000000000000000000000000000000
+    0000FFFF00000000FFFFC6C6C600FFFFC6C6C600000000000000FFFF00000000
+    0000000000000000000000000000000000C6C6C600FFFFC6C6C600FFFF840000
+    00FFFF000000000000C6C6C60000000000000000000000000000000000000000
+    0000FFFFC6C6C600FFFF84000000FFFFC6C6C600000000000000FFFF00000000
+    0000000000000000000000000000000000C6C6C600FFFF84000000FFFFC6C6C6
+    00FFFFC6C6C600FFFFC6C6C60000000000000000000000000000000000000000
+    0000FFFFC6C6C600FFFFC6C6C600FFFFC6C6C600FFFFC6C6C600FFFF00000000
+    0000000000000000000000000000000000C6C6C600FFFF848484000000000000
+    0000000000000000000000008484840000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    000000000000000000000000000000000000000000000000000000000000F8F8
+    0000F8F80000F8700000F8000000F8000000F800000000000000000000000013
+    00000013000000130000001F0000001F0000001F00008FFF0000FFFF0000}
+  OldCreateOrder = False
+  Position = poOwnerFormCenter
+  OnShow = FormShow
+  PixelsPerInch = 96
+  TextHeight = 13
+  object Label1: TLabel
+    Left = 8
+    Top = 12
+    Width = 49
+    Height = 13
+    Caption = '&Find what:'
+  end
+  object cboSearchInFilesText: TComboBox
+    Left = 96
+    Top = 8
+    Width = 233
+    Height = 21
+    ItemHeight = 13
+    TabOrder = 0
+  end
+  object gbSearchOptions: TGroupBox
+    Left = 8
+    Top = 40
+    Width = 154
+    Height = 89
+    Caption = 'Options'
+    TabOrder = 1
+    object chkSearchCaseSensitive: TCheckBox
+      Left = 8
+      Top = 17
+      Width = 140
+      Height = 17
+      Caption = 'C&ase sensitivity'
+      TabOrder = 0
+    end
+    object chkSearchWholeWords: TCheckBox
+      Left = 8
+      Top = 39
+      Width = 140
+      Height = 17
+      Caption = '&Whole words only'
+      TabOrder = 1
+    end
+    object chkRegularExpression: TCheckBox
+      Left = 8
+      Top = 62
+      Width = 140
+      Height = 17
+      Caption = '&Regular expression'
+      TabOrder = 2
+    end
+  end
+  object fraDirectory: TGroupBox
+    Left = 8
+    Top = 136
+    Width = 321
+    Height = 81
+    Caption = 'Directory Options'
+    TabOrder = 2
+    object Label2: TLabel
+      Left = 8
+      Top = 32
+      Width = 45
+      Height = 13
+      Caption = 'Dir&ectory:'
+    end
+    object jvdirDirectory: TJvDirectoryEdit
+      Left = 64
+      Top = 28
+      Width = 249
+      Height = 21
+      DialogKind = dkWin32
+      DialogText = 'Select a Directory'
+      ButtonWidth = 20
+      TabOrder = 0
+      Text = 'C:\'
+    end
+    object chkIncludeSubdir: TCheckBox
+      Left = 64
+      Top = 56
+      Width = 153
+      Height = 17
+      Caption = 'Include s&ubdirectories'
+      TabOrder = 1
+    end
+  end
+  object optOutput: TRadioGroup
+    Left = 8
+    Top = 224
+    Width = 321
+    Height = 49
+    Caption = 'Output'
+    Columns = 2
+    ItemIndex = 0
+    Items.Strings = (
+      'Find Output 1'
+      'Find Output 2')
+    TabOrder = 3
+  end
+  object btnOK: TButton
+    Left = 170
+    Top = 283
+    Width = 75
+    Height = 23
+    Caption = 'OK'
+    Default = True
+    TabOrder = 4
+    OnClick = btnOKClick
+  end
+  object btnCancel: TButton
+    Left = 249
+    Top = 283
+    Width = 75
+    Height = 23
+    Cancel = True
+    Caption = 'Cancel'
+    TabOrder = 5
+    OnClick = btnCancelClick
+  end
+  object fraWhere: TGroupBox
+    Left = 168
+    Top = 40
+    Width = 161
+    Height = 89
+    Caption = 'Where'
+    TabOrder = 6
+    object jvoptFilesInDir: TJvRadioButton
+      Left = 8
+      Top = 64
+      Width = 107
+      Height = 17
+      Alignment = taLeftJustify
+      Caption = 'All files in directory'
+      TabOrder = 0
+      HotTrackFont.Charset = DEFAULT_CHARSET
+      HotTrackFont.Color = clWindowText
+      HotTrackFont.Height = -11
+      HotTrackFont.Name = 'MS Sans Serif'
+      HotTrackFont.Style = []
+      LinkedControls = <>
+    end
+    object jvoptActiveProject: TJvRadioButton
+      Left = 8
+      Top = 16
+      Width = 131
+      Height = 17
+      Alignment = taLeftJustify
+      Caption = 'All files in active project'
+      Checked = True
+      TabOrder = 1
+      TabStop = True
+      HotTrackFont.Charset = DEFAULT_CHARSET
+      HotTrackFont.Color = clWindowText
+      HotTrackFont.Height = -11
+      HotTrackFont.Name = 'MS Sans Serif'
+      HotTrackFont.Style = []
+      LinkedControls = <>
+    end
+    object jvoptOpenFiles: TJvRadioButton
+      Left = 8
+      Top = 40
+      Width = 80
+      Height = 17
+      Alignment = taLeftJustify
+      Caption = 'All open files'
+      TabOrder = 2
+      HotTrackFont.Charset = DEFAULT_CHARSET
+      HotTrackFont.Color = clWindowText
+      HotTrackFont.Height = -11
+      HotTrackFont.Name = 'MS Sans Serif'
+      HotTrackFont.Style = []
+      LinkedControls = <>
+    end
+  end
+end

+ 149 - 0
LuaEdit/FindInFiles.pas

@@ -0,0 +1,149 @@
+unit FindInFiles;
+
+interface
+
+uses
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+  Dialogs, StdCtrls, Mask, JvExMask, JvToolEdit, ExtCtrls, JvExStdCtrls,
+  JvRadioButton;
+
+type
+  TfrmFindInFiles = class(TForm)
+    cboSearchInFilesText: TComboBox;
+    Label1: TLabel;
+    gbSearchOptions: TGroupBox;
+    chkSearchCaseSensitive: TCheckBox;
+    chkSearchWholeWords: TCheckBox;
+    chkRegularExpression: TCheckBox;
+    fraDirectory: TGroupBox;
+    jvdirDirectory: TJvDirectoryEdit;
+    Label2: TLabel;
+    optOutput: TRadioGroup;
+    btnOK: TButton;
+    btnCancel: TButton;
+    chkIncludeSubdir: TCheckBox;
+    fraWhere: TGroupBox;
+    jvoptFilesInDir: TJvRadioButton;
+    jvoptActiveProject: TJvRadioButton;
+    jvoptOpenFiles: TJvRadioButton;
+    procedure btnOKClick(Sender: TObject);
+    procedure optWhereClick(Sender: TObject);
+    procedure btnCancelClick(Sender: TObject);
+    procedure FormShow(Sender: TObject);
+  private
+    { Private declarations }
+  public
+    { Public declarations }
+    SearchText: String;
+    SearchDirectory: String;
+    function IsCaseSensitive: Boolean;
+    function IsWholeWordOnly: Boolean;
+    function IsResgularExpression: Boolean;
+    function IsSubDir: Boolean;
+    function GetSearchMode: Integer;
+    procedure SetSearchMode(Index: Integer);
+    function GetOutput: Integer;
+  end;
+
+var
+  frmFindInFiles: TfrmFindInFiles;
+
+implementation
+
+uses Main;
+
+{$R *.dfm}
+
+procedure TfrmFindInFiles.btnOKClick(Sender: TObject);
+begin
+  if cboSearchInFilesText.Text <> '' then
+  begin
+    SearchText := cboSearchInFilesText.Text;
+    SearchDirectory := jvdirDirectory.Text;
+    Self.Close;
+  end
+  else
+  begin
+    Application.MessageBox('The search string cannot be blank.', 'LuaEdit', MB_OK+MB_ICONERROR);
+  end;
+end;
+
+procedure TfrmFindInFiles.btnCancelClick(Sender: TObject);
+begin
+  SearchText := '';
+  SearchDirectory := '';
+  Self.Close;
+end;
+
+procedure TfrmFindInFiles.optWhereClick(Sender: TObject);
+begin
+  fraDirectory.Enabled := (GetSearchMode = 2);
+  jvdirDirectory.Enabled := (GetSearchMode = 2);
+  chkIncludeSubdir.Enabled := (GetSearchMode = 2);
+end;
+
+function TfrmFindInFiles.IsCaseSensitive: Boolean;
+begin
+  Result := chkSearchCaseSensitive.Checked;
+end;
+
+function TfrmFindInFiles.IsWholeWordOnly: Boolean;
+begin
+  Result := chkSearchWholeWords.Checked;
+end;
+
+function TfrmFindInFiles.IsResgularExpression: Boolean;
+begin
+  Result := chkRegularExpression.Checked;
+end;
+
+function TfrmFindInFiles.IsSubDir: Boolean;
+begin
+  Result := chkIncludeSubdir.Checked;
+end;
+
+function TfrmFindInFiles.GetSearchMode: Integer;
+begin
+  // Retreive mode through radio buttons
+  if jvoptActiveProject.Checked then
+    Result := 0
+  else if jvoptOpenFiles.Checked then
+    Result := 1
+  else
+    Result := 2;
+end;
+
+procedure TfrmFindInFiles.SetSearchMode(Index: Integer);
+begin
+  // Set mode through radio buttons
+
+  case Index of
+    0:
+    begin
+      if jvoptActiveProject.Enabled then
+        jvoptActiveProject.Checked := True
+      else
+        SetSearchMode(2);
+    end;
+    1:
+    begin
+      if jvoptOpenFiles.Enabled then
+        jvoptOpenFiles.Checked := True
+      else
+        SetSearchMode(2);
+    end;
+    2:  jvoptFilesInDir.Checked := True;
+  end;
+end;
+
+function TfrmFindInFiles.GetOutput: Integer;
+begin
+  Result := optOutput.ItemIndex;
+end;
+
+procedure TfrmFindInFiles.FormShow(Sender: TObject);
+begin
+  optWhereClick(nil);
+end;
+
+end.

+ 60 - 0
LuaEdit/FindWindow1.dfm

@@ -0,0 +1,60 @@
+object frmFindWindow1: TfrmFindWindow1
+  Left = 498
+  Top = 287
+  Width = 350
+  Height = 200
+  BorderStyle = bsSizeToolWin
+  Caption = 'Find Window 1'
+  Color = clBtnFace
+  Constraints.MinHeight = 200
+  Constraints.MinWidth = 350
+  DockSite = True
+  DragKind = dkDock
+  DragMode = dmAutomatic
+  Font.Charset = DEFAULT_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -11
+  Font.Name = 'MS Sans Serif'
+  Font.Style = []
+  FormStyle = fsStayOnTop
+  OldCreateOrder = False
+  Position = poOwnerFormCenter
+  PixelsPerInch = 96
+  TextHeight = 13
+  object lvwResult: TJvDotNetListView
+    Left = 0
+    Top = 0
+    Width = 342
+    Height = 173
+    Align = alClient
+    Columns = <
+      item
+        Caption = 'File Name'
+        Width = 100
+      end
+      item
+        Caption = 'Line'
+      end
+      item
+        AutoSize = True
+        Caption = 'Snipset'
+      end>
+    ReadOnly = True
+    RowSelect = True
+    TabOrder = 0
+    ViewStyle = vsReport
+    OnCustomDrawSubItem = lvwResultCustomDrawSubItem
+    OnDblClick = lvwResultDblClick
+    ColumnsOrder = '0=100,1=50,2=188'
+  end
+  object JvDockClient1: TJvDockClient
+    LRDockWidth = 100
+    TBDockHeight = 100
+    DirectDrag = False
+    ShowHint = True
+    EnableCloseButton = True
+    DockStyle = frmMain.jvDockVSNet
+    Left = 8
+    Top = 24
+  end
+end

+ 64 - 0
LuaEdit/FindWindow1.pas

@@ -0,0 +1,64 @@
+unit FindWindow1;
+
+interface
+
+uses
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+  Dialogs, ComCtrls, VirtualTrees, JvComponent, JvDockControlForm,
+  JvExComCtrls, JvListView, JvDotNetControls;
+
+type
+  TfrmFindWindow1 = class(TForm)
+    JvDockClient1: TJvDockClient;
+    lvwResult: TJvDotNetListView;
+    procedure lvwResultCustomDrawSubItem(Sender: TCustomListView;
+      Item: TListItem; SubItem: Integer; State: TCustomDrawState;
+      var DefaultDraw: Boolean);
+    procedure lvwResultDblClick(Sender: TObject);
+  private
+    { Private declarations }
+  public
+    { Public declarations }
+    procedure AddResult(FileName: String; Line: Integer; Snipset: String);
+  end;
+
+var
+  frmFindWindow1: TfrmFindWindow1;
+
+implementation
+
+uses Main;
+
+{$R *.dfm}
+
+procedure TfrmFindWindow1.AddResult(FileName: String; Line: Integer; Snipset: String);
+var
+  pListitem: TListItem;
+begin
+  pListitem := lvwResult.Items.Add;
+  pListitem.Caption := FileName;
+  pListitem.SubItems.Add(IntToStr(Line));
+  pListitem.SubItems.Add(Snipset);
+end;
+
+procedure TfrmFindWindow1.lvwResultCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
+var
+  cx, cy: Integer;
+begin
+  {DefaultDraw := True;
+
+  // Handle the snipset column
+  if SubItem = 1 then
+  begin
+    DefaultDraw := False;
+  end;}
+end;
+
+procedure TfrmFindWindow1.lvwResultDblClick(Sender: TObject);
+begin
+  // Bring the file in the editor and go directly to the line where it's defined
+  if Assigned(lvwResult.Selected) then
+    frmMain.PopUpUnitToScreen(lvwResult.Selected.Caption, StrToInt(lvwResult.Selected.SubItems[0]), False, HIGHLIGHT_STACK);
+end;
+
+end.

+ 60 - 0
LuaEdit/FindWindow2.dfm

@@ -0,0 +1,60 @@
+object frmFindWindow2: TfrmFindWindow2
+  Left = 498
+  Top = 287
+  Width = 350
+  Height = 200
+  BorderStyle = bsSizeToolWin
+  Caption = 'Find Window 2'
+  Color = clBtnFace
+  Constraints.MinHeight = 200
+  Constraints.MinWidth = 350
+  DockSite = True
+  DragKind = dkDock
+  DragMode = dmAutomatic
+  Font.Charset = DEFAULT_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -11
+  Font.Name = 'MS Sans Serif'
+  Font.Style = []
+  FormStyle = fsStayOnTop
+  OldCreateOrder = False
+  Position = poOwnerFormCenter
+  PixelsPerInch = 96
+  TextHeight = 13
+  object lvwResult: TJvDotNetListView
+    Left = 0
+    Top = 0
+    Width = 342
+    Height = 173
+    Align = alClient
+    Columns = <
+      item
+        Caption = 'File Name'
+        Width = 100
+      end
+      item
+        Caption = 'Line'
+      end
+      item
+        AutoSize = True
+        Caption = 'Snipset'
+      end>
+    ReadOnly = True
+    RowSelect = True
+    TabOrder = 0
+    ViewStyle = vsReport
+    OnCustomDrawSubItem = lvwResultCustomDrawSubItem
+    OnDblClick = lvwResultDblClick
+    ColumnsOrder = '0=100,1=50,2=188'
+  end
+  object JvDockClient1: TJvDockClient
+    LRDockWidth = 100
+    TBDockHeight = 100
+    DirectDrag = False
+    ShowHint = True
+    EnableCloseButton = True
+    DockStyle = frmMain.jvDockVSNet
+    Left = 8
+    Top = 24
+  end
+end

+ 64 - 0
LuaEdit/FindWindow2.pas

@@ -0,0 +1,64 @@
+unit FindWindow2;
+
+interface
+
+uses
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+  Dialogs, ComCtrls, VirtualTrees, JvComponent, JvDockControlForm,
+  JvExComCtrls, JvListView, JvDotNetControls;
+
+type
+  TfrmFindWindow2 = class(TForm)
+    JvDockClient1: TJvDockClient;
+    lvwResult: TJvDotNetListView;
+    procedure lvwResultCustomDrawSubItem(Sender: TCustomListView;
+      Item: TListItem; SubItem: Integer; State: TCustomDrawState;
+      var DefaultDraw: Boolean);
+    procedure lvwResultDblClick(Sender: TObject);
+  private
+    { Private declarations }
+  public
+    { Public declarations }
+    procedure AddResult(FileName: String; Line: Integer; Snipset: String);
+  end;
+
+var
+  frmFindWindow2: TfrmFindWindow2;
+
+implementation
+
+uses Main;
+
+{$R *.dfm}
+
+procedure TfrmFindWindow2.AddResult(FileName: String; Line: Integer; Snipset: String);
+var
+  pListitem: TListItem;
+begin
+  pListitem := lvwResult.Items.Add;
+  pListitem.Caption := FileName;
+  pListitem.SubItems.Add(IntToStr(Line));
+  pListitem.SubItems.Add(Snipset);
+end;
+
+procedure TfrmFindWindow2.lvwResultCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
+var
+  cx, cy: Integer;
+begin
+  {DefaultDraw := True;
+
+  // Handle the snipset column
+  if SubItem = 1 then
+  begin
+    DefaultDraw := False;
+  end;}
+end;
+
+procedure TfrmFindWindow2.lvwResultDblClick(Sender: TObject);
+begin
+  // Bring the file in the editor and go directly to the line where it's defined
+  if Assigned(lvwResult.Selected) then
+    frmMain.PopUpUnitToScreen(lvwResult.Selected.Caption, StrToInt(lvwResult.Selected.SubItems[0]), False, HIGHLIGHT_STACK);
+end;
+
+end.

+ 73 - 73
LuaEdit/FunctionList.dfm

@@ -23,7 +23,7 @@ object frmFunctionList: TfrmFunctionList
     Left = 0
     Top = 24
     Width = 360
-    Height = 139
+    Height = 146
     Align = alClient
     Columns = <
       item
@@ -91,140 +91,140 @@ object frmFunctionList: TfrmFunctionList
     Bitmap = {
       494C010102000400040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000001000000001002000000000000010
+      000000000000000000000000000000000000FF00FF00FF00FF00000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000A3787500A3787500A378
-      7500A3787500A3787500A3787500A3787500A3787500A3787500A3787500A378
-      7500A378750090615E0000000000000000000000000000000000000000000000
+      000000000000FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000A67C7600F2E2D300F2E2
-      D300FFE8D100EFDFBB00FFE3C500FFDEBD00FFDDBA00FFD8B200FFD6AE00FFD2
-      A500FFD2A3009364600000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000AB807800F3E7DA00F3E7
-      DA0001990100AFD8A00071C5700041AA300081BB5E00EFD4A600FFD6AE00FFD2
-      A300FFD2A3009667630000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
       0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF
+      000000000000FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000B0837A00F4E9DD00F4E9
-      DD00019901000199010001990100019901000199010041AA2F00FFD8B200FFD4
-      A900FFD4A9009A6A650000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF000084000000840000008400000084000000840000FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
       0000FFFF0000840000008400000084000000840000008400000084000000FFFF
-      FF00000000000000000000000000000000000000000000000000000000000000
+      FF0000000000FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000B6897D00F5EDE400F5ED
-      E4000199010001990100119E0E00CFD6A300FFE4C80021A21A00FFD8B200FFD7
-      B000FFD7B0009E6D670000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFFFF000084
+      0000FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
       00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
-      FF00000000000000000000000000000000000000000000000000000000000000
+      FF0000000000FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000BC8E7F00F7EFE800F7EF
-      E80001990100019901000199010001990100FFE4C800EFDEBA00FFD8B200FFD7
-      B000FFD9B400A270690000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF000084
+      0000FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
       00000000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
-      FF00000000000000000000000000000000000000000000000000000000000000
+      FF0000000000FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000C3958100F8F3EF00F8F3
-      EF00F8F3EF00FFF4E800FFF4E800FFF4E800EFE3C400EFE3C400FFE4C800FFDE
-      BD00FFDDBB00A5746B0000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF0000840000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000084
+      0000FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
       00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
-      FF00000000000000000000000000000000000000000000000000000000000000
+      FF0000000000FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000CA9B8400F9F5F200FBFB
-      FB00FFF4E800FFF4E800FFF4E800019901000199010001990100FFE8D100FFE3
-      C500FFE1C200A8776D0000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF0000840000FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
       0000FFFF0000840000008400000084000000840000008400000084000000FFFF
-      FF00000000000000000000000000000000000000000000000000000000000000
+      FF0000000000FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000D2A18700F9F9F900FBFB
-      FB00119F1000AFD8A000FFF4E800AFD8A0000199010001990100FFE8D100FFE4
-      C800FFE3C600AC7A6F0000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF0000840000FFFFFF00FFFFFF000084000000840000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
       0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF
+      000000000000FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000D9A88A00FBFBFB00FFFF
-      FF0071C570000199010001990100019901000199010001990100FFE8D100FFE8
-      D100FFE6CE00AE7C720000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF000084000000840000008400000084000000840000FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
       0000FFFF0000840000008400000084000000FFFF000000000000000000000000
+      000000000000FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000DFAE8C00FCFCFC00FFFF
-      FF00FFFFFF0071C570000199010001990100AFD8A00001990100FFE8D100FFC8
-      C200FFB0B000B07E730000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
       0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF0000000000FFFFFF000000
+      0000FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF000000
+      0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF000000
+      0000FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF00000000000000000000FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000E5B38F00FDFDFD00FDFD
-      FD00FFFFFF00FFFFFF00FFFFFE00FFFAF600FFF9F300FFF5EA00F4DECE00B280
-      7400B2807400B280740000000000000000000000000000000000000000000000
-      0000FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000EAB89100FEFEFE00FEFE
-      FE00FFFFFF00FFFFFF00FFFFFF00FFFFFE00FFFAF600FFF9F300F5E1D200B280
-      7400EDA75500D2AA960000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+      0000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
+      0000000000000000000000000000000000000000000000000000FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000EFBC9200FFFFFF00FFFF
-      FF00FCFCFC00FAFAFA00F7F7F700F5F5F500F2F1F100F0EDEA00E9DAD000B280
-      7400D9B199000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000F2BF9400DCA98700DCA9
-      8700DCA98700DCA98700DCA98700DCA98700DCA98700DCA98700DCA98700B280
-      7400000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000424D3E000000000000003E000000
+      2800000040000000100000000100010000000000800000000000000000000000
+      000000000000000000000000FFFFFF0000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      000000000000000000000000000000000000424D3E000000000000003E000000
-      2800000040000000100000000100010000000000800000000000000000000000
-      000000000000000000000000FFFFFF00FFFFFFFF000000008003FFFF00000000
-      8003E007000000008003E007000000008003E007000000008003E00700000000
-      8003E007000000008003E007000000008003E007000000008003E00700000000
-      8003E007000000008003E00F000000008003E01F000000008003E03F00000000
-      8007FFFF00000000800FFFFF00000000}
+      00000000000000000000000000000000}
   end
 end

+ 2 - 2
LuaEdit/HeaderBuilder/FctHdrBld.dfm

@@ -78,9 +78,9 @@ object frmFctHdrBld: TfrmFctHdrBld
     object lblCallSample: TLabel
       Left = 16
       Top = 304
-      Width = 58
+      Width = 113
       Height = 13
-      Caption = 'Call Sample:'
+      Caption = '<Sample/> Call Sample:'
     end
     object Label5: TLabel
       Left = 16

+ 62 - 20
LuaEdit/HeaderBuilder/FctHdrBld.pas

@@ -5,7 +5,7 @@ interface
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, ExtCtrls, XPMenu, ImgList, ComCtrls, ToolWin, Grids,
-  ValEdit, XPMan, Registry, System;
+  ValEdit, XPMan, Registry;
 
 type
   TfrmFctHdrBld = class(TForm)
@@ -54,6 +54,8 @@ type
     procedure ClearForm(bPrompt: Boolean = False);
     procedure CheckButtons;
     function GetHeader: String;
+    function FormatParameters(): String;
+    function FormatValue(sValue: String): String;
   end;
 
 var
@@ -171,13 +173,25 @@ begin
   end;
 end;
 
+function TfrmFctHdrBld.FormatParameters(): String;
+begin
+  //todo
+  Result := '';
+end;
+
+function TfrmFctHdrBld.FormatValue(sValue: String): String;
+begin
+  //todo
+  Result := sValue;
+end;
+
 function TfrmFctHdrBld.GetHeader: String;
 var
   pReg: TRegistry;
-  TagNotFound: Boolean;
-  x, TagO, TagC, TagIndex: Integer;
+  IsShortened: Boolean;
+  x, TagO, TagC: Integer;
   sTemplatePath, sToday, sInitialRealese: String;
-  sCopyright, sDevelopperName, sTemp, sTag: String;
+  sCopyright, sDevelopperName, sToReplace, sReplaceValue, sTemp, sTag: String;
   strTemplate, strTags: TStringList;
 begin
   Result := '';
@@ -198,39 +212,67 @@ begin
       // Get tags from registry and parse the template to replace tags by their assigned value
       if pReg.OpenKey('\Software\LuaEdit\HdrBld\Tags', False) then
       begin
-        pReg.GetValueNames(strTags);
+        // Get template from specified location on the disk
         strTemplate := TStringList.Create;
         strTemplate.LoadFromFile(sTemplatePath);
-        strTags.Add('Function');
-        strTags.Sort;
         sTemp := strTemplate.Text;
 
+        // Retreive tags from registry and add local tags
+        strTags := TStringList.Create;
+        strTags.Text := 'This is a gottam text!';
+        pReg.GetValueNames(strTags);
+        strTags.Values['Function'] := FormatValue(txtFunctionName.Text);
+        strTags.Values['Comment'] := FormatValue(memoComment.Text);
+        strTags.Values['Parameters'] := FormatParameters;
+        strTags.Values['Return'] := FormatValue(txtReturn.Text);
+        strTags.Values['Sample'] := FormatValue(txtCallSample.Text);
+
         // parsing template
         repeat
+          // reinitialize values
+          IsShortened := False;
+          TagO := Pos('<', sTemp);
+          
           // look for possible tag opening
-          if ((TagO := Pos('<', sTemp)) <> 0) then
+          if TagO <> 0 then
           begin
-            if ((TagC := Pos('>', sTemp)) <> 0) then
+            TagC := Pos('>', sTemp);
+            
+            // Get possible tag name
+            if TagC <> 0 then
             begin
               // Extract current tag
-              sTag := Copy(sTemp, TagO + 1, (TagC - 1) - (TagO + 1));
-              TagNotFound := False;
-
-              case UpperCase(sTag) of
-                'FUNCTION':
-                begin
-                  
-                end;
+              sTag := Copy(sTemp, TagO, TagC - TagO + 1);
+
+              // check if the tag we found is shortened
+              if Copy(sTag, Length(sTag) - 1, 1) = '/' then
+              begin
+                IsShortened := True;
+                sTag := Copy(sTag, 1, Length(sTag) - 1);
+              end;
+
+              // Extract tag name from tag element
+              sTag := Copy(sTag, 2, Length(sTag) - 2);
+
+              // Simple string replace call if it is a shortened one
+              if IsShortened then
+              begin
+                sTemp := StringReplace(sTemp, '<' + sTag + '/>', strTags.Values[sTag], [rfReplaceAll, rfIgnoreCase]);
+              end
               else
+              begin
+                // when not shortened, find closing tag and extract the whole
+                // string out of it. Once done, find the %value% tag
+                sToReplace := Copy(sTemp, TagO, Length(sTemp) - Pos('</' + sTag + '>', sTemp) + Length('</' + sTag + '>'));
+                sReplaceValue := StringReplace(sToReplace, '%value%', strTags.Values[sTag], [rfReplaceAll, rfIgnoreCase]);
+                sTemp := StringReplace(sTemp, sToReplace, sReplaceValue, [rfReplaceAll, rfIgnoreCase]);
               end;
             end;
           end;
         until TagO <> 0;
 
-        for x := 0 to strTags.Count - 1 do
-          strTemplate.Text := StringReplace(strTemplate.Text, '<@' + strTags.Strings[x] + '/>', pReg.ReadString(strTags.Strings[x]), [rfReplaceAll, rfIgnoreCase]);
-
         Result := strTemplate.Text;
+        strTags.Free;
         strTemplate.Free;
       end;
     end;

+ 2 - 2
LuaEdit/HeaderBuilder/HdrBld.dof

@@ -115,7 +115,7 @@ AutoIncBuild=1
 MajorVer=1
 MinorVer=0
 Release=0
-Build=21
+Build=23
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=1252
 [Version Info Keys]
 CompanyName=
 FileDescription=
-FileVersion=1.0.0.21
+FileVersion=1.0.0.23
 InternalName=
 LegalCopyright=
 LegalTrademarks=

BIN
LuaEdit/HeaderBuilder/HdrBld.res


+ 1 - 1
LuaEdit/HeaderBuilder/Settings.pas

@@ -202,7 +202,7 @@ begin
 
     // Remove tag from registry
     if pReg.OpenKey('\Software\LuaEdit\HdrBld\Tags', False) then
-      pReg.DeleteValue(lvwTags.Selected.Caption)
+      pReg.DeleteValue(lvwTags.Selected.Caption);
 
     pReg.Free;
     lvwTags.Items.Delete(lvwTags.Selected.Index);

+ 754 - 0
LuaEdit/InternalBrowser.dfm

@@ -0,0 +1,754 @@
+object frmInternalBrowser: TfrmInternalBrowser
+  Left = 534
+  Top = 346
+  Width = 200
+  Height = 200
+  BorderStyle = bsSizeToolWin
+  Caption = 'Internal Browser'
+  Color = clBtnFace
+  Constraints.MinHeight = 200
+  Constraints.MinWidth = 200
+  DockSite = True
+  DragKind = dkDock
+  DragMode = dmAutomatic
+  Font.Charset = DEFAULT_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -11
+  Font.Name = 'MS Sans Serif'
+  Font.Style = []
+  FormStyle = fsStayOnTop
+  OldCreateOrder = False
+  Position = poOwnerFormCenter
+  OnCreate = FormCreate
+  OnDestroy = FormDestroy
+  PixelsPerInch = 96
+  TextHeight = 13
+  object Panel2: TPanel
+    Left = 0
+    Top = 0
+    Width = 192
+    Height = 60
+    Align = alTop
+    BevelOuter = bvNone
+    TabOrder = 0
+    DesignSize = (
+      192
+      60)
+    object jvgifBrowser: TJvGIFAnimator
+      Left = 162
+      Top = 3
+      Width = 25
+      Height = 25
+      Image.Data = {
+        410F000047494638396119001900C40000FAF6E2E4D8C6D2C5A4B9BEC0B5B19A
+        989C908E92797C7E72676A776C6B5D595B4D4A526B3A4747232D50333B752A36
+        94141B97030B9F00087D0E156A00005D0000480F18510102034B5B921E29BA3E
+        4AC64D59E86670A67C87DC8D95B5C6CEFF21FF0B4E45545343415045322E3003
+        01E8030021FE2F6279746520726564756374696F6E20627920687474703A2F2F
+        7777772E637962657273706163652E636F6D2F7475700021F90405020017002C
+        00000000190019000005FBE0258E64699E6681600EC71D087A1E064104D8D436
+        D6228F0F088720181C1C8B82835269FC1E910866402478084A4BA58982463283
+        0051505052985B67C9FBBD110D86C5199D2661A2DF4D6760404CFE735B823122
+        1051191A1B8A03181212138182150C220878198A1B1A2E4714169F5B730D0717
+        9687891A19108F0B0E133C736716A40E9719B7868E140E080C0A0C16B1948678
+        10C48E1214130CCCBEC1671517AB127811C8C93ABF0D0DCC0D73170ED7D7677F
+        0E07BF0A070909DE16A5E2C9737F132F0A70E7673108B1FCCAF3BD07D431C827
+        02523F797FD01D18E869849C83FCD0793BE363C44488BBBACD7160A281A47E0B
+        806D44E131541DAC090A62719451B2DFC5953F1668E9F7A7E28F11081058A0C7
+        8B9089100021F90405020017002C05000100140018000005D3E0255EC8E1601C
+        8720633B1602C145DCC34D95DB724230201801474229EA449E0060E021141E13
+        63A5A2682505800B0113211629D3066344180404C22E7134AD30AA17CE72A3C9
+        40246B515B01D7003A1B1B0F7779176D6F0922031F031A101013121716142314
+        0C0970221D1E100D135151175F0D7C2E287C26945F450C982E0788090CABAC97
+        2D0FAE0C6217AE51AC9A22087C0A07C699B60B2E0E0909070605060AB5463AA5
+        07CE0609B69547D8C6D3C947A56F0BDC142CD6AE0DD4D5E30A0DE7472362F2F3
+        23BFACF7FBFC233718FB42000021F90405020017002C03000100160018000005
+        EEE0258EC5C10D9C33AEECE861DAD33D146559ED4A0C8FE74111C9C566692872
+        85C060F0933847164683C11A04021E4D26C21DD6285496275028683399D197A2
+        90564898CC46D35A2BEE6D9127A3D16CE669225F537809471D597F1B17101042
+        500A07780A08171A1C1B1D1B198E4F2251778609231A030401189D355E460C0C
+        0A09A39606B40607136B5E3516B047171C0C0BAE770C0E13C76B6009610F0792
+        0904CE06C6B8760A0D230EB605B6070CC7D55F772C0B0907B1060DE06BBC6123
+        46A1EAC8ECD72C13C30DC96B0E0D0B2DAEF9BEE8DA95E382147DC90A1A0C8890
+        8242110CF53D9C48315B0A0E0F43000021F90405020017002C01000100180018
+        000005FBE0258EE2810CDC44AEAC88608FA6491285344CD29298C74511C94582
+        63187722CF6003018E268A84D1B22B688058A0648198501AC515E117C9906898
+        83B452B1E4468766792599180E7705A3A1508C304D667451787D867A173E1110
+        82670C067707877D4931191A1B1A223439076A7E17520D221C076319A8104375
+        86390A9F0C540F090604715A4223161609099F0D14170F0A0B0A062F34352A22
+        140BBE7A14C11009C60405040BD113DBDB5FD4D05417CED70409D114DCDD0EAD
+        C122139E78E6DAE9CD7DB1ED22BD51C0E723D1EB0A2C6C23E166CFB983E71A1C
+        E0C7020CC27E09A33504C3E6E14324162A5AEC87C4DF467C1D5B700BC9220505
+        87524842000021F90405020017002C01000100170018000005FBE0258E227270
+        4E4AAEECF5489024A54CDD9245A4474DE3300A46E326C2647611CCE1A050F42C
+        8D04EB818C3C0A8FC9A4B158302C0A04892ACA983983036262810613E26284B4
+        E908EE0466B0B982D0370104770679094D870D6173221B1B1C0201020406227A
+        890D150C173B8C1C82060607170752410C15141706183A666607068640A4097A
+        1614140A06103A7E24140CA4B4090DB8C05DAC3A1223140E4B0940C5C6A0840E
+        3232225A0809860AB7C6170404091332A9D913084D861613E0B4C6F15BDBDC0C
+        13A8B8170C090BF1F20AB5EC493BA7EE9B3F5CC112DC72974F84B783C6B60C6C
+        38E254858B44325EB85841A3C78F1A0F8224E1000307070E08E2AC08010021F9
+        0405020017002C01000100180018000005F7E0258E628190C841AE2B063D9183
+        2D0B63AB2C09470D862C06954D91C88976984230B150341844C5C978E174348E
+        85EFC068280E0A05553320141E9089E3904885A1E2D52300A8130E879421ACB0
+        75590574820104080D220A1616507F231902750001022206345C15150C171587
+        237392000204A378361514148B230E11AE03031E65040441A616A91417A93FAE
+        1110192F05C30645090DB9C90C071012BE110F070641084E13C9C9050E12DCDD
+        09DF290B13D7BA2B060DDC23144D6178E3B92C0CD8EB517D0EC8E52B08F31351
+        0D6AE492391091601E050609125108B88BD7087CC916E13298EF21958B18336A
+        DCC8B1E3882B1843000021F90405020017002C01000100180018000005FBE025
+        8E228238D0E41C07E9BE1786994CAD28B08B2D98E117090523A840E4621C8261
+        814838180743627ACB7122180EA75098240804D641C8786D31194DD2501000C7
+        0845A3511E3D0881C0401F20200C6306350C74160B227702040017011C030206
+        0813160907830D1516221879009F00021C17040D141487151574141522077901
+        A002079312A7ACAD0D1615462C6DB105610EA7A717A79BC81011110F027BC205
+        0EB7C5D57316141012120F6D61090DB713E313D614160DD3DB6C050709E2E413
+        23C8140D08DB12EE53092AF1F239C516B8BB3461813F12A7EA943BA560CC3853
+        F1AAA16A716141B106091848A4E0E25C821C73366EA473A4A40EC9932853A614
+        A97284162D2543000021F90405020017002C01000100180017000005FBE0258E
+        A4E838659A22CEC1300BE222894A72D86118879218888B82D1B05D3C07872F41
+        101408325FA3987A3C3884C33340E81E120944A3421D191E190F2100085C0A07
+        E4E255A9970BDC015B3F38107C0A0B7363752302876E17011E190B04062F2F0D
+        16751522786C010300031A100F05171414921516A322064D01021E9D19101208
+        13A3160D0C17A6A308086B025D8C1011121325140D28240403053C1911C31212
+        A314130DA41613A714175A5FD0D2D21713E4D6A7B693DC083B08E1E2C693DB14
+        16E3090707D2D4DC36C724F70B122AE853616D083D110B1230D047CB1885055F
+        888C6870E09ABE81D422C22021EFE2C5090B482D3042B2A409C99328538E2866
+        24040021F90405020017002C01000100170018000005F4E0258EA4633A64AA1E
+        9CB22886C12409A3A6479C1C4451E409CB6D84511C0448420FD8B0546E04CF21
+        00080406841CA2D9A83C498F01D52A1E701089A645A8E2043CD8C08F75382826
+        14AF7E44786F06006607080B0C1316797A5F0204031A1B1F011710080A171414
+        885E981422020810191A1D1C22121377220D9C9C3E07A119190F171113B61428
+        97AC144A1811111010A6A7B836BAAC050B12BFBF12CE120D0DB6D1140C889883
+        CFDA12432A0CDB24B6E2134DC71709789D29E30D0A690C9C1707781337B63307
+        3508984208D7BBACEA2060C04001A611F000B25AE080420306AB72751B526FA2
+        C58B182F2ACC98C2C3C4100021F90405020017002C01000100140018000005D8
+        E0258E24E6380B42AE22A22007A11C0863B36261107C71188EC9C25261190481
+        414037383426140A8B130800000382C72471442B6011E152C5160A8CC90412A5
+        808B870180501878B21888A42D2D21A94D79127B6D240710631B03031C197A84
+        51230811101C171A1C1E1C108F7C6D93110F1998171026509E510B11AC94790F
+        096AB29E7A17AD0F0E126A4F0D0BA851B983C26ABA2B7C1712382213286A8517
+        50247C0C09090D0C6D13D07D2413D5060A170916850BA9141607D5360C0DCFEE
+        A90BEED7D8CFCA2416DAF7FBFCFDFCFAFE487018E88045080021F90405020017
+        002C01000100140018000005C1E0258EE26170CEE42008E99685711C0BB33449
+        F25E45310402CC444299502C9617214020C886448AF4F50B0C3C87C743129DBA
+        025683660CE14ABDA29EC773DD683265C9EE72E010309BFC3B3217612006171B
+        1D6E107C73055A18636E705C722F0E1186191C6F865C738686181C19175B6667
+        A32313105A100E424513AD3B101022ADB3B47D23290DB446671714231216390D
+        0C16B4A4A51333070C0A0CB3A3BE2E090A0AC3D5D068230D0D14D6D8D93B16BC
+        C7B6B2E5E7E5DFE8751C13492E210021F90405020017002C0100010017001800
+        0005ADE0258EA4334D64AA5E458120C7B23885921CEB480CC7F360920BC561B1
+        34143956E2118904534564AA30C0409A4D55A56249900685872643CE44B4DB86
+        F772E06022194DF2B24DAF99F1F90AE1686636807A24086F648249658687220F
+        10578E59878E8D0E561012989227120D0F121314148B17130E22A11427AA2849
+        0B070D0CA8A2822707060C0A0EA1A08B08090CB816B2C3B2244646B1C4C473B2
+        C2CBCCCAA8A3D32345D4292F6EB339210021F90405020017002C010001001800
+        18000005A4E0258EE2715C93E3906C2B22C6E23C85931CCAE292C5833D118964
+        42993014B9DDE5E0883823238AB47154B8309AE75324953212561626E3548A2A
+        0D246B6BBE542AC786EE8281B6CF6FEAC87E8F52F4176C2E5D845322822C858A
+        084D887E8A5D2B3E104F123B9027120E10429D838A0C170E139D12847D4B0B0D
+        52A65D13AFAF4A06394444A777070C0C0B90BD52240C160CBE906D16C414A8CA
+        CBCA15CC3B181677210021F90405020017002C01000100180018000005A9E025
+        8EE4354D0B7294EC8820183770487128CEDA8E4FE43F10C9C260383014BA568F
+        2469E612894302A18CEC28080394C1689496D7C9E176B4784598DD8842692814
+        0C8BA53282A8456CB6BBC2BF5F322D150D5D14167E7713140E87770D090C7677
+        79937A700E1112567E94145C174DA0A02D9416489FA1126A946245899C6C259C
+        0A220DAF796B948E2209B5B6BE0B4917BEBE0C2D0D7CC31413B32C0D678CD0D1
+        D2D28B14696A210021F90405020017002C01000100180018000005ACE0258EA4
+        E86046A99618571C05B138F0BA42D7631442B1348746C3B6C2C40805C4416119
+        12491C0201B66C542A4F1224A65826ACD7EC88764858CED7B058844850289634
+        F6899348260E07E31A5FAB2C0C70176F7E244D0C5F8285260C0A4C1410127E6F
+        070C0D0C0C168B220B0A8D5F9B170D0909060A080814936F4A9522136B6FAC09
+        0A4E0BB2B8B9B8A34C0B230DBAC16F9E160E257B69C21442783673C280A186D2
+        D4221613131C4F210021FE3746494C45204944454E544954590D0A4372656174
+        6564206F72206D6F6469666965642062790D0A434841524C4553205455505045
+        520D0A003B}
+      Anchors = [akTop, akRight]
+    end
+    object tlbInternalBrowser: TToolBar
+      Left = 0
+      Top = 0
+      Width = 148
+      Height = 22
+      Align = alNone
+      AutoSize = True
+      Caption = 'Internal Browser Toolbar'
+      EdgeBorders = []
+      Flat = True
+      Images = imlBrowser
+      TabOrder = 0
+      object ToolButton11: TToolButton
+        Left = 0
+        Top = 0
+        Action = actBackTo
+        ParentShowHint = False
+        ShowHint = True
+      end
+      object ToolButton12: TToolButton
+        Left = 23
+        Top = 0
+        Action = actFowardTo
+        ParentShowHint = False
+        ShowHint = True
+      end
+      object ToolButton20: TToolButton
+        Left = 46
+        Top = 0
+        Width = 10
+        Caption = 'ToolButton20'
+        ImageIndex = 34
+        Style = tbsSeparator
+      end
+      object ToolButton13: TToolButton
+        Left = 56
+        Top = 0
+        Action = actStop
+        ParentShowHint = False
+        ShowHint = True
+      end
+      object ToolButton15: TToolButton
+        Left = 79
+        Top = 0
+        Action = actRefresh
+        ParentShowHint = False
+        ShowHint = True
+      end
+      object ToolButton16: TToolButton
+        Left = 102
+        Top = 0
+        Action = actHome
+        ParentShowHint = False
+        ShowHint = True
+      end
+      object ToolButton1: TToolButton
+        Left = 125
+        Top = 0
+        Action = actSearch
+        ParentShowHint = False
+        ShowHint = True
+      end
+    end
+    object Panel1: TPanel
+      Left = 0
+      Top = 28
+      Width = 192
+      Height = 27
+      Anchors = [akLeft, akTop, akRight]
+      BevelOuter = bvNone
+      TabOrder = 1
+      DesignSize = (
+        192
+        27)
+      object cboURL: TComboBox
+        Left = 1
+        Top = 4
+        Width = 156
+        Height = 21
+        AutoDropDown = True
+        Anchors = [akLeft, akTop, akRight, akBottom]
+        DropDownCount = 15
+        ItemHeight = 13
+        TabOrder = 0
+        OnKeyPress = cboURLKeyPress
+      end
+      object btnGo: TButton
+        Left = 163
+        Top = 5
+        Width = 23
+        Height = 19
+        Action = actGo
+        Anchors = [akTop, akRight]
+        Default = True
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 1
+      end
+    end
+  end
+  object InternalBrowser: TWebBrowser
+    Left = 0
+    Top = 60
+    Width = 192
+    Height = 113
+    Align = alClient
+    TabOrder = 1
+    OnCommandStateChange = InternalBrowserCommandStateChange
+    OnBeforeNavigate2 = InternalBrowserBeforeNavigate2
+    OnNavigateComplete2 = InternalBrowserNavigateComplete2
+    ControlData = {
+      4C000000D8130000AE0B00000000000000000000000000000000000000000000
+      000000004C000000000000000000000001000000E0D057007335CF11AE690800
+      2B2E126208000000000000004C0000000114020000000000C000000000000046
+      8000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000100000000000000000000000000000000000000}
+  end
+  object JvDockClient1: TJvDockClient
+    LRDockWidth = 100
+    TBDockHeight = 100
+    DirectDrag = False
+    ShowHint = True
+    EnableCloseButton = True
+    DockStyle = frmMain.jvDockVSNet
+    Left = 8
+    Top = 112
+  end
+  object imlBrowser: TImageList
+    Left = 8
+    Top = 80
+    Bitmap = {
+      494C010106000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      0000000000003600000028000000400000003000000001002000000000000030
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF000000000000000000000000000000000000000000FF00FF00FF00
+      FF00FF00FF000000000000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF008400
+      000084000000FF00000084000000FF00000084000000FF000000000000000000
+      0000848484000000FF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00008400000084
+      00000084000000000000FF00000084000000FF00000084000000840000008484
+      84000000FF000000FF0000008400FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF0000840000FF00FF0000FF
+      000000840000008400000000000084848400000000000000000084848400FFFF
+      FF000000FF0000008400FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF000084000000840000008400000084000000840000FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF0000840000FF00FF000084
+      000000FF00000084000084848400FF00FF00FFFF0000FF00FF00000000008484
+      84008484840000000000FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFFFF000084
+      0000FFFFFF00FFFFFF0000000000FF00FF0000840000FFFFFF00FF00FF0000FF
+      00000084000084848400FFFFFF00FFFF0000FF00FF00FFFF0000FF00FF000000
+      0000008400000084000000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF000084
+      0000FFFFFF00FFFFFF0000000000FF00FF0000840000FFFFFF00FF00FF000084
+      0000FF00000084848400FFFFFF00FFFFFF00FFFF0000FF00FF00FFFF00000000
+      0000008400000084000000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF0000840000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000084
+      0000FFFFFF00FFFFFF0000000000FF00FF008484840000840000008400008484
+      0000FF00000084848400FFFFFF00FFFF0000FFFFFF00FFFF0000FF00FF000000
+      0000008400000084000000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF0000840000FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF0084848400FF000000FF000000FF00
+      0000FF000000FF00000084848400FFFFFF00FFFF0000FFFFFF0000000000FF00
+      FF00008400000084000000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF0000840000FFFFFF00FFFFFF000084000000840000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF0084848400FF000000FF0000000084
+      000000840000FF000000FF000000848484008484840000000000FF0000000084
+      0000FF00FF000084000000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF000084000000840000008400000084000000840000FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00848484000084000000FF
+      000000840000FF000000FF000000FF00000084000000FF00000084000000FF00
+      00000084000000000000FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF008484840000840000FF00
+      FF0000FF00000084000000840000FF0000000084000000840000FF0000008400
+      0000FF00000000000000FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF000000
+      0000000000000000000000000000FF00FF00FF00FF00FFFFFF0084848400FFFF
+      FF00FF00FF0000FF00000084000000840000008400000084000000840000FF00
+      000084000000FFFFFF00FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+      0000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008484
+      840084848400FFFFFF00FFFFFF0000FF00000084000000840000008400000084
+      0000FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF008484840084848400848484008484840084848400FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF008484840084848400848484008484840084848400FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF0084848400848484000000FF000000FF000000FF000000FF000000FF008484
+      840084848400FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008484
+      84000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+      FF000000FF0084848400FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF000000000000FFFF0000FFFF0000000000FFFFFF00FFFF
+      FF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00848484000000
+      FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+      FF000000FF000000FF0084848400FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF000000000000FFFF0000FFFF0000000000FFFFFF00FFFF
+      FF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00848484000000
+      FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+      FF000000FF000000FF0084848400FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF000000000000FFFF0000FFFF0000000000FFFFFF00FFFF
+      FF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00848484000000FF000000
+      FF000000FF00FFFFFF00FFFFFF000000FF000000FF000000FF00FFFFFF00FFFF
+      FF000000FF000000FF000000FF0084848400FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF000000000000FFFF0000FFFF0000000000FFFFFF00FFFF
+      FF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF00000000
+      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF0000000000FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00848484000000FF000000
+      FF000000FF000000FF00FFFFFF00FFFFFF000000FF00FFFFFF00FFFFFF000000
+      FF000000FF000000FF000000FF0084848400FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFF
+      FF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00000000000000
+      0000000000000000000000000000000000000000000000000000FFFF0000FFFF
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
+      0000FFFF0000FFFF000000000000000000000000000000000000000000000000
+      00000000000000000000FF00FF00FF00FF00FF00FF00848484000000FF000000
+      FF000000FF000000FF000000FF00FFFFFF00FFFFFF00FFFFFF000000FF000000
+      FF000000FF000000FF000000FF0084848400FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+      0000FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+      0000FFFF000000000000FF00FF00FF00FF00FF00FF00848484000000FF000000
+      FF000000FF000000FF000000FF00FFFFFF00FFFFFF00FFFFFF000000FF000000
+      FF000000FF000000FF000000FF0084848400FF00FF000000000000FFFF000000
+      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF000000000000FFFF0000000000FF00FF00FF00FF00FF00FF0000000000FFFF
+      0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+      0000FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
+      0000FFFF000000000000FF00FF00FF00FF00FF00FF00848484000000FF000000
+      FF000000FF000000FF00FFFFFF00FFFFFF000000FF00FFFFFF00FFFFFF000000
+      FF000000FF000000FF000000FF0084848400FF00FF00FF00FF000000000000FF
+      FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+      000000FFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00000000000000
+      0000000000000000000000000000000000000000000000000000FFFF0000FFFF
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
+      0000FFFF0000FFFF000000000000000000000000000000000000000000000000
+      00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00848484000000
+      FF000000FF00FFFFFF00FFFFFF000000FF000000FF000000FF00FFFFFF00FFFF
+      FF000000FF000000FF0084848400FF00FF00FF00FF00FF00FF00FF00FF000000
+      000000FFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000FF
+      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF00000000
+      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF0000000000FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00848484000000
+      FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+      FF000000FF000000FF0084848400FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF000000000000FFFF0000000000FFFFFF00FFFFFF000000000000FFFF000000
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008484
+      84000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+      FF000000FF0084848400FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF000000000000FFFF00000000000000000000FFFF00000000000000
+      840000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF0084848400848484000000FF000000FF000000FF000000FF000000FF008484
+      840084848400FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF000000000000FFFF0000FFFF0000000000FF00FF000000
+      840000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF008484840084848400848484008484840084848400FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF000000
+      840000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00424D3E000000000000003E000000
+      2800000040000000300000000100010000000000800100000000000000000000
+      000000000000000000000000FFFFFF0000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000}
+  end
+  object ActionList1: TActionList
+    Images = imlBrowser
+    Left = 40
+    Top = 112
+    object actBackTo: TAction
+      Category = 'Browse'
+      Caption = 'Back to'
+      Hint = 'Back to'
+      ImageIndex = 3
+      OnExecute = actBackToExecute
+    end
+    object actFowardTo: TAction
+      Category = 'Browse'
+      Caption = 'Foward To'
+      ImageIndex = 2
+      OnExecute = actFowardToExecute
+    end
+    object actHome: TAction
+      Category = 'Browse'
+      Caption = 'Home'
+      Hint = 'Home'
+      ImageIndex = 1
+      OnExecute = actHomeExecute
+    end
+    object actStop: TAction
+      Category = 'Browse'
+      Caption = 'Stop'
+      Hint = 'Stop'
+      ImageIndex = 0
+      OnExecute = actStopExecute
+    end
+    object actRefresh: TAction
+      Category = 'Browse'
+      Caption = 'Refresh'
+      Hint = 'Refresh'
+      ImageIndex = 4
+      OnExecute = actRefreshExecute
+    end
+    object actSearch: TAction
+      Category = 'Browse'
+      Caption = 'Search the Web'
+      Hint = 'Search the Web'
+      ImageIndex = 5
+      OnExecute = actSearchExecute
+    end
+    object actGo: TAction
+      Category = 'Browse'
+      Caption = 'Go'
+      Hint = 'Go'
+      OnExecute = actGoExecute
+    end
+  end
+end

+ 292 - 0
LuaEdit/InternalBrowser.pas

@@ -0,0 +1,292 @@
+unit InternalBrowser;
+
+interface
+
+uses
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+  Dialogs, JvComponent, JvDockControlForm, ImgList, ComCtrls, ToolWin,
+  StdCtrls, SHDocVW, ActnList, ExtCtrls, Registry, DateUtils, JvExControls,
+  JvAnimatedImage, JvGIFCtrl, OleCtrls, ActiveX, JvOutlookBar;
+
+type
+  TURLDateTime = class(TObject)
+  public
+    Date: TDateTime;
+    constructor Create(dtDate: TDateTime);
+  end;
+
+  TfrmInternalBrowser = class(TForm)
+    JvDockClient1: TJvDockClient;
+    imlBrowser: TImageList;
+    ActionList1: TActionList;
+    actBackTo: TAction;
+    actFowardTo: TAction;
+    actHome: TAction;
+    actStop: TAction;
+    actRefresh: TAction;
+    actSearch: TAction;
+    actGo: TAction;
+    Panel2: TPanel;
+    tlbInternalBrowser: TToolBar;
+    ToolButton11: TToolButton;
+    ToolButton12: TToolButton;
+    ToolButton20: TToolButton;
+    ToolButton13: TToolButton;
+    ToolButton15: TToolButton;
+    ToolButton16: TToolButton;
+    ToolButton1: TToolButton;
+    jvgifBrowser: TJvGIFAnimator;
+    Panel1: TPanel;
+    cboURL: TComboBox;
+    btnGo: TButton;
+    InternalBrowser: TWebBrowser;
+    procedure FormCreate(Sender: TObject);
+    procedure FormDestroy(Sender: TObject);
+    procedure actBackToExecute(Sender: TObject);
+    procedure actFowardToExecute(Sender: TObject);
+    procedure actHomeExecute(Sender: TObject);
+    procedure actStopExecute(Sender: TObject);
+    procedure actRefreshExecute(Sender: TObject);
+    procedure actSearchExecute(Sender: TObject);
+    procedure actGoExecute(Sender: TObject);
+    procedure InternalBrowserNavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
+    procedure InternalBrowserCommandStateChange(Sender: TObject; Command: Integer; Enable: WordBool);
+    procedure InternalBrowserBeforeNavigate2(Sender: TObject;
+      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
+      Headers: OleVariant; var Cancel: WordBool);
+    procedure cboURLKeyPress(Sender: TObject; var Key: Char);
+  private
+    { Private declarations }
+    FOleInPlaceActiveObject: IOleInPlaceActiveObject;
+    procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);
+  public
+    { Public declarations }
+    procedure AddURLToList(URL: String);
+    procedure btnXHistoryClick(Sender: TObject);
+  end;
+
+var
+  frmInternalBrowser: TfrmInternalBrowser;
+
+implementation
+
+uses Rings, Main;
+
+{$R *.dfm}
+
+constructor TURLDateTime.Create(dtDate: TDateTime);
+begin
+  Date := dtDate;
+end;
+
+procedure TfrmInternalBrowser.btnXHistoryClick(Sender: TObject);
+begin
+  if not Self.Visible then
+    frmMain.DoShowInternalBrowserExecute;
+
+  cboURL.Text := TJvOutlookBarButton(Sender).Caption;
+  actGo.Execute;
+end;
+
+procedure TfrmInternalBrowser.FormCreate(Sender: TObject);
+var
+  pReg: TRegistry;
+  lstValues: TStringList;
+  pURLDateTime: TURLDateTime;
+  pRingButton: TJvOutlookBarButton;
+  x: Integer;
+begin
+  // Fix some web broser bugs with enter key
+  Application.OnMessage := MsgHandler;
+  
+  // Initialize url combobox content
+  pReg := TRegistry.Create;
+  lstValues := TStringList.Create;
+
+  if pReg.OpenKey('\Software\LuaEdit\InternalBrowser\Recent', False) then
+  begin
+    pReg.GetValueNames(lstValues);
+
+    for x := 0 to lstValues.Count - 1 do
+    begin
+      if StrToDateTime(lstValues.Strings[x]) < IncDay(Now, -10) then
+      begin
+        pReg.DeleteValue(lstValues.Strings[x]);
+      end
+      else
+      begin
+        pURLDateTime := TURLDateTime.Create(StrToDateTime(lstValues.Strings[x]));
+        cboURL.AddItem(pReg.ReadString(lstValues.Strings[x]), pURLDateTime);
+        pRingButton := frmRings.jvRings.Pages[JVPAGE_RING_BRWHISTORY].Buttons.Add;
+        pRingButton.Caption := pReg.ReadString(lstValues.Strings[x]);
+        pRingButton.OnClick := btnXHistoryClick;
+      end;
+    end;
+  end;
+
+  lstValues.Free;
+  pReg.Free;
+  InternalBrowser.GoHome;
+end;
+
+procedure TfrmInternalBrowser.FormDestroy(Sender: TObject);
+var
+  pReg: TRegistry;
+  pURLDateTime: TURLDateTime;
+  x: Integer;
+begin
+  // wipe all current values and write new ones...
+  pReg := TRegistry.Create;
+  pReg.DeleteKey('\Software\LuaEdit\InternalBrowser\Recent');
+  
+  if pReg.OpenKey('\Software\LuaEdit\InternalBrowser\Recent', True) then
+  begin
+    for x := 0 to cboURL.Items.Count - 1 do
+    begin
+      pURLDateTime := TURLDateTime(cboURL.Items.Objects[x]);
+      pReg.WriteString(DateTimeToStr(pURLDateTime.Date), cboURL.Items.Strings[x]);
+      pURLDateTime.Free;
+    end;
+  end;
+
+  FOleInPlaceActiveObject := nil;
+  pReg.Free;
+end;
+
+// Added to fix [Enter] key pressed inside the browser
+procedure TfrmInternalBrowser.MsgHandler(var Msg: TMsg; var Handled: Boolean);
+const
+  StdKeys = [VK_BACK, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT];
+var IOIPAO: IOleInPlaceActiveObject;
+  Dispatch: IDispatch;
+begin
+  if InternalBrowser = nil then
+  begin
+    Handled := False;
+    Exit;
+  end;
+  Handled := (IsDialogMessage(InternalBrowser.Handle, Msg) = True);
+  if (Handled) and (not InternalBrowser.Busy) then
+  begin
+    if FOleInPlaceActiveObject = nil then
+    begin
+      Dispatch := InternalBrowser.Application;
+      if Dispatch <> nil then
+      begin
+        Dispatch.QueryInterface(IOleInPlaceActiveObject, IOIPAO);
+        if IOIPAO <> nil then FOleInPlaceActiveObject := IOIPAO;
+      end;
+    end;
+    if FOleInPlaceActiveObject <> nil then
+    begin
+      if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
+        (Msg.wParam in StdKeys) then
+        //nothing  -  do not pass on Backspace, Left, Right, Up, Down arrows
+      else FOleInPlaceActiveObject.TranslateAccelerator(Msg);
+    end;
+  end;
+end;
+
+
+procedure TfrmInternalBrowser.AddURLToList(URL: String);
+var
+  x: Integer;
+  pURLDateTime: TURLDateTime;
+  pRingButton: TJvOutlookBarButton;
+  bFound: Boolean;
+begin
+  // Initialize to false
+  bFound := False;
+
+  // Try to find string in the list
+  for x := 0 to cboURL.Items.Count - 1 do
+  begin
+    // Set found flag to true if got match
+    if cboURL.Items.Strings[x] = URL then
+    begin
+      bFound := True;
+      break;
+    end;
+  end;
+
+  // Add url to current list if not found
+  if not bFound then
+  begin
+    pURLDateTime := TURLDateTime.Create(Now);
+    cboURL.AddItem(URL, pURLDateTime);
+    pRingButton := frmRings.jvRings.Pages[JVPAGE_RING_BRWHISTORY].Buttons.Add;
+    pRingButton.Caption := URL;
+    pRingButton.OnClick := btnXHistoryClick;
+  end;
+end;
+
+procedure TfrmInternalBrowser.actBackToExecute(Sender: TObject);
+begin
+  InternalBrowser.GoBack;
+end;
+
+procedure TfrmInternalBrowser.actFowardToExecute(Sender: TObject);
+begin
+  InternalBrowser.GoForward;
+end;
+
+procedure TfrmInternalBrowser.actHomeExecute(Sender: TObject);
+begin
+  InternalBrowser.GoHome;
+end;
+
+procedure TfrmInternalBrowser.actStopExecute(Sender: TObject);
+begin
+  InternalBrowser.Stop;
+end;
+
+procedure TfrmInternalBrowser.actRefreshExecute(Sender: TObject);
+begin
+  InternalBrowser.Refresh2;
+end;
+
+procedure TfrmInternalBrowser.actSearchExecute(Sender: TObject);
+begin
+  InternalBrowser.GoSearch;
+end;
+
+procedure TfrmInternalBrowser.actGoExecute(Sender: TObject);
+begin
+  if cboURL.Text <> '' then
+    InternalBrowser.Navigate(cboURL.Text);
+end;
+
+procedure TfrmInternalBrowser.InternalBrowserNavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
+begin
+  jvgifBrowser.Animate := False;
+  cboURL.Text := InternalBrowser.LocationURL;
+  AddURLToList(InternalBrowser.LocationURL);
+end;
+
+procedure TfrmInternalBrowser.InternalBrowserCommandStateChange(Sender: TObject; Command: Integer; Enable: WordBool);
+begin
+  case Command of
+    CSC_NAVIGATEBACK: actBackTo.Enabled := Enable;
+    CSC_NAVIGATEFORWARD: actFowardTo.Enabled := Enable;
+    CSC_UPDATECOMMANDS: actStop.Enabled := Enable;
+  end;
+end;
+
+procedure TfrmInternalBrowser.InternalBrowserBeforeNavigate2(Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
+begin
+  jvgifBrowser.Animate := True;
+end;
+
+procedure TfrmInternalBrowser.cboURLKeyPress(Sender: TObject; var Key: Char);
+begin
+  if Ord(Key) = VK_RETURN then
+    actGo.Execute;
+end;
+
+initialization
+  OleInitialize(nil);
+
+finalization
+  OleUninitialize
+
+end.

+ 3 - 4
LuaEdit/LuaCore/LuaUtils.pas

@@ -119,7 +119,7 @@ function LuaDataStrToStrings(const TableStr: string; Strings: TStrings): string;
 function LuaDoFile(L: Plua_State): Integer; cdecl;
 
 const
-  LuaGlobalVariableStr = '{グローバル変数}';
+  LuaGlobalVariableStr = '[LUA_GLOBALSINDEX]';
 var
   OnLuaStdout: TOnLuaStdout;
   DefaultMaxTable: Integer;
@@ -642,7 +642,7 @@ function LuaStackToStr(L: Plua_State; Index: Integer; MaxTable: Integer): string
       else
         Value := LuaStackToStr(L, -1, MaxTable);
       if (lua_type(L, -1) = LUA_TFUNCTION) then
-        Result := Result + Format('%s() ', [Key])
+        Result := Result + Format('%s()=%p ', [Key, lua_topointer(L, -1)])
       else
         Result := Result + Format('%s=%s ', [Key, Value]);
       // Key は次のために残す
@@ -874,7 +874,7 @@ procedure LuaTableToTreeView(L: Plua_State; Index: Integer; TV: TTreeView; MaxTa
       else
       begin
         if (Key = '_G') then
-          TV.Items.AddChild(TreeNode, Key + '={グローバル変数}')
+          TV.Items.AddChild(TreeNode, Key + '=[LUA_GLOBALSINDEX]')
         else
           ParseTreeNode(TV.Items.AddChild(TreeNode, Key), -1);
       end;
@@ -1066,7 +1066,6 @@ function LuaPCallFunction(L: Plua_State; FunctionName :String;
 var
    NArgs,
    i        :Integer;
-   auxVar   :Variant;
 
 begin
      //Put Function To Call on the Stack

+ 6 - 5
LuaEdit/LuaEdit.dof

@@ -115,7 +115,7 @@ AutoIncBuild=1
 MajorVer=2
 MinorVer=2
 Release=1
-Build=132
+Build=264
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=1252
 [Version Info Keys]
 CompanyName=Open Source
 FileDescription=IDE for Lua 5.0.2
-FileVersion=2.2.1.132
+FileVersion=2.2.1.264
 InternalName=LuaEdit
 LegalCopyright=LuaEdit Copyright 2004-2005 ©
 LegalTrademarks=
@@ -138,10 +138,11 @@ Comments=This project was originally created by Jean-Francois Goulet
 Count=1
 Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
 [HistoryLists\hlSearchPath]
-Count=3
+Count=4
 Item0=$(DELPHI)\Lib\Debug;C:\Prog\Delphi\Component\JEDI\jcl\lib\D7\debug;.\Syntax;.\LuaCore;C:\Prog\Delphi\Component\XPMenu;C:\Prog\Delphi\Component\SynEdit\Source
-Item1=C:\Prog\Delphi\Component\SynEdit\Packages;C:\Prog\Delphi\Component\SynEdit\Source
-Item2=C:\Prog\Delphi\Component\SynEdit\Packages
+Item1=.\Syntax;.\LuaCore;C:\Prog\Delphi\Component\XPMenu;C:\Prog\Delphi\Component\SynEdit\Source
+Item2=C:\Prog\Delphi\Component\SynEdit\Packages;C:\Prog\Delphi\Component\SynEdit\Source
+Item3=C:\Prog\Delphi\Component\SynEdit\Packages
 [HistoryLists\hlOutputDirectorry]
 Count=1
 Item0=.\bin

+ 8 - 1
LuaEdit/LuaEdit.dpr

@@ -45,7 +45,12 @@ uses
   AsciiTable in 'AsciiTable.pas' {frmAsciiTable},
   ReadOnlyMsgBox in 'ReadOnlyMsgBox.pas' {frmReadOnlyMsgBox},
   Rings in 'Rings.pas' {frmRings},
-  SearchPath in 'SearchPath.pas' {frmSearchPath};
+  SearchPath in 'SearchPath.pas' {frmSearchPath},
+  InternalBrowser in 'InternalBrowser.pas' {frmInternalBrowser},
+  FindInFiles in 'FindInFiles.pas' {frmFindInFiles},
+  SIFReport in 'SIFReport.pas' {frmSIFReport},
+  FindWindow1 in 'FindWindow1.pas' {frmFindWindow1},
+  FindWindow2 in 'FindWindow2.pas' {frmFindWindow2};
 
 {$R *.res}
 
@@ -77,6 +82,8 @@ begin
   Application.CreateForm(TfrmAddBreakpoint, frmAddBreakpoint);
   Application.CreateForm(TfrmEditorSettings, frmEditorSettings);
   Application.CreateForm(TfrmAsciiTable, frmAsciiTable);
+  Application.CreateForm(TfrmFindInFiles, frmFindInFiles);
+  Application.CreateForm(TfrmSIFReport, frmSIFReport);
   frmMain.CheckButtons;
 
   // show splash screen...

BIN
LuaEdit/LuaEdit.res


+ 8 - 8
LuaEdit/LuaEditDebug/LuaEditDebug.cfg

@@ -14,7 +14,7 @@
 -$N+
 -$O+
 -$P+
--$Q-
+-$Q+
 -$R-
 -$S-
 -$T-
@@ -31,13 +31,13 @@
 -M
 -$M16384,1048576
 -K$00400000
--N"E:\Programming\Borland\Delphi7\Libs\DCU"
--LE"E:\Programming\Borland\Delphi7\Libs\Pal_bpl"
--LN"E:\Programming\Borland\Delphi7\Libs\Pal_dcp"
--U"E:\Programming\Borland\Comuni;E:\Programming\Borland\Comuni\LUA;E:\Programming\Borland\Delphi\Packages\PropEditors;E:\Programming\Borland\Delphi\Packages\ActiveX;E:\Programming\Borland\Delphi\Packages\Altri;E:\Programming\Borland\Delphi\Packages\Compress;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG\Printset;E:\Programming\Borland\Delphi\Packages\Database;E:\Programming\Borland\Delphi\Packages\Inspector;E:\Programming\Borland\Delphi\Packages\Internet;E:\Programming\Borland\Delphi\Packages\Multimedia;E:\Programming\Borland\Delphi\Packages\Special;E:\Programming\Borland\Delphi\Packages\ui;E:\Programming\Borland\Delphi\Packages\ImageLib;E:\Programming\Borland\Delphi7\Packages\Indy 9;E:\Programming\Borland\Delphi7\Packages\DIB;E:\Programming\Borland\Delphi7\Packages\fpiette\ics\Delphi\Vc32;E:\Programming\Borland\Delphi7\Packages\Graphics;E:\Programming\Borland\Delphi7\Libs\Pal_dcp;E:\Programming\Borland\Delphi7\Libs\Pal_bpl;E:\Programming\Borland\Delphi7\Packages\ZipMaster\vcl;E:\Programming\Borland\Delphi\Packages\KOL;E:\Programming\Borland\Delphi7\Packages\synedit\Source;E:\Programming\Borland\Delphi7\Libs\DCU;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\common;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\vcl;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\windows;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\visclx;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\common;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\Resources;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\run"
--O"E:\Programming\Borland\Comuni;E:\Programming\Borland\Comuni\LUA;E:\Programming\Borland\Delphi\Packages\PropEditors;E:\Programming\Borland\Delphi\Packages\ActiveX;E:\Programming\Borland\Delphi\Packages\Altri;E:\Programming\Borland\Delphi\Packages\Compress;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG\Printset;E:\Programming\Borland\Delphi\Packages\Database;E:\Programming\Borland\Delphi\Packages\Inspector;E:\Programming\Borland\Delphi\Packages\Internet;E:\Programming\Borland\Delphi\Packages\Multimedia;E:\Programming\Borland\Delphi\Packages\Special;E:\Programming\Borland\Delphi\Packages\ui;E:\Programming\Borland\Delphi\Packages\ImageLib;E:\Programming\Borland\Delphi7\Packages\Indy 9;E:\Programming\Borland\Delphi7\Packages\DIB;E:\Programming\Borland\Delphi7\Packages\fpiette\ics\Delphi\Vc32;E:\Programming\Borland\Delphi7\Packages\Graphics;E:\Programming\Borland\Delphi7\Libs\Pal_dcp;E:\Programming\Borland\Delphi7\Libs\Pal_bpl;E:\Programming\Borland\Delphi7\Packages\ZipMaster\vcl;E:\Programming\Borland\Delphi\Packages\KOL;E:\Programming\Borland\Delphi7\Packages\synedit\Source;E:\Programming\Borland\Delphi7\Libs\DCU;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\common;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\vcl;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\windows;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\visclx;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\common;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\Resources;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\run"
--I"E:\Programming\Borland\Comuni;E:\Programming\Borland\Comuni\LUA;E:\Programming\Borland\Delphi\Packages\PropEditors;E:\Programming\Borland\Delphi\Packages\ActiveX;E:\Programming\Borland\Delphi\Packages\Altri;E:\Programming\Borland\Delphi\Packages\Compress;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG\Printset;E:\Programming\Borland\Delphi\Packages\Database;E:\Programming\Borland\Delphi\Packages\Inspector;E:\Programming\Borland\Delphi\Packages\Internet;E:\Programming\Borland\Delphi\Packages\Multimedia;E:\Programming\Borland\Delphi\Packages\Special;E:\Programming\Borland\Delphi\Packages\ui;E:\Programming\Borland\Delphi\Packages\ImageLib;E:\Programming\Borland\Delphi7\Packages\Indy 9;E:\Programming\Borland\Delphi7\Packages\DIB;E:\Programming\Borland\Delphi7\Packages\fpiette\ics\Delphi\Vc32;E:\Programming\Borland\Delphi7\Packages\Graphics;E:\Programming\Borland\Delphi7\Libs\Pal_dcp;E:\Programming\Borland\Delphi7\Libs\Pal_bpl;E:\Programming\Borland\Delphi7\Packages\ZipMaster\vcl;E:\Programming\Borland\Delphi\Packages\KOL;E:\Programming\Borland\Delphi7\Packages\synedit\Source;E:\Programming\Borland\Delphi7\Libs\DCU;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\common;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\vcl;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\windows;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\visclx;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\common;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\Resources;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\run"
--R"E:\Programming\Borland\Comuni;E:\Programming\Borland\Comuni\LUA;E:\Programming\Borland\Delphi\Packages\PropEditors;E:\Programming\Borland\Delphi\Packages\ActiveX;E:\Programming\Borland\Delphi\Packages\Altri;E:\Programming\Borland\Delphi\Packages\Compress;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG\Printset;E:\Programming\Borland\Delphi\Packages\Database;E:\Programming\Borland\Delphi\Packages\Inspector;E:\Programming\Borland\Delphi\Packages\Internet;E:\Programming\Borland\Delphi\Packages\Multimedia;E:\Programming\Borland\Delphi\Packages\Special;E:\Programming\Borland\Delphi\Packages\ui;E:\Programming\Borland\Delphi\Packages\ImageLib;E:\Programming\Borland\Delphi7\Packages\Indy 9;E:\Programming\Borland\Delphi7\Packages\DIB;E:\Programming\Borland\Delphi7\Packages\fpiette\ics\Delphi\Vc32;E:\Programming\Borland\Delphi7\Packages\Graphics;E:\Programming\Borland\Delphi7\Libs\Pal_dcp;E:\Programming\Borland\Delphi7\Libs\Pal_bpl;E:\Programming\Borland\Delphi7\Packages\ZipMaster\vcl;E:\Programming\Borland\Delphi\Packages\KOL;E:\Programming\Borland\Delphi7\Packages\synedit\Source;E:\Programming\Borland\Delphi7\Libs\DCU;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\common;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\vcl;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\windows;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\visclx;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\common;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\Resources;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\run"
+-E"..\bin"
+-LE"c:\program files\borland\delphi7\Projects\Bpl"
+-LN"c:\program files\borland\delphi7\Projects\Bpl"
+-U"C:\Prog\Delphi\Component\JEDI\jcl\packages\d7;C:\Prog\Delphi\Component\JEDI\jvcl\packages\d7;C:\Prog\Delphi\Component\SynEdit\Packages;C:\Prog\Delphi\LuaEdit\LuaCore;C:\Prog\Delphi\LuaEdit\RunTimeDebug"
+-O"C:\Prog\Delphi\Component\JEDI\jcl\packages\d7;C:\Prog\Delphi\Component\JEDI\jvcl\packages\d7;C:\Prog\Delphi\Component\SynEdit\Packages;C:\Prog\Delphi\LuaEdit\LuaCore;C:\Prog\Delphi\LuaEdit\RunTimeDebug"
+-I"C:\Prog\Delphi\Component\JEDI\jcl\packages\d7;C:\Prog\Delphi\Component\JEDI\jvcl\packages\d7;C:\Prog\Delphi\Component\SynEdit\Packages;C:\Prog\Delphi\LuaEdit\LuaCore;C:\Prog\Delphi\LuaEdit\RunTimeDebug"
+-R"C:\Prog\Delphi\Component\JEDI\jcl\packages\d7;C:\Prog\Delphi\Component\JEDI\jvcl\packages\d7;C:\Prog\Delphi\Component\SynEdit\Packages;C:\Prog\Delphi\LuaEdit\LuaCore;C:\Prog\Delphi\LuaEdit\RunTimeDebug"
 -DDELPHI_7
 -w-UNSAFE_TYPE
 -w-UNSAFE_CODE

+ 14 - 8
LuaEdit/LuaEditDebug/LuaEditDebug.dof

@@ -17,7 +17,7 @@ M=0
 N=1
 O=1
 P=1
-Q=0
+Q=1
 R=0
 S=0
 T=0
@@ -90,11 +90,11 @@ MaxStackSize=1048576
 ImageBase=4194304
 ExeDescription=
 [Directories]
-OutputDir=
-UnitOutputDir=E:\Programming\Borland\Delphi7\Libs\DCU
-PackageDLLOutputDir=E:\Programming\Borland\Delphi7\Libs\Pal_bpl
-PackageDCPOutputDir=E:\Programming\Borland\Delphi7\Libs\Pal_dcp
-SearchPath=E:\Programming\Borland\Comuni;E:\Programming\Borland\Comuni\LUA;E:\Programming\Borland\Delphi\Packages\PropEditors;E:\Programming\Borland\Delphi\Packages\ActiveX;E:\Programming\Borland\Delphi\Packages\Altri;E:\Programming\Borland\Delphi\Packages\Compress;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG\Printset;E:\Programming\Borland\Delphi\Packages\Database;E:\Programming\Borland\Delphi\Packages\Inspector;E:\Programming\Borland\Delphi\Packages\Internet;E:\Programming\Borland\Delphi\Packages\Multimedia;E:\Programming\Borland\Delphi\Packages\Special;E:\Programming\Borland\Delphi\Packages\ui;E:\Programming\Borland\Delphi\Packages\ImageLib;E:\Programming\Borland\Delphi7\Packages\Indy 9;E:\Programming\Borland\Delphi7\Packages\DIB;E:\Programming\Borland\Delphi7\Packages\fpiette\ics\Delphi\Vc32;E:\Programming\Borland\Delphi7\Packages\Graphics;E:\Programming\Borland\Delphi7\Libs\Pal_dcp;E:\Programming\Borland\Delphi7\Libs\Pal_bpl;E:\Programming\Borland\Delphi7\Packages\ZipMaster\vcl;E:\Programming\Borland\Delphi\Packages\KOL;E:\Programming\Borland\Delphi7\Packages\synedit\Source;E:\Programming\Borland\Delphi7\Libs\DCU;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\common;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\vcl;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\windows;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\visclx;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\common;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\Resources;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\run
+OutputDir=..\bin
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=C:\Prog\Delphi\Component\JEDI\jcl\packages\d7;C:\Prog\Delphi\Component\JEDI\jvcl\packages\d7;C:\Prog\Delphi\Component\SynEdit\Packages;C:\Prog\Delphi\LuaEdit\LuaCore;C:\Prog\Delphi\LuaEdit\RunTimeDebug
 Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;ZMstr7R178
 Conditionals=DELPHI_7
 DebugSourceDirs=
@@ -141,11 +141,17 @@ Item0=DELPHI_7
 Count=1
 Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
 [HistoryLists\hlSearchPath]
-Count=1
-Item0=E:\Programming\Borland\Comuni;E:\Programming\Borland\Comuni\LUA;E:\Programming\Borland\Delphi\Packages\PropEditors;E:\Programming\Borland\Delphi\Packages\ActiveX;E:\Programming\Borland\Delphi\Packages\Altri;E:\Programming\Borland\Delphi\Packages\Compress;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG\Printset;E:\Programming\Borland\Delphi\Packages\Database;E:\Programming\Borland\Delphi\Packages\Inspector;E:\Programming\Borland\Delphi\Packages\Internet;E:\Programming\Borland\Delphi\Packages\Multimedia;E:\Programming\Borland\Delphi\Packages\Special;E:\Programming\Borland\Delphi\Packages\ui;E:\Programming\Borland\Delphi\Packages\ImageLib;E:\Programming\Borland\Delphi7\Packages\Indy 9;E:\Programming\Borland\Delphi7\Packages\DIB;E:\Programming\Borland\Delphi7\Packages\fpiette\ics\Delphi\Vc32;E:\Programming\Borland\Delphi7\Packages\Graphics;E:\Programming\Borland\Delphi7\Libs\Pal_dcp;E:\Programming\Borland\Delphi7\Libs\Pal_bpl;E:\Programming\Borland\Delphi7\Packages\ZipMaster\vcl;E:\Programming\Borland\Delphi\Packages\KOL;E:\Programming\Borland\Delphi7\Packages\synedit\Source;E:\Programming\Borland\Delphi7\Libs\DCU;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\common;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\vcl;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\windows;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\visclx;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\common;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\Resources;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\run
+Count=4
+Item0=C:\Prog\Delphi\Component\JEDI\jcl\packages\d7;C:\Prog\Delphi\Component\JEDI\jvcl\packages\d7;C:\Prog\Delphi\Component\SynEdit\Packages;C:\Prog\Delphi\LuaEdit\LuaCore;C:\Prog\Delphi\LuaEdit\RunTimeDebug
+Item1=C:\Prog\Delphi\Component\JEDI\jcl\packages\d7;C:\Prog\Delphi\Component\JEDI\jvcl\packages\d7;C:\Prog\Delphi\Component\SynEdit\Packages;C:\Prog\Delphi\LuaEdit\LuaCore
+Item2=C:\Prog\Delphi\Component\JEDI\jcl\packages\d7;C:\Prog\Delphi\Component\JEDI\jvcl\packages\d7;C:\Prog\Delphi\Component\SynEdit\Packages
+Item3=E:\Programming\Borland\Comuni;E:\Programming\Borland\Comuni\LUA;E:\Programming\Borland\Delphi\Packages\PropEditors;E:\Programming\Borland\Delphi\Packages\ActiveX;E:\Programming\Borland\Delphi\Packages\Altri;E:\Programming\Borland\Delphi\Packages\Compress;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG;E:\Programming\Borland\Delphi\Packages\MaxMBeppeG\Printset;E:\Programming\Borland\Delphi\Packages\Database;E:\Programming\Borland\Delphi\Packages\Inspector;E:\Programming\Borland\Delphi\Packages\Internet;E:\Programming\Borland\Delphi\Packages\Multimedia;E:\Programming\Borland\Delphi\Packages\Special;E:\Programming\Borland\Delphi\Packages\ui;E:\Programming\Borland\Delphi\Packages\ImageLib;E:\Programming\Borland\Delphi7\Packages\Indy 9;E:\Programming\Borland\Delphi7\Packages\DIB;E:\Programming\Borland\Delphi7\Packages\fpiette\ics\Delphi\Vc32;E:\Programming\Borland\Delphi7\Packages\Graphics;E:\Programming\Borland\Delphi7\Libs\Pal_dcp;E:\Programming\Borland\Delphi7\Libs\Pal_bpl;E:\Programming\Borland\Delphi7\Packages\ZipMaster\vcl;E:\Programming\Borland\Delphi\Packages\KOL;E:\Programming\Borland\Delphi7\Packages\synedit\Source;E:\Programming\Borland\Delphi7\Libs\DCU;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\common;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\vcl;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\windows;E:\Programming\Borland\Delphi\Packages\Jedi\jcl\source\visclx;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\common;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\Resources;E:\Programming\Borland\Delphi\Packages\Jedi\jvcl\run
 [HistoryLists\hlUnitOutputDirectory]
 Count=1
 Item0=E:\Programming\Borland\Delphi7\Libs\DCU
+[HistoryLists\hlOutputDirectorry]
+Count=1
+Item0=..\bin
 [HistoryLists\hlBPLOutput]
 Count=1
 Item0=E:\Programming\Borland\Delphi7\Libs\Pal_bpl

+ 3 - 4
LuaEdit/LuaEditDebug/LuaEditDebug.dpr

@@ -96,7 +96,7 @@ Var
 
 begin
 try
-RTAssert(0, true, 'Freeing', '', 0);
+  RTAssert(0, true, 'Freeing', '', 0);
   MainFormHandle :=frmMain.Handle;
   for i :=0 to Screen.CustomFormCount-1 do
    if (Screen.CustomForms[0]<>Nil) then
@@ -109,8 +109,7 @@ RTAssert(0, true, 'Freeing', '', 0);
      Sleep(100);
   Until not(IsWindow(MainFormHandle));
 
-RTAssert(0, true, 'Free Done', '', 0);
-
+  RTAssert(0, true, 'Free Done', '', 0);
 except
    RTAssert(0, true, 'Free exception', '', 0);
 
@@ -139,7 +138,7 @@ Var
    pLuaUnit: TLuaUnit;
 
 begin
-   RTAssert(0, true, 'Starting '+Filename, '', 0);
+     RTAssert(0, true, 'Starting '+Filename, '', 0);
      Result :=LUA_ERRRUN;
      MainForm :=LuaGetTableLightUserData(LState, LUA_REGISTRYINDEX, 'LuaEditDebug_MainForm');
      if (MainForm<>Nil)

+ 2 - 1
LuaEdit/LuaStack.dfm

@@ -16,6 +16,7 @@ object frmLuaStack: TfrmLuaStack
   Font.Style = []
   FormStyle = fsStayOnTop
   OldCreateOrder = False
+  Position = poOwnerFormCenter
   OnActivate = FormActivate
   PixelsPerInch = 96
   TextHeight = 13
@@ -23,7 +24,7 @@ object frmLuaStack: TfrmLuaStack
     Left = 0
     Top = 0
     Width = 442
-    Height = 116
+    Height = 123
     Align = alClient
     Font.Charset = ANSI_CHARSET
     Font.Color = clWindowText

File diff suppressed because it is too large
+ 1733 - 1554
LuaEdit/Main.dfm


File diff suppressed because it is too large
+ 397 - 117
LuaEdit/Main.pas


+ 40 - 18
LuaEdit/ProjectTree.dfm

@@ -1,11 +1,13 @@
 object frmProjectTree: TfrmProjectTree
   Left = 501
   Top = 320
-  Width = 271
-  Height = 230
+  Width = 250
+  Height = 200
   BorderStyle = bsSizeToolWin
   Caption = 'Project Tree'
   Color = clBtnFace
+  Constraints.MinHeight = 200
+  Constraints.MinWidth = 250
   DockSite = True
   DragKind = dkDock
   DragMode = dmAutomatic
@@ -22,32 +24,52 @@ object frmProjectTree: TfrmProjectTree
   object Panel1: TPanel
     Left = 0
     Top = 0
-    Width = 263
-    Height = 196
+    Width = 242
+    Height = 173
     Align = alClient
     BevelOuter = bvNone
     TabOrder = 0
-    object trvProjectTree: TJvDotNetTreeView
+    object vstProjectTree: TVirtualStringTree
       Left = 0
       Top = 0
-      Width = 263
-      Height = 196
+      Width = 242
+      Height = 173
       Align = alClient
+      Header.AutoSizeIndex = 1
+      Header.Font.Charset = DEFAULT_CHARSET
+      Header.Font.Color = clWindowText
+      Header.Font.Height = -11
+      Header.Font.Name = 'MS Sans Serif'
+      Header.Font.Style = []
+      Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoVisible]
+      Header.Style = hsFlatButtons
       Images = imlProjectTree
-      Indent = 19
       PopupMenu = ppmProjectTree
-      ReadOnly = True
-      RowSelect = True
       TabOrder = 0
-      OnAdvancedCustomDrawItem = trvProjectTreeAdvancedCustomDrawItem
-      OnDblClick = trvProjectTreeDblClick
-      OnMouseDown = trvProjectTreeMouseDown
-      LineColor = 13160660
+      TreeOptions.MiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toReportMode, toToggleOnDblClick, toWheelPanning]
+      OnAfterItemPaint = vstProjectTreeAfterItemPaint
+      OnDblClick = vstProjectTreeDblClick
+      OnGetText = vstProjectTreeGetText
+      OnPaintText = vstProjectTreePaintText
+      OnGetImageIndex = vstProjectTreeGetImageIndex
+      OnGetNodeDataSize = vstProjectTreeGetNodeDataSize
+      OnMouseDown = vstProjectTreeMouseDown
+      Columns = <
+        item
+          Position = 0
+          Width = 100
+          WideText = 'Files'
+        end
+        item
+          Position = 1
+          Width = 138
+          WideText = 'Path'
+        end>
     end
   end
   object imlProjectTree: TImageList
-    Left = 8
-    Top = 9
+    Left = 40
+    Top = 41
     Bitmap = {
       494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000001000000001002000000000000010
@@ -190,8 +212,8 @@ object frmProjectTree: TfrmProjectTree
   end
   object ppmProjectTree: TPopupMenu
     OnPopup = ppmProjectTreePopup
-    Left = 40
-    Top = 8
+    Left = 8
+    Top = 72
     object ActivateSelectedProject1: TMenuItem
       Action = frmMain.actActiveSelPrj
     end

+ 218 - 97
LuaEdit/ProjectTree.pas

@@ -5,9 +5,17 @@ interface
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, ComCtrls, CommCtrl, ExtCtrls, ImgList, Menus, JvComponent,
-  JvDockControlForm, JvExComCtrls, JvComCtrls, JvDotNetControls;
+  JvDockControlForm, JvExComCtrls, JvComCtrls, JvDotNetControls, Main,
+  VirtualTrees;
 
 type
+  PProjectTreeData = ^TProjectTreeData;
+  TProjectTreeData = record
+    pLuaUnit: TLuaUnit;
+    pLuaPrj: TLuaProject;
+    ActiveProject: Boolean;
+  end;
+
   TfrmProjectTree = class(TForm)
     Panel1: TPanel;
     imlProjectTree: TImageList;
@@ -16,17 +24,20 @@ type
     N1: TMenuItem;
     UnloadFileProject1: TMenuItem;
     JvDockClient1: TJvDockClient;
-    trvProjectTree: TJvDotNetTreeView;
     N2: TMenuItem;
     AddUnittoProject1: TMenuItem;
     RemoveUnitFromProject1: TMenuItem;
     Options1: TMenuItem;
-    procedure trvProjectTreeDblClick(Sender: TObject);
-    procedure trvProjectTreeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
-    procedure trvProjectTreeAdvancedCustomDrawItem(Sender: TCustomTreeView;
-      Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean);
+    vstProjectTree: TVirtualStringTree;
     procedure UnloadFileProject1Click(Sender: TObject);
     procedure ppmProjectTreePopup(Sender: TObject);
+    procedure vstProjectTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
+    procedure vstProjectTreeGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
+    procedure vstProjectTreeGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
+    procedure vstProjectTreePaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType);
+    procedure vstProjectTreeDblClick(Sender: TObject);
+    procedure vstProjectTreeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+    procedure vstProjectTreeAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
   private
     { Private declarations }
   public
@@ -39,34 +50,43 @@ var
 
 implementation
 
-uses Main;
-
 {$R *.dfm}
 
-procedure TfrmProjectTree.trvProjectTreeDblClick(Sender: TObject);
+procedure TfrmProjectTree.vstProjectTreeDblClick(Sender: TObject);
 var
+  pNode: PVirtualNode;
+  pData: PProjectTreeData;
   pLuaUnit: TLuaUnit;
 begin
-  if (Assigned(frmProjectTree.trvProjectTree.Selected) and ((frmProjectTree.trvProjectTree.Selected.ImageIndex = 1) and (frmProjectTree.trvProjectTree.Selected.SelectedIndex = 1))) then
+  pNode := vstProjectTree.GetFirstSelected;
+
+  if Assigned(pNode) then
   begin
-    pLuaUnit := TLuaUnit(frmProjectTree.trvProjectTree.Selected.Data);
-    
-    if pLuaUnit.IsLoaded then
+    pData := vstProjectTree.GetNodeData(pNode);
+
+    if Assigned(pData.pLuaUnit) then
     begin
-      if LuaOpenedUnits.IndexOf(pLuaUnit) = -1 then
-      begin
-        frmMain.AddFileInTab(pLuaUnit);
-      end
-      else
+      pLuaUnit := pData.pLuaUnit;
+
+      if pLuaUnit.IsLoaded then
       begin
-        frmMain.GetAssociatedTab(pLuaUnit).Selected := True;
-        
-        if pLuaUnit.HasChanged then
-          frmMain.stbMain.Panels[2].Text := 'Modified'
+        if LuaOpenedUnits.IndexOf(pLuaUnit) = -1 then
+        begin
+          // Insert new tab in the page control to view the requested unit
+          frmMain.AddFileInTab(pLuaUnit);
+        end
         else
-          frmMain.stbMain.Panels[2].Text := '';
+        begin
+          // Activate the tab associated to the requested unit
+          frmMain.jvUnitBar.SelectedTab := frmMain.GetAssociatedTab(pLuaUnit);
 
-        frmMain.synEditClick(pLuaUnit.synUnit);
+          if pLuaUnit.HasChanged then
+            frmMain.stbMain.Panels[2].Text := 'Modified'
+          else
+            frmMain.stbMain.Panels[2].Text := '';
+
+          frmMain.synEditClick(pLuaUnit.synUnit);
+        end;
       end;
     end;
   end;
@@ -77,20 +97,23 @@ end;
 procedure TfrmProjectTree.BuildProjectTree(HandleNotifier: Boolean);
 var
   pTempPrj: TLuaProject;
-  pNewPrjNode, pNewNode: TTreeNode;
-  x, y: integer;
+  pNewPrjNode, pNewNode, pSingleUnitLastNode: PVirtualNode;
+  pData: PProjectTreeData;
+  x, y: Integer;
 begin
-  pNewPrjNode := nil;
+  // Initialize stuff
   pNewNode := nil;
+  pSingleUnitLastNode := nil;
 
+  // If the changes notifier is handled, we stop it while building the tree
   if HandleNotifier then
   begin
     frmMain.jvchnNotifier.Active := False;
     frmMain.jvchnNotifier.Notifications.Clear;
   end;
 
-  frmProjectTree.trvProjectTree.Items.BeginUpdate;
-  frmProjectTree.trvProjectTree.Items.Clear;
+  vstProjectTree.BeginUpdate;
+  vstProjectTree.Clear;
 
   for x := 0 to LuaProjects.Count - 1 do
   begin
@@ -98,91 +121,70 @@ begin
 
     if pTempPrj.sPrjName <> '[@@SingleUnits@@]' then
     begin
-      // Adding single unit (projectless) to the tree
-      pNewPrjNode := frmProjectTree.trvProjectTree.Items.Add(nil, pTempPrj.sPrjName + ' (' + pTempPrj.sPrjPath + ')');
-      pNewPrjNode.Data := pTempPrj;
-      pNewPrjNode.ImageIndex := 0;
-      pNewPrjNode.SelectedIndex := 0;
+      // Create the node
+      pNewPrjNode := vstProjectTree.AddChild(vstProjectTree.RootNode);
+      pData := vstProjectTree.GetNodeData(pNewPrjNode);
+      pData.pLuaUnit := nil;
+      pData.pLuaPrj := pTempPrj;
+      pData.ActiveProject := (pTempPrj = ActiveProject);
 
       // Adding project root to change notifier...
       if ((not pTempPrj.IsNew) and HandleNotifier) then
         frmMain.AddToNotifier(ExtractFileDir(pTempPrj.sPrjPath));
-    end;
+    end
+    else
+      pNewPrjNode := pSingleUnitLastNode;
 
     for y := 0 to pTempPrj.lstUnits.Count - 1 do
     begin
-      pNewNode := frmProjectTree.trvProjectTree.Items.AddChild(pNewPrjNode, ExtractFileName(TLuaUnit(pTempPrj.lstUnits.Items[y]).sName) + '   (' + TLuaUnit(pTempPrj.lstUnits.Items[y]).sUnitPath + ')');
-      if TLuaUnit(pTempPrj.lstUnits.Items[y]).IsLoaded then
-      begin
-        pNewNode.ImageIndex := 1;
-        pNewNode.SelectedIndex := 1;
-      end
+      // Adding single unit (projectless) to the tree
+      if pTempPrj.sPrjName = '[@@SingleUnits@@]' then
+        pNewNode := vstProjectTree.InsertNode(pNewPrjNode, amInsertAfter)
       else
-      begin
-        pNewNode.ImageIndex := 2;
-        pNewNode.SelectedIndex := 2;
-      end;
+        pNewNode := vstProjectTree.AddChild(pNewPrjNode);
+
+      // Update last single unit node
+      pSingleUnitLastNode := pNewNode;
 
-      pNewNode.Data := TLuaUnit(pTempPrj.lstUnits.Items[y]);
+      // Create the node
+      pData := vstProjectTree.GetNodeData(pNewNode);
+      pData.pLuaUnit := TLuaUnit(pTempPrj.lstUnits.Items[y]);
+      pData.pLuaPrj := nil;
+      pData.ActiveProject := False;
 
       // Adding unit root to change notifier...
       if ((not TLuaUnit(pTempPrj.lstUnits.Items[y]).IsNew) and HandleNotifier) then
         frmMain.AddToNotifier(ExtractFileDir(TLuaUnit(pTempPrj.lstUnits.Items[y]).sUnitPath));
     end;
-
-    if Assigned(pNewPrjNode) then
-      pNewPrjNode.Expand(True);
   end;
 
-  frmProjectTree.trvProjectTree.Items.EndUpdate;
+  vstProjectTree.EndUpdate;
+
+  // Set back on the changes notifier if required
   if ((frmMain.jvchnNotifier.Notifications.Count > 0) and HandleNotifier) then
     frmMain.jvchnNotifier.Active := True;
 end;
 
-procedure TfrmProjectTree.trvProjectTreeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
-begin
-  frmMain.CheckButtons;
-end;
-
-procedure TfrmProjectTree.trvProjectTreeAdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean);
-begin
-  if Stage = cdPrepaint then
-  begin
-    Sender.Canvas.Font.Style := [];
-
-    if ((Node.ImageIndex = 2) or (Node.SelectedIndex = 2)) then
-    begin
-      if not TLuaUnit(Node.Data).IsLoaded then
-      begin
-        Sender.Canvas.Font.Color := clGray;
-      end;
-    end
-    else if ((Node.ImageIndex = 0) or (Node.SelectedIndex = 0)) then
-    begin
-      if TLuaProject(Node.Data) = ActiveProject then
-      begin
-        Sender.Canvas.Font.Style := [fsBold];
-        frmMain.Caption := 'LuaEdit - ' + TLuaProject(Node.Data).sPrjName;
-      end;
-    end;
-  end;
-end;
-
 procedure TfrmProjectTree.UnloadFileProject1Click(Sender: TObject);
 var
   pLuaPrj: TLuaProject;
   pLuaUnit: TLuaUnit;
   Answer, x: Integer;
   UnitsToDelete: TList;
+  pNode: PVirtualNode;
+  pData: PProjectTreeData;
 begin
-  if Assigned(trvProjectTree.Selected) then
+  pNode := vstProjectTree.GetFirstSelected;
+
+  if Assigned(pNode) then
   begin
+    pData := vstProjectTree.GetNodeData(pNode);
     UnitsToDelete := TList.Create;
-    
+
     // Case where the selected file was a project
-    if ((trvProjectTree.Selected.ImageIndex = 0) or (trvProjectTree.Selected.SelectedIndex = 0)) then
+    if Assigned(pData.pLuaPrj) then
     begin
-      pLuaPrj := TLuaProject(trvProjectTree.Selected.Data);
+      pLuaPrj := pData.pLuaPrj;
 
       // Ssaving any new or modified project's files
       for x := 0 to pLuaPrj.lstUnits.Count - 1 do
@@ -227,9 +229,9 @@ begin
         end;
       end;
     end
-    else if ((trvProjectTree.Selected.ImageIndex = 1) or (trvProjectTree.Selected.SelectedIndex = 1)) then
+    else if Assigned(pData.pLuaUnit) then
     begin
-      pLuaUnit := TLuaUnit(trvProjectTree.Selected.Data);
+      pLuaUnit := pData.pLuaUnit;
 
       if pLuaUnit.pPrjOwner.sPrjName = '[@@SingleUnits@@]' then
       begin
@@ -294,28 +296,147 @@ end;
 
 procedure TfrmProjectTree.ppmProjectTreePopup(Sender: TObject);
 var
-  pNode: TTreeNode;
+  pNode: PVirtualNode;
+  pData: PProjectTreeData;
 begin
   // set all menus status initially to false
   UnloadFileProject1.Enabled := False;
   AddUnittoProject1.Enabled := False;
   RemoveUnitFromProject1.Enabled := False;
   Options1.Enabled := False;
+  pNode := vstProjectTree.GetFirstSelected;
 
   // Only if a menu is selected
-  if Assigned(trvProjectTree.Selected) then
+  if Assigned(pNode) then
   begin
-    // Only if data is attached to the selected node
-    if Assigned(trvProjectTree.Selected.Data) then
+    // Retreive data from selected node
+    pData := vstProjectTree.GetNodeData(pNode);
+
+    // setting menu status
+    AddUnitToProject1.Enabled := (pData.pLuaPrj = ActiveProject);
+    RemoveUnitFromProject1.Enabled := (pData.pLuaPrj = ActiveProject);
+    Options1.Enabled := (pData.pLuaPrj = ActiveProject);
+    UnloadFileProject1.Enabled := (((Assigned(pData.pLuaUnit)) and (pNode.Parent = vstProjectTree.RootNode)) or (Assigned(pData.pLuaPrj)));
+  end;
+end;
+
+procedure TfrmProjectTree.vstProjectTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
+var
+  pData: PProjectTreeData;
+begin
+  // Set text to display for all nodes
+  if TextType = ttNormal then
+  begin
+    case Column of
+      0:
+      begin
+        pData := Sender.GetNodeData(Node);
+        if Assigned(pData.pLuaPrj) then
+          CellText := pData.pLuaPrj.sPrjName
+        else
+          CellText := pData.pLuaUnit.sName;
+      end;
+      1:
+      begin
+        pData := Sender.GetNodeData(Node);
+        if Assigned(pData.pLuaPrj) then
+          CellText := pData.pLuaPrj.sPrjPath
+        else
+          CellText := pData.pLuaUnit.sUnitPath;
+      end;
+    end;
+  end;
+end;
+
+procedure TfrmProjectTree.vstProjectTreePaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType);
+var
+  pData: PProjectTreeData;
+begin
+  pData := Sender.GetNodeData(Node);
+
+  if Assigned(pData.pLuaPrj) then
+  begin
+    // Set bold style on the active project node
+    if pData.ActiveProject then
+    begin
+      TargetCanvas.Font.Style := [fsBold];
+      frmMain.Caption := 'LuaEdit - ' + TLuaProject(pData.pLuaPrj).sPrjName;
+    end;
+  end
+  else
+  begin
+    // Set disabled color for non-loaded units
+    if not pData.pLuaUnit.IsLoaded then
+      TargetCanvas.Pen.Color := clInactiveCaption;
+  end;
+end;
+
+procedure TfrmProjectTree.vstProjectTreeGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
+var
+  pData: PProjectTreeData;
+begin
+  // Set image index for all nodes
+  if Column = 0 then
+  begin
+    pData := Sender.GetNodeData(Node);
+
+    if Assigned(pData.pLuaPrj) then
+    begin
+      ImageIndex := 0;
+    end
+    else
+    begin
+      if pData.pLuaUnit.IsLoaded then
+        ImageIndex := 1
+      else
+        ImageIndex := 2;
+    end;
+  end;
+end;
+
+procedure TfrmProjectTree.vstProjectTreeGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
+begin
+  NodeDataSize := SizeOf(TProjectTreeData);
+end;
+
+procedure TfrmProjectTree.vstProjectTreeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+  frmMain.CheckButtons;
+end;
+
+procedure TfrmProjectTree.vstProjectTreeAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
+var
+  pRect: TRect;
+begin
+  pRect := ItemRect;
+  InflateRect(pRect, 0, 1);
+  pRect.Right := pRect.Left + 22;
+  TargetCanvas.Brush.Color := clWhite;
+  TargetCanvas.FillRect(pRect);
+
+  // Draw node button since the noda has some child
+  if ((Node.Parent = Sender.RootNode) and (Node.ChildCount <> 0)) then
+  begin
+    // Draw the frame around the button
+    TargetCanvas.Pen.Color := clBtnShadow;
+    TargetCanvas.Rectangle(5, 4, 14, 13);
+    TargetCanvas.MoveTo(14, 8);
+    TargetCanvas.LineTo(20, 8);
+    TargetCanvas.Pen.Color := clBlack;
+
+    if not (vsExpanded in Node.States) then
+    begin
+      // Draw expandable node button (plus sign)
+      TargetCanvas.MoveTo(7, 8);
+      TargetCanvas.LineTo(12, 8);
+      TargetCanvas.MoveTo(9, 6);
+      TargetCanvas.LineTo(9, 11);
+    end
+    else
     begin
-      // getting selected node
-      pNode := trvProjectTree.Selected;
-
-      // setting menu status
-      AddUnittoProject1.Enabled := (trvProjectTree.Selected.Data = ActiveProject);
-      RemoveUnitFromProject1.Enabled := (trvProjectTree.Selected.Data = ActiveProject);
-      Options1.Enabled := (trvProjectTree.Selected.Data = ActiveProject);
-      UnloadFileProject1.Enabled := (((((pNode.ImageIndex = 1) or (pNode.SelectedIndex = 1)) and (not Assigned(pNode.Parent))) or ((pNode.ImageIndex = 0) or (pNode.SelectedIndex = 0))));
+      // Draw non-expandable node button (minus sign)
+      TargetCanvas.MoveTo(7, 8);
+      TargetCanvas.LineTo(12, 8);
     end;
   end;
 end;

+ 33 - 4
LuaEdit/Replace.dfm

@@ -1,6 +1,6 @@
 object frmReplace: TfrmReplace
-  Left = 249
-  Top = 113
+  Left = 441
+  Top = 192
   BorderIcons = [biSystemMenu]
   BorderStyle = bsSingle
   Caption = 'Replace Text'
@@ -12,6 +12,35 @@ object frmReplace: TfrmReplace
   Font.Height = -11
   Font.Name = 'MS Sans Serif'
   Font.Style = []
+  Icon.Data = {
+    0000010001001010000001001800680300001600000028000000100000002000
+    0000010018000000000040030000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000C6C6C6000000000000
+    000000000000000000000000000000C6C6C60000000000000000000000000000
+    0000000000000000000000000084848400000000000000000084848400000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    00000000000000C6C6C6000000000000000000000000C6C6C600000000000000
+    0000000000000000000000000000000000000000000000C6C6C6000000000000
+    000000000000C6C6C60000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000008484840000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    000000000000000000000000000000000000000000000000000000000000B6E7
+    0000B76B000084270000B76B0000CEE70000FFFF0000C7C70000C7C70000C387
+    0000C0070000C0070000C0070000C0070000C0070000F39F0000F39F0000}
   OldCreateOrder = False
   Position = poOwnerFormCenter
   OnCreate = FormCreate
@@ -21,9 +50,9 @@ object frmReplace: TfrmReplace
   object Label1: TLabel
     Left = 8
     Top = 12
-    Width = 52
+    Width = 49
     Height = 13
-    Caption = '&Search for:'
+    Caption = '&Find what:'
   end
   object Label2: TLabel
     Left = 8

+ 20 - 2
LuaEdit/Rings.dfm

@@ -23,7 +23,7 @@ object frmRings: TfrmRings
     Left = 0
     Top = 0
     Width = 335
-    Height = 237
+    Height = 244
     Align = alClient
     Pages = <
       item
@@ -62,8 +62,26 @@ object frmRings: TfrmRings
         Font.Style = []
         ParentColor = True
         TopButtonIndex = 0
+      end
+      item
+        Alignment = taLeftJustify
+        Buttons = <>
+        ButtonSize = olbsLarge
+        Caption = 'Internal Browser History'
+        DownFont.Charset = DEFAULT_CHARSET
+        DownFont.Color = clWindowText
+        DownFont.Height = -11
+        DownFont.Name = 'MS Sans Serif'
+        DownFont.Style = []
+        Font.Charset = DEFAULT_CHARSET
+        Font.Color = clWhite
+        Font.Height = -11
+        Font.Name = 'MS Sans Serif'
+        Font.Style = []
+        ParentColor = True
+        TopButtonIndex = 0
       end>
-    ActivePageIndex = 1
+    ActivePageIndex = 2
     ThemedBackground = False
     OnCustomDraw = jvRingsCustomDraw
     Font.Charset = DEFAULT_CHARSET

+ 2 - 2
LuaEdit/Rings.pas

@@ -4,8 +4,8 @@ interface
 
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
-  Dialogs, JvOutlookBar, JvDockControlForm,
-  ExtCtrls, JvNavigationPane, JvJVCLUtils, JvComponent, JvExControls;
+  Dialogs, JvOutlookBar, JvDockControlForm, JvExControls,
+  ExtCtrls, JvNavigationPane, JvJVCLUtils, JvComponent;
 
 type
   TfrmRings = class(TForm)

+ 145 - 0
LuaEdit/SIFReport.dfm

@@ -0,0 +1,145 @@
+object frmSIFReport: TfrmSIFReport
+  Left = 458
+  Top = 255
+  BorderStyle = bsToolWindow
+  Caption = 'Find in Files Report'
+  ClientHeight = 150
+  ClientWidth = 247
+  Color = clBtnFace
+  Font.Charset = DEFAULT_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -11
+  Font.Name = 'MS Sans Serif'
+  Font.Style = []
+  FormStyle = fsStayOnTop
+  OldCreateOrder = False
+  Position = poOwnerFormCenter
+  OnPaint = FormPaint
+  OnShow = FormShow
+  PixelsPerInch = 96
+  TextHeight = 13
+  object Label1: TLabel
+    Left = 8
+    Top = 8
+    Width = 81
+    Height = 13
+    Caption = 'Last/Current File:'
+  end
+  object lblCurrentFile: TJvLabel
+    Left = 8
+    Top = 24
+    Width = 233
+    Height = 13
+    AutoSize = False
+    Color = clBtnFace
+    ParentColor = False
+    AutoOpenURL = False
+    HotTrackFont.Charset = DEFAULT_CHARSET
+    HotTrackFont.Color = clWindowText
+    HotTrackFont.Height = -11
+    HotTrackFont.Name = 'MS Sans Serif'
+    HotTrackFont.Style = []
+    TextEllipsis = tePathEllipsis
+  end
+  object Label4: TLabel
+    Left = 8
+    Top = 48
+    Width = 66
+    Height = 13
+    Caption = 'Match Found:'
+  end
+  object Label5: TLabel
+    Left = 128
+    Top = 48
+    Width = 74
+    Height = 13
+    Caption = 'Scanned Lines:'
+  end
+  object Label3: TLabel
+    Left = 128
+    Top = 88
+    Width = 66
+    Height = 13
+    Caption = 'Skipped Files:'
+  end
+  object Label2: TLabel
+    Left = 8
+    Top = 88
+    Width = 70
+    Height = 13
+    Caption = 'Scanned Files:'
+  end
+  object lblMatchFound: TJvLabel
+    Left = 8
+    Top = 64
+    Width = 113
+    Height = 13
+    AutoSize = False
+    Color = clBtnFace
+    ParentColor = False
+    AutoOpenURL = False
+    HotTrackFont.Charset = DEFAULT_CHARSET
+    HotTrackFont.Color = clWindowText
+    HotTrackFont.Height = -11
+    HotTrackFont.Name = 'MS Sans Serif'
+    HotTrackFont.Style = []
+    TextEllipsis = tePathEllipsis
+  end
+  object lblScannedLines: TJvLabel
+    Left = 128
+    Top = 64
+    Width = 113
+    Height = 13
+    AutoSize = False
+    Color = clBtnFace
+    ParentColor = False
+    AutoOpenURL = False
+    HotTrackFont.Charset = DEFAULT_CHARSET
+    HotTrackFont.Color = clWindowText
+    HotTrackFont.Height = -11
+    HotTrackFont.Name = 'MS Sans Serif'
+    HotTrackFont.Style = []
+    TextEllipsis = tePathEllipsis
+  end
+  object lblScannedFiles: TJvLabel
+    Left = 8
+    Top = 104
+    Width = 113
+    Height = 13
+    AutoSize = False
+    Color = clBtnFace
+    ParentColor = False
+    AutoOpenURL = False
+    HotTrackFont.Charset = DEFAULT_CHARSET
+    HotTrackFont.Color = clWindowText
+    HotTrackFont.Height = -11
+    HotTrackFont.Name = 'MS Sans Serif'
+    HotTrackFont.Style = []
+    TextEllipsis = tePathEllipsis
+  end
+  object lblSkippedFiles: TJvLabel
+    Left = 128
+    Top = 104
+    Width = 113
+    Height = 13
+    AutoSize = False
+    Color = clBtnFace
+    ParentColor = False
+    AutoOpenURL = False
+    HotTrackFont.Charset = DEFAULT_CHARSET
+    HotTrackFont.Color = clWindowText
+    HotTrackFont.Height = -11
+    HotTrackFont.Name = 'MS Sans Serif'
+    HotTrackFont.Style = []
+    TextEllipsis = tePathEllipsis
+  end
+  object chkKeepReportOpened: TCheckBox
+    Left = 8
+    Top = 128
+    Width = 233
+    Height = 17
+    Caption = 'Keep this window opened when finished'
+    TabOrder = 0
+    OnClick = chkKeepReportOpenedClick
+  end
+end

+ 147 - 0
LuaEdit/SIFReport.pas

@@ -0,0 +1,147 @@
+unit SIFReport;
+
+interface
+
+uses
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+  Dialogs, StdCtrls, ExtCtrls, JvExExtCtrls, JvShape, JvExForms,
+  JvCustomItemViewer, JvOwnerDrawViewer, JvComponent, JvPanel,
+  JvExControls, JvLabel;
+
+type
+  TfrmSIFReport = class(TForm)
+    Label1: TLabel;
+    lblCurrentFile: TJvLabel;
+    Label4: TLabel;
+    Label5: TLabel;
+    Label3: TLabel;
+    Label2: TLabel;
+    chkKeepReportOpened: TCheckBox;
+    lblMatchFound: TJvLabel;
+    lblScannedLines: TJvLabel;
+    lblScannedFiles: TJvLabel;
+    lblSkippedFiles: TJvLabel;
+    procedure FormPaint(Sender: TObject);
+    procedure FormShow(Sender: TObject);
+    procedure chkKeepReportOpenedClick(Sender: TObject);
+  private
+    { Private declarations }
+    FCurrentFile: String;
+    FMatchFound: Integer;
+    FScannedLines: Integer;
+    FScannedFiles: Integer;
+    FSkippedFiles: Integer;
+
+    procedure UpdateUI;
+    procedure SetCurrentFile(FileName: String);
+    procedure SetMatchFound(Count: Integer);
+    procedure SetScannedLines(Count: Integer);
+    procedure SetScannedFiles(Count: Integer);
+    procedure SetSkippedFiles(Count: Integer);
+  public
+    { Public declarations }
+    procedure ResetReport;
+    
+    property CurrentFile: String read FCurrentFile write SetCurrentFile;
+    property MatchFound: Integer read FMatchFound write SetMatchFound;
+    property ScannedLines: Integer read FScannedLines write SetScannedLines;
+    property ScannedFiles: Integer read FScannedFiles write SetScannedFiles;
+    property SkippedFiles: Integer read FSkippedFiles write SetSkippedFiles;
+  end;
+
+var
+  frmSIFReport: TfrmSIFReport;
+
+implementation
+
+uses Main;
+
+{$R *.dfm}
+
+procedure TfrmSIFReport.ResetReport;
+begin
+  FCurrentFile := '[None]';
+  FMatchFound := 0;
+  FScannedLines := 0;
+  FScannedFiles := 0;
+  FSkippedFiles := 0;
+  UpdateUI;
+end;
+
+procedure TfrmSIFReport.UpdateUI;
+var
+  pRect: TRect;
+begin
+  // Initialize stuff...
+  lblCurrentFile.Caption := FCurrentFile;
+  lblMatchFound.Caption := IntToStr(FMatchFound);
+  lblScannedLines.Caption := IntToStr(FScannedLines);
+  lblScannedFiles.Caption := IntToStr(FScannedFiles);
+  lblSkippedFiles.Caption := IntToStr(FSkippedFiles);
+  Self.Canvas.Brush.Color := clInactiveCaption;
+
+  // Draw the frame rectangle to add some style
+  pRect := lblCurrentFile.BoundsRect;
+  InflateRect(pRect, 2, 1);
+  Self.Canvas.FrameRect(pRect);
+  pRect := lblMatchFound.BoundsRect;
+  InflateRect(pRect, 2, 1);
+  Self.Canvas.FrameRect(pRect);
+  pRect := lblScannedLines.BoundsRect;
+  InflateRect(pRect, 2, 1);
+  Self.Canvas.FrameRect(pRect);
+  pRect := lblScannedFiles.BoundsRect;
+  InflateRect(pRect, 2, 1);
+  Self.Canvas.FrameRect(pRect);
+  pRect := lblSkippedFiles.BoundsRect;
+  InflateRect(pRect, 2, 1);
+  Self.Canvas.FrameRect(pRect);
+  Application.ProcessMessages;
+end;
+
+procedure TfrmSIFReport.SetCurrentFile(FileName: String);
+begin
+  FCurrentFile := FileName;
+  UpdateUI;
+end;
+
+procedure TfrmSIFReport.SetMatchFound(Count: Integer);
+begin
+  FMatchFound := Count;
+  UpdateUI;
+end;
+
+procedure TfrmSIFReport.SetScannedLines(Count: Integer);
+begin
+  FScannedLines := Count;
+  UpdateUI;
+end;
+
+procedure TfrmSIFReport.SetScannedFiles(Count: Integer);
+begin
+  FScannedFiles := Count;
+  UpdateUI;
+end;
+
+procedure TfrmSIFReport.SetSkippedFiles(Count: Integer);
+begin
+  FSkippedFiles := Count;
+  UpdateUI;
+end;
+
+procedure TfrmSIFReport.FormPaint(Sender: TObject);
+begin
+  UpdateUI;
+end;
+
+procedure TfrmSIFReport.FormShow(Sender: TObject);
+begin
+  chkKeepReportOpened.Checked := KeepSIFWindowOpened;
+end;
+
+procedure TfrmSIFReport.chkKeepReportOpenedClick(Sender: TObject);
+begin
+  KeepSIFWindowOpened := chkKeepReportOpened.Checked;
+end;
+
+end.

+ 34 - 5
LuaEdit/Search.dfm

@@ -1,9 +1,9 @@
 object frmSearch: TfrmSearch
-  Left = 249
-  Top = 113
+  Left = 450
+  Top = 224
   BorderIcons = [biSystemMenu]
   BorderStyle = bsSingle
-  Caption = 'Search Text'
+  Caption = 'Find Text'
   ClientHeight = 241
   ClientWidth = 329
   Color = clBtnFace
@@ -12,6 +12,35 @@ object frmSearch: TfrmSearch
   Font.Height = -11
   Font.Name = 'MS Sans Serif'
   Font.Style = []
+  Icon.Data = {
+    0000010001001010000001001800680300001600000028000000100000002000
+    0000010018000000000040030000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000FFFFFF000000000000000000000000
+    000000000000000000000000000000FFFFFF0000000000000000000000000000
+    00FFFFFF000000000000000000000000000000000000000000000000000000FF
+    FFFF000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    00000000FFFFFF000000000000000000000000000000000000FFFFFF00000000
+    0000000000000000000000000000000000000000FFFFFF000000000000000000
+    C6C6C6000000000000FFFFFF0000000000000000000000000000000000000000
+    00000000FFFFFF000000000000000000C6C6C6000000000000FFFFFF00000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    00000000000000FFFFFF000000000000000000000000000000FFFFFF00000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000FFFFFF000000
+    000000000000000000000000FFFFFF0000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    000000000000000000000000000000000000000000000000000000000000FFFF
+    0000FFFF000007C1000007C1000007C100000101000000010000000100000001
+    000080030000C1070000C1070000E38F0000E38F0000E38F0000FFFF0000}
   OldCreateOrder = False
   Position = poOwnerFormCenter
   OnCreate = FormCreate
@@ -21,9 +50,9 @@ object frmSearch: TfrmSearch
   object Label1: TLabel
     Left = 8
     Top = 12
-    Width = 52
+    Width = 49
     Height = 13
-    Caption = '&Search for:'
+    Caption = '&Find what:'
   end
   object cboSearchText: TComboBox
     Left = 96

+ 1 - 1
LuaEdit/Stack.pas

@@ -55,7 +55,7 @@ begin
       frmStack.lstCallStack.Items.EndUpdate;
       lstCallStack.Selected.ImageIndex := 1;
       frmMain.PopUpUnitToScreen(pBreakInfo.FileName, pBreakInfo.Line).pDebugInfos.iStackMarker := pBreakInfo.Line+1;
-      pCurrentSynEdit.Refresh;
+      TLuaUnit(frmMain.jvUnitBar.SelectedTab.Data).synUnit.Refresh;
     end;
   end;
 end;

+ 227 - 38
LuaEdit/Watch.dfm

@@ -1,14 +1,13 @@
 object frmWatch: TfrmWatch
   Left = 444
   Top = 272
-  Width = 335
-  Height = 150
+  Width = 300
+  Height = 200
   BorderStyle = bsSizeToolWin
   Caption = 'Watch List'
   Color = clBtnFace
-  DockSite = True
-  DragKind = dkDock
-  DragMode = dmAutomatic
+  Constraints.MinHeight = 200
+  Constraints.MinWidth = 300
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -11
@@ -17,36 +16,8 @@ object frmWatch: TfrmWatch
   FormStyle = fsStayOnTop
   OldCreateOrder = False
   Position = poOwnerFormCenter
-  OnResize = FormResize
-  OnShow = FormShow
   PixelsPerInch = 96
   TextHeight = 13
-  object lvwWatch: TStringGrid
-    Left = 0
-    Top = 0
-    Width = 327
-    Height = 116
-    Align = alClient
-    ColCount = 2
-    Ctl3D = False
-    DefaultColWidth = 150
-    DefaultRowHeight = 16
-    FixedCols = 0
-    RowCount = 99
-    Font.Charset = ANSI_CHARSET
-    Font.Color = clWindowText
-    Font.Height = -13
-    Font.Name = 'Arial'
-    Font.Style = []
-    Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goEditing]
-    ParentCtl3D = False
-    ParentFont = False
-    PopupMenu = ppmWatch
-    TabOrder = 0
-    OnKeyDown = lvwWatchKeyDown
-    OnKeyPress = lvwWatchKeyPress
-    OnSetEditText = lvwWatchSetEditText
-  end
   object memoSwap: TMemo
     Left = 40
     Top = 24
@@ -54,13 +25,88 @@ object frmWatch: TfrmWatch
     Height = 49
     Lines.Strings = (
       'memoSwap')
-    TabOrder = 1
+    TabOrder = 0
     Visible = False
   end
+  object vstWatch: TVirtualStringTree
+    Left = 0
+    Top = 24
+    Width = 292
+    Height = 149
+    Align = alClient
+    EditDelay = 200
+    Header.AutoSizeIndex = 1
+    Header.Font.Charset = DEFAULT_CHARSET
+    Header.Font.Color = clWindowText
+    Header.Font.Height = -11
+    Header.Font.Name = 'MS Sans Serif'
+    Header.Font.Style = []
+    Header.Options = [hoColumnResize, hoDrag, hoVisible]
+    Header.Style = hsFlatButtons
+    LineStyle = lsSolid
+    TabOrder = 1
+    TreeOptions.AutoOptions = [toAutoDropExpand, toAutoScrollOnExpand, toAutoSpanColumns, toAutoTristateTracking, toAutoDeleteMovedNodes]
+    TreeOptions.MiscOptions = [toEditable, toFullRepaintOnResize, toInitOnSave, toReportMode, toToggleOnDblClick, toWheelPanning]
+    TreeOptions.PaintOptions = [toShowButtons, toShowDropmark, toShowHorzGridLines, toShowRoot, toShowTreeLines, toShowVertGridLines, toThemeAware, toUseBlendedImages]
+    OnAfterItemPaint = vstWatchAfterItemPaint
+    OnCreateEditor = vstWatchCreateEditor
+    OnDragOver = vstWatchDragOver
+    OnDragDrop = vstWatchDragDrop
+    OnEdited = vstWatchEdited
+    OnEditing = vstWatchEditing
+    OnGetText = vstWatchGetText
+    OnGetNodeDataSize = vstWatchGetNodeDataSize
+    Columns = <
+      item
+        Position = 0
+        Width = 125
+        WideText = 'Variable'
+      end
+      item
+        Position = 1
+        Width = 400
+        WideText = 'Value'
+      end>
+    WideDefaultText = ''
+  end
+  object tblWatch: TToolBar
+    Left = 0
+    Top = 0
+    Width = 292
+    Height = 24
+    AutoSize = True
+    Flat = True
+    Images = imlWatch
+    ParentShowHint = False
+    ShowHint = True
+    TabOrder = 2
+    object tbtnAddWatch: TToolButton
+      Left = 0
+      Top = 0
+      Hint = 'Add Watch...'
+      ImageIndex = 0
+      OnClick = tbtnAddWatchClick
+    end
+    object ToolButton1: TToolButton
+      Left = 23
+      Top = 0
+      Width = 8
+      Caption = 'ToolButton1'
+      ImageIndex = 1
+      Style = tbsSeparator
+    end
+    object tbtnRefreshWatch: TToolButton
+      Left = 31
+      Top = 0
+      Hint = 'Refresh Watch List'
+      ImageIndex = 1
+      OnClick = tbtnRefreshWatchClick
+    end
+  end
   object ppmWatch: TPopupMenu
     Images = frmMain.imlActions
-    Left = 8
-    Top = 24
+    Left = 48
+    Top = 48
   end
   object JvDockClient1: TJvDockClient
     LRDockWidth = 100
@@ -69,7 +115,150 @@ object frmWatch: TfrmWatch
     ShowHint = True
     EnableCloseButton = True
     DockStyle = frmMain.jvDockVSNet
-    Left = 8
-    Top = 56
+    Left = 80
+    Top = 48
+  end
+  object imlWatch: TImageList
+    Left = 16
+    Top = 48
+    Bitmap = {
+      494C010102000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      0000000000003600000028000000400000001000000001002000000000000010
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF000000000000000000000000008484840084848400000000000000
+      00000000000084848400FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF008484840000000000FF00
+      FF0000000000C6C6C600C6C6C600C6C6C6000000000000000000C6C6C600C6C6
+      C600C6C6C60000000000FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF0000000000FF00FF00FF00
+      FF0000000000FFFFFF00FFFFFF00C6C6C6000000000000000000FFFFFF00FFFF
+      FF00C6C6C60000000000FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF0000000000FF00FF00FF00
+      FF0000000000C6C6C600FFFFFF00C6C6C6000000000000000000C6C6C600FFFF
+      FF00C6C6C60000000000FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF000084000000840000008400000084000000840000FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF0000000000FF00FF000000
+      0000848484000000000000000000000000000000000084848400000000000000
+      00000000000084848400FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFFFF000084
+      0000FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF0084848400000000008484
+      8400FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008484
+      840000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF000084
+      0000FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF0000840000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000084
+      0000FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF0000840000FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF0000840000FFFFFF00FFFFFF000084000000840000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008400
+      000084000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF000084000000840000008400000084000000840000FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008400
+      000084000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0084000000840000008400
+      0000840000008400000084000000FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF000000
+      0000000000000000000000000000FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0084000000840000008400
+      0000840000008400000084000000FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+      0000FFFFFF0000000000FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008400
+      000084000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+      000000000000FF00FF00FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008400
+      000084000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000424D3E000000000000003E000000
+      2800000040000000100000000100010000000000800000000000000000000000
+      000000000000000000000000FFFFFF0000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000}
   end
 end

+ 280 - 23
LuaEdit/Watch.pas

@@ -4,22 +4,60 @@ interface
 
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
-  Dialogs, Grids, ValEdit, ComCtrls, Menus, StdCtrls, ExtCtrls,
-  JvComponent, JvDockControlForm;
+  Dialogs, Grids, ValEdit, ComCtrls, Menus, StdCtrls, ExtCtrls, SynEdit,
+  JvComponent, JvDockControlForm, JvDragDrop, VirtualTrees, ActiveX,
+  ImgList, ToolWin;
 
 type
+  PWatchNodeData = ^TWatchNodeData;
+  TWatchNodeData = record
+    Value: String;
+    Name: String;
+    NestedTableCount: Integer;
+  end;
+
+  // Our own edit link to implement several different node editors.
+  TEditLinker = class(TInterfacedObject, IVTEditLink)
+  private
+    FEdit: TWinControl;        // One of the property editor classes.
+    FTree: TVirtualStringTree; // A back reference to the tree calling.
+    FNode: PVirtualNode;       // The node being edited.
+    FColumn: Integer;          // The column of the node being edited.
+  protected
+    procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+  public
+    destructor Destroy; override;
+
+    function BeginEdit: Boolean; stdcall;
+    function CancelEdit: Boolean; stdcall;
+    function EndEdit: Boolean; stdcall;
+    function GetBounds: TRect; stdcall;
+    function PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; stdcall;
+    procedure SetBounds(R: TRect); stdcall;
+    procedure ProcessMessage(var Message: TMessage); stdcall;
+  end;
+
   TfrmWatch = class(TForm)
-    lvwWatch: TStringGrid;
     ppmWatch: TPopupMenu;
     memoSwap: TMemo;
     JvDockClient1: TJvDockClient;
-    procedure FormShow(Sender: TObject);
-    procedure FormResize(Sender: TObject);
-    procedure lvwWatchKeyPress(Sender: TObject; var Key: Char);
-    procedure lvwWatchKeyDown(Sender: TObject; var Key: Word;
-      Shift: TShiftState);
-    procedure lvwWatchSetEditText(Sender: TObject; ACol, ARow: Integer;
-      const Value: String);
+    vstWatch: TVirtualStringTree;
+    tblWatch: TToolBar;
+    tbtnAddWatch: TToolButton;
+    ToolButton1: TToolButton;
+    tbtnRefreshWatch: TToolButton;
+    imlWatch: TImageList;
+    procedure vstWatchGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
+    procedure vstWatchEditing(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean);
+    procedure vstWatchCreateEditor(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
+    procedure vstWatchGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
+    procedure vstWatchAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
+    procedure vstWatchDragDrop(Sender: TBaseVirtualTree; Source: TObject; DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode);
+    procedure vstWatchDragOver(Sender: TBaseVirtualTree; Source: TObject; Shift: TShiftState; State: TDragState; Pt: TPoint; Mode: TDropMode; var Effect: Integer; var Accept: Boolean);
+    procedure tbtnRefreshWatchClick(Sender: TObject);
+    procedure tbtnAddWatchClick(Sender: TObject);
+    procedure vstWatchEdited(Sender: TBaseVirtualTree; Node: PVirtualNode;
+      Column: TColumnIndex);
   private
     { Private declarations }
   public
@@ -35,31 +73,250 @@ uses Main;
 
 {$R *.dfm}
 
-procedure TfrmWatch.FormShow(Sender: TObject);
+////////////////////////////////////// TEditLinker implementation //////////////////////////////////////
+
+destructor TEditLinker.Destroy;
+
+begin
+  FreeAndNil(FEdit);
+  inherited;
+end;
+
+procedure TEditLinker.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+var
+  CanAdvance: Boolean;
 begin
-  lvwWatch.Rows[0].Strings[0] := 'Key';
-  lvwWatch.Rows[0].Strings[1] := 'Value';
-  lvwWatch.EditorMode := True;
+  CanAdvance := true;
+
+  case Key of
+    VK_ESCAPE:
+      if CanAdvance then
+      begin
+        FTree.CancelEditNode;
+        Key := 0;
+      end;
+    VK_RETURN:
+      if CanAdvance then
+      begin
+        FTree.EndEditNode;
+        Key := 0;
+      end;
+
+    VK_UP,
+    VK_DOWN:
+      begin
+        // Consider special cases before finishing edit mode.
+        CanAdvance := Shift = [];
+
+        if CanAdvance then
+        begin
+          // Forward the keypress to the tree. It will asynchronously change the focused node.
+          PostMessage(FTree.Handle, WM_KEYDOWN, Key, 0);
+          Key := 0;
+        end;
+      end;
+  end;
 end;
 
-procedure TfrmWatch.FormResize(Sender: TObject);
+function TEditLinker.BeginEdit: Boolean;
 begin
-  lvwWatch.ColWidths[1] := lvwWatch.Width - lvwWatch.ColWidths[0] - 22;
+  Result := True;
+  FEdit.Show;
+  FEdit.SetFocus;
 end;
 
-procedure TfrmWatch.lvwWatchKeyPress(Sender: TObject; var Key: Char);
+function TEditLinker.CancelEdit: Boolean;
 begin
-  if lvwWatch.Col = 1 then
-    Key := #0;
+  Result := True;
+  FEdit.Hide;
 end;
 
-procedure TfrmWatch.lvwWatchKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+function TEditLinker.EndEdit: Boolean;
+var
+  Data: PWatchNodeData;
+  Buffer: array[0..1024] of Char;
+  S: String;
 begin
-  if lvwWatch.Col = 1 then
-    Key := 0;
+  Result := True;
+
+  Data := FTree.GetNodeData(FNode);
+  GetWindowText(FEdit.Handle, Buffer, 1024);
+  S := Buffer;
+
+  if S <> Data.Name then
+  begin
+    Data.Name := S;
+    FTree.InvalidateNode(FNode);
+  end;
+
+  FEdit.Hide;
+  FTree.SetFocus;
+end;
+
+procedure TEditLinker.SetBounds(R: TRect);
+var
+  Dummy: Integer;
+begin
+  // Since we don't want to activate grid extensions in the tree (this would influence how the selection is drawn)
+  // we have to set the edit's width explicitly to the width of the column.
+  FTree.Header.Columns.GetColumnBounds(FColumn, Dummy, R.Right);
+  FEdit.BoundsRect := R;
+end;
+
+function TEditLinker.GetBounds: TRect;
+begin
+  Result := FEdit.BoundsRect;
+end;
+
+function TEditLinker.PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean;
+var
+  Data: PWatchNodeData;
+begin
+  Result := True;
+  FTree := Tree as TVirtualStringTree;
+  FNode := Node;
+  FColumn := Column;
+
+  // determine what edit type actually is needed
+  FreeAndNil(FEdit);
+  Data := FTree.GetNodeData(Node);
+  FEdit := TEdit.Create(Tree);
+  with FEdit as TEdit do
+  begin
+    Visible := False;
+    Parent := Tree;
+    AutoSize := False;
+    MaxLength := 1000;
+    Ctl3D := False;
+    Text := Data.Name;
+    OnKeyDown := EditKeyDown;
+  end;
+end;
+
+procedure TEditLinker.ProcessMessage(var Message: TMessage);
+begin
+  // Do nothing
+end;
+
+////////////////////////////////////// TfrmWatch implementation //////////////////////////////////////
+
+procedure TfrmWatch.vstWatchCreateEditor(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
+begin
+  // Create the editor class wich will interact with the user when editing a variable name
+  EditLink := TEditLinker.Create;
+end;
+
+// This is called whenever the tree needs to get the text for the current cell
+procedure TfrmWatch.vstWatchGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
+var
+  pData: PWatchNodeData;
+begin
+  if TextType = ttNormal then
+  begin
+    case Column of
+      0:
+      begin
+        pData := Sender.GetNodeData(Node);
+        CellText := pData.Name;
+      end;
+      1:
+      begin
+        pData := Sender.GetNodeData(Node);
+        CellText := pData.Value
+      end;
+    end;
+  end;
+end;
+
+procedure TfrmWatch.vstWatchEditing(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean);
+begin
+  Allowed := ((Column = 0) and (Node.Parent = Sender.RootNode));
+end;
+
+procedure TfrmWatch.vstWatchGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
+begin
+  NodeDataSize := SizeOf(TWatchNodeData);
+end;
+
+procedure TfrmWatch.vstWatchAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
+var
+  pRect: TRect;
+begin
+  pRect := ItemRect;
+  pRect.Bottom := pRect.Bottom - 1;
+  pRect.Right := pRect.Left + 22;
+  TargetCanvas.Brush.Color := clWhite;
+  TargetCanvas.FillRect(pRect);
+
+  // Draw node button since the noda has some child
+  if ((Node.Parent = Sender.RootNode) and (Node.ChildCount <> 0)) then
+  begin
+    // Draw the frame around the button
+    TargetCanvas.Pen.Color := clBtnShadow;
+    TargetCanvas.Rectangle(5, 4, 14, 13);
+    TargetCanvas.MoveTo(14, 8);
+    TargetCanvas.LineTo(20, 8);
+    TargetCanvas.Pen.Color := clBlack;
+
+    if not (vsExpanded in Node.States) then
+    begin
+      // Draw expandable node button (plus sign)
+      TargetCanvas.MoveTo(7, 8);
+      TargetCanvas.LineTo(12, 8);
+      TargetCanvas.MoveTo(9, 6);
+      TargetCanvas.LineTo(9, 11);
+    end
+    else
+    begin
+      // Draw non-expandable node button (minus sign)
+      TargetCanvas.MoveTo(7, 8);
+      TargetCanvas.LineTo(12, 8);
+    end;
+  end;
+end;
+
+procedure TfrmWatch.vstWatchDragDrop(Sender: TBaseVirtualTree; Source: TObject; DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode);
+var
+  pNode: PVirtualNode;
+  pData: PWatchNodeData;
+begin
+  // Only works over the list view lvwWatch
+  if ((Sender = vstWatch) and (TSynEdit(Source).SelText <> ''))then
+  begin
+    pNode := Sender.AddChild(Sender.RootNode);
+    pData := Sender.GetNodeData(pNode);
+    pData.Name := TSynEdit(Source).SelText;
+    frmMain.PrintWatch(frmMain.LuaState);
+  end;
+end;
+
+procedure TfrmWatch.vstWatchDragOver(Sender: TBaseVirtualTree; Source: TObject; Shift: TShiftState; State: TDragState; Pt: TPoint; Mode: TDropMode; var Effect: Integer; var Accept: Boolean);
+begin
+  Accept := (Source is TSynEdit);
+end;
+
+procedure TfrmWatch.tbtnRefreshWatchClick(Sender: TObject);
+begin
+  frmMain.PrintWatch(frmMain.LuaState);
+end;
+
+procedure TfrmWatch.tbtnAddWatchClick(Sender: TObject);
+var
+  pNode: PVirtualNode;
+  pData: PWatchNodeData;
+  sVarName: String;
+begin
+  sVarName := InputBox('Add Watch', 'Enter the name of the variable to watch:', 'VarName');
+  if 'VarName' <> sVarName then
+  begin
+    vstWatch.RootNodeCount := vstWatch.RootNodeCount + 1;
+    pNode := vstWatch.GetLast;
+    pData := vstWatch.GetNodeData(pNode);
+    pData.Name := sVarName;
+  end;
 end;
 
-procedure TfrmWatch.lvwWatchSetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String);
+procedure TfrmWatch.vstWatchEdited(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex);
 begin
   frmMain.PrintWatch(frmMain.LuaState);
 end;

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