浏览代码

CH: Added some new features and fixed some bugs

Jean-Francois Goulet 20 年之前
父节点
当前提交
428157c606

+ 48 - 49
LuaEdit/Breakpoints.dfm

@@ -50,7 +50,7 @@ object frmBreakpoints: TfrmBreakpoints
       object tbtnToggle: TToolButton
         Left = 23
         Top = 0
-        Hint = 'Toggle Selected Breakpoint'
+        Hint = 'Enable/Disable Selected Breakpoint'
         ImageIndex = 2
         OnClick = tbtnToggleClick
       end
@@ -155,7 +155,7 @@ object frmBreakpoints: TfrmBreakpoints
     Left = 56
     Top = 80
     Bitmap = {
-      494C01010A000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C01010A000E00040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000004000000001002000000000000040
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -553,121 +553,121 @@ object frmBreakpoints: TfrmBreakpoints
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF0041419D009D9D9D00FF00FF00FF00FF00FF00FF0041414100414141009D9D
-      9D00414141004141410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF0000000000000000000000000000000000000000000000
-      00000000000000000000FF00FF00FF00FF009D9D9D009D9D9D00FF00FF00FF00
+      9D00414141004141410041414100FF00FF00FF00FF00D1D8DB00D1D8DB00D1D8
+      DB00D1D8DB00D1D8DB00D1D8DB00D1D8DB00D1D8DB00D1D8DB00D1D8DB00D1D8
+      DB00D1D8DB00D1D8DB00D1D8DB00FF00FF009D9D9D009D9D9D00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100414141004141
       4100414141004141410041414100FF00FF00FF00FF00FF00FF00FF00FF000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF0041419D0041419D00FF00FF00FF00FF0041414100FFFFFF009D9D9D004141
-      9D00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF0000000000FF00FF00FF00FF009D9D9D009D9D9D009D9D9D00FF00
+      9D00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00A6A6A600D1D8DB00D1D8
+      DB00D1D8DB00D1D8DB00A64C4C00A64C4C00A64C4C00A64C4C00A64C4C00A64C
+      4C00D1D8DB00D1D8DB00D1D8DB00FF00FF009D9D9D009D9D9D009D9D9D00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFFFF00FFFF
       FF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00FF000000
       0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF
       000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF0041419D0041419D009D9D9D00FF00FF00414141009D9D9D0041419D009D9D
-      9D00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF009D9D9D009D9D9D009D9D9D009D9D
+      9D00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00A6A6A600A6A6A600D1D8
+      DB00D1D8DB00D1D8DB004C4C4C00FFFFFF00FFFFFF00FFFFFF00FFFFFF004C4C
+      4C00D1D8DB00D1D8DB00D1D8DB00FF00FF009D9D9D009D9D9D009D9D9D009D9D
       9D00FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFFFF00FFFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       0000FFFF0000840000008400000084000000840000008400000084000000FFFF
       FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004141
       41009D9D9D0041419D0041419D009D9D9D009D9D9D0041419D0041419D00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00
-      FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF009D9D9D009D9D9D009D9D9D004141
+      FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00A6A6A600A6A6A600A6A6
+      A600D1D8DB004C4C4C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF009D9D9D009D9D9D009D9D9D004141
       41004141410041414100414141004141410041414100FFFFFF00FFFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
       FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004141
       4100FFFFFF00CDCDCD0041419D0041419D0041419D0041419D00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00
-      FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF009D9D9D009D9D9D009D9D9D004141
+      FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A6004C4C4C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF009D9D9D009D9D9D009D9D9D004141
       4100CDCDCD00CDCDCD00FFFFFF0041414100FFFFFF0041414100FFFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       00000000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
       FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFF
       FF00FFFFFF004141410041419D0041419D0041419D0041414100FFFFFF004141
-      4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF009D9D9D009D9D9D0041414100CDCD
+      4100FFFFFF0041414100FFFFFF0041414100FF00FF00A6A6A600A6A6A600A6A6
+      A6004C4C4C00D2D2D2004C4C4C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF009D9D9D009D9D9D0041414100CDCD
       CD00CDCDCD00CDCDCD0041414100FFFFFF004141410041414100FFFFFF004141
       4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
       FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFF
       FF00FFFFFF0041419D0041419D0041419D0041419D009D9D9D00FFFFFF004141
-      4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF0000000000FFFF
-      FF00FFFFFF000000000000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF0000000000FFFFFF0000000000FF00FF009D9D9D009D9D9D0041414100CDCD
+      4100FFFFFF0041414100FFFFFF0041414100FF00FF00A6A6A600A6A6A6004C4C
+      4C00D2D2D2004C4C4C004C4C4C00FFFFFF004C4C4C00FFFFFF004C4C4C00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF009D9D9D009D9D9D0041414100CDCD
       CD00CDCDCD00CDCDCD004141410041414100FFFFFF0041414100FFFFFF004141
       4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       0000FFFF0000840000008400000084000000840000008400000084000000FFFF
       FF0000000000FF00FF00FF00FF00FF00FF00FF00FF0041414100FFFFFF004141
       9D0041419D0041419D009D9D9D00FFFFFF0041419D0041419D009D9D9D004141
-      4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00000000000000
-      000000000000FF00FF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF0000000000FFFFFF0000000000FF00FF009D9D9D0041414100CDCDCD004141
+      4100FFFFFF0041414100FFFFFF0041414100FF00FF00A6A6A600A6A6A6004C4C
+      4C004C4C4C00A6A6A6004C4C4C00D2D2D2004C4C4C00FFFFFF004C4C4C00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF009D9D9D0041414100CDCDCD004141
       4100CDCDCD00CDCDCD00CDCDCD00CDCDCD00CDCDCD0041414100FFFFFF004141
       4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF
       000000000000FF00FF00FF00FF00FF00FF0041414100FFFFFF00414141009D9D
       9D00FFFFFF009D9D9D00FFFFFF0041414100FFFFFF0041419D0041419D009D9D
-      9D00FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF0000000000FFFFFF0000000000FF00FF0041414100CDCDCD00414141004141
+      9D00FFFFFF0041414100FFFFFF0041414100FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A6004C4C4C00D2D2D2004C4C4C00FFFFFF004C4C4C00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF0041414100CDCDCD00414141004141
       4100CDCDCD0041414100CDCDCD0041414100CDCDCD0041414100FFFFFF004141
       4100FFFFFF0041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF000000
       0000FFFF0000840000008400000084000000FFFF000000000000000000000000
       000000000000FF00FF00FF00FF00FF00FF004141410041414100FF00FF004141
       4100FFFFFF0041414100FFFFFF0041414100FFFFFF004141410041419D004141
-      9D009D9D9D004141410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF0000000000FFFFFF0000000000FF00FF0041414100414141009D9D9D004141
+      9D009D9D9D004141410041414100FF00FF00FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A6004C4C4C00D2D2D2004C4C4C00D2D2D2004C4C4C00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF0041414100414141009D9D9D004141
       4100CDCDCD0041414100CDCDCD0041414100CDCDCD0041414100FFFFFF004141
       4100FFFFFF004141410041414100FF00FF00FF00FF00FF00FF00FF00FF000000
       0000FFFFFF00FFFF0000FFFFFF00FFFF0000FFFFFF0000000000FFFFFF000000
       0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004141
       4100FFFFFF0041414100FFFFFF0041414100FFFFFF0041414100FF00FF004141
-      41004141410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF000000000000000000FF00FF00FF00FF009D9D9D009D9D9D009D9D9D004141
+      41004141410041414100FF00FF00FF00FF00FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A6004C4C4C00D2D2D2004C4C4C00D2D2D2004C4C4C004C4C
+      4C00D1D8DB00D1D8DB00D1D8DB00FF00FF009D9D9D009D9D9D009D9D9D004141
       4100CDCDCD0041414100CDCDCD0041414100CDCDCD00CDCDCD00414141004141
       4100FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
       0000FFFF0000FFFFFF00FFFF0000FFFFFF00FFFF00000000000000000000FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004141
       4100FFFFFF0041414100FFFFFF0041414100FFFFFF0041414100FF00FF004141
-      410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF0000000000FF00FF00FF00FF00FF00FF009D9D9D009D9D9D009D9D9D004141
+      410041414100FF00FF00FF00FF00FF00FF00FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600A6A6A6004C4C4C004C4C4C00D2D2D2004C4C4C00A6A6
+      A600D1D8DB00D1D8DB00D1D8DB00FF00FF009D9D9D009D9D9D009D9D9D004141
       4100CDCDCD0041414100CDCDCD0041414100CDCDCD00414141009D9D9D004141
       410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
       0000000000000000000000000000000000000000000000000000FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004141
       4100FFFFFF0041414100FFFFFF004141410041414100FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF000000000000000000FFFFFF00000000000000
-      0000FF00FF00FF00FF00FF00FF00FF00FF009D9D9D009D9D9D009D9D9D004141
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600A6A6A600A6A6A6004C4C4C004C4C4C00A6A6A600A6A6
+      A600A6A6A600D1D8DB00D1D8DB00FF00FF009D9D9D009D9D9D009D9D9D004141
       4100CDCDCD0041414100CDCDCD0041414100414141009D9D9D009D9D9D009D9D
       9D009D9D9D009D9D9D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF004141410041414100FFFFFF0041414100FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF009D9D9D009D9D9D009D9D9D009D9D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600D1D8DB00FF00FF009D9D9D009D9D9D009D9D9D009D9D
       9D004141410041414100CDCDCD00414141009D9D9D009D9D9D009D9D9D009D9D
       9D009D9D9D009D9D9D009D9D9D00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF004141410041414100FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF009D9D9D009D9D9D009D9D9D009D9D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600A6A6A600FF00FF009D9D9D009D9D9D009D9D9D009D9D
       9D009D9D9D0041414100414141009D9D9D009D9D9D009D9D9D009D9D9D009D9D
       9D009D9D9D009D9D9D009D9D9D009D9D9D00424D3E000000000000003E000000
       2800000040000000400000000100010000000000000200000000000000000000
@@ -687,8 +687,7 @@ object frmBreakpoints: TfrmBreakpoints
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000000000000}
+      00000000000000000000000000000000}
   end
   object popmBreakpoints: TPopupMenu
     OnPopup = popmBreakpointsPopup

+ 1 - 1
LuaEdit/EditorSettings.dfm

@@ -120,7 +120,7 @@ object frmEditorSettings: TfrmEditorSettings
       Top = 0
       Width = 492
       Height = 375
-      ActivePage = stabColors
+      ActivePage = TabSheet1
       Align = alClient
       TabOrder = 0
       object stabGeneral: TTabSheet

+ 1 - 1
LuaEdit/InternalBrowser.pas

@@ -136,7 +136,7 @@ begin
 
   lstValues.Free;
   pReg.Free;
-  InternalBrowser.GoHome;
+  actHome.Execute;
 end;
 
 procedure TfrmInternalBrowser.FormDestroy(Sender: TObject);

+ 8 - 7
LuaEdit/LuaEdit.dof

@@ -113,9 +113,9 @@ RootDir=
 IncludeVerInfo=1
 AutoIncBuild=1
 MajorVer=2
-MinorVer=3
+MinorVer=4
 Release=1
-Build=903
+Build=944
 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.3.1.903
+FileVersion=2.4.1.944
 InternalName=LuaEdit
 LegalCopyright=LuaEdit Copyright 2004-2005 ©
 LegalTrademarks=
@@ -138,11 +138,12 @@ 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=4
+Count=5
 Item0=.\Syntax;.\LuaCore;C:\Prog\Delphi\Component\XPMenu;C:\Prog\Delphi\Component\SynEdit\Source
-Item1=$(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
-Item2=C:\Prog\Delphi\Component\SynEdit\Packages;C:\Prog\Delphi\Component\SynEdit\Source
-Item3=C:\Prog\Delphi\Component\SynEdit\Packages
+Item1=$(DELPHI)\Lib\Debug;C:\Prog\Delphi\Component\JEDI\jcl\lib\D7\debug;C:\Prog\Delphi\COMPON~1\JEDI\jcl\lib\D7\debug;.\Syntax;.\LuaCore;C:\Prog\Delphi\Component\XPMenu;C:\Prog\Delphi\Component\SynEdit\Source
+Item2=$(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
+Item3=C:\Prog\Delphi\Component\SynEdit\Packages;C:\Prog\Delphi\Component\SynEdit\Source
+Item4=C:\Prog\Delphi\Component\SynEdit\Packages
 [HistoryLists\hlOutputDirectorry]
 Count=1
 Item0=.\bin

+ 1 - 1
LuaEdit/LuaEdit.dpr

@@ -117,7 +117,7 @@ begin
             pLuaUnit := frmMain.AddFileInProject(FileName, False, LuaSingleUnits);
             pLuaUnit.IsLoaded := True;
             frmMain.AddFileInTab(pLuaUnit);
-            frmMain.MonitorFile(FileName);
+            frmMain.MonitorFileToRecent(FileName);
           end;
         end
         else if ExtractFileExt(FileName) = '.lpr' then

二进制
LuaEdit/LuaEdit.res


+ 167 - 90
LuaEdit/Main.dfm

@@ -147,7 +147,7 @@ object frmMain: TfrmMain
     object tlbRun: TToolBar
       Left = 320
       Top = 2
-      Width = 214
+      Width = 260
       Height = 22
       Align = alLeft
       AutoSize = True
@@ -229,9 +229,19 @@ object frmMain: TfrmMain
         ImageIndex = 34
         Style = tbsSeparator
       end
-      object ToolButton21: TToolButton
+      object ToolButton27: TToolButton
         Left = 191
         Top = 0
+        Action = actAddWatch
+      end
+      object ToolButton26: TToolButton
+        Left = 214
+        Top = 0
+        Action = actEnableDisableBreakpoint
+      end
+      object ToolButton21: TToolButton
+        Left = 237
+        Top = 0
         Action = actToggleBreakpoint
         ParentShowHint = False
         ShowHint = True
@@ -349,95 +359,145 @@ object frmMain: TfrmMain
         Action = actPrint
       end
     end
+    object tlbFind: TToolBar
+      Left = 251
+      Top = 28
+      Width = 102
+      Height = 22
+      Align = alLeft
+      AutoSize = True
+      Caption = 'Find Toolbar'
+      EdgeBorders = []
+      Flat = True
+      Images = imlActions
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 2
+      object ToolButton35: TToolButton
+        Left = 0
+        Top = 0
+        Action = actFind
+        ParentShowHint = False
+        ShowHint = True
+      end
+      object ToolButton36: TToolButton
+        Left = 23
+        Top = 0
+        Action = actFindReplace
+        ParentShowHint = False
+        ShowHint = True
+      end
+      object ToolButton42: TToolButton
+        Left = 46
+        Top = 0
+        Action = actFindInFiles
+        ParentShowHint = False
+        ShowHint = True
+      end
+      object ToolButton37: TToolButton
+        Left = 69
+        Top = 0
+        Width = 10
+        Caption = 'ToolButton4'
+        ImageIndex = 3
+        Style = tbsSeparator
+      end
+      object ToolButton43: TToolButton
+        Left = 79
+        Top = 0
+        Action = actFindAgain
+        ParentShowHint = False
+        ShowHint = True
+      end
+    end
     object tlbEdit: TToolBar
       Left = 11
       Top = 28
-      Width = 272
+      Width = 227
       Height = 22
       Align = alLeft
       AutoSize = True
-      ButtonWidth = 28
       Caption = 'File ToolBar'
       EdgeBorders = []
       Flat = True
       Images = imlActions
       ParentShowHint = False
       ShowHint = True
-      TabOrder = 2
-      object ToolButton35: TToolButton
+      TabOrder = 3
+      object ToolButton28: TToolButton
         Left = 0
         Top = 0
         Action = actUndo
         ParentShowHint = False
         ShowHint = True
       end
-      object ToolButton36: TToolButton
-        Left = 28
+      object ToolButton29: TToolButton
+        Left = 23
         Top = 0
         Action = actRedo
         ParentShowHint = False
         ShowHint = True
       end
-      object ToolButton37: TToolButton
-        Left = 56
+      object ToolButton30: TToolButton
+        Left = 46
         Top = 0
         Width = 10
         Caption = 'ToolButton4'
         ImageIndex = 3
         Style = tbsSeparator
       end
-      object ToolButton38: TToolButton
-        Left = 66
+      object ToolButton31: TToolButton
+        Left = 56
         Top = 0
         Action = actCut
         ParentShowHint = False
         ShowHint = True
       end
-      object ToolButton39: TToolButton
-        Left = 94
+      object ToolButton32: TToolButton
+        Left = 79
         Top = 0
         Action = actCopy
         ParentShowHint = False
         ShowHint = True
       end
-      object ToolButton40: TToolButton
-        Left = 122
+      object ToolButton44: TToolButton
+        Left = 102
         Top = 0
         Action = actPaste
         ParentShowHint = False
         ShowHint = True
       end
-      object ToolButton41: TToolButton
-        Left = 150
+      object ToolButton45: TToolButton
+        Left = 125
         Top = 0
         Width = 10
         Caption = 'ToolButton8'
         ImageIndex = 4
         Style = tbsSeparator
       end
-      object ToolButton42: TToolButton
-        Left = 160
+      object ToolButton46: TToolButton
+        Left = 135
         Top = 0
         Action = actBlockUnindent
         ParentShowHint = False
         ShowHint = True
       end
-      object ToolButton43: TToolButton
-        Left = 188
+      object ToolButton47: TToolButton
+        Left = 158
         Top = 0
         Action = actBlockIndent
         ParentShowHint = False
         ShowHint = True
       end
-      object ToolButton24: TToolButton
-        Left = 216
+      object ToolButton49: TToolButton
+        Left = 181
         Top = 0
-        Action = actBlockComment
+        Action = actBlockUncomment
       end
-      object ToolButton25: TToolButton
-        Left = 244
+      object ToolButton48: TToolButton
+        Left = 204
         Top = 0
-        Action = actBlockUncomment
+        Action = actBlockComment
       end
     end
   end
@@ -909,6 +969,14 @@ object frmMain: TfrmMain
       ImageIndex = 59
       OnExecute = actShowFindWindow2Execute
     end
+    object actEnableDisableBreakpoint: TAction
+      Category = 'Debugging Operations'
+      Caption = 'Enable/Disable Breakpoint'
+      Hint = 'Disable/Enable Breakpoint'
+      ImageIndex = 60
+      ShortCut = 16504
+      OnExecute = actEnableDisableBreakpointExecute
+    end
   end
   object imlActions: TImageList
     BlendColor = clWhite
@@ -917,131 +985,131 @@ object frmMain: TfrmMain
     Left = 48
     Top = 217
     Bitmap = {
-      494C01013C004000040010001000FF00FF00FF10FFFFFFFFFFFFFFFF424D3600
+      494C01013D004000040010001000FF00FF00FF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000000001000001002000000000000000
-      0100000000000000000000000000000000000000000000000000000000000000
-      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
+      010000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00D1D8DB00D1D8DB00D1D8
+      DB00D1D8DB00D1D8DB00D1D8DB00D1D8DB00D1D8DB00D1D8DB00D1D8DB00D1D8
+      DB00D1D8DB00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600D1D8DB00D1D8
+      DB00D1D8DB00D1D8DB00A64C4C00A64C4C00A64C4C00A64C4C00A64C4C00A64C
+      4C00D1D8DB00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A600D1D8
+      DB00D1D8DB00D1D8DB004C4C4C00FFFFFF00FFFFFF00FFFFFF00FFFFFF004C4C
+      4C00D1D8DB00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A600A6A6
+      A600D1D8DB004C4C4C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A6004C4C4C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A600A6A6
+      A6004C4C4C00D2D2D2004C4C4C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A6004C4C
+      4C00D2D2D2004C4C4C004C4C4C00FFFFFF004C4C4C00FFFFFF004C4C4C00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A6004C4C
+      4C004C4C4C00A6A6A6004C4C4C00D2D2D2004C4C4C00FFFFFF004C4C4C00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A6004C4C4C00D2D2D2004C4C4C00FFFFFF004C4C4C00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A6004C4C4C00D2D2D2004C4C4C00D2D2D2004C4C4C00FFFF
+      FF004C4C4C00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A6004C4C4C00D2D2D2004C4C4C00D2D2D2004C4C4C004C4C
+      4C00D1D8DB00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600A6A6A6004C4C4C004C4C4C00D2D2D2004C4C4C00A6A6
+      A600D1D8DB00D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600A6A6A600A6A6A6004C4C4C004C4C4C00A6A6A600A6A6
+      A600A6A6A600D1D8DB00D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600D1D8DB00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      000000000000000000000000000000000000FF00FF00A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6
+      A600A6A6A600A6A6A600A6A6A600FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -3357,6 +3425,7 @@ object frmMain: TfrmMain
   end
   object ppmToolBar: TPopupMenu
     OwnerDraw = True
+    OnPopup = ppmToolBarPopup
     Left = 112
     Top = 313
     object File3: TMenuItem
@@ -3367,14 +3436,17 @@ object frmMain: TfrmMain
       Caption = 'Edit'
       OnClick = Edit2Click
     end
+    object Find2: TMenuItem
+      Caption = 'Find'
+      OnClick = Find1Click
+    end
     object Run4: TMenuItem
       Caption = 'Run'
       OnClick = Run3Click
     end
   end
   object jvDockVSNet: TJvDockVSNetStyle
-    ConjoinServerOption.GrabbersSize = 18
-    ConjoinServerOption.SplitterWidth = 4
+    AlwaysShowGrabber = False
     ConjoinServerOption.ActiveFont.Charset = ANSI_CHARSET
     ConjoinServerOption.ActiveFont.Color = clWhite
     ConjoinServerOption.ActiveFont.Height = -11
@@ -3385,15 +3457,11 @@ object frmMain: TfrmMain
     ConjoinServerOption.InactiveFont.Height = -11
     ConjoinServerOption.InactiveFont.Name = 'Arial'
     ConjoinServerOption.InactiveFont.Style = []
-    ConjoinServerOption.TextAlignment = taLeftJustify
     ConjoinServerOption.ActiveTitleStartColor = clNavy
     ConjoinServerOption.ActiveTitleEndColor = clNavy
     ConjoinServerOption.InactiveTitleStartColor = clBtnFace
     ConjoinServerOption.InactiveTitleEndColor = clBtnFace
-    ConjoinServerOption.TextEllipsis = True
     ConjoinServerOption.SystemInfo = False
-    TabServerOption.TabPosition = tpBottom
-    TabServerOption.ActiveSheetColor = clBtnFace
     TabServerOption.InactiveSheetColor = clWhite
     TabServerOption.ActiveFont.Charset = ANSI_CHARSET
     TabServerOption.ActiveFont.Color = clWindowText
@@ -3405,11 +3473,7 @@ object frmMain: TfrmMain
     TabServerOption.InactiveFont.Height = -11
     TabServerOption.InactiveFont.Name = 'Arial'
     TabServerOption.InactiveFont.Style = []
-    TabServerOption.HotTrackColor = clBlue
-    TabServerOption.ShowTabImages = True
-    ChannelOption.ActivePaneSize = 100
-    ChannelOption.ShowImage = True
-    ChannelOption.HideHoldTime = 1000
+    TabServerOption.ShowCloseButtonOnTabs = False
     Left = 80
     Top = 342
   end
@@ -4109,6 +4173,11 @@ object frmMain: TfrmMain
     DisabledFont.Height = -11
     DisabledFont.Name = 'Arial'
     DisabledFont.Style = []
+    SelectedFont.Charset = DEFAULT_CHARSET
+    SelectedFont.Color = clWindowText
+    SelectedFont.Height = -11
+    SelectedFont.Name = 'MS Sans Serif'
+    SelectedFont.Style = []
     Left = 112
     Top = 342
   end
@@ -4302,10 +4371,15 @@ object frmMain: TfrmMain
         Caption = 'Toolbars'
         object File2: TMenuItem
           Caption = 'File'
+          OnClick = File2Click
         end
         object Edit2: TMenuItem
           Caption = 'Edit'
         end
+        object Find1: TMenuItem
+          Caption = 'Find'
+          OnClick = Find1Click
+        end
         object Run1: TMenuItem
           Caption = 'Run'
         end
@@ -4370,6 +4444,9 @@ object frmMain: TfrmMain
       object oggleBreakpoint1: TMenuItem
         Action = actToggleBreakpoint
       end
+      object DisableEnableBreakpoint1: TMenuItem
+        Action = actEnableDisableBreakpoint
+      end
     end
     object ools1: TMenuItem
       Action = actMainMenuTools
@@ -4442,8 +4519,8 @@ object frmMain: TfrmMain
     Top = 217
   end
   object xmpMenuPainter: TXPMenu
-    DimLevel = 30
-    GrayLevel = 10
+    DimLevel = 20
+    GrayLevel = 50
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clMenuText
     Font.Height = -11

+ 388 - 98
LuaEdit/Main.pas

@@ -16,7 +16,8 @@ uses
   ActnMenus, ActnColorMaps, StdStyleActnCtrls, XPMenu, Clipbrd, JvLookOut,
   JvExControls, FileCtrl, VirtualTrees
   {$ifdef RTASSERT}  , RTDebug  {$endif}
-  , JvDragDrop, JvAppEvent, JvExStdCtrls, JvButton, JvCtrls, JvComCtrls;
+  , JvDragDrop, JvAppEvent, JvExStdCtrls, JvButton, JvCtrls, JvComCtrls,
+  JvDockTree;
 
 const
   otLuaProject  = 1;
@@ -111,6 +112,7 @@ type
     function IsBreakPointLine(iLine: Integer): Boolean;
     function GetBreakpointStatus(iLine: Integer): Integer;
     procedure AddBreakpointAtLine(iLine: Integer);
+    procedure EnableDisableBreakpointAtLine(iLine: Integer);
     function GetBreakpointAtLine(iLine: Integer): TBreakpoint;
     procedure RemoveBreakpointAtLine(iLine: Integer);
     function GetLineCondition(iLine: Integer): String;
@@ -308,14 +310,10 @@ type
     Save2: TMenuItem;
     SaveAs2: TMenuItem;
     jvchnNotifier: TJvChangeNotify;
-    tlbEdit: TToolBar;
+    tlbFind: TToolBar;
     ToolButton35: TToolButton;
     ToolButton36: TToolButton;
     ToolButton37: TToolButton;
-    ToolButton38: TToolButton;
-    ToolButton39: TToolButton;
-    ToolButton40: TToolButton;
-    ToolButton41: TToolButton;
     ToolButton42: TToolButton;
     ToolButton43: TToolButton;
     actMainMenuFile: TAction;
@@ -438,8 +436,6 @@ type
     UncommentSelection1: TMenuItem;
     CommentSelection2: TMenuItem;
     UncommentSelection2: TMenuItem;
-    ToolButton24: TToolButton;
-    ToolButton25: TToolButton;
     jvAppDrop: TJvDragDrop;
     actUpperCase: TAction;
     actLowerCase: TAction;
@@ -457,6 +453,24 @@ type
     actShowFindWindow2: TAction;
     FindWindow11: TMenuItem;
     FindWindow21: TMenuItem;
+    actEnableDisableBreakpoint: TAction;
+    DisableEnableBreakpoint1: TMenuItem;
+    ToolButton26: TToolButton;
+    ToolButton27: TToolButton;
+    tlbEdit: TToolBar;
+    ToolButton28: TToolButton;
+    ToolButton29: TToolButton;
+    ToolButton30: TToolButton;
+    ToolButton31: TToolButton;
+    ToolButton32: TToolButton;
+    ToolButton44: TToolButton;
+    ToolButton45: TToolButton;
+    ToolButton46: TToolButton;
+    ToolButton47: TToolButton;
+    ToolButton48: TToolButton;
+    ToolButton49: TToolButton;
+    Find1: TMenuItem;
+    Find2: TMenuItem;
     procedure FormCreate(Sender: TObject);
     procedure synEditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
     procedure actOpenFileExecute(Sender: TObject);
@@ -551,6 +565,9 @@ type
     procedure actShowFindWindow1Execute(Sender: TObject);
     procedure actShowFindWindow2Execute(Sender: TObject);
     procedure jvUnitBarChange(Sender: TObject);
+    procedure actEnableDisableBreakpointExecute(Sender: TObject);
+    procedure Find1Click(Sender: TObject);
+    procedure ppmToolBarPopup(Sender: TObject);
     //procedure actFunctionHeaderExecute(Sender: TObject);
   private
     { Private declarations }
@@ -598,7 +615,7 @@ type
     procedure CheckButtons;
     procedure BuildReopenMenu;
     function IsReopenInList(sString: String): Boolean;
-    procedure MonitorFile(sString: String);
+    procedure MonitorFileToRecent(sString: String);
     procedure mnuXReopenClick(Sender: TObject);
     procedure btnXFilesClick(Sender: TObject);
     procedure btnXClipboardClick(Sender: TObject);
@@ -685,6 +702,7 @@ type
     function DoRunScriptExecute(): Boolean;
     function DoAddWatchExecute(): Boolean;
     function DoToggleBreakpointExecute(): Boolean;
+    function DoEnableDisableBreakpoint(): Boolean;
     function DoStepOverExecute(): Boolean;
     function DoStepIntoExecute(): Boolean;
     function DoPauseExecute(): Boolean;
@@ -921,6 +939,24 @@ begin
   lstBreakpoint.Add(pNewBreakpoint);
 end;
 
+procedure TLineDebugInfos.EnableDisableBreakpointAtLine(iLine: Integer);
+var
+  x: Integer;
+begin
+  for x := 0 to lstBreakpoint.Count - 1 do
+  begin
+    if TBreakpoint(lstBreakpoint.Items[x]).iLine = iLine then
+    begin
+      if TBreakpoint(lstBreakpoint.Items[x]).iStatus = BKPT_ENABLED then
+        TBreakpoint(lstBreakpoint.Items[x]).iStatus := BKPT_DISABLED
+      else
+        TBreakpoint(lstBreakpoint.Items[x]).iStatus := BKPT_ENABLED;
+
+      Break;
+    end;
+  end;
+end;
+
 procedure TLineDebugInfos.RemoveBreakpointAtLine(iLine: Integer);
 var
   x: Integer;
@@ -967,7 +1003,7 @@ begin
 
   FirstLine := pLuaUnit.synUnit.RowToLine(FirstLine);
   LastLine := pLuaUnit.synUnit.RowToLine(LastLine);
-  X := 14;
+  X := 1;
   LH := pLuaUnit.synUnit.LineHeight;
   while FirstLine <= LastLine do
   begin
@@ -1097,7 +1133,7 @@ begin
   HasChanged := False;
   LuaProjects.Add(Self);
   ActiveProject := Self;
-  frmMain.MonitorFile(sPrjPath);
+  frmMain.MonitorFileToRecent(sPrjPath);
 
   // Read [Files] section
   fFile.ReadSection('Files', lstTmpFiles);
@@ -1203,6 +1239,9 @@ begin
       if frmMain.sdlgSaveAsPrj.Execute then
       begin
         sPath := frmMain.sdlgSaveAsPrj.FileName;
+
+        if IsNew then
+          frmMain.MonitorFileToRecent(sPath);
       end
       else
       begin
@@ -1259,6 +1298,7 @@ begin
   frmProjectTree.BuildProjectTree;
   pFile.UpdateFile;
   pFile.Free;
+  frmMain.BuildReopenMenu;
 
   // Now we wrote on the disk we may retrieve the time it has been writen
   LastTimeModified := GetFileLastTimeModified(PChar(sPath));
@@ -1274,7 +1314,7 @@ begin
   frmMain.jvchnNotifier.Active := False;
   Result := True;
 
-  // Popup a open dialog according to parameters and the state of the file
+  // Popup an open dialog according to parameters and the state of the file
   if ((IsNew and not bNoDialog) or (bForceDialog)) then
   begin
     frmMain.sdlgSaveAsPrj.FileName := sPrjName + '.lpr';
@@ -1282,6 +1322,9 @@ begin
     if frmMain.sdlgSaveAsPrj.Execute then
     begin
       sPath := frmMain.sdlgSaveAsPrj.FileName;
+
+      if IsNew then
+        frmMain.MonitorFileToRecent(sPath);
     end
     else
     begin
@@ -1356,15 +1399,14 @@ begin
 
   // Wrtie data for [Files] section  
   for x := 0 to lstUnits.Count - 1 do
-  begin
     // Write the file with a relative path
     pFile.WriteString('Files', 'File'+IntToStr(x), ExtractRelativePath(ExtractFilePath(sPrjPath), TLuaUnit(lstUnits.Items[x]).sUnitPath));
-  end;
 
   // Initialize stuff...   
   IsNew := False;
   HasChanged := False;
   frmProjectTree.BuildProjectTree;
+  frmMain.BuildReopenMenu;
   pFile.UpdateFile;
   pFile.Free;
 
@@ -1463,6 +1505,9 @@ begin
       if frmMain.sdlgSaveAsUnit.Execute then
       begin
         sPath := frmMain.sdlgSaveAsUnit.FileName;
+
+        if IsNew then
+          frmMain.MonitorFileToRecent(sPath);
       end
       else
       begin
@@ -1546,6 +1591,7 @@ begin
     // Reinitialize stuff...
     frmMain.RefreshOpenedUnits;
     frmProjectTree.BuildProjectTree;
+    frmMain.BuildReopenMenu;
     frmMain.stbMain.Panels[5].Text := '';
     frmMain.stbMain.Refresh;
     synUnit.Refresh;
@@ -1575,6 +1621,9 @@ begin
       begin
         sPath := frmMain.sdlgSaveAsUnit.FileName;
         pPrjOwner.HasChanged := True;
+
+        if IsNew then
+          frmMain.MonitorFileToRecent(sPath);
       end
       else
       begin
@@ -1636,6 +1685,7 @@ begin
     // Initialize stuff...
     frmMain.RefreshOpenedUnits;
     frmProjectTree.BuildProjectTree;
+    frmMain.BuildReopenMenu;
     frmMain.stbMain.Panels[5].Text := '';
     frmMain.stbMain.Refresh;
     synUnit.Refresh;
@@ -1879,7 +1929,7 @@ begin
           pLuaUnit := AddFileInProject(odlgOpenUnit.Files.Strings[z], False, LuaSingleUnits);
           pLuaUnit.IsLoaded := True;
           AddFileInTab(pLuaUnit);
-          MonitorFile(odlgOpenUnit.Files.Strings[z]);
+          MonitorFileToRecent(odlgOpenUnit.Files.Strings[z]);
           
           // Add opened file to recent opens
           pReg.OpenKey('\Software\LuaEdit', True);
@@ -1913,6 +1963,7 @@ begin
 
   // Rebuild the project tree and initialize stuff
   frmProjectTree.BuildProjectTree;
+  BuildReopenMenu;
   CheckButtons;
 
   pReg.Free;
@@ -1945,6 +1996,7 @@ begin
   synEdit.WantTabs := True;
   synEdit.ShowHint := True;
   synEdit.PopupMenu := ppmEditor;
+  synEdit.BookMarkOptions.LeftMargin := 15;
 
   // Set event handlers
   synEdit.OnChange := synEditChange;
@@ -2000,7 +2052,12 @@ begin
   pLuaUnit.pPrjOwner := pPrj;
   pLuaUnit.IsNew := IsNew;
   pLuaUnit.synUnit := nil;
-  pPrj.lstUnits.Add(pLuaUnit);
+
+  if pPrj.sPrjName = '[@@SingleUnits@@]' then
+    pPrj.lstUnits.Insert(pPrj.lstUnits.Count, pLuaUnit)
+  else
+    pPrj.lstUnits.Add(pLuaUnit);
+
   Result := pLuaUnit;
 end;
 
@@ -2122,6 +2179,8 @@ begin
     stbMain.Panels[2].Text := 'CAPS'
   else
     stbMain.Panels[2].Text := '';
+
+  CheckButtons;
 end;
 
 function TfrmMain.DoOpenProjectExecute(): Boolean;
@@ -2225,6 +2284,7 @@ procedure TfrmMain.CheckButtons;
 var
   pNode: PVirtualNode;
   pData: PProjectTreeData;
+  pLuaUnit: TLuaUnit;
 begin
   actClose.Enabled := not (LuaOpenedUnits.Count = 0);
   actSave.Enabled := not (LuaOpenedUnits.Count = 0);
@@ -2260,18 +2320,24 @@ begin
   PrintSetup1.Enabled := not (LuaOpenedUnits.Count = 0);
   //HeaderBuilder1.Enabled := not (LuaOpenedUnits.Count = 0);
 
+  // Initialize some actions' state
+  actEnableDisableBreakpoint.Enabled := False;
+
   if LuaOpenedUnits.Count > 0 then
   begin
     if Assigned(jvUnitBar.SelectedTab) then
     begin
       if Assigned(jvUnitBar.SelectedTab.Data) then
       begin
-        if TLuaUnit(jvUnitBar.SelectedTab.Data).synUnit.UndoList.ItemCount = 0 then
+        pLuaUnit := TLuaUnit(jvUnitBar.SelectedTab.Data);
+        actEnableDisableBreakpoint.Enabled := pLuaUnit.pDebugInfos.IsBreakPointLine(TLuaUnit(jvUnitBar.SelectedTab.Data).synUnit.CaretY);
+
+        if pLuaUnit.synUnit.UndoList.ItemCount = 0 then
           actUndo.Enabled := False
         else
           actUndo.Enabled := True;
 
-        if TLuaUnit(jvUnitBar.SelectedTab.Data).synUnit.RedoList.ItemCount = 0 then
+        if pLuaUnit.synUnit.RedoList.ItemCount = 0 then
           actRedo.Enabled := False
         else
           actRedo.Enabled := True;
@@ -2300,21 +2366,6 @@ begin
   else
     actActiveSelPrj.Enabled := False;
 
-  if Assigned(ActiveProject) then
-  begin
-    actAddToPrj.Enabled := True;
-    actRemoveFromPrj.Enabled := True;
-    actPrjSettings.Enabled := True;
-    actSaveProjectAs.Enabled := True;
-  end
-  else
-  begin
-    actAddToPrj.Enabled := False;
-    actRemoveFromPrj.Enabled := False;
-    actPrjSettings.Enabled := False;
-    actSaveProjectAs.Enabled := False;
-  end;
-
   actNewProject.Enabled := True;
   actNewUnit.Enabled := True;
   actOpenFile.Enabled := True;
@@ -2722,7 +2773,7 @@ begin
   pReg.Free;
 end;
 
-procedure TfrmMain.MonitorFile(sString: String);
+procedure TfrmMain.MonitorFileToRecent(sString: String);
 var
   pReg: TRegistry;
   lstValues: TStringList;
@@ -2759,7 +2810,6 @@ begin
 
     pReg.WriteInteger(sString, 0);
     lstValues.Free;
-    //BuildReopenMenu;
   end;
 
   pReg.Free;
@@ -2795,6 +2845,8 @@ begin
   Run1.Checked := tlbRun.Visible;
   File3.Checked := tlbBaseFile.Visible;
   Edit3.Checked := tlbEdit.Visible;
+  Find1.Checked := tlbFind.Visible;
+  Find2.Checked := tlbFind.Visible;
   Run4.Checked := tlbRun.Visible;
   actShowMessages.Checked := frmLuaEditMessages.Visible;
   actShowProjectTree.Checked := frmProjectTree.Visible;
@@ -2818,9 +2870,27 @@ begin
 end;
 
 function TfrmMain.DoMainMenuProjectExecute(): Boolean;
+var
+  pNode: PVirtualNode;
+  pData: PProjectTreeData;
 begin
-  Result := False;
-  // Do nothing for now...
+  Result := True;
+  
+  // Retreive first selected node
+  pNode := frmProjectTree.vstProjectTree.GetFirstSelected;
+
+  // Only if a menu is selected
+  if Assigned(pNode) then
+  begin
+    // Retreive data from selected node
+    pData := frmProjectTree.vstProjectTree.GetNodeData(pNode);
+
+    actActiveSelPrj.Enabled := Assigned(pData.pLuaPrj);
+    actAddToPrj.Enabled := ((pData.pLuaPrj = ActiveProject) and Assigned(ActiveProject));
+    actPrjSettings.Enabled := ((pData.pLuaPrj = ActiveProject) and Assigned(ActiveProject));
+    frmProjectTree.UnloadFileProject1.Enabled := (((Assigned(pData.pLuaUnit)) and (pNode.Parent = frmProjectTree.vstProjectTree.RootNode)) or (Assigned(pData.pLuaPrj)));
+    actRemoveFromPrj.Enabled := not ((pNode.Parent = frmProjectTree.vstProjectTree.RootNode) and (Assigned(pData.pLuaUnit)));
+  end;
 end;
 
 procedure TfrmMain.actMainMenuProjectExecute(Sender: TObject);
@@ -2830,8 +2900,9 @@ end;
 
 function TfrmMain.DoMainMenuRunExecute(): Boolean;
 begin
-  Result := False;
-  // Do nothing for now...
+  Result := True;
+
+  CheckButtons;
 end;
 
 procedure TfrmMain.actMainMenuRunExecute(Sender: TObject);
@@ -3015,6 +3086,8 @@ begin
 end;
 
 function TfrmMain.DoShowRingsExecute(): Boolean;
+var
+  test: Integer;
 begin
   Result := True;
   actShowRings.Checked := not actShowRings.Checked;
@@ -3120,7 +3193,7 @@ begin
         pLuaUnit := AddFileInProject(mnuSender.Caption, False, LuaSingleUnits);
         pLuaUnit.IsLoaded := True;
         AddFileInTab(pLuaUnit);
-        MonitorFile(mnuSender.Caption);
+        MonitorFileToRecent(mnuSender.Caption);
         BuildTreeNeeded := True;
       end
       else
@@ -3218,7 +3291,7 @@ begin
         pLuaUnit := AddFileInProject(btnSender.Caption, False, LuaSingleUnits);
         pLuaUnit.IsLoaded := True;
         AddFileInTab(pLuaUnit);
-        MonitorFile(btnSender.Caption);
+        MonitorFileToRecent(btnSender.Caption);
         BuildTreeNeeded := True;
       end
       else
@@ -4532,11 +4605,51 @@ end;
 procedure TfrmMain.PrintWatch(L: Plua_State);
 var
   x, iLen: Integer;
-  sValue: String;
+  sSub, sValue, sLookup, sSubTable: String;
   lstTable: TStringList;
+  IsTable: Boolean;
   pNode, pChildNode, pNodeToDel: PVirtualNode;
   pData, pChildData, pNewData: PWatchNodeData;
 
+  // Go through all nodes of the tree and set their ToKeep flag to false
+  procedure UnflagAllExpanded(pTree: TVirtualStringTree);
+  var
+    pNode: PVirtualNode;
+    pData: PWatchNodeData;
+  begin
+    pNode := pTree.GetFirst;
+
+    while Assigned(pNode) do
+    begin
+      pData := pTree.GetNodeData(pNode);
+      pData.ToKeep := False;
+      pNode := pTree.GetNext(pNode);
+    end;
+  end;
+
+  // Deletes all nodes for wich their ToKeep flag is still on false
+  procedure CleanTree(pTree: TVirtualStringTree);
+  var
+    pNode, pPrevious: PVirtualNode;
+    pData: PWatchNodeData;
+  begin
+    pNode := pTree.GetFirst;
+
+    while Assigned(pNode) do
+    begin
+      pData := pTree.GetNodeData(pNode);
+      
+      if not pData.ToKeep then
+      begin
+        pPrevious := pTree.GetPrevious(pNode);
+        pTree.DeleteNode(pNode);
+        pNode := pPrevious;
+      end;
+      
+      pNode := pTree.GetNext(pNode);
+    end;
+  end;
+
   // Subroutine wich parse a string to retreive fields and tables
   procedure LuaStrTableToStringList(sTable: String; pStrLst: TStrings);
   var
@@ -4615,8 +4728,44 @@ var
       end;
     end;
   end;
+
+  // Normalize a table indexing style a[1]["test"] -> a.[1].test
+  function NormalizeName(sName: String): String;
+  var
+    sTemp, sKey: String;
+    Dummy: Integer;
+  begin
+    Result := '';
+    sTemp := sName;
+
+    // Convert [] indexing style to . indexing style
+    while Pos('[', sTemp) <> 0 do
+    begin
+      Result := Result + Copy(sTemp, 1, Pos('[', sTemp) - 1) + '.';
+      sTemp := Copy(sTemp, Pos('[', sTemp) + 1, Length(sTemp) - Pos('[', sTemp));
+      sKey := Copy(sTemp, 1, Pos(']', sTemp) - 1);
+
+      // Convert integer indexing into [] formating for LuaEdit compatibility if required
+      if TryStrToInt(sKey, Dummy) then
+        Result := Result + '[' + Dequote(sKey) + ']'
+      else
+        Result := Result + Dequote(sKey);
+
+      sTemp := Copy(sTemp, Pos(']', sTemp) + 1, Length(sTemp) - Pos(']', sTemp));
+    end;
+
+    // Append rests of sTemp if any...
+    if sTemp <> '' then
+      Result := Result + sTemp;
+
+    // Return passed name if normal...
+    if Result = '' then
+      Result := sName;
+  end;
+
 begin
   // Initialize stuff
+  UnflagAllExpanded(frmWatch.vstWatch);
   lstTable := TStringList.Create;
   pNodeToDel := nil;
 
@@ -4626,8 +4775,9 @@ begin
   // Go through all nodes
   while pNode <> nil do
   begin
-    // retreive current text
+    // retreive current text and initializing some values
     pData := frmWatch.vstWatch.GetNodeData(pNode);
+    IsTable := False;
     sValue := '';
 
     // A variable name must be assigned in order to make an association
@@ -4636,69 +4786,147 @@ begin
       // Attempt to make the association
       if pNode.Parent = frmWatch.vstWatch.RootNode then
       begin
-        if lstLocals.Values[pData.Name] <> '' then
-          sValue := lstLocals.Values[pData.Name];
+        if ((Pos('.', pData.Name) <> 0) or (Pos('[', pData.Name) <> 0)) then
+        begin
+          IsTable := True;
+          // Normalize table's indexing style
+          sLookup := NormalizeName(pData.Name);
+          sSubTable := Copy(sLookup, Pos('.', sLookup) + 1, Length(sLookup) - Pos('.', sLookup));
+          sLookup := Copy(sLookup, 1, Pos('.', sLookup) - 1);
+
+          if sSubTable = '' then
+            sValue := 'nil';
+        end
+        else
+          sLookup := pData.Name;
 
-        if ((sValue = '') and (lstGlobals.Values[pData.Name] <> '')) then
-          sValue := lstGlobals.Values[pData.Name];
+        if lstLocals.Values[sLookup] <> '' then
+          sValue := lstLocals.Values[sLookup];
+
+        if ((sValue = '') and (lstGlobals.Values[sLookup] <> '')) then
+          sValue := lstGlobals.Values[sLookup];
 
         if sValue = '' then
           sValue := 'nil';
       end
       else
-        sValue := pData.Value;
+      begin
+        if pData.ToKeep = True then
+          sValue := pData.Value;
+      end;
 
-      // Parse table string if it is a table and initalize any required child
-      if sValue[1] = '{' then
+      if sValue <> '' then
       begin
-        LuaStrTableToStringList(sValue, lstTable);
-        pData.Value := sValue;
+        // Parse table string if it is a table and initalize any required child
+        if sValue[1] = '{' then
+        begin
+          // If value found and is a name is a table then we recursively search for value
+          if IsTable then
+          begin
+            // Initialize first item to look for
+            sSub := Copy(sSubTable, 1, Pos('.', sSubTable) - 1);
+            if sSub = '' then
+              sSub := sSubTable;
+          
+            // Search for value/subtables in current value
+            while ((sValue <> 'nil') and (sSub <> '')) do
+            begin
+              if Pos('.', sSubTable) <> 0 then
+                sSubTable := Copy(sSubTable, Pos('.', sSubTable) + 1, Length(sSubTable) + Pos('.', sSubTable) - 1)
+              else
+                sSubTable := '';
 
-        // Get first child
-        pChildNode := frmWatch.vstWatch.GetFirstChild(pNode);
+              LuaStrTableToStringList(sValue, lstTable);
+              sValue := lstTable.Values[sSub];
 
-        while pChildNode <> nil do
-        begin
-          // Get the current data of the current child
-          pChildData := frmWatch.vstWatch.GetNodeData(pChildNode);
+              if sValue = '' then
+                sValue := 'nil';
+
+              sSub := Copy(sSubTable, 1, Pos('.', sSubTable) - 1);
+              if sSub = '' then
+                sSub := sSubTable;
+              // Find subtables in current sValue until result or not...
+            end;
+          end;
 
-          if lstTable.Values[pChildData.Name] <> '' then
+          // If found value is still a table then display values/subtables...
+          if sValue[1] = '{' then
           begin
-            pChildData.Value := lstTable.Values[pChildData.Name];
-            lstTable.Values[pChildData.Name] := '';
-            pNodeToDel := nil;
-          end
-          else
-            pNodeToDel := pChildNode;
+            LuaStrTableToStringList(sValue, lstTable);
+            pData.Value := sValue;
+            pData.ToKeep := True;
 
-          // Get next sibling child
-          pChildNode := frmWatch.vstWatch.GetNextSibling(pChildNode);
+            // Get first child
+            pChildNode := frmWatch.vstWatch.GetFirstChild(pNode);
 
-          // Delete the node if required
-          if Assigned(pNodeToDel) then
-          begin
-            frmWatch.vstWatch.DeleteNode(pNodeToDel);
-            pNodeToDel := nil;
-          end;
-        end;
+            while pChildNode <> nil do
+            begin
+              // Get the current data of the current child
+              pChildData := frmWatch.vstWatch.GetNodeData(pChildNode);
 
-        // Assign child nodes
-        for x := 0 to lstTable.Count - 1 do
-        begin
-          if lstTable.Values[lstTable.Names[x]] <> '' then
+              if ((lstTable.Values[pChildData.Name] <> '') and (lstTable.Values[pChildData.Name] <> 'nil')) then
+              begin
+                pChildData.ToKeep := True;
+                pChildData.Value := lstTable.Values[pChildData.Name];
+                lstTable.Values[pChildData.Name] := '';
+                pNodeToDel := nil;
+              end
+              else
+                pNodeToDel := pChildNode;
+
+              // Get next sibling child
+              pChildNode := frmWatch.vstWatch.GetNextSibling(pChildNode);
+
+              // Delete the node if required
+              if Assigned(pNodeToDel) then
+              begin
+                frmWatch.vstWatch.DeleteNode(pNodeToDel);
+                pNodeToDel := nil;
+              end;
+            end;
+
+            // Assign child nodes
+            for x := 0 to lstTable.Count - 1 do
+            begin
+              if lstTable.Values[lstTable.Names[x]] <> '' then
+              begin
+                pNewData := frmWatch.vstWatch.GetNodeData(frmWatch.vstWatch.AddChild(pNode));
+                pNewData.ToKeep := True;
+                pNewData.Name := lstTable.Names[x];
+                pNewData.Value := lstTable.Values[pNewData.Name];
+              end;
+            end;
+          end
+          else
           begin
-            pNewData := frmWatch.vstWatch.GetNodeData(frmWatch.vstWatch.AddChild(pNode));
-            pNewData.Name := lstTable.Names[x];
-            pNewData.Value := lstTable.Values[pNewData.Name];
+            pData.ToKeep := True;
+            pData.Value := sValue;
           end;
+        end
+        else
+        begin
+          pData.ToKeep := True;
+          pData.Value := sValue;
         end;
-      end
-      else
-        pData.Value := sValue;
+      end;
     end
     else
       pNodeToDel := pNode;
 
+    // If value is nil and child count is different than zero, it means the user
+    // just changed the name of the watch, wich was matching a table before, into
+    // something wich matches nothing
+   { if not Assigned(pNodeToDel) and Assigned(pNode) then
+    begin
+      if ((pNode.ChildCount <> 0) and (sValue = 'nil')) then
+      begin
+        frmWatch.vstWatch.DeleteChildren(pNode);
+        if pNode.Parent <> frmWatch.vstWatch.RootNode then
+          frmWatch.vstWatch.DeleteNode(pNode);
+      end;
+    end;}
+
+    //pNode := frmWatch.vstWatch.GetNextSibling(pNode);
     pNode := frmWatch.vstWatch.GetNext(pNode);
 
     // Delete the node if required
@@ -4711,6 +4939,7 @@ begin
 
   // Free stuff and call virtual treeview to repaint
   lstTable.Free;
+  CleanTree(frmWatch.vstWatch);
   frmWatch.vstWatch.Refresh;
 end;
 
@@ -4814,8 +5043,18 @@ var
   pData: PWatchNodeData;
   sVarName: String;
 begin
+  // Determine default proposed value
   sVarName := 'VarName';
 
+  if Assigned(jvUnitBar.SelectedTab) then
+  begin
+    if Assigned(jvUnitBar.SelectedTab.Data) then
+    begin
+      if TLuaUnit(jvUnitBar.SelectedTab.Data).synUnit.SelText <> '' then
+        sVarName := TLuaUnit(jvUnitBar.SelectedTab.Data).synUnit.SelText;
+    end;
+  end;
+
   if InputQuery('Add Watch', 'Enter the name of the variable to watch:', sVarName) then
   begin
     frmWatch.vstWatch.RootNodeCount := frmWatch.vstWatch.RootNodeCount + 1;
@@ -4853,6 +5092,30 @@ begin
   DoToggleBreakpointExecute;
 end;
 
+function TfrmMain.DoEnableDisableBreakpoint(): Boolean;
+var
+  pLuaUnit: TLuaUnit;
+begin
+  Result := False;
+
+  if Assigned(jvUnitBar.SelectedTab) then
+  begin
+    if Assigned(jvUnitBar.SelectedTab.Data) then
+    begin
+      Result := True;
+      pLuaUnit := TLuaUnit(jvUnitBar.SelectedTab.Data);
+      pLuaUnit.pDebugInfos.EnableDisableBreakpointAtLine(pLuaUnit.synUnit.CaretY);
+      pLuaUnit.synUnit.Refresh;
+      frmBreakpoints.RefreshBreakpointList;
+    end;
+  end;
+end;
+
+procedure TfrmMain.actEnableDisableBreakpointExecute(Sender: TObject);
+begin
+  DoEnableDisableBreakpoint;
+end;
+
 procedure TfrmMain.stbMainDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect);
 var
   InflatedRect: TRect;
@@ -5115,16 +5378,21 @@ end;
 procedure TfrmMain.synEditGutterClick(Sender: TObject; Button: TMouseButton; X, Y, Line: Integer; Mark: TSynEditMark);
 var
   iCurrentLine: Integer;
+  pLuaUnit: TLuaUnit;
 begin
-  iCurrentLine := TLuaUnit(jvUnitBar.SelectedTab.Data).synUnit.RowToLine(Line);
+  if X <= 14 then
+  begin
+    pLuaUnit := TLuaUnit(jvUnitBar.SelectedTab.Data);
+    iCurrentLine := pLuaUnit.synUnit.RowToLine(Line);
 
-  if not TLuaUnit(jvUnitBar.SelectedTab.Data).pDebugInfos.IsBreakPointLine(iCurrentLine) then
-    TLuaUnit(jvUnitBar.SelectedTab.Data).pDebugInfos.AddBreakpointAtLine(iCurrentLine)
-  else
-    TLuaUnit(jvUnitBar.SelectedTab.Data).pDebugInfos.RemoveBreakpointAtLine(iCurrentLine);
+    if not pLuaUnit.pDebugInfos.IsBreakPointLine(iCurrentLine) then
+      pLuaUnit.pDebugInfos.AddBreakpointAtLine(iCurrentLine)
+    else
+      pLuaUnit.pDebugInfos.RemoveBreakpointAtLine(iCurrentLine);
 
-  TLuaUnit(jvUnitBar.SelectedTab.Data).synUnit.Refresh;
-  frmBreakpoints.RefreshBreakpointList;
+    pLuaUnit.synUnit.Refresh;
+    frmBreakpoints.RefreshBreakpointList;
+  end;
 end;
 
 function TfrmMain.DoPauseExecute(): Boolean;
@@ -6301,7 +6569,7 @@ begin
   Result := False;
   pLuaUnit := TLuaUnit(jvUnitBar.SelectedTab.Data);
 
-  for x := pLuaUnit.synUnit.BlockBegin.Line to pLuaUnit.synUnit.BlockEnd.Line - 1 do
+  for x := pLuaUnit.synUnit.BlockBegin.Line - 1 to pLuaUnit.synUnit.BlockEnd.Line - 1 do
   begin
     if Copy(pLuaUnit.synUnit.Lines.Strings[x], 1, 2) <> '--' then
     begin
@@ -6613,6 +6881,14 @@ begin
     tlbEdit.Show;
 end;
 
+procedure TfrmMain.Find1Click(Sender: TObject);
+begin
+  if tlbFind.Visible then
+    tlbFind.Hide
+  else
+    tlbFind.Show;
+end;
+
 procedure TfrmMain.Run3Click(Sender: TObject);
 begin
   if tlbRun.Visible then
@@ -7301,7 +7577,7 @@ begin
         pLuaUnit := AddFileInProject(WordAtCursor, False, LuaSingleUnits);
         pLuaUnit.IsLoaded := True;
         AddFileInTab(pLuaUnit);
-        MonitorFile(pLuaUnit.sUnitPath);
+        MonitorFileToRecent(pLuaUnit.sUnitPath);
       end
       else
       begin
@@ -7363,12 +7639,21 @@ procedure TfrmMain.ppmEditorPopup(Sender: TObject);
 var
   sTextToShow, sOriginalName: String;
 begin
+  sTextToShow := '';
+  
   if TLuaUnit(jvUnitBar.SelectedTab.Data).synUnit.SelAvail then
   begin
     OpenFileatCursor1.Enabled := True;
     sOriginalName := StringReplace(TLuaUnit(jvUnitBar.SelectedTab.Data).synUnit.SelText, '\\', '\', [rfIgnoreCase, rfReplaceAll]);
-    sTextToShow := MinimizeName(sOriginalName, stbMain.Canvas, 150);
+
+    if FileExists(sOriginalName) then
+      sTextToShow := MinimizeName(sOriginalName, stbMain.Canvas, 150);
+  end;
+
+  if sTextToShow <> '' then
+  begin
     OpenFileatCursor1.Caption := 'Open Document "'+sTextToShow+'"';
+    OpenFileatCursor1.Enabled := True;
   end
   else
   begin
@@ -7559,14 +7844,14 @@ begin
         begin
           pLuaUnit := frmMain.AddFileInProject(FileName, False, LuaSingleUnits);
           pLuaUnit.IsLoaded := True;
-          frmMain.AddFileInTab(pLuaUnit);
-          frmMain.MonitorFile(FileName);
+          AddFileInTab(pLuaUnit);
+          MonitorFileToRecent(FileName);
         end;
       end
       else if ExtractFileExt(FileName) = '.lpr' then
       begin
         // Add new project to the tree
-        if not frmMain.IsProjectOpened(FileName) then
+        if not IsProjectOpened(FileName) then
         begin
           pNewPrj := TLuaProject.Create(FileName);
           pNewPrj.GetProjectFromDisk(FileName);
@@ -7577,7 +7862,7 @@ begin
 
   // Rebuild the project tree and initialize stuff
   frmProjectTree.BuildProjectTree;
-  frmMain.CheckButtons;
+  CheckButtons;
 end;
 
 procedure TfrmMain.jvUnitBarTabClosed(Sender: TObject; Item: TJvTabBarItem);
@@ -7609,4 +7894,9 @@ begin
   end;
 end;
 
+procedure TfrmMain.ppmToolBarPopup(Sender: TObject);
+begin
+  DoMainMenuViewExecute;
+end;
+
 end.

+ 0 - 2
LuaEdit/ProjectTree.dfm

@@ -6,8 +6,6 @@ object frmProjectTree: TfrmProjectTree
   BorderStyle = bsSizeToolWin
   Caption = 'Project Tree'
   Color = clBtnFace
-  Constraints.MinHeight = 200
-  Constraints.MinWidth = 250
   DockSite = True
   DragKind = dkDock
   DragMode = dmAutomatic

+ 34 - 41
LuaEdit/ProjectTree.pas

@@ -15,6 +15,7 @@ type
     pLuaPrj: TLuaProject;
     ActiveProject: Boolean;
     ToKeep: Boolean;
+    Deleting: Boolean;
   end;
 
   TfrmProjectTree = class(TForm)
@@ -110,7 +111,7 @@ begin
 
     if sProjectName <> '' then
     begin
-      if Assigned(pData.pLuaUnit) then
+      if (Assigned(pData.pLuaUnit) and (not pData.Deleting)) then
       begin
         if ((pData.pLuaUnit.pPrjOwner.sPrjName = sProjectName) or (sProjectName = '[@@SingleUnits@@]')) then
         begin
@@ -141,7 +142,7 @@ end;
 procedure TfrmProjectTree.BuildProjectTree(HandleNotifier: Boolean);
 var
   pTempPrj: TLuaProject;
-  pNode, pNewPrjNode, pNewNode, pSingleUnitLastNode: PVirtualNode;
+  pPrjNode, pUnitNode, pSingleUnitLastNode: PVirtualNode;
   pData: PProjectTreeData;
   x, y: Integer;
 
@@ -186,7 +187,8 @@ var
   
 begin
   // Initialize stuff
-  pNewNode := nil;
+  pPrjNode := nil;
+  pUnitNode := nil;
   pSingleUnitLastNode := nil;
 
   // If the changes notifier is handled, we stop it while building the tree
@@ -202,58 +204,65 @@ begin
   for x := 0 to LuaProjects.Count - 1 do
   begin
     pTempPrj := TLuaProject(LuaProjects.Items[x]);
-    pNode := GetNodeInTree(pTempPrj.sPrjName, '');
+    pPrjNode := GetNodeInTree(pTempPrj.sPrjName, '');
 
-    if not Assigned(pNode) then
+    if not Assigned(pPrjNode) then
     begin
       if pTempPrj.sPrjName <> '[@@SingleUnits@@]' then
       begin
         // Create the node
-        pNewPrjNode := vstProjectTree.AddChild(vstProjectTree.RootNode);
-        pData := vstProjectTree.GetNodeData(pNewPrjNode);
+        pPrjNode := vstProjectTree.AddChild(vstProjectTree.RootNode);
+        pData := vstProjectTree.GetNodeData(pPrjNode);
         pData.pLuaUnit := nil;
         pData.pLuaPrj := pTempPrj;
         pData.ActiveProject := (pTempPrj = ActiveProject);
         pData.ToKeep := True;
+        pData.Deleting := False;
 
         // Adding project root to change notifier...
         if ((not pTempPrj.IsNew) and HandleNotifier) then
           frmMain.AddToNotifier(ExtractFileDir(pTempPrj.sPrjPath));
       end
       else
-        pNewPrjNode := pSingleUnitLastNode;
+          pPrjNode := pSingleUnitLastNode;
     end
     else
     begin
       // Update the node's data
-      pData := vstProjectTree.GetNodeData(pNode);
+      pData := vstProjectTree.GetNodeData(pPrjNode);
       pData.pLuaUnit := nil;
       pData.pLuaPrj := pTempPrj;
       pData.ActiveProject := (pTempPrj = ActiveProject);
       pData.ToKeep := True;
+      pData.Deleting := False;
     end;
 
     for y := 0 to pTempPrj.lstUnits.Count - 1 do
     begin
-      pNode := GetNodeInTree(TLuaUnit(pTempPrj.lstUnits.Items[y]).sName, pTempPrj.sPrjName);
+      pUnitNode := GetNodeInTree(TLuaUnit(pTempPrj.lstUnits.Items[y]).sName, pTempPrj.sPrjName);
 
-      if not Assigned(pNode) then
+      if not Assigned(pUnitNode) then
       begin
         // Adding single unit (projectless) to the tree
         if pTempPrj.sPrjName = '[@@SingleUnits@@]' then
-          pNewNode := vstProjectTree.InsertNode(pNewPrjNode, amInsertAfter)
+        begin
+          if not Assigned(pPrjNode) then
+            pUnitNode := vstProjectTree.InsertNode(vstProjectTree.RootNode, amInsertBefore)
+          else
+            pUnitNode := vstProjectTree.InsertNode(pPrjNode, amInsertAfter);
+          // Update last single unit node
+          pSingleUnitLastNode := pUnitNode;
+        end
         else
-          pNewNode := vstProjectTree.AddChild(pNewPrjNode);
-
-        // Update last single unit node
-        pSingleUnitLastNode := pNewNode;
+          pUnitNode := vstProjectTree.AddChild(pPrjNode);
 
         // Create the node
-        pData := vstProjectTree.GetNodeData(pNewNode);
+        pData := vstProjectTree.GetNodeData(pUnitNode);
         pData.pLuaUnit := TLuaUnit(pTempPrj.lstUnits.Items[y]);
         pData.pLuaPrj := nil;
         pData.ActiveProject := False;
         pData.ToKeep := True;
+        pData.Deleting := False;
 
         // Adding unit root to change notifier...
         if ((not TLuaUnit(pTempPrj.lstUnits.Items[y]).IsNew) and HandleNotifier) then
@@ -262,11 +271,12 @@ begin
       else
       begin
         // Update the node's data
-        pData := vstProjectTree.GetNodeData(pNode);
+        pData := vstProjectTree.GetNodeData(pUnitNode);
         pData.pLuaUnit := TLuaUnit(pTempPrj.lstUnits.Items[y]);
         pData.pLuaPrj := nil;
         pData.ActiveProject := False;
         pData.ToKeep := True;
+        pData.Deleting := False;
       end;
     end;
   end;
@@ -381,6 +391,7 @@ begin
         LuaOpenedUnits.Remove(pLuaUnit);
       end;
 
+      pData.Deleting := True;
       pLuaUnit.pPrjOwner.lstUnits.Remove(pLuaUnit);
       pLuaUnit.Free;
     end;
@@ -409,29 +420,8 @@ begin
 end;
 
 procedure TfrmProjectTree.ppmProjectTreePopup(Sender: TObject);
-var
-  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(pNode) then
-  begin
-    // Retreive data from selected node
-    pData := vstProjectTree.GetNodeData(pNode);
-
-    // setting menu status
-    AddUnitToProject1.Enabled := ((pData.pLuaPrj = ActiveProject) and Assigned(ActiveProject));
-    RemoveUnitFromProject1.Enabled := ((pData.pLuaPrj = ActiveProject) and Assigned(ActiveProject));
-    Options1.Enabled := ((pData.pLuaPrj = ActiveProject) and Assigned(ActiveProject));
-    UnloadFileProject1.Enabled := (((Assigned(pData.pLuaUnit)) and (pNode.Parent = vstProjectTree.RootNode)) or (Assigned(pData.pLuaPrj)));
-  end;
+  frmMain.DoMainMenuProjectExecute;
 end;
 
 procedure TfrmProjectTree.vstProjectTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
@@ -446,7 +436,7 @@ begin
       begin
         pData := Sender.GetNodeData(Node);
         pData.ToKeep := True;
-        
+
         if Assigned(pData.pLuaPrj) then
           CellText := pData.pLuaPrj.sPrjName
         else
@@ -485,7 +475,10 @@ begin
   begin
     // Set disabled color for non-loaded units
     if not pData.pLuaUnit.IsLoaded then
+    begin
+      TargetCanvas.Font.Color := clInactiveCaption;
       TargetCanvas.Pen.Color := clInactiveCaption;
+    end;
   end;
 end;
 

+ 0 - 1
LuaEdit/SearchPath.pas

@@ -185,7 +185,6 @@ end;
 
 procedure TfrmSearchPath.btnOkClick(Sender: TObject);
 begin
-  btnAdd.Click;
   ModalResult := mrOk;
 end;
 

+ 81 - 52
LuaEdit/Watch.dfm

@@ -19,6 +19,7 @@ object frmWatch: TfrmWatch
   FormStyle = fsStayOnTop
   OldCreateOrder = False
   Position = poOwnerFormCenter
+  OnCreate = FormCreate
   PixelsPerInch = 96
   TextHeight = 13
   object memoSwap: TMemo
@@ -47,6 +48,7 @@ object frmWatch: TfrmWatch
     Header.Options = [hoColumnResize, hoDrag, hoVisible]
     Header.Style = hsFlatButtons
     LineStyle = lsSolid
+    PopupMenu = ppmWatch
     TabOrder = 1
     TreeOptions.AutoOptions = [toAutoDropExpand, toAutoScrollOnExpand, toAutoSpanColumns, toAutoTristateTracking, toAutoDeleteMovedNodes]
     TreeOptions.MiscOptions = [toEditable, toFullRepaintOnResize, toInitOnSave, toReportMode, toToggleOnDblClick, toWheelPanning]
@@ -61,6 +63,7 @@ object frmWatch: TfrmWatch
     OnEditing = vstWatchEditing
     OnGetText = vstWatchGetText
     OnGetNodeDataSize = vstWatchGetNodeDataSize
+    OnKeyDown = vstWatchKeyDown
     Columns = <
       item
         Position = 0
@@ -92,16 +95,24 @@ object frmWatch: TfrmWatch
       ImageIndex = 0
       OnClick = tbtnAddWatchClick
     end
-    object ToolButton1: TToolButton
+    object tbtnDelete: TToolButton
       Left = 23
       Top = 0
+      Hint = 'Delete Selected Watch Item'
+      Caption = 'tbtnDelete'
+      ImageIndex = 2
+      OnClick = tbtnDeleteClick
+    end
+    object ToolButton1: TToolButton
+      Left = 46
+      Top = 0
       Width = 8
       Caption = 'ToolButton1'
       ImageIndex = 1
       Style = tbsSeparator
     end
     object tbtnRefreshWatch: TToolButton
-      Left = 31
+      Left = 54
       Top = 0
       Hint = 'Refresh Watch List'
       ImageIndex = 1
@@ -118,9 +129,27 @@ object frmWatch: TfrmWatch
     OnKeyDown = FEditKeyDown
   end
   object ppmWatch: TPopupMenu
-    Images = frmMain.imlActions
+    Images = imlWatch
     Left = 48
     Top = 48
+    object AddWatch1: TMenuItem
+      Caption = 'Add Watch...'
+      ImageIndex = 0
+      OnClick = AddWatch1Click
+    end
+    object DeleteSelectedItem1: TMenuItem
+      Caption = 'Delete Selected Item'
+      ImageIndex = 2
+      OnClick = DeleteSelectedItem1Click
+    end
+    object N1: TMenuItem
+      Caption = '-'
+    end
+    object Refresh1: TMenuItem
+      Caption = 'Refresh'
+      ImageIndex = 1
+      OnClick = Refresh1Click
+    end
   end
   object JvDockClient1: TJvDockClient
     LRDockWidth = 100
@@ -136,135 +165,135 @@ object frmWatch: TfrmWatch
     Left = 16
     Top = 48
     Bitmap = {
-      494C010102000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000001000000001002000000000000010
       000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF000000000000000000000000008484840084848400000000000000
       00000000000084848400FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF008484840000000000FF00
       FF0000000000C6C6C600C6C6C600C6C6C6000000000000000000C6C6C600C6C6
       C600C6C6C60000000000FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF0000008000FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF0000000000FF00FF00FF00
       FF0000000000FFFFFF00FFFFFF00C6C6C6000000000000000000FFFFFF00FFFF
       FF00C6C6C60000000000FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF0000008000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF0000000000FF00FF00FF00
       FF0000000000C6C6C600FFFFFF00C6C6C6000000000000000000C6C6C600FFFF
       FF00C6C6C60000000000FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF00FFFFFF000084000000840000008400000084000000840000FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
+      80000000800000008000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF0000008000FFFFFF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF0000000000FF00FF000000
       0000848484000000000000000000000000000000000084848400000000000000
       00000000000084848400FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFFFF000084
-      0000FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      0000FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF000000
+      80000000800000008000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF0000008000FFFFFF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF0084848400000000008484
       8400FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008484
       840000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF000084
-      0000FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      0000FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00000080000000800000008000FFFFFF00FF00FF00FF00FF00FF00FF000000
+      800000008000FFFFFF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF0000840000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000084
-      0000FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      0000FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00000080000000800000008000FFFFFF00FF00FF00000080000000
+      8000FFFFFF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF0000840000FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF000000800000008000000080000000800000008000FFFF
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF0000840000FFFFFF00FFFFFF000084000000840000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00000080000000800000008000FFFFFF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008400
       000084000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF00FFFFFF000084000000840000008400000084000000840000FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF000000800000008000000080000000800000008000FFFF
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008400
       000084000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000084000000840000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00000080000000800000008000FFFFFF00FF00FF0000008000FFFF
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0084000000840000008400
       0000840000008400000084000000FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000840000FFFFFF00FFFFFF000000
-      0000000000000000000000000000FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF000000
+      8000000080000000800000008000FFFFFF00FF00FF00FF00FF00FF00FF000000
+      800000008000FFFFFF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0084000000840000008400
       0000840000008400000084000000FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
-      0000FFFFFF0000000000FF00FF00FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      0000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00000080000000
+      80000000800000008000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF000000800000008000FFFFFF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008400
       000084000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
-      000000000000FF00FF00FF00FF00FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000080000000
+      8000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF000000800000008000FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008400
       000084000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000424D3E000000000000003E000000
       2800000040000000100000000100010000000000800000000000000000000000

+ 64 - 14
LuaEdit/Watch.pas

@@ -18,6 +18,7 @@ type
     Value: String;
     Name: String;
     NestedTableCount: Integer;
+    ToKeep: Boolean;
   end;
 
   // Our own edit link to implement several different node editors.
@@ -50,6 +51,11 @@ type
     tbtnRefreshWatch: TToolButton;
     imlWatch: TImageList;
     FEdit: TEdit;
+    tbtnDelete: TToolButton;
+    DeleteSelectedItem1: TMenuItem;
+    N1: TMenuItem;
+    Refresh1: TMenuItem;
+    AddWatch1: TMenuItem;
     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);
@@ -62,6 +68,13 @@ type
     procedure vstWatchEdited(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex);
     procedure vstWatchChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
     procedure FEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+    procedure vstWatchKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+    procedure DeleteSelected();
+    procedure tbtnDeleteClick(Sender: TObject);
+    procedure FormCreate(Sender: TObject);
+    procedure AddWatch1Click(Sender: TObject);
+    procedure Refresh1Click(Sender: TObject);
+    procedure DeleteSelectedItem1Click(Sender: TObject);
   private
     { Private declarations }
     procedure WMStartEditing(var Message: TMessage); message WM_STARTEDITING;
@@ -124,6 +137,8 @@ begin
   end;
 
   frmWatch.FEdit.Hide;
+  frmWatch.tbtnDelete.Enabled := True;
+  frmWatch.DeleteSelectedItem1.Enabled := True;
   FTree.SetFocus;
 end;
 
@@ -152,6 +167,9 @@ begin
   FColumn := Column;
     
   Data := FTree.GetNodeData(Node);
+  frmWatch.tbtnDelete.Enabled := False;
+  frmWatch.DeleteSelectedItem1.Enabled := False;
+
   with frmWatch.FEdit do
   begin
     Visible := False;
@@ -271,21 +289,8 @@ begin
 end;
 
 procedure TfrmWatch.tbtnAddWatchClick(Sender: TObject);
-var
-  pNode: PVirtualNode;
-  pData: PWatchNodeData;
-  sVarName: String;
 begin
-  sVarName := 'VarName';
-
-  if InputQuery('Add Watch', 'Enter the name of the variable to watch:', sVarName) then
-  begin
-    vstWatch.RootNodeCount := vstWatch.RootNodeCount + 1;
-    pNode := vstWatch.GetLast;
-    pData := vstWatch.GetNodeData(pNode);
-    pData.Name := sVarName;
-    frmMain.PrintWatch(frmMain.LuaState);
-  end;
+  frmMain.DoAddWatchExecute;
 end;
 
 procedure TfrmWatch.vstWatchEdited(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex);
@@ -309,6 +314,9 @@ procedure TfrmWatch.vstWatchChange(Sender: TBaseVirtualTree; Node: PVirtualNode)
 begin
   with Sender do
   begin
+    tbtnDelete.Enabled := Assigned(GetFirstSelected());
+    DeleteSelectedItem1.Enabled := Assigned(GetFirstSelected());
+
     // Start immediate editing as soon as another node gets focused.
     if Assigned(Node) and (Node.Parent <> RootNode) then
     begin
@@ -358,4 +366,46 @@ begin
   end;
 end;
 
+procedure TfrmWatch.vstWatchKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+begin
+  if not vstWatch.IsEditing then
+  begin
+    // Seek delete key for node deletion
+    if Key = VK_DELETE then
+      DeleteSelected;
+  end;
+end;
+
+procedure TfrmWatch.DeleteSelected();
+begin
+  if Assigned(vstWatch.GetFirstSelected()) then
+    vstWatch.DeleteNode(vstWatch.GetFirstSelected());
+end;
+
+procedure TfrmWatch.tbtnDeleteClick(Sender: TObject);
+begin
+  DeleteSelected;
+end;
+
+procedure TfrmWatch.FormCreate(Sender: TObject);
+begin
+  tbtnDelete.Enabled := False;
+  DeleteSelectedItem1.Enabled := False;
+end;
+
+procedure TfrmWatch.AddWatch1Click(Sender: TObject);
+begin
+  tbtnAddWatch.Click;
+end;
+
+procedure TfrmWatch.Refresh1Click(Sender: TObject);
+begin
+  tbtnRefreshWatch.Click;
+end;
+
+procedure TfrmWatch.DeleteSelectedItem1Click(Sender: TObject);
+begin
+  tbtnDelete.Click;
+end;
+
 end.