Browse Source

CH: Many, many bug fixes + changed all calls to FileExists to a local function that's more reliable (FileExistsAbs) + Added new tools + Complete change of project tree

Jean-Francois Goulet 19 years ago
parent
commit
4f84eb5b64

File diff suppressed because it is too large
+ 2136 - 946
LuaEdit/About.dfm


+ 11 - 10
LuaEdit/About.pas

@@ -4,16 +4,17 @@ interface
 
 
 uses
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
-  Dialogs, StdCtrls, jpeg, ExtCtrls, ShellAPI, JvGIF;
+  Dialogs, StdCtrls, jpeg, ExtCtrls, ShellAPI, JvGIF, JvExControls,
+  JvComponent, JvXPCore, JvXPButtons;
 
 
 type
 type
   TfrmAbout = class(TForm)
   TfrmAbout = class(TForm)
     btnClose: TButton;
     btnClose: TButton;
-    GroupBox1: TGroupBox;
+    Image1: TImage;
+    Label4: TLabel;
     lblVersion: TLabel;
     lblVersion: TLabel;
     Label2: TLabel;
     Label2: TLabel;
     Label3: TLabel;
     Label3: TLabel;
-    imgLuaLogo: TImage;
     Label5: TLabel;
     Label5: TLabel;
     Label6: TLabel;
     Label6: TLabel;
     lblMemory: TLabel;
     lblMemory: TLabel;
@@ -21,18 +22,18 @@ type
     Label7: TLabel;
     Label7: TLabel;
     Label8: TLabel;
     Label8: TLabel;
     Label9: TLabel;
     Label9: TLabel;
-    Image1: TImage;
     Label10: TLabel;
     Label10: TLabel;
     Label1: TLabel;
     Label1: TLabel;
+    imgLuaLogo: TImage;
     Image2: TImage;
     Image2: TImage;
     procedure imgLuaLogoClick(Sender: TObject);
     procedure imgLuaLogoClick(Sender: TObject);
     procedure btnCloseClick(Sender: TObject);
     procedure btnCloseClick(Sender: TObject);
     procedure FormShow(Sender: TObject);
     procedure FormShow(Sender: TObject);
     procedure Label7Click(Sender: TObject);
     procedure Label7Click(Sender: TObject);
-    procedure Image1Click(Sender: TObject);
     procedure Label1Click(Sender: TObject);
     procedure Label1Click(Sender: TObject);
     procedure Image3Click(Sender: TObject);
     procedure Image3Click(Sender: TObject);
     procedure Image2Click(Sender: TObject);
     procedure Image2Click(Sender: TObject);
+    procedure Label4Click(Sender: TObject);
   private
   private
     { Private declarations }
     { Private declarations }
   public
   public
@@ -82,11 +83,6 @@ begin
   ShellExecute(Self.Handle, 'open', PChar('mailto:' + Label7.Caption + '?subject=About LuaEdit...'), nil, nil, SW_SHOWNORMAL);
   ShellExecute(Self.Handle, 'open', PChar('mailto:' + Label7.Caption + '?subject=About LuaEdit...'), nil, nil, SW_SHOWNORMAL);
 end;
 end;
 
 
-procedure TfrmAbout.Image1Click(Sender: TObject);
-begin
-  BrowseURL(PChar('http://www.luaedit.net'));
-end;
-
 procedure TfrmAbout.Label1Click(Sender: TObject);
 procedure TfrmAbout.Label1Click(Sender: TObject);
 begin
 begin
   ShellExecute(Self.Handle, 'open', PChar('mailto:' + Label1.Caption + '?subject=LuaEdit Support...'), nil, nil, SW_SHOWNORMAL);
   ShellExecute(Self.Handle, 'open', PChar('mailto:' + Label1.Caption + '?subject=LuaEdit Support...'), nil, nil, SW_SHOWNORMAL);
@@ -102,4 +98,9 @@ begin
   BrowseURL(PChar('http://opensource.org/index.php'));
   BrowseURL(PChar('http://opensource.org/index.php'));
 end;
 end;
 
 
+procedure TfrmAbout.Label4Click(Sender: TObject);
+begin
+  BrowseURL(PChar('http://www.luaedit.net'));
+end;
+
 end.
 end.

+ 1 - 1
LuaEdit/AddToPrj.dfm

@@ -103,7 +103,7 @@ object frmAddToPrj: TfrmAddToPrj
       Top = 24
       Top = 24
       Width = 305
       Width = 305
       Height = 17
       Height = 17
-      Caption = 'Existing Unit(s)'
+      Caption = 'Existing File(s)'
       TabOrder = 0
       TabOrder = 0
       OnClick = chkExistingClick
       OnClick = chkExistingClick
     end
     end

+ 3 - 1
LuaEdit/AddToPrj.pas

@@ -40,6 +40,8 @@ var
 
 
 implementation
 implementation
 
 
+uses Misc;
+
 {$R *.dfm}
 {$R *.dfm}
 
 
 procedure TfrmAddToPrj.FormShow(Sender: TObject);
 procedure TfrmAddToPrj.FormShow(Sender: TObject);
@@ -107,7 +109,7 @@ begin
 
 
     for x := 0 to lstFiles.Count - 1 do
     for x := 0 to lstFiles.Count - 1 do
     begin
     begin
-      if not FileExists(lstFiles.Strings[x]) then
+      if not FileExistsAbs(lstFiles.Strings[x]) then
       begin
       begin
         Application.MessageBox(PChar('The file "'+lstFiles.Strings[x]+'" is innexistant.'), 'LuaEdit', MB_OK+MB_ICONERROR);
         Application.MessageBox(PChar('The file "'+lstFiles.Strings[x]+'" is innexistant.'), 'LuaEdit', MB_OK+MB_ICONERROR);
         ModalResult := mrNone;
         ModalResult := mrNone;

+ 1 - 1
LuaEdit/Breakpoints.dfm

@@ -712,7 +712,7 @@ object frmBreakpoints: TfrmBreakpoints
   end
   end
   object JvDockClient1: TJvDockClient
   object JvDockClient1: TJvDockClient
     DirectDrag = False
     DirectDrag = False
-    DockStyle = frmMain.jvDockVSNet
+    DockStyle = frmLuaEditMain.jvDockVSNet
     Left = 24
     Left = 24
     Top = 80
     Top = 80
   end
   end

+ 51 - 13
LuaEdit/EditorSettings.dfm

@@ -134,19 +134,19 @@ object frmEditorSettings: TfrmEditorSettings
       Indent = 19
       Indent = 19
       TabOrder = 0
       TabOrder = 0
       Items.Data = {
       Items.Data = {
-        0400000025000000000000000000000000000000FFFFFFFF0000000003000000
+        0400000025000000010000000100000000000000FFFFFFFF0000000003000000
         0C456E7669726F6E656D656E7420000000FFFFFFFFFFFFFFFF01000000FFFFFF
         0C456E7669726F6E656D656E7420000000FFFFFFFFFFFFFFFF01000000FFFFFF
         FF00000000000000000747656E6572616C25000000FFFFFFFFFFFFFFFF010000
         FF00000000000000000747656E6572616C25000000FFFFFFFFFFFFFFFF010000
         00FFFFFFFF02000000000000000C53656172636820506174687324000000FFFF
         00FFFFFFFF02000000000000000C53656172636820506174687324000000FFFF
         FFFFFFFFFFFF02000000FFFFFFFF03000000000000000B5765622042726F7773
         FFFFFFFFFFFF02000000FFFFFFFF03000000000000000B5765622042726F7773
-        6572210000000000000000000000FFFFFFFFFFFFFFFF07000000010000000844
+        6572210000000100000001000000FFFFFFFFFFFFFFFF07000000010000000844
         6562756767657220000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0700000000
         6562756767657220000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0700000000
-        0000000747656E6572616C240000000000000000000000FFFFFFFFFFFFFFFF01
+        0000000747656E6572616C240000000100000001000000FFFFFFFFFFFFFFFF01
         000000020000000B5465787420456469746F7220000000FFFFFFFFFFFFFFFFFF
         000000020000000B5465787420456469746F7220000000FFFFFFFFFFFFFFFFFF
         FFFFFFFFFFFFFF01000000000000000747656E6572616C1D000000FFFFFFFFFF
         FFFFFFFFFFFFFF01000000000000000747656E6572616C1D000000FFFFFFFFFF
-        FFFFFFFFFFFFFFFFFFFFFF050000000000000004466F6E742000000000000000
-        00000000FFFFFFFFFFFFFFFF040000000200000007446973706C61791F000000
-        0200000002000000FFFFFFFFFFFFFFFF0400000000000000064775747465722C
+        FFFFFFFFFFFFFFFFFFFFFF050000000000000004466F6E742000000001000000
+        01000000FFFFFFFFFFFFFFFF040000000200000007446973706C61791F000000
+        FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000000000000064775747465722C
         000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06000000000000001353796E74
         000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06000000000000001353796E74
         617820486967686C69676874696E67}
         617820486967686C69676874696E67}
       Items.Links = {
       Items.Links = {
@@ -158,7 +158,7 @@ object frmEditorSettings: TfrmEditorSettings
       Top = 0
       Top = 0
       Width = 463
       Width = 463
       Height = 367
       Height = 367
-      ActivePage = JvStandardPage8
+      ActivePage = JvStandardPage1
       PropagateEnable = False
       PropagateEnable = False
       ShowDesignCaption = sdcNone
       ShowDesignCaption = sdcNone
       Align = alClient
       Align = alClient
@@ -1121,7 +1121,7 @@ object frmEditorSettings: TfrmEditorSettings
         end
         end
         object Label18: TLabel
         object Label18: TLabel
           Left = 16
           Left = 16
-          Top = 144
+          Top = 160
           Width = 161
           Width = 161
           Height = 13
           Height = 13
           Caption = 'Maximum Printable Size of Tables:'
           Caption = 'Maximum Printable Size of Tables:'
@@ -1135,7 +1135,7 @@ object frmEditorSettings: TfrmEditorSettings
         end
         end
         object JvGroupHeader8: TJvGroupHeader
         object JvGroupHeader8: TJvGroupHeader
           Left = 0
           Left = 0
-          Top = 120
+          Top = 136
           Width = 463
           Width = 463
           Height = 17
           Height = 17
           Align = alCustom
           Align = alCustom
@@ -1149,14 +1149,28 @@ object frmEditorSettings: TfrmEditorSettings
         end
         end
         object Label19: TLabel
         object Label19: TLabel
           Left = 16
           Left = 16
-          Top = 192
+          Top = 208
           Width = 133
           Width = 133
           Height = 13
           Height = 13
           Caption = 'Maximum Sub Tables Level:'
           Caption = 'Maximum Sub Tables Level:'
         end
         end
+        object JvGroupHeader9: TJvGroupHeader
+          Left = 0
+          Top = 296
+          Width = 463
+          Height = 17
+          Align = alCustom
+          Caption = 'Miscellaneous'
+          Font.Charset = DEFAULT_CHARSET
+          Font.Color = clWindowText
+          Font.Height = -11
+          Font.Name = 'Tahoma'
+          Font.Style = []
+          ParentFont = False
+        end
         object jvspinMaxTablesSize: TJvSpinEdit
         object jvspinMaxTablesSize: TJvSpinEdit
           Left = 16
           Left = 16
-          Top = 158
+          Top = 174
           Width = 201
           Width = 201
           Height = 21
           Height = 21
           MaxValue = 65536.000000000000000000
           MaxValue = 65536.000000000000000000
@@ -1190,7 +1204,7 @@ object frmEditorSettings: TfrmEditorSettings
         end
         end
         object chkAutoLoadLibTable: TCheckBox
         object chkAutoLoadLibTable: TCheckBox
           Left = 16
           Left = 16
-          Top = 48
+          Top = 96
           Width = 201
           Width = 201
           Height = 17
           Height = 17
           Caption = 'Table Library'
           Caption = 'Table Library'
@@ -1214,7 +1228,7 @@ object frmEditorSettings: TfrmEditorSettings
         end
         end
         object jvspinMaxSubTablesLevel: TJvSpinEdit
         object jvspinMaxSubTablesLevel: TJvSpinEdit
           Left = 16
           Left = 16
-          Top = 206
+          Top = 222
           Width = 201
           Width = 201
           Height = 21
           Height = 21
           MaxValue = 999.000000000000000000
           MaxValue = 999.000000000000000000
@@ -1222,6 +1236,30 @@ object frmEditorSettings: TfrmEditorSettings
           Value = 999.000000000000000000
           Value = 999.000000000000000000
           TabOrder = 7
           TabOrder = 7
         end
         end
+        object chkAutoLoadLibPackage: TCheckBox
+          Left = 16
+          Top = 48
+          Width = 185
+          Height = 17
+          Caption = 'Package Library (Recommended)'
+          TabOrder = 8
+        end
+        object chkCheckCyclicReferencing: TCheckBox
+          Left = 16
+          Top = 256
+          Width = 233
+          Height = 17
+          Caption = 'Check Cyclic Referencing (Recommended)'
+          TabOrder = 9
+        end
+        object chkShowStackTraceOnError: TCheckBox
+          Left = 16
+          Top = 320
+          Width = 289
+          Height = 17
+          Caption = 'Show Stack Trace On Lua Errors'
+          TabOrder = 10
+        end
       end
       end
     end
     end
     object Panel3: TPanel
     object Panel3: TPanel

+ 29 - 4
LuaEdit/EditorSettings.pas

@@ -127,6 +127,10 @@ type
     chkAutoLoadLibDebug: TCheckBox;
     chkAutoLoadLibDebug: TCheckBox;
     jvspinMaxSubTablesLevel: TJvSpinEdit;
     jvspinMaxSubTablesLevel: TJvSpinEdit;
     Label19: TLabel;
     Label19: TLabel;
+    chkAutoLoadLibPackage: TCheckBox;
+    chkCheckCyclicReferencing: TCheckBox;
+    JvGroupHeader9: TJvGroupHeader;
+    chkShowStackTraceOnError: TCheckBox;
     procedure cboFontsMeasureItem(Control: TWinControl; Index: Integer;  var Height: Integer);
     procedure cboFontsMeasureItem(Control: TWinControl; Index: Integer;  var Height: Integer);
     procedure cboFontsDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
     procedure cboFontsDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
     procedure FormCreate(Sender: TObject);
     procedure FormCreate(Sender: TObject);
@@ -430,12 +434,20 @@ begin
     if chkFileAssociate.Checked then
     if chkFileAssociate.Checked then
     begin
     begin
       // Register file association for .lpr files
       // Register file association for .lpr files
-      RegSetAssociation('.lpr', 'LuaEdit.lpr', 'LuaEdit Project', 'LuaEdit/LuaEdit.lpr', PChar(ExtractFileDir(Application.ExeName) + '\Graphics\Project.ico'));
+      RegSetAssociation('.lpr', 'LuaEdit.lpr', 'LuaEdit Project', 'LuaEdit/LuaEdit.lpr', PChar(GetLuaEditInstallPath() + '\Graphics\Project.ico'));
       RegSetOpenWith('LuaEdit.lpr', PChar(Application.ExeName + ' %1'));
       RegSetOpenWith('LuaEdit.lpr', PChar(Application.ExeName + ' %1'));
 
 
       // Register file association for .lua files
       // Register file association for .lua files
-      RegSetAssociation('.lua', 'LuaEdit.lua', 'LuaEdit Unit', 'LuaEdit/LuaEdit.lua', PChar(ExtractFileDir(Application.ExeName) + '\Graphics\Unit.ico'));
+      RegSetAssociation('.lua', 'LuaEdit.lua', 'LuaEdit Unit', 'LuaEdit/LuaEdit.lua', PChar(GetLuaEditInstallPath() + '\Graphics\Unit.ico'));
       RegSetOpenWith('LuaEdit.lua', PChar(Application.ExeName + ' %1'));
       RegSetOpenWith('LuaEdit.lua', PChar(Application.ExeName + ' %1'));
+
+      // Register file association for .lmc files
+      RegSetAssociation('.lmc', 'LuaEdit.lmc', 'LuaEdit Macro', 'LuaEdit/LuaEdit.lmc', PChar(GetLuaEditInstallPath() + '\Graphics\LuaMacros.ico'));
+      RegSetOpenWith('LuaEdit.lmc', PChar(Application.ExeName + ' %1'));
+
+      // Register file association for .gui files
+      RegSetAssociation('.gui', 'LuaEdit.gui', 'LuaEdit GUI Form', 'LuaEdit/LuaEdit.gui', PChar(GetLuaEditInstallPath() + '\Graphics\LuaGUIForm.ico'));
+      RegSetOpenWith('LuaEdit.gui', PChar(Application.ExeName + ' %1'));
     end
     end
     else
     else
     begin      
     begin      
@@ -446,6 +458,14 @@ begin
       // Clear file association registration for .lua files
       // Clear file association registration for .lua files
       RegClearIEOpenKey('.lua');
       RegClearIEOpenKey('.lua');
       RegClearAssociation('.lua', 'LuaEdit.lua');
       RegClearAssociation('.lua', 'LuaEdit.lua');
+
+      // Clear file association registration for .lmc files
+      RegClearIEOpenKey('.lmc');
+      RegClearAssociation('.lmc', 'LuaEdit.lmc');
+
+      // Clear file association registration for .gui files
+      RegClearIEOpenKey('.gui');
+      RegClearAssociation('.gui', 'LuaEdit.gui');
     end;
     end;
 
 
     if Application.MessageBox('You must restart your computer for some of the changes to take effect. Do you want to restart your computer now?', 'LuaEdit', MB_ICONQUESTION+MB_YESNO) = IDYES then
     if Application.MessageBox('You must restart your computer for some of the changes to take effect. Do you want to restart your computer now?', 'LuaEdit', MB_ICONQUESTION+MB_YESNO) = IDYES then
@@ -467,13 +487,15 @@ begin
   pReg.OpenKey('\Software\LuaEdit\EditorSettings\Debugger', True);
   pReg.OpenKey('\Software\LuaEdit\EditorSettings\Debugger', True);
   pReg.WriteInteger('MaxTablesSize', Trunc(jvspinMaxTablesSize.Value));
   pReg.WriteInteger('MaxTablesSize', Trunc(jvspinMaxTablesSize.Value));
   pReg.WriteInteger('MaxSubTablesLevel', Trunc(jvspinMaxSubTablesLevel.Value));
   pReg.WriteInteger('MaxSubTablesLevel', Trunc(jvspinMaxSubTablesLevel.Value));
+  pReg.WriteBool('CheckCyclicReferencing', chkCheckCyclicReferencing.Checked);
   pReg.WriteBool('AutoLoadLibBasic', chkAutoLoadLibBasic.Checked);
   pReg.WriteBool('AutoLoadLibBasic', chkAutoLoadLibBasic.Checked);
+  pReg.WriteBool('AutoLoadLibPackage', chkAutoLoadLibPackage.Checked);
   pReg.WriteBool('AutoLoadLibTable', chkAutoLoadLibTable.Checked);
   pReg.WriteBool('AutoLoadLibTable', chkAutoLoadLibTable.Checked);
   pReg.WriteBool('AutoLoadLibString', chkAutoLoadLibString.Checked);
   pReg.WriteBool('AutoLoadLibString', chkAutoLoadLibString.Checked);
   pReg.WriteBool('AutoLoadLibMath', chkAutoLoadLibMath.Checked);
   pReg.WriteBool('AutoLoadLibMath', chkAutoLoadLibMath.Checked);
   pReg.WriteBool('AutoLoadLibOSIO', chkAutoLoadLibOSIO.Checked);
   pReg.WriteBool('AutoLoadLibOSIO', chkAutoLoadLibOSIO.Checked);
   pReg.WriteBool('AutoLoadLibDebug', chkAutoLoadLibDebug.Checked);
   pReg.WriteBool('AutoLoadLibDebug', chkAutoLoadLibDebug.Checked);
-
+  pReg.WriteBool('ShowStackTraceOnError', chkShowStackTraceOnError.Checked);
 
 
   //Writing display settings
   //Writing display settings
   pReg.OpenKey('\Software\LuaEdit\EditorSettings\Display', True);
   pReg.OpenKey('\Software\LuaEdit\EditorSettings\Display', True);
@@ -614,13 +636,16 @@ begin
   txtTempFolder.Text := TempFolder;
   txtTempFolder.Text := TempFolder;
   jvspinHistoryMaxAge.Value := HistoryMaxAge;
   jvspinHistoryMaxAge.Value := HistoryMaxAge;
   jvspinMaxTablesSize.Value := MaxTablesSize;
   jvspinMaxTablesSize.Value := MaxTablesSize;
+  chkCheckCyclicReferencing.Checked := CheckCyclicReferencing;
   jvspinMaxSubTablesLevel.Value := MaxSubTablesLevel;
   jvspinMaxSubTablesLevel.Value := MaxSubTablesLevel;
   chkAutoLoadLibBasic.Checked := AutoLoadLibBasic;
   chkAutoLoadLibBasic.Checked := AutoLoadLibBasic;
+  chkAutoLoadLibPackage.Checked := AutoLoadLibPackage;
   chkAutoLoadLibTable.Checked := AutoLoadLibTable;
   chkAutoLoadLibTable.Checked := AutoLoadLibTable;
   chkAutoLoadLibString.Checked := AutoLoadLibString;
   chkAutoLoadLibString.Checked := AutoLoadLibString;
   chkAutoLoadLibMath.Checked := AutoLoadLibMath;
   chkAutoLoadLibMath.Checked := AutoLoadLibMath;
   chkAutoLoadLibOSIO.Checked := AutoLoadLibOSIO;
   chkAutoLoadLibOSIO.Checked := AutoLoadLibOSIO;
   chkAutoLoadLibDebug.Checked := AutoLoadLibDebug;
   chkAutoLoadLibDebug.Checked := AutoLoadLibDebug;
+  chkShowStackTraceOnError.Checked := ShowStackTraceOnError;
 
 
   // Manage serach paths
   // Manage serach paths
   txtLibraries.Text := '';
   txtLibraries.Text := '';
@@ -877,7 +902,7 @@ begin
   begin
   begin
     if sColorSet <> '' then
     if sColorSet <> '' then
     begin
     begin
-      if not FileExists(GetLuaEditInstallPath()+'\Data\'+sColorSet+'.dat') then
+      if not FileExistsAbs(GetLuaEditInstallPath()+'\Data\'+sColorSet+'.dat') then
       begin
       begin
         if not DirectoryExists(GetLuaEditInstallPath()+'\Data\') then
         if not DirectoryExists(GetLuaEditInstallPath()+'\Data\') then
           CreateDirectory(PChar(GetLuaEditInstallPath()+'\Data\'), nil);
           CreateDirectory(PChar(GetLuaEditInstallPath()+'\Data\'), nil);

+ 1 - 1
LuaEdit/FindWindow1.dfm

@@ -51,7 +51,7 @@ object frmFindWindow1: TfrmFindWindow1
   end
   end
   object JvDockClient1: TJvDockClient
   object JvDockClient1: TJvDockClient
     DirectDrag = False
     DirectDrag = False
-    DockStyle = frmMain.jvDockVSNet
+    DockStyle = frmLuaEditMain.jvDockVSNet
     Left = 8
     Left = 8
     Top = 24
     Top = 24
   end
   end

+ 1 - 1
LuaEdit/FindWindow2.dfm

@@ -51,7 +51,7 @@ object frmFindWindow2: TfrmFindWindow2
   end
   end
   object JvDockClient1: TJvDockClient
   object JvDockClient1: TJvDockClient
     DirectDrag = False
     DirectDrag = False
-    DockStyle = frmMain.jvDockVSNet
+    DockStyle = frmLuaEditMain.jvDockVSNet
     Left = 8
     Left = 8
     Top = 24
     Top = 24
   end
   end

+ 15 - 14
LuaEdit/LEMacros.pas

@@ -47,7 +47,7 @@ begin
       FilesName.Add(StrPas(lua_tostring(L, x)));
       FilesName.Add(StrPas(lua_tostring(L, x)));
 
 
   // Return the luaedit version as a string
   // Return the luaedit version as a string
-  lua_pushboolean(L, Integer(frmLuaEditMain.DoOpenFileExecute(FilesName)));
+  lua_pushboolean(L, frmLuaEditMain.DoOpenFileExecute(FilesName));
 
 
   // Free variables
   // Free variables
   FilesName.Free;
   FilesName.Free;
@@ -67,7 +67,7 @@ end;
 function LuaLEOpenProject(L: Plua_State): Integer; cdecl;
 function LuaLEOpenProject(L: Plua_State): Integer; cdecl;
 begin
 begin
   // Return the luaedit version as a string
   // Return the luaedit version as a string
-  lua_pushboolean(L, Integer(frmLuaEditMain.DoOpenProjectExecute()));
+  lua_pushboolean(L, frmLuaEditMain.DoOpenProjectExecute());
 
 
   // Return in Delphi the number of argument pushed on the stack
   // Return in Delphi the number of argument pushed on the stack
   Result := 1;
   Result := 1;
@@ -84,7 +84,7 @@ end;
 function LuaLESaveAll(L: Plua_State): Integer; cdecl;
 function LuaLESaveAll(L: Plua_State): Integer; cdecl;
 begin
 begin
   // Return the luaedit version as a string
   // Return the luaedit version as a string
-  lua_pushboolean(L, Integer(frmLuaEditMain.DoSaveAllExecute()));
+  lua_pushboolean(L, frmLuaEditMain.DoSaveAllExecute());
 
 
   // Return in Delphi the number of argument pushed on the stack
   // Return in Delphi the number of argument pushed on the stack
   Result := 1;
   Result := 1;
@@ -101,7 +101,7 @@ end;
 function LuaLESavePrjAs(L: Plua_State): Integer; cdecl;
 function LuaLESavePrjAs(L: Plua_State): Integer; cdecl;
 begin
 begin
   // Return the luaedit version as a string
   // Return the luaedit version as a string
-  lua_pushboolean(L, Integer(frmLuaEditMain.DoSaveProjectAsExecute()));
+  lua_pushboolean(L, frmLuaEditMain.DoSaveProjectAsExecute());
 
 
   // Return in Delphi the number of argument pushed on the stack
   // Return in Delphi the number of argument pushed on the stack
   Result := 1;
   Result := 1;
@@ -118,7 +118,7 @@ end;
 function LuaLESaveUnitAs(L: Plua_State): Integer; cdecl;
 function LuaLESaveUnitAs(L: Plua_State): Integer; cdecl;
 begin
 begin
   // Return the luaedit version as a string
   // Return the luaedit version as a string
-  lua_pushboolean(L, Integer(frmLuaEditMain.DoSaveAsExecute()));
+  lua_pushboolean(L, frmLuaEditMain.DoSaveAsExecute());
 
 
   // Return in Delphi the number of argument pushed on the stack
   // Return in Delphi the number of argument pushed on the stack
   Result := 1;
   Result := 1;
@@ -135,7 +135,7 @@ end;
 function LuaLESaveUnit(L: Plua_State): Integer; cdecl;
 function LuaLESaveUnit(L: Plua_State): Integer; cdecl;
 begin
 begin
   // Return the luaedit version as a string
   // Return the luaedit version as a string
-  lua_pushboolean(L, Integer(frmLuaEditMain.DoSaveExecute()));
+  lua_pushboolean(L, frmLuaEditMain.DoSaveExecute());
 
 
   // Return in Delphi the number of argument pushed on the stack
   // Return in Delphi the number of argument pushed on the stack
   Result := 1;
   Result := 1;
@@ -201,22 +201,22 @@ begin
 
 
         // Push "IsLoaded" data
         // Push "IsLoaded" data
         lua_pushstring(L, 'IsLoaded');
         lua_pushstring(L, 'IsLoaded');
-        lua_pushboolean(L, Integer(pLuaUnit.IsLoaded));
+        lua_pushboolean(L, pLuaUnit.IsLoaded);
         lua_settable(L, -3);
         lua_settable(L, -3);
 
 
         // Push "IsReadOnly" data
         // Push "IsReadOnly" data
         lua_pushstring(L, 'IsReadOnly');
         lua_pushstring(L, 'IsReadOnly');
-        lua_pushboolean(L, Integer(pLuaUnit.IsReadOnly));
+        lua_pushboolean(L, pLuaUnit.IsReadOnly);
         lua_settable(L, -3);
         lua_settable(L, -3);
 
 
         // Push "IsNew" data
         // Push "IsNew" data
         lua_pushstring(L, 'IsNew');
         lua_pushstring(L, 'IsNew');
-        lua_pushboolean(L, Integer(pLuaUnit.IsNew));
+        lua_pushboolean(L, pLuaUnit.IsNew);
         lua_settable(L, -3);
         lua_settable(L, -3);
 
 
         // Push "HasChanged" data
         // Push "HasChanged" data
         lua_pushstring(L, 'HasChanged');
         lua_pushstring(L, 'HasChanged');
-        lua_pushboolean(L, Integer(pLuaUnit.HasChanged));
+        lua_pushboolean(L, pLuaUnit.HasChanged);
         lua_settable(L, -3);
         lua_settable(L, -3);
 
 
         // Push "Text" data
         // Push "Text" data
@@ -344,22 +344,22 @@ begin
 
 
     // Push "AutoIncRevNumber" data
     // Push "AutoIncRevNumber" data
     lua_pushstring(L, 'AutoIncRevNumber');
     lua_pushstring(L, 'AutoIncRevNumber');
-    lua_pushboolean(L, Integer(ActiveProject.AutoIncRevNumber));
+    lua_pushboolean(L, ActiveProject.AutoIncRevNumber);
     lua_settable(L, -3);
     lua_settable(L, -3);
 
 
     // Push "IsReadOnly" data
     // Push "IsReadOnly" data
     lua_pushstring(L, 'IsReadOnly');
     lua_pushstring(L, 'IsReadOnly');
-    lua_pushboolean(L, Integer(ActiveProject.IsReadOnly));
+    lua_pushboolean(L, ActiveProject.IsReadOnly);
     lua_settable(L, -3);
     lua_settable(L, -3);
 
 
     // Push "IsNew" data
     // Push "IsNew" data
     lua_pushstring(L, 'IsNew');
     lua_pushstring(L, 'IsNew');
-    lua_pushboolean(L, Integer(ActiveProject.IsNew));
+    lua_pushboolean(L, ActiveProject.IsNew);
     lua_settable(L, -3);
     lua_settable(L, -3);
 
 
     // Push "HasChanged" data
     // Push "HasChanged" data
     lua_pushstring(L, 'HasChanged');
     lua_pushstring(L, 'HasChanged');
-    lua_pushboolean(L, Integer(ActiveProject.HasChanged));
+    lua_pushboolean(L, ActiveProject.HasChanged);
     lua_settable(L, -3);
     lua_settable(L, -3);
     
     
     // Push "VersionMajor" data
     // Push "VersionMajor" data
@@ -671,6 +671,7 @@ const
 begin
 begin
   // Open basic lua libraries
   // Open basic lua libraries
   lua_baselibopen(L);
   lua_baselibopen(L);
+  lua_packlibopen(L);
   lua_tablibopen(L);
   lua_tablibopen(L);
   lua_strlibopen(L);
   lua_strlibopen(L);
   lua_iolibopen(L);
   lua_iolibopen(L);

+ 7 - 9
LuaEdit/LuaCore/LuaUtils.pas

@@ -154,14 +154,17 @@ const
   LF = #$0A;
   LF = #$0A;
   CRLF = CR + LF;
   CRLF = CR + LF;
 
 
-function Quote(const Str: string): string;
+function Quote(const Str: String): String;
 begin
 begin
   Result := AnsiQuotedStr(Str, QuoteStr);
   Result := AnsiQuotedStr(Str, QuoteStr);
 end;
 end;
 
 
-function Dequote(const QuotedStr: string): string;
+function Dequote(const QuotedStr: String): String;
 begin
 begin
-  Result := AnsiDequotedStr(QuotedStr, QuoteStr);
+  Result := QuotedStr;
+  
+  if ((AnsiStrScan(PChar(QuotedStr), QuoteStr) = QuotedStr) and (AnsiStrRScan(PChar(QuotedStr), QuoteStr) = QuoteStr)) then
+    Result := Copy(QuotedStr, 2, Length(QuotedStr) - 2);
 end;
 end;
 
 
 function fwriteex(F, S: PChar; Un, Len: Integer; L, Dummy: Integer): Integer;
 function fwriteex(F, S: PChar; Un, Len: Integer; L, Dummy: Integer): Integer;
@@ -1287,14 +1290,9 @@ begin
   raise ELuaException.Create(Title, Line, Msg);
   raise ELuaException.Create(Title, Line, Msg);
 end;
 end;
 
 
-function LuaPCallFunction(L: Plua_State; FunctionName :String;
-                          const Args: array of Variant;
-                          Results : PVariantArray;
-                          ErrFunc: Integer=0;
-                          NResults :Integer=LUA_MULTRET):Integer;
+function LuaPCallFunction(L: Plua_State; FunctionName :String; const Args: array of Variant; Results : PVariantArray; ErrFunc: Integer=0; NResults :Integer=LUA_MULTRET):Integer;
 var
 var
    NArgs, i: Integer;
    NArgs, i: Integer;
-
 begin
 begin
      //Put Function To Call on the Stack
      //Put Function To Call on the Stack
      luaPushString(L, FunctionName);
      luaPushString(L, FunctionName);

+ 16 - 3
LuaEdit/LuaEdit.dof

@@ -114,8 +114,8 @@ IncludeVerInfo=1
 AutoIncBuild=1
 AutoIncBuild=1
 MajorVer=3
 MajorVer=3
 MinorVer=0
 MinorVer=0
-Release=2
-Build=148
+Release=3
+Build=205
 Debug=0
 Debug=0
 PreRelease=0
 PreRelease=0
 Special=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=1252
 [Version Info Keys]
 [Version Info Keys]
 CompanyName=Open Source
 CompanyName=Open Source
 FileDescription=IDE for Lua 5.0.2
 FileDescription=IDE for Lua 5.0.2
-FileVersion=3.0.2.148
+FileVersion=3.0.3.205
 InternalName=LuaEdit
 InternalName=LuaEdit
 LegalCopyright=LuaEdit Copyright 2004-2006 ©
 LegalCopyright=LuaEdit Copyright 2004-2006 ©
 LegalTrademarks=
 LegalTrademarks=
@@ -134,3 +134,16 @@ OriginalFilename=LuaEdit.exe
 ProductName=LuaEdit for Lua 5.0
 ProductName=LuaEdit for Lua 5.0
 ProductVersion=3.0.2.116
 ProductVersion=3.0.2.116
 Comments=This project was originally created by Jean-Francois Goulet. Please Visit www.luaedit.net for more informations.
 Comments=This project was originally created by Jean-Francois Goulet. Please Visit www.luaedit.net for more informations.
+[HistoryLists\hlConditionals]
+Count=1
+Item0=madExcept
+[HistoryLists\hlUnitAliases]
+Count=1
+Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+[HistoryLists\hlSearchPath]
+Count=2
+Item0=$(DELPHI)\Lib\Debug;C:\Prog\Delphi\COMPON~1\JEDI\jcl\lib\D7\debug;C:\Prog\Delphi\Component\JEDI\jcl\lib\D7\debug;.\Syntax;.\LuaCore;C:\Prog\Delphi\Component\XPMenu;C:\Prog\Delphi\Component\SynEdit\Source;C:\Prog\Delphi\Component\ExtLib
+Item1=C:\Prog\Delphi\Component\JEDI\jcl\lib\D7\debug;.\Syntax;.\LuaCore;C:\Prog\Delphi\Component\XPMenu;C:\Prog\Delphi\Component\SynEdit\Source;C:\Prog\Delphi\Component\ExtLib
+[HistoryLists\hlOutputDirectorry]
+Count=1
+Item0=.\bin

+ 6 - 4
LuaEdit/LuaEdit.dpr

@@ -68,7 +68,8 @@ uses
   GUIInspector in 'GUIInspector.pas' {frmGUIInspector},
   GUIInspector in 'GUIInspector.pas' {frmGUIInspector},
   GUIDesigner in 'GUIDesigner.pas' {GUIForm1},
   GUIDesigner in 'GUIDesigner.pas' {GUIForm1},
   GUIControls in 'GUIControls.pas' {frmGUIControls},
   GUIControls in 'GUIControls.pas' {frmGUIControls},
-  GUIFormType in 'GUIFormType.pas' {frmGUIFormType};
+  GUIFormType in 'GUIFormType.pas' {frmGUIFormType},
+  ConvertPath in 'ConvertPath.pas' {frmConvertPath};
 
 
 {$R *.res}
 {$R *.res}
 
 
@@ -107,7 +108,7 @@ begin
   if CheckAppInstance() then
   if CheckAppInstance() then
   begin
   begin
     copyDataStruct.dwData := Integer(cdtAnsiString);
     copyDataStruct.dwData := Integer(cdtAnsiString);
-    copyDataStruct.cbData := Length(CmdLine)+1; // +1 NULL
+    copyDataStruct.cbData := Length(CmdLine) + 1; // +1 NULL
     copyDataStruct.lpData := CmdLine;
     copyDataStruct.lpData := CmdLine;
 
 
 
 
@@ -154,6 +155,7 @@ begin
   Application.CreateForm(TfrmComponentList, frmComponentList);
   Application.CreateForm(TfrmComponentList, frmComponentList);
   Application.CreateForm(TfrmGUID, frmGUID);
   Application.CreateForm(TfrmGUID, frmGUID);
   Application.CreateForm(TfrmMacroManager, frmMacroManager);
   Application.CreateForm(TfrmMacroManager, frmMacroManager);
+  Application.CreateForm(TfrmConvertPath, frmConvertPath);
   frmLuaEditMain.CheckButtons;
   frmLuaEditMain.CheckButtons;
 
 
   // show splash screen...
   // show splash screen...
@@ -173,7 +175,7 @@ begin
   LoadDockTreeFromFile(ExtractFilePath(Application.ExeName) + 'LuaEdit.dck');
   LoadDockTreeFromFile(ExtractFilePath(Application.ExeName) + 'LuaEdit.dck');
 
 
   // Backward compatibility with the ini file (versions < 3.0)
   // Backward compatibility with the ini file (versions < 3.0)
-  if FileExists(GetLuaEditInstallPath()+'\LuaEdit.ini') then
+  if FileExistsAbs(GetLuaEditInstallPath()+'\LuaEdit.ini') then
   begin
   begin
     frmLuaEditMain.LoadEditorSettingsFromReg;
     frmLuaEditMain.LoadEditorSettingsFromReg;
     frmLuaEditMain.LoadEditorSettingsFromIni;
     frmLuaEditMain.LoadEditorSettingsFromIni;
@@ -189,7 +191,7 @@ begin
     begin
     begin
       FileName := ParamStr(x);
       FileName := ParamStr(x);
 
 
-      if FileExists(FileName) then
+      if FileExistsAbs(FileName) then
       begin
       begin
         pFiles.Add(FileName);
         pFiles.Add(FileName);
         frmLuaEditMain.DoOpenFileExecute(pFiles);
         frmLuaEditMain.DoOpenFileExecute(pFiles);

BIN
LuaEdit/LuaEdit.res


+ 5 - 3
LuaEdit/LuaEditMessages.dfm

@@ -34,11 +34,12 @@ object frmLuaEditMessages: TfrmLuaEditMessages
     Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoVisible]
     Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoVisible]
     Header.Style = hsFlatButtons
     Header.Style = hsFlatButtons
     Images = imlMessages
     Images = imlMessages
+    LineMode = lmBands
     ScrollBarOptions.AlwaysVisible = True
     ScrollBarOptions.AlwaysVisible = True
     TabOrder = 0
     TabOrder = 0
     TreeOptions.MiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toReportMode, toToggleOnDblClick, toWheelPanning]
     TreeOptions.MiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toReportMode, toToggleOnDblClick, toWheelPanning]
     TreeOptions.PaintOptions = [toShowDropmark, toThemeAware, toUseBlendedImages]
     TreeOptions.PaintOptions = [toShowDropmark, toThemeAware, toUseBlendedImages]
-    TreeOptions.SelectionOptions = [toFullRowSelect, toRightClickSelect]
+    TreeOptions.SelectionOptions = [toExtendedFocus, toFullRowSelect, toRightClickSelect, toSiblingSelectConstraint]
     OnDblClick = vstLuaEditMessagesDblClick
     OnDblClick = vstLuaEditMessagesDblClick
     OnGetText = vstLuaEditMessagesGetText
     OnGetText = vstLuaEditMessagesGetText
     OnGetImageIndex = vstLuaEditMessagesGetImageIndex
     OnGetImageIndex = vstLuaEditMessagesGetImageIndex
@@ -65,7 +66,7 @@ object frmLuaEditMessages: TfrmLuaEditMessages
     Left = 24
     Left = 24
     Top = 48
     Top = 48
     Bitmap = {
     Bitmap = {
-      494C010103000400040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
+      494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000001000000001002000000000000010
       0000000000003600000028000000400000001000000001002000000000000010
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000004A1E0B0063361B00502511000000
       0000000000000000000000000000000000004A1E0B0063361B00502511000000
@@ -201,6 +202,7 @@ object frmLuaEditMessages: TfrmLuaEditMessages
       FC1F0001C0070000E007000180030000C0038003800300008001800300010000
       FC1F0001C0070000E007000180030000C0038003800300008001800300010000
       0000C007000100000000C007000100000000E00F000100000000E00F00010000
       0000C007000100000000C007000100000000E00F000100000000E00F00010000
       0000F01F000100000000F01F000100000001F81F800300008003F83FC0070000
       0000F01F000100000000F01F000100000001F81F800300008003F83FC0070000
-      C007F87FE00F0000E00FFCFFF01F0000}
+      C007F87FE00F0000E00FFCFFF01F000000000000000000000000000000000000
+      000000000000}
   end
   end
 end
 end

+ 28 - 3
LuaEdit/LuaEditMessages.pas

@@ -27,7 +27,8 @@ type
     { Private declarations }
     { Private declarations }
   public
   public
     { Public declarations }
     { Public declarations }
-    procedure Put(MsgText: String; MsgType: Integer; FileName: String = ''; LineNumber: Integer = -1);
+    function Put(MsgText: String; MsgType: Integer; FileName: String = ''; LineNumber: Integer = -1): PVirtualNode;
+    function PutChild(Parent: PVirtualNode; MsgText: String; MsgType: Integer; FileName: String = ''; LineNumber: Integer = -1): PVirtualNode;
   end;
   end;
 
 
 var
 var
@@ -39,7 +40,7 @@ uses Main, Misc;
 
 
 {$R *.dfm}
 {$R *.dfm}
 
 
-procedure TfrmLuaEditMessages.Put(MsgText: String; MsgType: Integer; FileName: String = ''; LineNumber: Integer = -1);
+function TfrmLuaEditMessages.Put(MsgText: String; MsgType: Integer; FileName: String = ''; LineNumber: Integer = -1): PVirtualNode;
 var
 var
   pData: PLuaEditMsgLine;
   pData: PLuaEditMsgLine;
   pNode: PVirtualNode;
   pNode: PVirtualNode;
@@ -50,6 +51,25 @@ begin
   pData.MsgText := MsgText;
   pData.MsgText := MsgText;
   pData.MsgType := MsgType;
   pData.MsgType := MsgType;
   pData.LineNumber := LineNumber;
   pData.LineNumber := LineNumber;
+
+  vstLuaEditMessages.FullExpand();
+  Result := pNode;
+end;
+
+function TfrmLuaEditMessages.PutChild(Parent: PVirtualNode; MsgText: String; MsgType: Integer; FileName: String = ''; LineNumber: Integer = -1): PVirtualNode;
+var
+  pData: PLuaEditMsgLine;
+  pNode: PVirtualNode;
+begin
+  pNode := vstLuaEditMessages.AddChild(Parent);
+  pData := vstLuaEditMessages.GetNodeData(pNode);
+  pData.FileName := FileName;
+  pData.MsgText := MsgText;
+  pData.MsgType := MsgType;
+  pData.LineNumber := LineNumber;
+
+  vstLuaEditMessages.FullExpand();
+  Result := pNode;
 end;
 end;
 
 
 procedure TfrmLuaEditMessages.vstLuaEditMessagesGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
 procedure TfrmLuaEditMessages.vstLuaEditMessagesGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
@@ -65,12 +85,17 @@ begin
         LUAEDIT_HINT_MSG:     CellText := '[HINT]';
         LUAEDIT_HINT_MSG:     CellText := '[HINT]';
         LUAEDIT_WARNING_MSG:  CellText := '[WARNING]';
         LUAEDIT_WARNING_MSG:  CellText := '[WARNING]';
         LUAEDIT_ERROR_MSG:    CellText := '[ERROR]';
         LUAEDIT_ERROR_MSG:    CellText := '[ERROR]';
+      else
+        CellText := '';
       end;
       end;
     end;
     end;
     1:
     1:
     begin
     begin
       pData := vstLuaEditMessages.GetNodeData(Node);
       pData := vstLuaEditMessages.GetNodeData(Node);
-      CellText := pData.MsgText;
+      CellText := TrimLeft(pData.MsgText);
+
+      if pData.MsgType = LUAEDIT_ERROR_MSG then
+        CellText := UpperCase(CellText[1]) + Copy(CellText, 2, Length(CellText) - 1);
     end;
     end;
   end;
   end;
 end;
 end;

+ 3 - 2
LuaEdit/LuaGlobals.dfm

@@ -25,13 +25,14 @@ object frmLuaGlobals: TfrmLuaGlobals
     Width = 426
     Width = 426
     Height = 161
     Height = 161
     Align = alClient
     Align = alClient
-    Header.AutoSizeIndex = 1
+    Header.AutoSizeIndex = -1
     Header.Font.Charset = DEFAULT_CHARSET
     Header.Font.Charset = DEFAULT_CHARSET
     Header.Font.Color = clWindowText
     Header.Font.Color = clWindowText
     Header.Font.Height = -11
     Header.Font.Height = -11
     Header.Font.Name = 'MS Sans Serif'
     Header.Font.Name = 'MS Sans Serif'
     Header.Font.Style = []
     Header.Font.Style = []
     Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoVisible]
     Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoVisible]
+    ScrollBarOptions.AlwaysVisible = True
     TabOrder = 0
     TabOrder = 0
     TreeOptions.MiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toReportMode, toToggleOnDblClick, toWheelPanning]
     TreeOptions.MiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toReportMode, toToggleOnDblClick, toWheelPanning]
     OnGetText = vstGlobalsGetText
     OnGetText = vstGlobalsGetText
@@ -44,7 +45,7 @@ object frmLuaGlobals: TfrmLuaGlobals
       end
       end
       item
       item
         Position = 1
         Position = 1
-        Width = 322
+        Width = 1000
         WideText = 'Value'
         WideText = 'Value'
       end>
       end>
   end
   end

+ 1 - 0
LuaEdit/LuaOutput.dfm

@@ -38,6 +38,7 @@ object frmLuaOutput: TfrmLuaOutput
     TabOrder = 0
     TabOrder = 0
     TreeOptions.PaintOptions = [toShowDropmark, toThemeAware, toUseBlendedImages]
     TreeOptions.PaintOptions = [toShowDropmark, toThemeAware, toUseBlendedImages]
     TreeOptions.SelectionOptions = [toFullRowSelect, toMultiSelect, toRightClickSelect]
     TreeOptions.SelectionOptions = [toFullRowSelect, toMultiSelect, toRightClickSelect]
+    OnDblClick = vstLuaOutputDblClick
     OnGetText = vstLuaOutputGetText
     OnGetText = vstLuaOutputGetText
     OnGetNodeDataSize = vstLuaOutputGetNodeDataSize
     OnGetNodeDataSize = vstLuaOutputGetNodeDataSize
     Columns = <>
     Columns = <>

+ 8 - 2
LuaEdit/LuaOutput.pas

@@ -5,7 +5,7 @@ interface
 uses
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, ComCtrls, ExtCtrls, JvComponent, JvDockControlForm,
   Dialogs, StdCtrls, ComCtrls, ExtCtrls, JvComponent, JvDockControlForm,
-  VirtualTrees, Menus, Clipbrd;
+  VirtualTrees, Menus, Clipbrd, Lua;
 
 
 type
 type
   PLuaOutputLine = ^TPLuaOutputLine;
   PLuaOutputLine = ^TPLuaOutputLine;
@@ -34,6 +34,7 @@ type
     procedure FindSource1Click(Sender: TObject);
     procedure FindSource1Click(Sender: TObject);
     procedure Clear1Click(Sender: TObject);
     procedure Clear1Click(Sender: TObject);
     procedure ClearAll1Click(Sender: TObject);
     procedure ClearAll1Click(Sender: TObject);
+    procedure vstLuaOutputDblClick(Sender: TObject);
   private
   private
     { Private declarations }
     { Private declarations }
   public
   public
@@ -60,7 +61,7 @@ begin
     pNode := vstLuaOutput.AddChild(vstLuaOutput.RootNode);
     pNode := vstLuaOutput.AddChild(vstLuaOutput.RootNode);
     pData := vstLuaOutput.GetNodeData(pNode);
     pData := vstLuaOutput.GetNodeData(pNode);
     pData.FileName := FileName;
     pData.FileName := FileName;
-    pData.LineText := '> ' + LineText;
+    pData.LineText := LUA_PROMPT + LineText;
     pData.LineNumber := LineNumber;
     pData.LineNumber := LineNumber;
   end;
   end;
 end;
 end;
@@ -144,4 +145,9 @@ begin
   vstLuaOutput.Clear;
   vstLuaOutput.Clear;
 end;
 end;
 
 
+procedure TfrmLuaOutput.vstLuaOutputDblClick(Sender: TObject);
+begin
+  FindSource1Click(Sender);
+end;
+
 end.
 end.

+ 2 - 2
LuaEdit/MacroManager.pas

@@ -64,7 +64,7 @@ var
 
 
 implementation
 implementation
 
 
-uses Main;
+uses Main, Misc;
 
 
 {$R *.dfm}
 {$R *.dfm}
 
 
@@ -166,7 +166,7 @@ begin
     Application.MessageBox(PChar('A macro with name "'+txtName.Text+'" already exists!'), 'LuaEdit', MB_OK+MB_ICONERROR);
     Application.MessageBox(PChar('A macro with name "'+txtName.Text+'" already exists!'), 'LuaEdit', MB_OK+MB_ICONERROR);
     txtName.SetFocus;
     txtName.SetFocus;
   end
   end
-  else if not FileExists(txtFileName.Text) then
+  else if not FileExistsAbs(txtFileName.Text) then
   begin
   begin
     Application.MessageBox(PChar('The file "'+txtFileName.Text+'" does not exists!'), 'LuaEdit', MB_OK+MB_ICONERROR);
     Application.MessageBox(PChar('The file "'+txtFileName.Text+'" does not exists!'), 'LuaEdit', MB_OK+MB_ICONERROR);
     txtFileName.SetFocus;
     txtFileName.SetFocus;

+ 280 - 260
LuaEdit/Main.dfm

@@ -145,7 +145,7 @@ object frmLuaEditMain: TfrmLuaEditMain
     TabOrder = 1
     TabOrder = 1
     OnDockOver = ctrlBarDockOver
     OnDockOver = ctrlBarDockOver
     object tlbRun: TToolBar
     object tlbRun: TToolBar
-      Left = 387
+      Left = 389
       Top = 2
       Top = 2
       Width = 283
       Width = 283
       Height = 22
       Height = 22
@@ -255,7 +255,7 @@ object frmLuaEditMain: TfrmLuaEditMain
     object tlbBaseFile: TToolBar
     object tlbBaseFile: TToolBar
       Left = 11
       Left = 11
       Top = 2
       Top = 2
-      Width = 352
+      Width = 365
       Height = 22
       Height = 22
       Align = alLeft
       Align = alLeft
       AutoSize = True
       AutoSize = True
@@ -790,16 +790,16 @@ object frmLuaEditMain: TfrmLuaEditMain
     end
     end
     object actAddToPrj: TAction
     object actAddToPrj: TAction
       Category = 'Project Manipulations'
       Category = 'Project Manipulations'
-      Caption = 'Add Unit to Project...'
-      Hint = 'Add Unit to Project...'
+      Caption = 'Add File to Project...'
+      Hint = 'Add File to Project...'
       ImageIndex = 34
       ImageIndex = 34
       ShortCut = 8314
       ShortCut = 8314
       OnExecute = actAddToPrjExecute
       OnExecute = actAddToPrjExecute
     end
     end
     object actRemoveFromPrj: TAction
     object actRemoveFromPrj: TAction
       Category = 'Project Manipulations'
       Category = 'Project Manipulations'
-      Caption = 'Remove Unit From Project...'
-      Hint = 'Remove Unit from Project...'
+      Caption = 'Remove File From Project...'
+      Hint = 'Remove File from Project...'
       ImageIndex = 36
       ImageIndex = 36
       ShortCut = 8315
       ShortCut = 8315
       OnExecute = actRemoveFromPrjExecute
       OnExecute = actRemoveFromPrjExecute
@@ -1081,7 +1081,7 @@ object frmLuaEditMain: TfrmLuaEditMain
     Left = 48
     Left = 48
     Top = 217
     Top = 217
     Bitmap = {
     Bitmap = {
-      494C010148004A00040010001000FF00FF00FF10FFFFFFFFFFFFFFFF424D3600
+      494C010148004A00040010001000FF00FF00FF00FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000003001000001002000000000000030
       0000000000003600000028000000400000003001000001002000000000000030
       0100000000000000000000000000000000000000000000000000000000000000
       0100000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -1216,128 +1216,128 @@ object frmLuaEditMain: TfrmLuaEditMain
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00A0A0A0008080800080808000808080008080800080808000808080008080
+      8000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00CEC3
+      C000A4A49E008484800070706E006C6C6C00767676008484840092929200A4A4
+      A400C8C8C800FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000808080008080800080808000808080008080800080808000808080008080
-      80008080800080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D004D4D4D00FF00
+      8000C0C0C000FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000C0C0C0008080
+      8000808080008080800080808000FF00FF00FF00FF004D4D4D004D4D4D00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D004D4D
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D004D4D
-      4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800CECA
+      B600F2F4E900F2F4E900F3F5EB00F4F5EC00C9CAC400C1C1BD00A5A6A3009393
+      920099999900FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      000000000000FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000000000000000000000000000000000000FF00FF004D4D4D004D4DA6004D4D
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000A0A0
+      A000C0C0C00080808000808080006060600080808000E0E0E000E0E0E0008080
+      8000A0A0A000A0A0A000A0A0A00060606000FF00FF004D4D4D004D4DA6004D4D
       4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D00D3D3D3004D4D
       4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D00D3D3D3004D4D
-      4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D4CC
+      BC00F2F4E9007F7F7E00BDBDBB00F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000008400
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000008400
-      000000FFFF0000000000FF00FF00FF00FF00FF00FF00BDBDBD007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B0000000000FF00FF00FF00FF004D4D4D004D4D
+      000000FFFF0000000000FF00FF00FF00FF00C0C0C00080808000606060006060
+      6000C0C0C000C0C0C000FF808000E0E0E00080808000A0A0A000A0A0A0008080
+      8000A0A0A000A0A0A000C0C0C00040404000FF00FF00FF00FF004D4D4D004D4D
       A6004D4D4D00FF00FF00FF00FF00FF00FF004D4D4D00D3D3D3004D4D4D00FF00
       A6004D4D4D00FF00FF00FF00FF00FF00FF004D4D4D00D3D3D3004D4D4D00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D9CE
+      C100F2F4E900F2F4E900F2F4E900F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000008400000000FF
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000008400000000FF
-      FF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B0000000000FF00FF00FF00FF00FF00FF004D4D
+      FF00FFFFFF0000000000FF00FF00FF00FF00A0A0A000A0A0A000606060006080
+      8000C0C0C000C0C0C000FF808000E0E0E00080808000C0C0C000C0C0C0008080
+      8000FFFFFF00C0C0C000C0C0C00040404000FF00FF00FF00FF00FF00FF004D4D
       4D004D4DA6004D4D4D00FF00FF004D4D4D00D3D3D3004D4D4D00FF00FF00FF00
       4D004D4DA6004D4D4D00FF00FF004D4D4D00D3D3D3004D4D4D00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D8CA
+      BF00F2F4E9007F7F7E007F7F7E007F7F7E007F7F7E00BDBDBB00FFFFFF00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000008400000000FFFF00FFFF
       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000008400000000FFFF00FFFF
-      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD007B7B7B007B7B7B007B7B
-      7B007B7B7B00BDBDBD007B7B7B0000000000FF00FF00FF00FF00FF00FF00FF00
+      FF0000000000FF00FF00FF00FF00FF00FF00A0A0A00040808000008000002040
+      4000C0C0C000C0C0C000C0C0C000C0C0C000E0E0E000E0E0E000E0E0E0008080
+      8000FFFFFF00C0C0C000C0C0C00040404000FF00FF00FF00FF00FF00FF00FF00
       FF004D4D4D004D4DA6004D4D4D00D3D3D3004D4D4D00FF00FF00FF00FF00FF00
       FF004D4D4D004D4DA6004D4D4D00D3D3D3004D4D4D00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF00FF00FF00FF00FF00848484000000
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D4CD
+      BE00F2F4E900F2F4E900F2F4E900F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00848484000000
       0000000000000000000000000000000000008400000000FFFF00FFFFFF000000
       0000000000000000000000000000000000008400000000FFFF00FFFFFF000000
-      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD007B7B7B00BDBDBD007B7B7B0000000000FF00FF00FF00FF00FF00FF00FF00
+      0000FF00FF00FF00FF00FF00FF00FF00FF00A0A0A00020404000008000000080
+      0000C0404000FF000000FF000000FF000000FF000000FF000000FF0000008000
+      0000FFFFFF00C0C0C000C0C0C00040404000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF004D4D4D00D3D3D3004D4D4D00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF004D4D4D00D3D3D3004D4D4D00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF00FF00FF000000000084848400C6C6
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D1D0
+      BE00F2F4E9007F7F7E007F7F7E007F7F7E007F7F7E00BDBDBB00FFFFFF00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF00FF00FF000000000084848400C6C6
       C600C6C6C600C6C6C600848484000000000000000000FFFFFF0000000000FF00
       C600C6C6C600C6C6C600848484000000000000000000FFFFFF0000000000FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B0000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00A0A0A0004080400000C000000040
+      000040804000C0C08000C0C0800070707000C0C0C000C0C0C000C0C0C000A0A0
+      A000FFFFFF00C0C0C000C0C0C00040404000FF00FF00FF00FF00FF00FF00FF00
       FF004D4D4D00D3D3D3004D4D4D004D4DA6004D4D4D00FF00FF00FF00FF00FF00
       FF004D4D4D00D3D3D3004D4D4D004D4DA6004D4D4D00FF00FF00FF00FF00FF00
-      FF00FF00FF004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF008484840084848400C6C6C600C6C6
+      FF00FF00FF004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D5CD
+      BF00F2F4E900F2F4E900F2F4E900F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF008484840084848400C6C6C600C6C6
       C600FFFFFF00C6C6C600C6C6C600848484000000000000000000FF00FF00FF00
       C600FFFFFF00C6C6C600C6C6C600848484000000000000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD007B7B7B007B7B7B007B7B
-      7B007B7B7B00BDBDBD007B7B7B00000000004D4D4D004D4D4D004D4D4D004D4D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00A0A0A00040800000008000006060
+      6000C0C04000C0C040000080800060606000FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00C0C0C000C0C0C000404040004D4D4D004D4D4D004D4D4D004D4D
       4D00D3D3D3004D4D4D00FF00FF004D4D4D004D4DA6004D4D4D00FF00FF00FF00
       4D00D3D3D3004D4D4D00FF00FF004D4D4D004D4DA6004D4D4D00FF00FF00FF00
-      FF004D4D4D004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF0000000000C6C6C600C6C6C600FFFF
+      FF004D4D4D004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF00C0787800D5CE
+      BF00F2F4E9007F7F7E007F7F7E007F7F7E00BDBDBB00FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF0000000000C6C6C600C6C6C600FFFF
       FF00C6C6C600C6C6C600C6C6C600C6C6C6008484840000000000FF00FF00FF00
       FF00C6C6C600C6C6C600C6C6C600C6C6C6008484840000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD007B7B7B00BDBDBD007B7B7B00000000004D4D4D004D4D4D004D4D4D004D4D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00A0A0A000FFFF800040800000C0C0
+      4000FFFF8000C0C080000080800060606000FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00C0C0C000C0C0C000404040004D4D4D004D4D4D004D4D4D004D4D
       4D004D4D4D00FF00FF00FF00FF00FF00FF004D4D4D004D4DA6004D4D4D004D4D
       4D004D4D4D00FF00FF00FF00FF00FF00FF004D4D4D004D4DA6004D4D4D004D4D
-      4D004D4D4D004DA6A6004DA6A6004D4D4D00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF0000000000C6C6C600FFFFFF00C6C6
+      4D004D4D4D004DA6A6004DA6A6004D4D4D00FF00FF00FF00FF00C0787800D6CF
+      C100F2F4E900F2F4E900F2F4E900F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF0000000000C6C6C600FFFFFF00C6C6
       C600C6C6C600C6C6C600C6C6C600C6C6C6008484840000000000FF00FF00FF00
       C600C6C6C600C6C6C600C6C6C600C6C6C6008484840000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B00000000004D4D4D00FF00FF00FF00FF004D4D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00B0B0B000A0A0A000A0A0A000A0A0
+      A000A0A0A000A0A0A000A0A0A00090909000FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00C0C0C000C0C0C000404040004D4D4D00FF00FF00FF00FF004D4D
       4D004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D004D4D4D004DA6
       4D004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D004D4D4D004DA6
-      A6004DA6A6004D4D4D004D4D4D00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF0000000000C6C6C600C6C6C600C6C6
+      A6004DA6A6004D4D4D004D4D4D00FF00FF00FF00FF00FF00FF00C0787800D0CD
+      BB00F2F4E900F2F4E900F2F4E900F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF0000000000C6C6C600C6C6C600C6C6
       C600C6C6C600FFFFFF00FFFFFF00C6C6C6008484840000000000FF00FF00FF00
       C600C6C6C600FFFFFF00FFFFFF00C6C6C6008484840000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B0000000000FF00FF00FF00FF00FF00FF004D4D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000C0C0
+      C000A0A0A000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
+      C000C0C0C000A0A0A000C0C0C00040404000FF00FF00FF00FF00FF00FF004D4D
       4D004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D004DA6A6004DA6
       4D004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D004DA6A6004DA6
-      A6004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00800000008000000080000000FFFFFF0000000000000000000000
-      000000000000FF00FF00FF00FF00FF00FF0000000000C6C6C600C6C6C600C6C6
+      A6004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF00C0787800E2C6
+      C40042698600F2F4E90042698600F4F6EC0042698600FAFBF70042698600FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF0000000000C6C6C600C6C6C600C6C6
       C600C6C6C600FFFFFF00FFFFFF00848484008484840000000000FF00FF00FF00
       C600C6C6C600FFFFFF00FFFFFF00848484008484840000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B0000000000FF00FF00FF00FF004D4D4D004D4D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000C0C0
+      C000C0404000FF000000FF000000FF000000FF000000FF000000FF000000FF00
+      0000FF000000C0404000C0C0C00040404000FF00FF00FF00FF004D4D4D004D4D
       4D004D4D4D00FF00FF00FF00FF00FF00FF004D4D4D004D4D4D004DA6A6004DA6
       4D004D4D4D00FF00FF00FF00FF00FF00FF004D4D4D004D4D4D004DA6A6004DA6
-      A6004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0080808000FFFFFF008080
-      8000FF00FF00FF00FF00FF00FF00FF00FF000000000000000000C6C6C600C6C6
+      A6004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF00E7CDCD00C178
+      7800C1787800316B900091AABC006F798D00D3B6B9006F90A900BAB4BE005D82
+      9D00A8A8A800FF00FF00FF00FF00FF00FF000000000000000000C6C6C600C6C6
       C600C6C6C600C6C6C60084848400848484000000000084848400FF00FF00FF00
       C600C6C6C600C6C6C60084848400848484000000000084848400FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00FF000000FF00
-      0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFF
-      FF00FF000000FFFFFF007B7B7B0000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000C0C0
+      C000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0
+      A000A0A0A000A0A0A000C0C0C00040404000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF004D4D4D004D4D4D004DA6A6004DA6A6004D4D4D004D4D
       FF00FF00FF00FF00FF004D4D4D004D4D4D004DA6A6004DA6A6004D4D4D004D4D
-      4D004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080800080808000FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF008484840000000000000000008484
+      4D004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004F9C
+      BE004BBFD400316B90003E86A5004BBFD400637E94004BBFD4006D6E84005D82
+      9D00FF00FF00FF00FF00FF00FF00FF00FF008484840000000000000000008484
       84008484840084848400848484000000000000000000FF00FF00FF00FF00FF00
       84008484840084848400848484000000000000000000FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD0000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000E0E0
+      E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000E0E0E000E0E0E000E0E0E00060606000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF004D4D4D004D4D4D004D4D4D004D4D4D00FF00
       FF00FF00FF00FF00FF00FF00FF004D4D4D004D4D4D004D4D4D004D4D4D00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00808080008080
-      8000808080008080800080808000808080008080800080808000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0084848400000000000000
-      000000000000000000000000000084848400FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0084848400000000000000
+      000000000000000000000000000084848400FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0
+      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
+      C000C0C0C000C0C0C000C0C0C000FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C
       FF00FF00FF00FF00FF00FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
@@ -1345,129 +1345,129 @@ object frmLuaEditMain: TfrmLuaEditMain
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004C4C4C004C4C
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004C4C4C004C4C
-      4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000004C4C4C00FFFFFF00D2D2D200D2D2
+      4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A0A0A000606060006060
+      6000606060006060600060606000606060006060600060606000606060006060
+      6000606060006060600080808000FF00FF004C4C4C00FFFFFF00D2D2D200D2D2
       D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2
       D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2
       D200D2D2D200D2D2D200D2D2D2004C4C4C00FF00FF004C4C4C004C4C4C004C4C
       D200D2D2D200D2D2D200D2D2D2004C4C4C00FF00FF004C4C4C004C4C4C004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       4C004C4C4C004C4C4C004C4C4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A64C4C00FFFF4C00FF4C
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A64C4C00FFFF4C00FF4C
-      4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000C0C0C000C0C0C000C0C0C000000000004C4C4C00FFFFFF004CFFFF004CFF
+      4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF004CFF
       FF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFF
       FF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFF
       FF004CFFFF004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF00FF00
       FF004CFFFF004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00A64C4C00FFFF4C00FF4C4C00FF4C
       FF00FF00FF00FF00FF00FF00FF00FF00FF00A64C4C00FFFF4C00FF4C4C00FF4C
-      4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF004CFF
+      4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00E0C0
+      C000C0808000C0808000E0C0C000FFFFFF00E0C0C000E0C0C000FFFFFF00C080
+      8000E0C0C000E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF004CFF
       FF004CFFFF004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
       FF004CFFFF004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
       4C004C4C4C004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       4C004C4C4C004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00A64C4C00FFFF4C00FF4C4C00FF4C4C004C4C
       FF00FF00FF00FF00FF00FF00FF00A64C4C00FFFF4C00FF4C4C00FF4C4C004C4C
-      4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00A6A6
+      4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00C0808000FFFFFF00C0808000C0808000C0808000FFFF
+      FF00E0C0C000E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00A6A6
       A6004CFFFF004CA64C004CA64C004CFFFF00FF4C4C00FF4C4C004CFFFF004C4C
       A6004CFFFF004CA64C004CA64C004CFFFF00FF4C4C00FF4C4C004CFFFF004C4C
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF00FF00
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00A64C4C00FFFFFF00FF4C4C00FF4C4C004C4C4C00FF00
       FF00FF00FF00FF00FF00A64C4C00FFFFFF00FF4C4C00FF4C4C004C4C4C00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000
-      00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF004CFF
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00C0808000E0C0C000C0808000C0808000C0808000FFFF
+      FF00E0C0C000E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF004CFF
       FF004CFFFF004CA64C004CA64C004CFFFF00FF4C4C00FF4C4C004CFFFF004C4C
       FF004CFFFF004CA64C004CA64C004CFFFF00FF4C4C00FF4C4C004CFFFF004C4C
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF00FF00FF00A6A6A6004C4C
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF00FF00FF00A6A6A6004C4C
       4C004C4C4C00A6A6A600D2D2D200FF4C4C00FF4C4C004C4C4C00FF00FF00FF00
       4C004C4C4C00A6A6A600D2D2D200FF4C4C00FF4C4C004C4C4C00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000808000C0C0C0000080
-      8000C0C0C000008080000000000080808000C0C0C00000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00A6A6
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00E0C0C000E0C0C000C0808000E0C0C000FFFFFF00C080
+      8000E0C0C000E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00A6A6
       A6004CFFFF004CA64C004CA64C004CFFFF004CFFFF004CFFFF004CFFFF004C4C
       A6004CFFFF004CA64C004CA64C004CFFFF004CFFFF004CFFFF004CFFFF004C4C
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF00D1D8
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF00D1D8
       DB00FF00FF00D1D8DB00FF00FF00D1D8DB00FF00FF00D1D8DB00FF00FF00D1D8
       DB00FF00FF00D1D8DB00FF00FF00D1D8DB00FF00FF00D1D8DB00FF00FF00D1D8
       DB00FF00FF00D1D8DB00FF00FF004C4C4C00FF00FF00A6A6A600D2D2D200FFFF
       DB00FF00FF00D1D8DB00FF00FF004C4C4C00FF00FF00A6A6A600D2D2D200FFFF
       4C00D2D2D2004C4C4C00A6A6A6004CA6A6004CA6A6004C4C4C004C4C4C004C4C
       4C00D2D2D2004C4C4C00A6A6A6004CA6A6004CA6A6004C4C4C004C4C4C004C4C
-      4C004C4C4C004C4C4C00FF00FF00FF00FF000000000000FFFF00FFFFFF0000FF
-      FF00FFFFFF0000FFFF0000000000000000000000000000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF004CFF
+      4C004C4C4C004C4C4C00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00E0C0
+      C000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF004CFF
       FF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004C4C
       FF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004C4C
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00D1D8DB00FF00
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00D1D8DB00FF00
       FF00D1D8DB00A64C4C00D1D8DB00FF00FF00D1D8DB00FF00FF00D1D8DB00A64C
       FF00D1D8DB00A64C4C00D1D8DB00FF00FF00D1D8DB00FF00FF00D1D8DB00A64C
       4C00D1D8DB00FF00FF00D1D8DB004C4C4C00A6A6A600FFFFFF00FFFF4C00D2D2
       4C00D1D8DB00FF00FF00D1D8DB004C4C4C00A6A6A600FFFFFF00FFFF4C00D2D2
       D200FFFF4C00D2D2D2004C4C4C004CA6A6004CA6A600D2D2D2004CA6A6004C4C
       D200FFFF4C00D2D2D2004C4C4C004CA6A6004CA6A600D2D2D2004CA6A6004C4C
-      4C00A6A6A600D2D2D2004C4C4C00FF00FF00FF00FF000000000000FFFF00FFFF
-      FF0000FFFF00FFFFFF0000FFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00A6A6
+      4C00A6A6A600D2D2D2004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000F0F0F000F0F0F000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00A6A6
       A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A6004CFFFF004CFFFF004C4C
       A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A6004CFFFF004CFFFF004C4C
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00D1D8DB00D1D8
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00D1D8DB00D1D8
       DB00A64C4C00A64C4C00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00A64C
       DB00A64C4C00A64C4C00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00A64C
       4C00A64C4C00D1D8DB00D1D8DB004C4C4C00A6A6A600FFFF4C00FFFFFF00FFFF
       4C00A64C4C00D1D8DB00D1D8DB004C4C4C00A6A6A600FFFF4C00FFFFFF00FFFF
       4C00D2D2D200FFFF4C004C4C4C004CA6A6004CFFFF00FFFFFF004CFFFF004C4C
       4C00D2D2D200FFFF4C004C4C4C004CA6A6004CFFFF00FFFFFF004CFFFF004C4C
-      4C004C4C4C004C4C4C004C4C4C00FF00FF00FF00FF00FF00FF000000000000FF
-      FF00FFFFFF0000FFFF00FFFFFF0000FFFF0000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00FFFF
+      4C004C4C4C004C4C4C004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004CFFFF004CFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004CFFFF004CFF
       FF004CFFFF004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00D1D8DB00A64C
       FF004CFFFF004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00D1D8DB00A64C
       4C00A64C4C00A64C4C00A64C4C00A64C4C00D1D8DB00A64C4C00A64C4C00A64C
       4C00A64C4C00A64C4C00A64C4C00A64C4C00D1D8DB00A64C4C00A64C4C00A64C
       4C00A64C4C00A64C4C00D1D8DB004C4C4C00A6A6A600FFFFFF00FFFF4C00FFFF
       4C00A64C4C00A64C4C00D1D8DB004C4C4C00A6A6A600FFFFFF00FFFF4C00FFFF
       FF00FFFF4C00D2D2D2004C4C4C00A6A6A600FFFFFF004CFFFF00FFFFFF004CFF
       FF00FFFF4C00D2D2D2004C4C4C00A6A6A600FFFFFF004CFFFF00FFFFFF004CFF
-      FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      000080808000808080008080800080808000C0C0C00000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00A6A6
+      FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000F0F0F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00A6A6
       A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A6004CFFFF00A6A6
       A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A6004CFFFF00A6A6
       A600A6A6A600A6A6A600A6A6A6004C4C4C00FF00FF004C4C4C00D1D8DB00D1D8
       A600A6A6A600A6A6A600A6A6A6004C4C4C00FF00FF004C4C4C00D1D8DB00D1D8
       DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00D1D8DB00D1D8DB00A64C
       DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00D1D8DB00D1D8DB00A64C
       4C00D1D8DB00D1D8DB00D1D8DB004C4C4C00FF00FF00A6A6A600FFFFFF00FFFF
       4C00D1D8DB00D1D8DB00D1D8DB004C4C4C00FF00FF00A6A6A600FFFFFF00FFFF
       4C00FFFFFF004C4C4C004C4C4C00FFFFFF004CFFFF00FFFFFF004CFFFF00FFFF
       4C00FFFFFF004C4C4C004C4C4C00FFFFFF004CFFFF00FFFFFF004CFFFF00FFFF
-      FF004CFFFF004C4C4C00FF00FF00FF00FF00FF00FF0000000000000000000000
-      0000000000000000000000000000000000008080800000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00FFFF
+      FF004CFFFF004C4C4C00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000F0F0F000F0F0F000E0E0E000E0E0E000E0E0E000E0E0E000F0F0
+      F000FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004CFFFF004C4C
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004CFFFF004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C00FF00FF00D1D8DB00D1D8DB00D1D8
       4C004C4C4C004C4C4C004C4C4C004C4C4C00FF00FF00D1D8DB00D1D8DB00D1D8
       DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00A64C
       DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00A64C
       4C00D1D8DB00D1D8DB00D1D8DB00D1D8DB00FF00FF00FF00FF00A6A6A600A6A6
       4C00D1D8DB00D1D8DB00D1D8DB00D1D8DB00FF00FF00FF00FF00A6A6A600A6A6
       A6004C4C4C00A6A6A600FF00FF004C4C4C00FFFFFF004CFFFF00FFFFFF004CFF
       A6004C4C4C00A6A6A600FF00FF004C4C4C00FFFFFF004CFFFF00FFFFFF004CFF
-      FF00FFFFFF004CFFFF004C4C4C00FF00FF00FF00FF0000000000FFFFFF0000FF
-      FF00FFFFFF0000FFFF00FFFFFF00000000008080800000000000FFFFFF00FFFF
-      FF00FFFFFF00C0C0C000C0C0C000000000004C4C4C00FFFFFF004CFFFF00A6A6
+      FF00FFFFFF004CFFFF004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00A6A6
       A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A6004CFFFF00A6A6
       A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A6004CFFFF00A6A6
       A600FFFFFF00FFFFFF00D2D2D2004C4C4C00FF00FF00D1D8DB00A64C4C00D1D8
       A600FFFFFF00FFFFFF00D2D2D2004C4C4C00FF00FF00D1D8DB00A64C4C00D1D8
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00D1D8
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00D1D8
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00FF00FF00FF00FF00FF00FF00FF00
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF004C4C4C00A6A6A600A6A6A600A6A6
       FF00FF00FF00FF00FF00FF00FF00FF00FF004C4C4C00A6A6A600A6A6A600A6A6
-      A600A6A6A600D2D2D2004C4C4C00FF00FF00FF00FF00FF00FF00000000000000
-      00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00000000000000000000000000000000004C4C4C00FFFFFF004CFFFF004CFF
+      A600A6A6A600D2D2D2004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000F0F0F000A0A0
+      A000808080007070700080808000FF00FF004C4C4C00FFFFFF004CFFFF004CFF
       FF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF00A6A6
       FF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF00A6A6
       A600FFFFFF00D2D2D2004C4C4C00FF00FF00FF00FF00D1D8DB00D1D8DB00D1D8
       A600FFFFFF00D2D2D2004C4C4C00FF00FF00FF00FF00D1D8DB00D1D8DB00D1D8
       DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8
       DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8
       DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00FF00FF00FF00FF00FF00FF00FF00
       DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
       FF00FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
-      4C004C4C4C00A6A6A6004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF0080808000FFFFFF0080808000FF00FF004C4C4C00FFFFFF00FFFFFF00FFFF
+      4C004C4C4C00A6A6A6004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000F0F0F000E0E0E000F0F0F000E0E0E000E0E0E000F0F0F000C0C0
+      C000C0C0C00060606000FF00FF00FF00FF004C4C4C00FFFFFF00FFFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A6A6
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A6A6
       A600D2D2D2004C4C4C00FF00FF00FF00FF00FF00FF00D1D8DB00A64C4C00D1D8
       A600D2D2D2004C4C4C00FF00FF00FF00FF00FF00FF00D1D8DB00A64C4C00D1D8
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00D1D8
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00D1D8
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00FF00FF00FF00FF00FF00FF00FF00
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF004C4C4C00FFFFFF004CFFFF00FFFFFF004CFFFF00FFFF
       FF00FF00FF00FF00FF004C4C4C00FFFFFF004CFFFF00FFFFFF004CFFFF00FFFF
-      FF004C4C4C00A6A6A6004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF008080800080808000FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C
+      FF004C4C4C00A6A6A6004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009090
+      900060606000FF00FF00FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C00A6A6
       4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C00A6A6
       A6004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       A6004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C4C004C4C
       FF00FF00FF00FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C4C004C4C
-      4C004C4C4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000808080008080800080808000808080008080800080808000808080008080
-      800080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      4C004C4C4C004C4C4C00FF00FF00FF00FF00FF00FF00C0C0C000C0C0C000C0C0
+      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0008080
+      8000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
@@ -3135,131 +3135,131 @@ object frmLuaEditMain: TfrmLuaEditMain
       4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B
       4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B
       4B004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       4B004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
-      0000000000000000000000000000000000000000000000000000FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C6C6
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A0A0A000606060006060
+      6000606060006060600060606000606060006060600060606000606060006060
+      6000606060006060600080808000FF00FF00FF00FF00FF00FF00FF00FF00C6C6
       C600848484008484840084848400848484008484840084848400848484008484
       C600848484008484840084848400848484008484840084848400848484008484
-      84008484840084848400848484004B4B4B00FF00FF00FF00FF00FF00FF000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000FF00FF00FF00FF00FF00FF0075757500FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
+      84008484840084848400848484004B4B4B00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00505050006060
+      60006060600060606000606060006060600080808000FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
       E000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
       E000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
-      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF00000000000000000075757500FFFF
-      FF0075000000750000007500000075000000FFFFFF0000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
+      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF00000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000FF00FF00FF00FF00FF00FF00C0C0C00080808000C0C0C000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00E0C0
+      C000C0808000C0808000FFFFFF00C0808000E0C0C000FFFFFF00C0808000E0C0
+      C000FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
       E000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
       E000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
-      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF007575750000FFFF0075757500FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000
-      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
+      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF00C0C0C000C080
+      8000C0808000C0808000C0808000E0E0E0004040400080808000808080008080
+      8000808080008080800080808000FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00C0808000FFFFFF00A0404000C0808000FFFFFF00A040
+      4000FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
       E000C6C6C6000000FF000000FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6
       E000C6C6C6000000FF000000FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6
-      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF0075757500FFFFFF0075757500FFFF
-      FF0075000000750000007500000075000000FFFFFF0000000000FFFFFF00B9B9
-      B900FFFFFF00B9B9B900FFFFFF0000000000FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
+      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF00C0C0C000C080
+      8000C0808000C0808000C0808000E0E0E00060606000D0D0D000D0D0D000D0D0
+      D000D0D0D000D0D0D00060606000FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00C0808000FFFFFF00C0808000E0C0C000C0808000A040
+      4000FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
       E000E3DFE000E3DFE000E3DFE000E3DFE000E3DFE000E3DFE000E3DFE000E3DF
       E000E3DFE000E3DFE000E3DFE000E3DFE000E3DFE000E3DFE000E3DFE000E3DF
-      E000E3DFE000E3DFE000C6C6C600FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF007575750000FFFF0075757500FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000B9B9B900FFFF
-      FF00B9B9B900FFFFFF00B9B9B90000000000FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      E000E3DFE000E3DFE000C6C6C600FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF00C0C0C000C080
+      8000C0808000C0808000C0808000E0E0E00070707000E0E0E000E0E0E000E0E0
+      E000E0E0E000E0E0E00060606000FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00E0C0C000FFFFFF00E0C0C000FFFFFF00C0808000E0C0
+      C000FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF0075757500FFFFFF0075757500FFFF
-      FF0075000000750000007500000075000000FFFFFF0000000000FFFFFF00B9B9
-      B900FFFFFF00B9B9B900FFFFFF0000000000FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF00FF00FF004B4B4B004B4B4B004B4B
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF00C0C0C000C080
+      8000C0808000C0808000C0808000E0E0E00070707000E0E0E000E0E0E000E0E0
+      E000E0E0E000E0E0E00060606000FF00FF00FF00FF00C0C0C000FFFFFF00E0C0
+      C000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00E0E0E00080808000FF00FF00FF00FF004B4B4B004B4B4B004B4B
       4B004B4B4B004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF00FF00FF00FF00
       4B004B4B4B004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF007575750000FFFF0075757500FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000B9B9B900FFFF
-      FF00B9B9B900FFFFFF00B9B9B90000000000FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF004B4B4B00DFFFFF0080FFFF0080FF
+      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF00C0C0C000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00E0E0E00080808000F0F0F000E0E0E000E0E0
+      E000E0E0E000E0E0E00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000F0F0F000F0F0F000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004B4B4B00DFFFFF0080FFFF0080FF
       FF0080FFFF0080FFFF0080FFFF00DFFFFF004B4B4B00FF00FF00FF00FF00FF00
       FF0080FFFF0080FFFF0080FFFF00DFFFFF004B4B4B00FF00FF00FF00FF00FF00
-      FF004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF00A19D
-      9D00FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF0000FFFF00B9B9B900757575007575
-      7500FFFFFF0000FFFF0075757500757575007575750000000000FFFFFF00B9B9
-      B900FFFFFF00B9B9B900FFFFFF0000000000FF00FF00FF00FF00FF00FF00A19D
-      9D00FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF004B4B4B0080FFFF0080FFFF0080FF
+      FF004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF0080C0C00080C0
+      C00080C0C00080C0C00090909000B0B0B000C0C0C000C0808000F0F0F000F0F0
+      F000F0F0F000E0E0E00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004B4B4B0080FFFF0080FFFF0080FF
       FF0080FFFF0080FFFF0060DFDF0080FFFF004B4B4B00FF00FF00FF00FF004B4B
       FF0080FFFF0080FFFF0060DFDF0080FFFF004B4B4B00FF00FF00FF00FF004B4B
-      4B004B4B4B004B4B4B004B4B4B004B4B4B00A19D9D00FF00FF00FF00FF00A19D
-      9D0000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF0075757500FFFFFF00B9B9B9007575
-      750000FFFF00FFFFFF00FFFFFF0075757500FFFFFF00FFFFFF00B9B9B900FFFF
-      FF00B9B9B900FFFFFF00B9B9B90000000000A19D9D00FF00FF00FF00FF00A19D
-      9D0000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF004B4B4B0080FFFF0080FFFF0080FF
+      4B004B4B4B004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080C0C00080C0C00080C0
+      C00080C0C00080C0C000B0B0B000E0E0E000C0808000A0404000C0808000E0C0
+      C000C0808000F0F0F00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000F0F0F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004B4B4B0080FFFF0080FFFF0080FF
       FF0080FFFF0080FFFF0080FFFF0080FFFF004B4B4B00FF00FF00FF00FF00FF00
       FF0080FFFF0080FFFF0080FFFF0080FFFF004B4B4B00FF00FF00FF00FF00FF00
-      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00A19D
-      9D00FFFFFF00FFFFFF00A19D9D000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF00DAEBED00B9B9B90000FFFF007575
-      7500FFFFFF00757575007575750075757500FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00B9B9B900FFFFFF0000000000FF00FF00FF00FF00FFFFFF00A19D
-      9D00FFFFFF00FFFFFF00A19D9D000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF004B4B4B0000FFFF0080FFFF0080FF
+      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00E0E0E000F0F0F000C0808000C0808000FFFFFF00C080
+      8000C0808000F0F0F00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000F0F0F000F0F0F000E0E0E000E0E0E000E0E0E000E0E0E000F0F0
+      F000FFFFFF00E0E0E00080808000FF00FF004B4B4B0000FFFF0080FFFF0080FF
       FF0080FFFF0080FFFF0080FFFF0080FFFF004B4B4B00FF00FF00FF00FF00FF00
       FF0080FFFF0080FFFF0080FFFF0080FFFF004B4B4B00FF00FF00FF00FF00FF00
-      FF00FF00FF004B4B4B00FF00FF00FF00FF00A19D9D00A19D9D00A19D9D00FFFF
-      FF0000FFFF0000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
-      0000000000000000000000000000FF00FF00757575007575750075757500FFFF
-      FF0000FFFF0000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00B9B9B900FFFFFF00B9B9B90000000000A19D9D00A19D9D00A19D9D00FFFF
-      FF0000FFFF0000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
-      0000000000000000000000000000FF00FF004B4B4B004B4B4B004B4B4B004B4B
+      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00F0F0F000C0808000A0404000C0808000E0C0
+      C000A0404000E0C0C00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004B4B4B004B4B4B004B4B4B004B4B
       4B0010BFCF0080FFFF0080FFFF00DFFFFF004B4B4B00FF00FF00FF00FF00FF00
       4B0010BFCF0080FFFF0080FFFF00DFFFFF004B4B4B00FF00FF00FF00FF00FF00
-      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF0000FFFF00A19D9D0000FF
-      FF00FFFFFF00A19D9D00A19D9D00A19D9D00A19D9D00FFFFFF0000000000FFFF
-      FF00FFFFFF0000000000FF00FF00FF00FF0000FFFF00FFFFFF007575750000FF
-      FF00FFFFFF007575750000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00B9B9B900FFFFFF0000000000FF00FF0000FFFF00A19D9D0000FF
-      FF00FFFFFF00A19D9D00A19D9D00A19D9D00A19D9D00FFFFFF0000000000FFFF
-      FF00FFFFFF0000000000FF00FF00FF00FF004B4B4B0000FFFF00FFFFFF0000CF
+      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF000000
+      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0808000F0F0F000F0F0F000F0F0
+      F000F0F0F000F0F0F00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000F0F0F000A0A0
+      A000808080007070700080808000FF00FF004B4B4B0000FFFF00FFFFFF0000CF
       CF004B4B4B004B4B4B004B4B4B004B4B4B00FF00FF004B4B4B004B4B4B004B4B
       CF004B4B4B004B4B4B004B4B4B004B4B4B00FF00FF004B4B4B004B4B4B004B4B
-      4B004B4B4B0084848400FF00FF00FF00FF00FF00FF00A19D9D0000FFFF00A19D
-      9D0000FFFF00A19D9D0000FFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF
-      FF0000000000FF00FF00FF00FF00FF00FF00DAEBED007575750000FFFF007575
-      750000FFFF00B9B9B9007575750000FFFF007500000075000000750000007500
-      000075000000750000007500000075000000FF00FF00A19D9D0000FFFF00A19D
-      9D0000FFFF00A19D9D0000FFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF
-      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF004B4B4B004B4B4B004B4B
+      4B004B4B4B0084848400FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0A0A000C0808000C080
+      8000C0808000C0808000C0808000C0808000C0808000B0707000B0707000B070
+      7000B0707000B070700070303000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000F0F0F000E0E0E000F0F0F000E0E0E000E0E0E000F0F0F000C0C0
+      C000C0C0C00060606000FF00FF00FF00FF00FF00FF004B4B4B004B4B4B004B4B
       4B00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       4B00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00A19D9D0000FFFF00FF00FF00A19D
-      9D00FFFFFF00FF00FF00A19D9D0000FFFF00FFFFFF00FFFFFF00000000000000
-      0000FF00FF00FF00FF00FF00FF00FF00FF007575750000FFFF00B9B9B9007575
-      7500FFFFFF00DAEBED00B9B9B900757575007500000075000000750000007500
-      000075000000750000007500000075000000A19D9D0000FFFF00FF00FF00A19D
-      9D00FFFFFF00FF00FF00A19D9D0000FFFF00FFFFFF00FFFFFF00000000000000
-      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
+      0000000000000000000000000000000000000000000000000000FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0808000800000008000
+      0000800000008000000080000000800000008000000080000000800000008000
+      0000800000008000000080000000FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009090
+      900060606000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00FF00FF00A19D
-      9D0000FFFF00FF00FF00FF00FF00A19D9D00000000000000000000000000FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00B9B9B900DAEBED007575
-      750000FFFF00DAEBED00DAEBED00B9B9B900FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00FF00FF00A19D
-      9D0000FFFF00FF00FF00FF00FF00A19D9D00000000000000000000000000FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00E0C0C000C0808000C080
+      8000C0808000C0808000C0808000C0808000C0808000C0808000C0808000C080
+      8000C0808000C0808000C0808000FF00FF00FF00FF00C0C0C000C0C0C000C0C0
+      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0008080
+      8000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
@@ -3593,14 +3593,14 @@ object frmLuaEditMain: TfrmLuaEditMain
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000000000000}
+      00000000000000000000000000000000}
   end
   end
   object odlgOpenUnit: TOpenDialog
   object odlgOpenUnit: TOpenDialog
     Filter = 
     Filter = 
       'Lua Files (*.lua, *.lpr)|*.lua;*.lpr|Lua Units (*.lua)|*.lua|Lua' +
       'Lua Files (*.lua, *.lpr)|*.lua;*.lpr|Lua Units (*.lua)|*.lua|Lua' +
       ' Projects (*.lpr)|*.lpr|LuaEdit Macros (*.lmc)|*.lmc|Text Files ' +
       ' Projects (*.lpr)|*.lpr|LuaEdit Macros (*.lmc)|*.lmc|Text Files ' +
       '(*.txt)|*.txt|All Files (*.*)|*.*'
       '(*.txt)|*.txt|All Files (*.*)|*.*'
+    FilterIndex = 6
     InitialDir = 'C:\'
     InitialDir = 'C:\'
     Options = [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing]
     Options = [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing]
     Left = 80
     Left = 80
@@ -3942,6 +3942,21 @@ object frmLuaEditMain: TfrmLuaEditMain
   end
   end
   object jvDockVSNet: TJvDockVSNetStyle
   object jvDockVSNet: TJvDockVSNetStyle
     AlwaysShowGrabber = True
     AlwaysShowGrabber = True
+    ConjoinServerOption.ActiveFont.Charset = DEFAULT_CHARSET
+    ConjoinServerOption.ActiveFont.Color = clWhite
+    ConjoinServerOption.ActiveFont.Height = -11
+    ConjoinServerOption.ActiveFont.Name = 'Tahoma'
+    ConjoinServerOption.ActiveFont.Style = []
+    ConjoinServerOption.InactiveFont.Charset = DEFAULT_CHARSET
+    ConjoinServerOption.InactiveFont.Color = clBlack
+    ConjoinServerOption.InactiveFont.Height = -11
+    ConjoinServerOption.InactiveFont.Name = 'Tahoma'
+    ConjoinServerOption.InactiveFont.Style = []
+    ConjoinServerOption.ActiveTitleStartColor = 12352611
+    ConjoinServerOption.ActiveTitleEndColor = 12352611
+    ConjoinServerOption.InactiveTitleStartColor = clBtnFace
+    ConjoinServerOption.InactiveTitleEndColor = clBtnFace
+    ConjoinServerOption.SystemInfo = False
     TabServerOption.InactiveSheetColor = clWhite
     TabServerOption.InactiveSheetColor = clWhite
     TabServerOption.ActiveFont.Charset = ANSI_CHARSET
     TabServerOption.ActiveFont.Charset = ANSI_CHARSET
     TabServerOption.ActiveFont.Color = clWindowText
     TabServerOption.ActiveFont.Color = clWindowText
@@ -4966,35 +4981,40 @@ object frmLuaEditMain: TfrmLuaEditMain
     object ools1: TMenuItem
     object ools1: TMenuItem
       Action = actMainMenuTools
       Action = actMainMenuTools
       object RegistryEditor1: TMenuItem
       object RegistryEditor1: TMenuItem
-        Caption = 'Registry Editor'
+        Caption = 'Registry Editor...'
         ImageIndex = 37
         ImageIndex = 37
         OnClick = RegistryEditor1Click
         OnClick = RegistryEditor1Click
       end
       end
       object Calculator1: TMenuItem
       object Calculator1: TMenuItem
-        Caption = 'Calculator'
+        Caption = 'Calculator...'
         ImageIndex = 37
         ImageIndex = 37
         OnClick = Calculator1Click
         OnClick = Calculator1Click
       end
       end
       object ErrorLookup1: TMenuItem
       object ErrorLookup1: TMenuItem
-        Caption = 'Error Lookup'
+        Caption = 'Error Lookup...'
         ImageIndex = 37
         ImageIndex = 37
         OnClick = ErrorLookup1Click
         OnClick = ErrorLookup1Click
       end
       end
       object Conversions1: TMenuItem
       object Conversions1: TMenuItem
-        Caption = 'Conversions'
+        Caption = 'Conversions...'
         ImageIndex = 37
         ImageIndex = 37
         OnClick = Conversions1Click
         OnClick = Conversions1Click
       end
       end
       object AsciiTable1: TMenuItem
       object AsciiTable1: TMenuItem
-        Caption = 'Ascii Table'
+        Caption = 'Ascii Table...'
         ImageIndex = 37
         ImageIndex = 37
         OnClick = AsciiTable1Click
         OnClick = AsciiTable1Click
       end
       end
       object CreateGUID1: TMenuItem
       object CreateGUID1: TMenuItem
-        Caption = 'Create GUID'
+        Caption = 'Create GUID...'
         ImageIndex = 37
         ImageIndex = 37
         OnClick = CreateGUID1Click
         OnClick = CreateGUID1Click
       end
       end
+      object PathConverter1: TMenuItem
+        Caption = 'Path Converter...'
+        ImageIndex = 37
+        OnClick = PathConverter1Click
+      end
       object N23: TMenuItem
       object N23: TMenuItem
         Caption = '-'
         Caption = '-'
       end
       end

File diff suppressed because it is too large
+ 355 - 160
LuaEdit/Main.pas


+ 117 - 60
LuaEdit/Misc.pas

@@ -16,6 +16,7 @@ uses
   StdCtrls, JvTabBar;
   StdCtrls, JvTabBar;
 
 
 const
 const
+  LUAEDIT_UNKNOW_MSG  = 0;
   LUAEDIT_HINT_MSG    = 1;
   LUAEDIT_HINT_MSG    = 1;
   LUAEDIT_WARNING_MSG = 2;
   LUAEDIT_WARNING_MSG = 2;
   LUAEDIT_ERROR_MSG   = 3;
   LUAEDIT_ERROR_MSG   = 3;
@@ -52,7 +53,7 @@ const
 type
 type
 
 
   //////////////////////////////////////////////////////////////////////////////
   //////////////////////////////////////////////////////////////////////////////
-  // Copy data type
+  // Copy data message data types
   //////////////////////////////////////////////////////////////////////////////
   //////////////////////////////////////////////////////////////////////////////
   TCopyDataType = (cdtAnsiString = 0, cdtWideString = 1, cdtBinary = 2);
   TCopyDataType = (cdtAnsiString = 0, cdtWideString = 1, cdtBinary = 2);
 
 
@@ -157,8 +158,8 @@ type
   end;
   end;
 
 
   TBreakInfo = class(TObject)
   TBreakInfo = class(TObject)
-    FileName: String;
-    Call:     String;
+    FileName: String;   // Path of file where the break happened
+    Call:     String;   // Actual text at line break
     LineOut:  String;   // Line number to display
     LineOut:  String;   // Line number to display
     Line:     Integer;  // Actual line definition in script
     Line:     Integer;  // Actual line definition in script
   public
   public
@@ -232,6 +233,7 @@ type
     FLastTimeModified:  TDateTime;
     FLastTimeModified:  TDateTime;
     FName:              String;
     FName:              String;
     FPath:              String;
     FPath:              String;
+    FDisplayPath:       String;
     FIsReadOnly:        Boolean;
     FIsReadOnly:        Boolean;
     FIsNew:             Boolean;
     FIsNew:             Boolean;
     FHasChanged:        Boolean;
     FHasChanged:        Boolean;
@@ -239,11 +241,15 @@ type
     FPrjOwner:          TLuaEditProject;
     FPrjOwner:          TLuaEditProject;
   public
   public
     constructor Create(Path: String; otType: TLuaEditFileType = otTextFile);
     constructor Create(Path: String; otType: TLuaEditFileType = otTextFile);
+
+    function  Save(Path: String): Boolean; virtual;
+    function  SaveInc(Path: String): Boolean; virtual;
   published
   published
     property FileType: TLuaEditFileType read FOTFileType write FOTFileType;
     property FileType: TLuaEditFileType read FOTFileType write FOTFileType;
     property LastTimeModified: TDateTime read FLastTimeModified write FLastTimeModified;
     property LastTimeModified: TDateTime read FLastTimeModified write FLastTimeModified;
     property Name: String read FName write FName;
     property Name: String read FName write FName;
     property Path: String read FPath write FPath;
     property Path: String read FPath write FPath;
+    property DisplayPath: String read FDisplayPath write FDisplayPath;
     property IsReadOnly: Boolean read FIsReadOnly write FIsReadOnly;
     property IsReadOnly: Boolean read FIsReadOnly write FIsReadOnly;
     property IsNew: Boolean read FIsNew write FIsNew;
     property IsNew: Boolean read FIsNew write FIsNew;
     property HasChanged: Boolean read FHasChanged write FHasChanged;
     property HasChanged: Boolean read FHasChanged write FHasChanged;
@@ -273,8 +279,8 @@ type
     constructor Create(Path: String; otType: TLuaEditFileType = otTextFile);
     constructor Create(Path: String; otType: TLuaEditFileType = otTextFile);
     destructor Destroy; override;
     destructor Destroy; override;
 
 
-    function  SaveUnit(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean; virtual;
-    function  SaveUnitInc(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean; virtual;
+    function  Save(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean; overload;
+    function  SaveInc(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean; overload;
   published
   published
     property LastEditedLine:   Integer read FLastEditedLine write FLastEditedLine;
     property LastEditedLine:   Integer read FLastEditedLine write FLastEditedLine;
     property SynUnit:          TSynEdit read FSynUnit write FSynUnit;
     property SynUnit:          TSynEdit read FSynUnit write FSynUnit;
@@ -292,8 +298,8 @@ type
     constructor Create(Path: String; otType: TLuaEditFileType = otTextFile);
     constructor Create(Path: String; otType: TLuaEditFileType = otTextFile);
     destructor Destroy; override;
     destructor Destroy; override;
 
 
-    function  SaveUnit(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean; override;
-    function  SaveUnitInc(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean; override;
+    function  Save(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean; overload;
+    function  SaveInc(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean; overload;
     procedure SaveBreakpoints();
     procedure SaveBreakpoints();
     procedure GetBreakpoints();
     procedure GetBreakpoints();
   published
   published
@@ -344,8 +350,8 @@ type
     destructor  Destroy; override;
     destructor  Destroy; override;
 
 
     procedure GetProjectFromDisk(Path: String);
     procedure GetProjectFromDisk(Path: String);
-    function  SaveProject(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean;
-    function  SaveProjectInc(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean;
+    function  Save(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean; overload;
+    function  SaveInc(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean; overload;
     procedure RealoadProject();
     procedure RealoadProject();
   end;
   end;
 
 
@@ -359,12 +365,40 @@ function  SetPrivilege(sPrivilegeName : PChar; bEnabled : boolean): boolean; cde
 procedure ToggleFileReadOnlyAttr(const sFileName: PChar); cdecl; external 'LuaEditSys.dll';
 procedure ToggleFileReadOnlyAttr(const sFileName: PChar); cdecl; external 'LuaEditSys.dll';
 function  WinExit(iFlags: integer): Boolean; cdecl; external 'LuaEditSys.dll';
 function  WinExit(iFlags: integer): Boolean; cdecl; external 'LuaEditSys.dll';
 function  BrowseURL(URL: PChar): Boolean; cdecl; external 'LuaEditSys.dll';
 function  BrowseURL(URL: PChar): Boolean; cdecl; external 'LuaEditSys.dll';
+
+// Other Misc functions
+function GetLuaEditInstallPath(): String;
+function FileExistsAbs(FileName: String): Boolean;
   
   
 implementation
 implementation
 
 
 uses
 uses
   Main, Breakpoints, ReadOnlyMsgBox, ProjectTree, GUIDesigner;
   Main, Breakpoints, ReadOnlyMsgBox, ProjectTree, GUIDesigner;
 
 
+///////////////////////////////////////////////////////////////////
+// Misc functions
+///////////////////////////////////////////////////////////////////
+
+// This function finds LuaEdit's install path and returns it
+function GetLuaEditInstallPath(): String;
+var
+  pReg: TRegistry;
+begin
+  Result := '';
+  pReg := TRegistry.Create;
+  pReg.RootKey := HKEY_LOCAL_MACHINE;
+
+  if pReg.OpenKey('\Software\LuaEdit', False) then
+    Result := pReg.ReadString('ApplicationPath');
+
+  pReg.Free;
+end;
+
+function FileExistsAbs(FileName: String): Boolean;
+begin
+  Result := (DirectoryExists(ExtractFileDir(FileName)) and (FileExists(FileName)));
+end;
+
 ///////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////
 // TAdvanceRegistry class
 // TAdvanceRegistry class
 ///////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////
@@ -634,40 +668,43 @@ var
   ImgIndex: integer;
   ImgIndex: integer;
   pLuaUnit: TLuaEditUnit;
   pLuaUnit: TLuaEditUnit;
 begin
 begin
-  pLuaUnit := TLuaEditUnit(frmLuaEditMain.jvUnitBar.SelectedTab.Data);
-
-  FirstLine := pLuaUnit.synUnit.RowToLine(FirstLine);
-  LastLine := pLuaUnit.synUnit.RowToLine(LastLine);
-  X := 1;
-  LH := pLuaUnit.synUnit.LineHeight;
-  while FirstLine <= LastLine do
+  if Assigned(frmLuaEditMain.jvUnitBar.SelectedTab) then
   begin
   begin
-    ImgIndex := -1;
-    Y := (LH - frmLuaEditMain.imlActions.Height) div 2 + LH * (pLuaUnit.synUnit.LineToRow(FirstLine) - pLuaUnit.synUnit.TopLine);
+    pLuaUnit := TLuaEditUnit(frmLuaEditMain.jvUnitBar.SelectedTab.Data);
 
 
-    if pLuaUnit.DebugInfos.IsBreakPointLine(FirstLine) then
+    FirstLine := pLuaUnit.synUnit.RowToLine(FirstLine);
+    LastLine := pLuaUnit.synUnit.RowToLine(LastLine);
+    X := 1;
+    LH := pLuaUnit.synUnit.LineHeight;
+    while FirstLine <= LastLine do
     begin
     begin
-      if pLuaUnit.DebugInfos.GetBreakpointStatus(FirstLine) = BKPT_ENABLED then
-        ImgIndex := 27
-      else
-        ImgIndex := 28;
-    end;
+      ImgIndex := -1;
+      Y := (LH - frmLuaEditMain.imlActions.Height) div 2 + LH * (pLuaUnit.synUnit.LineToRow(FirstLine) - pLuaUnit.synUnit.TopLine);
+
+      if pLuaUnit.DebugInfos.IsBreakPointLine(FirstLine) then
+      begin
+        if pLuaUnit.DebugInfos.GetBreakpointStatus(FirstLine) = BKPT_ENABLED then
+          ImgIndex := 27
+        else
+          ImgIndex := 28;
+      end;
 
 
-    if TLuaEditUnit(frmLuaEditMain.jvUnitBar.SelectedTab.Data).DebugInfos.iCurrentLineDebug = FirstLine then
-      ImgIndex := 29;
+      if TLuaEditUnit(frmLuaEditMain.jvUnitBar.SelectedTab.Data).DebugInfos.iCurrentLineDebug = FirstLine then
+        ImgIndex := 29;
 
 
-    if ((pLuaUnit.DebugInfos.IsBreakPointLine(FirstLine)) and (TLuaEditUnit(frmLuaEditMain.jvUnitBar.SelectedTab.Data).DebugInfos.iCurrentLineDebug = FirstLine)) then
-    begin
-      if pLuaUnit.DebugInfos.GetBreakpointStatus(FirstLine) = BKPT_ENABLED then
-        ImgIndex := 30
-      else
-        ImgIndex := 43;
-    end;
+      if ((pLuaUnit.DebugInfos.IsBreakPointLine(FirstLine)) and (TLuaEditUnit(frmLuaEditMain.jvUnitBar.SelectedTab.Data).DebugInfos.iCurrentLineDebug = FirstLine)) then
+      begin
+        if pLuaUnit.DebugInfos.GetBreakpointStatus(FirstLine) = BKPT_ENABLED then
+          ImgIndex := 30
+        else
+          ImgIndex := 43;
+      end;
 
 
-    if ImgIndex > 0 then
-      frmLuaEditMain.imlActions.Draw(ACanvas, X, Y, ImgIndex);
+      if ImgIndex > 0 then
+        frmLuaEditMain.imlActions.Draw(ACanvas, X, Y, ImgIndex);
 
 
-    Inc(FirstLine);
+      Inc(FirstLine);
+    end;
   end;
   end;
 end;
 end;
 
 
@@ -719,16 +756,31 @@ begin
   FPath := Path;
   FPath := Path;
 
 
   // Get Last Time accessed and readonly state
   // Get Last Time accessed and readonly state
-  if ((Path <> '') and FileExists(Path)) then
+  if ((Path <> '') and FileExistsAbs(Path)) then
   begin
   begin
     FLastTimeModified := GetFileLastTimeModified(PChar(Path));
     FLastTimeModified := GetFileLastTimeModified(PChar(Path));
     FIsReadOnly := GetFileReadOnlyAttr(PChar(Path));
     FIsReadOnly := GetFileReadOnlyAttr(PChar(Path));
+    FDisplayPath := FPath;
   end
   end
   else
   else
   begin
   begin
+    FPath := GetLuaEditInstallPath() + '\Templates\Template' + ExtractFileExt(Path);
+    FDisplayPath := '?\' + ExtractFileName(Path);
     FLastTimeModified := Now;
     FLastTimeModified := Now;
     FIsReadOnly := False;
     FIsReadOnly := False;
   end;
   end;
+
+  FName := ChangeFileExt(ExtractFileName(Path), '');
+end;
+
+function TLuaEditFile.Save(Path: String): Boolean;
+begin
+  FDisplayPath := Path;
+end;
+
+function TLuaEditFile.SaveInc(Path: String): Boolean;
+begin
+  FDisplayPath := Path;
 end;
 end;
 
 
 ///////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////
@@ -762,7 +814,6 @@ begin
 
 
   FLastEditedLine := -1;
   FLastEditedLine := -1;
   FAssociatedTab := nil;
   FAssociatedTab := nil;
-  FName := ExtractFileName(Path);
 
 
   // Set some properties
   // Set some properties
   FSynUnit := TSynEdit.Create(frmLuaEditMain.pnlMain);
   FSynUnit := TSynEdit.Create(frmLuaEditMain.pnlMain);
@@ -792,7 +843,7 @@ begin
     FSynUnit.Highlighter := TSynLuaSyn.Create(nil);
     FSynUnit.Highlighter := TSynLuaSyn.Create(nil);
 
 
   // Load content in the synedit control if required
   // Load content in the synedit control if required
-  if ((not IsNew) and FileExists(Path)) then
+  if ((not IsNew) and FileExistsAbs(Path)) then
     SynUnit.Lines.LoadFromFile(Path);
     SynUnit.Lines.LoadFromFile(Path);
 end;
 end;
 
 
@@ -803,12 +854,12 @@ begin
   FSynUnit.Free;
   FSynUnit.Free;
 end;
 end;
 
 
-function TLuaEditBasicTextFile.SaveUnitInc(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean;
+function TLuaEditBasicTextFile.SaveInc(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean;
 var
 var
   xPos, IncValue, iAnswer, TempIncValue: Integer;
   xPos, IncValue, iAnswer, TempIncValue: Integer;
   bResult: Boolean;
   bResult: Boolean;
   pMsgBox: TfrmReadOnlyMsgBox;
   pMsgBox: TfrmReadOnlyMsgBox;
-begin
+begin  
   frmLuaEditMain.jvchnNotifier.Active := False;
   frmLuaEditMain.jvchnNotifier.Active := False;
   Result := True;
   Result := True;
 
 
@@ -868,7 +919,7 @@ begin
     Path := Copy(Self.Path, 1, Length(Self.Path) - xPos + 1) + IntToStr(IncValue) + ExtractFileExt(Self.Path);
     Path := Copy(Self.Path, 1, Length(Self.Path) - xPos + 1) + IntToStr(IncValue) + ExtractFileExt(Self.Path);
 
 
     // Check if file is read only first
     // Check if file is read only first
-    while (GetFileReadOnlyAttr(PChar(Path)) and (FileExists(Path))) do
+    while (GetFileReadOnlyAttr(PChar(Path)) and (FileExistsAbs(Path))) do
     begin
     begin
       pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
       pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
       iAnswer := pMsgBox.MessageBox('The project '+Path+' is read-only. Save anyway?      ', 'LuaEdit');
       iAnswer := pMsgBox.MessageBox('The project '+Path+' is read-only. Save anyway?      ', 'LuaEdit');
@@ -923,13 +974,14 @@ begin
   end;
   end;
 
 
   frmLuaEditMain.jvchnNotifier.Active := True;
   frmLuaEditMain.jvchnNotifier.Active := True;
+  inherited SaveInc(Path);
 end;
 end;
 
 
-function TLuaEditBasicTextFile.SaveUnit(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean;
+function TLuaEditBasicTextFile.Save(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean;
 var
 var
   iAnswer: Integer;
   iAnswer: Integer;
   pMsgBox: TfrmReadOnlyMsgBox;
   pMsgBox: TfrmReadOnlyMsgBox;
-begin
+begin  
   frmLuaEditMain.jvchnNotifier.Active := False;
   frmLuaEditMain.jvchnNotifier.Active := False;
   Result := True;
   Result := True;
 
 
@@ -968,7 +1020,7 @@ begin
     end;
     end;
 
 
     // Check if file is read only first
     // Check if file is read only first
-    while (GetFileReadOnlyAttr(PChar(Path)) and (FileExists(Path))) do
+    while (GetFileReadOnlyAttr(PChar(Path)) and (FileExistsAbs(Path))) do
     begin
     begin
       pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
       pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
       iAnswer := pMsgBox.MessageBox('The project '+Path+' is read-only. Save anyway?      ', 'LuaEdit');
       iAnswer := pMsgBox.MessageBox('The project '+Path+' is read-only. Save anyway?      ', 'LuaEdit');
@@ -1023,6 +1075,7 @@ begin
   end;
   end;
 
 
   frmLuaEditMain.jvchnNotifier.Active := True;
   frmLuaEditMain.jvchnNotifier.Active := True;
+  inherited Save(Path);
 end;
 end;
 
 
 ///////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////
@@ -1053,9 +1106,9 @@ begin
   FSynParams.Free;
   FSynParams.Free;
 end;
 end;
 
 
-function TLuaEditDebugFile.SaveUnit(Path: String; bNoDialog: Boolean; bForceDialog: Boolean): Boolean;
+function TLuaEditDebugFile.Save(Path: String; bNoDialog: Boolean; bForceDialog: Boolean): Boolean;
 begin
 begin
-  inherited SaveUnit(Path, bNoDialog, bForceDialog);
+  inherited Save(Path, bNoDialog, bForceDialog);
 
 
   // Reinitialize variables
   // Reinitialize variables
   DebugInfos.iLineError := -1;  // Do not display anymore the current line error
   DebugInfos.iLineError := -1;  // Do not display anymore the current line error
@@ -1069,9 +1122,9 @@ begin
   SynUnit.Refresh;
   SynUnit.Refresh;
 end;
 end;
 
 
-function TLuaEditDebugFile.SaveUnitInc(Path: String; bNoDialog: Boolean; bForceDialog: Boolean): Boolean;
+function TLuaEditDebugFile.SaveInc(Path: String; bNoDialog: Boolean; bForceDialog: Boolean): Boolean;
 begin
 begin
-  inherited SaveUnitInc(Path, bNoDialog, bForceDialog);
+  inherited SaveInc(Path, bNoDialog, bForceDialog);
 
 
   // Reinitialize variables
   // Reinitialize variables
   DebugInfos.iLineError := -1;  // Do not display anymore the current line error
   DebugInfos.iLineError := -1;  // Do not display anymore the current line error
@@ -1097,7 +1150,7 @@ begin
   begin
   begin
     // Erase existing file if any to ensure a new clean breakpoint file
     // Erase existing file if any to ensure a new clean breakpoint file
     // NOTE: IniFiles append datas when they already exists
     // NOTE: IniFiles append datas when they already exists
-    if FileExists(ChangeFileExt(Path, '.lbf')) then
+    if FileExistsAbs(ChangeFileExt(Path, '.lbf')) then
       DeleteFile(PChar(ChangeFileExt(Path, '.lbf')));
       DeleteFile(PChar(ChangeFileExt(Path, '.lbf')));
 
 
     // Create the ini file engine and the file on the hard drive
     // Create the ini file engine and the file on the hard drive
@@ -1134,7 +1187,7 @@ var
   pBreakpoint: TBreakpoint;
   pBreakpoint: TBreakpoint;
 begin
 begin
   // Only if a .lbf file with the same name as the .lua file is existing
   // Only if a .lbf file with the same name as the .lua file is existing
-  if FileExists(ChangeFileExt(Path, '.lbf')) then
+  if FileExistsAbs(ChangeFileExt(Path, '.lbf')) then
   begin
   begin
     lstSections := TStringList.Create;  // Create the section list
     lstSections := TStringList.Create;  // Create the section list
     pBreakpointFile := TIniFile.Create(ChangeFileExt(Path, '.lbf'));  // Create the ini file engine and the file on the hard drive
     pBreakpointFile := TIniFile.Create(ChangeFileExt(Path, '.lbf'));  // Create the ini file engine and the file on the hard drive
@@ -1253,7 +1306,7 @@ begin
     begin
     begin
       sUnitName :=  ExpandUNCFileName(ExtractFilePath(FPath) + fFile.ReadString('Files', lstTmpFiles.Strings[x], ''));
       sUnitName :=  ExpandUNCFileName(ExtractFilePath(FPath) + fFile.ReadString('Files', lstTmpFiles.Strings[x], ''));
 
 
-      if FileExists(sUnitName) then
+      if FileExistsAbs(sUnitName) then
       begin
       begin
         // Initialize unit and global variables considering the fact that open was a success
         // Initialize unit and global variables considering the fact that open was a success
         pLuaUnit := TLuaEditUnit(frmLuaEditMain.AddFileInProject(sUnitName, False, Self));
         pLuaUnit := TLuaEditUnit(frmLuaEditMain.AddFileInProject(sUnitName, False, Self));
@@ -1282,13 +1335,15 @@ begin
   lstTmpFiles.Free;
   lstTmpFiles.Free;
 end;
 end;
 
 
-function TLuaEditProject.SaveProjectInc(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean;
+function TLuaEditProject.SaveInc(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean;
 var
 var
   pFile: TIniFile;
   pFile: TIniFile;
   x, xPos, IncValue, iAnswer, TempIncValue: integer;
   x, xPos, IncValue, iAnswer, TempIncValue: integer;
   bResult: Boolean;
   bResult: Boolean;
   pMsgBox: TfrmReadOnlyMsgBox;
   pMsgBox: TfrmReadOnlyMsgBox;
 begin
 begin
+  inherited SaveInc(Path);
+
   frmLuaEditMain.jvchnNotifier.Active := False;
   frmLuaEditMain.jvchnNotifier.Active := False;
   Result := True;
   Result := True;
 
 
@@ -1331,7 +1386,7 @@ begin
   Path := Copy(Path, 1, Length(Path) - xPos + 1) + IntToStr(IncValue) + ExtractFileExt(Path);  // Build the new name
   Path := Copy(Path, 1, Length(Path) - xPos + 1) + IntToStr(IncValue) + ExtractFileExt(Path);  // Build the new name
 
 
   // Check if file is read only first
   // Check if file is read only first
-  while (GetFileReadOnlyAttr(PChar(Path)) and (FileExists(Path))) do
+  while (GetFileReadOnlyAttr(PChar(Path)) and (FileExistsAbs(Path))) do
   begin
   begin
     pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
     pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
     iAnswer := pMsgBox.MessageBox('The project '+Path+' is read-only. Save anyway?      ', 'LuaEdit');
     iAnswer := pMsgBox.MessageBox('The project '+Path+' is read-only. Save anyway?      ', 'LuaEdit');
@@ -1372,7 +1427,7 @@ begin
 
 
   // Erase existing file if any to ensure a new clean project
   // Erase existing file if any to ensure a new clean project
   // NOTE: IniFiles append stuff to it when they already exists
   // NOTE: IniFiles append stuff to it when they already exists
-  if FileExists(Path) then
+  if FileExistsAbs(Path) then
     DeleteFile(PChar(Path));
     DeleteFile(PChar(Path));
 
 
   pFile := TIniFile.Create(Path);  // Create project file writer engine (using *.ini files way)
   pFile := TIniFile.Create(Path);  // Create project file writer engine (using *.ini files way)
@@ -1427,12 +1482,14 @@ begin
   frmLuaEditMain.jvchnNotifier.Active := True;
   frmLuaEditMain.jvchnNotifier.Active := True;
 end;
 end;
 
 
-function TLuaEditProject.SaveProject(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean;
+function TLuaEditProject.Save(Path: String; bNoDialog: Boolean = False; bForceDialog: Boolean = False): Boolean;
 var
 var
   pFile: TIniFile;
   pFile: TIniFile;
   x, iAnswer: integer;
   x, iAnswer: integer;
   pMsgBox: TfrmReadOnlyMsgBox;
   pMsgBox: TfrmReadOnlyMsgBox;
 begin
 begin
+  inherited Save(Path);
+
   frmLuaEditMain.jvchnNotifier.Active := False;
   frmLuaEditMain.jvchnNotifier.Active := False;
   Result := True;
   Result := True;
 
 
@@ -1457,7 +1514,7 @@ begin
   end;
   end;
 
 
   // Check if file is read only first
   // Check if file is read only first
-  while (GetFileReadOnlyAttr(PChar(Path)) and (FileExists(Path))) do
+  while (GetFileReadOnlyAttr(PChar(Path)) and (FileExistsAbs(Path))) do
   begin
   begin
     pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
     pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
     iAnswer := pMsgBox.MessageBox('The project '+Path+' is read-only. Save anyway?      ', 'LuaEdit');
     iAnswer := pMsgBox.MessageBox('The project '+Path+' is read-only. Save anyway?      ', 'LuaEdit');
@@ -1494,7 +1551,7 @@ begin
 
 
   // Erase existing file if any to ensure a new clean project
   // Erase existing file if any to ensure a new clean project
   // NOTE: IniFiles append datas when they already exists
   // NOTE: IniFiles append datas when they already exists
-  if FileExists(Path) then
+  if FileExistsAbs(Path) then
     DeleteFile(PChar(Path));
     DeleteFile(PChar(Path));
 
 
   if Self.Path <> Path then
   if Self.Path <> Path then
@@ -1563,9 +1620,9 @@ begin
       if Application.MessageBox(PChar('Save changes to file '+pLuaUnit.Path+'?'), 'LuaEdit', MB_YESNO+MB_ICONQUESTION) = IDYES then
       if Application.MessageBox(PChar('Save changes to file '+pLuaUnit.Path+'?'), 'LuaEdit', MB_YESNO+MB_ICONQUESTION) = IDYES then
       begin
       begin
         if SaveUnitsInc then
         if SaveUnitsInc then
-          pLuaUnit.SaveUnitInc(pLuaUnit.Path)
+          pLuaUnit.SaveInc(pLuaUnit.Path)
         else
         else
-          pLuaUnit.SaveUnit(pLuaUnit.Path);
+          pLuaUnit.Save(pLuaUnit.Path);
       end;
       end;
     end;
     end;
 
 

+ 7 - 8
LuaEdit/PrjSettings.dfm

@@ -522,11 +522,11 @@ object frmPrjOptions: TfrmPrjOptions
       Indent = 19
       Indent = 19
       TabOrder = 1
       TabOrder = 1
       Items.Data = {
       Items.Data = {
-        0200000020000000000000000000000000000000FFFFFFFF0000000001000000
+        0200000020000000010000000100000000000000FFFFFFFF0000000001000000
         0747656E6572616C27000000FFFFFFFFFFFFFFFF01000000FFFFFFFF00000000
         0747656E6572616C27000000FFFFFFFFFFFFFFFF01000000FFFFFFFF00000000
-        000000000E4964656E74696669636174696F6E1E0000000000000000000000FF
-        FFFFFFFFFFFFFF02000000020000000544656275672200000002000000020000
-        00FFFFFFFFFFFFFFFF020000000000000009457865637574696F6E25000000FF
+        000000000E4964656E74696669636174696F6E1E0000000100000001000000FF
+        FFFFFFFFFFFFFF020000000200000005446562756722000000FFFFFFFFFFFFFF
+        FFFFFFFFFFFFFFFFFF020000000000000009457865637574696F6E25000000FF
         FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01000000000000000C52656D6F74652044
         FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01000000000000000C52656D6F74652044
         65627567}
         65627567}
       Items.Links = {050000000000000000000000020000000200000001000000}
       Items.Links = {050000000000000000000000020000000200000001000000}
@@ -681,10 +681,9 @@ object frmPrjOptions: TfrmPrjOptions
       FFFFFFFFFFFF0000FFFFFFFFFFFF000000000000000000000000000000000000
       FFFFFFFFFFFF0000FFFFFFFFFFFF000000000000000000000000000000000000
       000000000000}
       000000000000}
   end
   end
-  object jvSelectDir: TJvSelectDirectory
-    ClassicDialog = False
+  object jvSelectDir: TJvBrowseForFolderDialog
     Title = 'Select Directory'
     Title = 'Select Directory'
-    Left = 78
-    Top = 281
+    Left = 80
+    Top = 280
   end
   end
 end
 end

+ 4 - 4
LuaEdit/PrjSettings.pas

@@ -7,7 +7,7 @@ uses
   Dialogs, StdCtrls, ExtCtrls, ComCtrls, Main, Mask, JvExMask, JvSpin,
   Dialogs, StdCtrls, ExtCtrls, ComCtrls, Main, Mask, JvExMask, JvSpin,
   JvExStdCtrls, JvEdit, JvValidateEdit, JvPageList, JvExControls, Misc,
   JvExStdCtrls, JvEdit, JvValidateEdit, JvPageList, JvExControls, Misc,
   JvComponent, JvExComCtrls, JvPageListTreeView, ImgList, JvGroupHeader,
   JvComponent, JvExComCtrls, JvPageListTreeView, ImgList, JvGroupHeader,
-  JvBaseDlg, JvSelectDirectory, JvDotNetControls;
+  JvBaseDlg, JvSelectDirectory, JvDotNetControls, JvBrowseFolder;
 
 
 type
 type
   TfrmPrjOptions = class(TForm)
   TfrmPrjOptions = class(TForm)
@@ -57,7 +57,6 @@ type
     btnBrowseDir: TButton;
     btnBrowseDir: TButton;
     Label15: TLabel;
     Label15: TLabel;
     cboUnits: TComboBox;
     cboUnits: TComboBox;
-    jvSelectDir: TJvSelectDirectory;
     Splitter1: TSplitter;
     Splitter1: TSplitter;
     JvGroupHeader8: TJvGroupHeader;
     JvGroupHeader8: TJvGroupHeader;
     JvGroupHeader5: TJvGroupHeader;
     JvGroupHeader5: TJvGroupHeader;
@@ -70,6 +69,7 @@ type
     btnBrowseDir2: TButton;
     btnBrowseDir2: TButton;
     Label18: TLabel;
     Label18: TLabel;
     txtCompileExt: TEdit;
     txtCompileExt: TEdit;
+    jvSelectDir: TJvBrowseForFolderDialog;
     procedure FormShow(Sender: TObject);
     procedure FormShow(Sender: TObject);
     procedure btnBrowseFileClick(Sender: TObject);
     procedure btnBrowseFileClick(Sender: TObject);
     procedure btnOkClick(Sender: TObject);
     procedure btnOkClick(Sender: TObject);
@@ -260,7 +260,7 @@ end;
 
 
 procedure TfrmPrjOptions.btnBrowseDirClick(Sender: TObject);
 procedure TfrmPrjOptions.btnBrowseDirClick(Sender: TObject);
 begin
 begin
-  jvSelectDir.InitialDir := txtRuntimeDir.Text;
+  jvSelectDir.Directory := txtRuntimeDir.Text;
   jvSelectDir.Title := 'Select Runtime Directory...';
   jvSelectDir.Title := 'Select Runtime Directory...';
 
 
   if jvSelectDir.Execute then
   if jvSelectDir.Execute then
@@ -272,7 +272,7 @@ end;
 
 
 procedure TfrmPrjOptions.btnBrowseDir2Click(Sender: TObject);
 procedure TfrmPrjOptions.btnBrowseDir2Click(Sender: TObject);
 begin
 begin
-  jvSelectDir.InitialDir := txtCompileDir.Text;
+  jvSelectDir.Directory := txtCompileDir.Text;
   jvSelectDir.Title := 'Select Compilation Output Directory...';
   jvSelectDir.Title := 'Select Compilation Output Directory...';
 
 
   if jvSelectDir.Execute then
   if jvSelectDir.Execute then

+ 9 - 4
LuaEdit/Profiler.dfm

@@ -1,7 +1,7 @@
 object frmProfiler: TfrmProfiler
 object frmProfiler: TfrmProfiler
-  Left = 441
-  Top = 247
-  Width = 601
+  Left = 356
+  Top = 236
+  Width = 612
   Height = 211
   Height = 211
   BorderStyle = bsSizeToolWin
   BorderStyle = bsSizeToolWin
   Caption = 'Profiler'
   Caption = 'Profiler'
@@ -23,7 +23,7 @@ object frmProfiler: TfrmProfiler
   object vstLuaProfiler: TVirtualStringTree
   object vstLuaProfiler: TVirtualStringTree
     Left = 0
     Left = 0
     Top = 0
     Top = 0
-    Width = 593
+    Width = 604
     Height = 184
     Height = 184
     Align = alClient
     Align = alClient
     Header.AutoSizeIndex = 0
     Header.AutoSizeIndex = 0
@@ -80,6 +80,11 @@ object frmProfiler: TfrmProfiler
         Position = 7
         Position = 7
         Width = 75
         Width = 75
         WideText = 'Exit Time'
         WideText = 'Exit Time'
+      end
+      item
+        Position = 8
+        Width = 100
+        WideText = 'Lua Memory'
       end>
       end>
   end
   end
   object JvDockClient1: TJvDockClient
   object JvDockClient1: TJvDockClient

+ 16 - 7
LuaEdit/Profiler.pas

@@ -18,6 +18,7 @@ type
     Source: String;
     Source: String;
     FctPointer: Pointer; // Functions's pointer
     FctPointer: Pointer; // Functions's pointer
     Line: Integer; // Function call line declaration
     Line: Integer; // Function call line declaration
+    MemUsage: Double; // Lua's memory usage at the call
     Parent: PVirtualNode; // Parent's pointer (pointer to caller's informations structure)
     Parent: PVirtualNode; // Parent's pointer (pointer to caller's informations structure)
     DurationRGauge: TGauge; // Relative duration gauge
     DurationRGauge: TGauge; // Relative duration gauge
     DurationOGauge: TGauge; // Overall duration gauge
     DurationOGauge: TGauge; // Overall duration gauge
@@ -29,11 +30,8 @@ type
     procedure vstLuaProfilerGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
     procedure vstLuaProfilerGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
     procedure vstLuaProfilerGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
     procedure vstLuaProfilerGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
     procedure FormDestroy(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
-    procedure vstLuaProfilerAfterCellPaint(Sender: TBaseVirtualTree;
-      TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
-      CellRect: TRect);
-    procedure vstLuaProfilerCollapsing(Sender: TBaseVirtualTree;
-      Node: PVirtualNode; var Allowed: Boolean);
+    procedure vstLuaProfilerAfterCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellRect: TRect);
+    procedure vstLuaProfilerCollapsing(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean);
     procedure FormCreate(Sender: TObject);
     procedure FormCreate(Sender: TObject);
   private
   private
     { Private declarations }
     { Private declarations }
@@ -43,7 +41,7 @@ type
     { Public declarations }
     { Public declarations }
     procedure InitProfiler;
     procedure InitProfiler;
     procedure ComputeProfiler;
     procedure ComputeProfiler;
-    function AddCall(FctPointer: Pointer; FctName: String; Line: Integer; Source: String): PProfilerCall;
+    function AddCall(FctPointer: Pointer; FctName: String; Line: Integer; Source: String; MemUsage: Double): PProfilerCall;
     procedure AddReturn(FctPointer: Pointer; FctName: String);
     procedure AddReturn(FctPointer: Pointer; FctName: String);
   end;
   end;
 
 
@@ -110,6 +108,7 @@ begin
   pNodeData.Line := -1;
   pNodeData.Line := -1;
   pNodeData.Source := 'Lua';
   pNodeData.Source := 'Lua';
   pNodeData.FctPointer := nil;
   pNodeData.FctPointer := nil;
+  pNodeData.MemUsage := -1;
   pNodeData.FctName := '[RESIDUAL PROCESSES]';
   pNodeData.FctName := '[RESIDUAL PROCESSES]';
 
 
   pNodeData.DurationRGauge := TGauge.Create(Self);
   pNodeData.DurationRGauge := TGauge.Create(Self);
@@ -130,7 +129,7 @@ begin
   vstLuaProfiler.EndUpdate;
   vstLuaProfiler.EndUpdate;
 end;
 end;
 
 
-function TfrmProfiler.AddCall(FctPointer: Pointer; FctName: String; Line: Integer; Source: String): PProfilerCall;
+function TfrmProfiler.AddCall(FctPointer: Pointer; FctName: String; Line: Integer; Source: String; MemUsage: Double): PProfilerCall;
 var
 var
   StartedTime: Int64;
   StartedTime: Int64;
   pCallData: PProfilerCall;
   pCallData: PProfilerCall;
@@ -161,6 +160,7 @@ begin
   pCallData.Line := Line;
   pCallData.Line := Line;
   pCallData.Source := Source;
   pCallData.Source := Source;
   pCallData.EnterTime := StartedTime;
   pCallData.EnterTime := StartedTime;
+  pCallData.MemUsage := MemUsage;
   pCurrentCall := pCallNode;
   pCurrentCall := pCallNode;
   Result := pCallData;
   Result := pCallData;
 end;
 end;
@@ -231,6 +231,15 @@ begin
         else
         else
           CellText := pData.ExitTimeStr;
           CellText := pData.ExitTimeStr;
       end;
       end;
+      8: // Memory Usage
+      begin
+        pData := Sender.GetNodeData(Node);
+
+        if (pData.Parent = Sender.RootNode) or (pData.MemUsage < 0) then
+          CellText := 'N/A'
+        else
+          CellText := FloatToStr(pData.MemUsage) + ' kb';
+      end;
     else
     else
       CellText := '';
       CellText := '';
     end;
     end;

+ 24 - 694
LuaEdit/ProjectTree.dfm

@@ -1,8 +1,8 @@
 object frmProjectTree: TfrmProjectTree
 object frmProjectTree: TfrmProjectTree
-  Left = 782
-  Top = 213
-  Width = 250
-  Height = 200
+  Left = 675
+  Top = 184
+  Width = 262
+  Height = 400
   BorderStyle = bsSizeToolWin
   BorderStyle = bsSizeToolWin
   Caption = 'Project Tree'
   Caption = 'Project Tree'
   Color = clBtnFace
   Color = clBtnFace
@@ -17,23 +17,24 @@ object frmProjectTree: TfrmProjectTree
   FormStyle = fsStayOnTop
   FormStyle = fsStayOnTop
   OldCreateOrder = False
   OldCreateOrder = False
   Position = poOwnerFormCenter
   Position = poOwnerFormCenter
+  OnCreate = FormCreate
   PixelsPerInch = 96
   PixelsPerInch = 96
   TextHeight = 13
   TextHeight = 13
   object Panel1: TPanel
   object Panel1: TPanel
     Left = 0
     Left = 0
     Top = 0
     Top = 0
-    Width = 242
-    Height = 173
+    Width = 254
+    Height = 373
     Align = alClient
     Align = alClient
     BevelOuter = bvNone
     BevelOuter = bvNone
     TabOrder = 0
     TabOrder = 0
-    object vstProjectTree: TVirtualStringTree
+    object vstProjectTree: TVirtualDrawTree
       Left = 0
       Left = 0
       Top = 0
       Top = 0
-      Width = 242
-      Height = 173
+      Width = 254
+      Height = 373
       Align = alClient
       Align = alClient
-      Header.AutoSizeIndex = 2
+      Header.AutoSizeIndex = 1
       Header.Font.Charset = DEFAULT_CHARSET
       Header.Font.Charset = DEFAULT_CHARSET
       Header.Font.Color = clWindowText
       Header.Font.Color = clWindowText
       Header.Font.Height = -11
       Header.Font.Height = -11
@@ -41,19 +42,16 @@ object frmProjectTree: TfrmProjectTree
       Header.Font.Style = []
       Header.Font.Style = []
       Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoVisible]
       Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoVisible]
       Header.Style = hsFlatButtons
       Header.Style = hsFlatButtons
-      HintMode = hmHintAndDefault
-      Images = imlProjectTree
       PopupMenu = ppmProjectTree
       PopupMenu = ppmProjectTree
       TabOrder = 0
       TabOrder = 0
-      TreeOptions.MiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toReportMode, toToggleOnDblClick, toWheelPanning]
+      TreeOptions.PaintOptions = [toShowBackground, toShowButtons, toShowDropmark, toShowRoot, toShowTreeLines, toThemeAware]
       TreeOptions.SelectionOptions = [toFullRowSelect, toRightClickSelect]
       TreeOptions.SelectionOptions = [toFullRowSelect, toRightClickSelect]
       OnAfterItemPaint = vstProjectTreeAfterItemPaint
       OnAfterItemPaint = vstProjectTreeAfterItemPaint
       OnDblClick = vstProjectTreeDblClick
       OnDblClick = vstProjectTreeDblClick
-      OnGetText = vstProjectTreeGetText
-      OnPaintText = vstProjectTreePaintText
-      OnGetImageIndex = vstProjectTreeGetImageIndex
-      OnGetHint = vstProjectTreeGetHint
+      OnDrawNode = vstProjectTreeDrawNode
       OnGetNodeDataSize = vstProjectTreeGetNodeDataSize
       OnGetNodeDataSize = vstProjectTreeGetNodeDataSize
+      OnInitNode = vstProjectTreeInitNode
+      OnKeyDown = vstProjectTreeKeyDown
       OnMouseDown = vstProjectTreeMouseDown
       OnMouseDown = vstProjectTreeMouseDown
       Columns = <
       Columns = <
         item
         item
@@ -62,688 +60,12 @@ object frmProjectTree: TfrmProjectTree
           WideText = 'Files'
           WideText = 'Files'
         end
         end
         item
         item
-          Alignment = taCenter
           Position = 1
           Position = 1
-          Style = vsOwnerDraw
-          Width = 24
-        end
-        item
-          Position = 2
-          Width = 114
+          Width = 150
           WideText = 'Path'
           WideText = 'Path'
         end>
         end>
     end
     end
   end
   end
-  object imlProjectTree: TImageList
-    Left = 40
-    Top = 41
-    Bitmap = {
-      494C01010E001300040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
-      0000000000003600000028000000400000005000000001002000000000000050
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000080808000808080008080800080808000808080000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000008080800080808000808080008080800080808000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000808080008000000080000000800000008000000080000000808080008080
-      8000808080000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000008080
-      8000000000000000000000000000000000000000000080808000808080008080
-      8000000000000000000000000000000000000000000000000000000000008000
-      0000800000000080000000800000008000000080000000800000800000008000
-      0000808080008080800000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000800000008000000080000000800000008000000000000000000000008080
-      8000808080000000000000000000000000000000000000000000800000000080
-      0000008000000080000000800000008000000080000000800000008000000080
-      0000800000008080800080808000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000800000008000
-      0000800000008000000080000000800000008000000080000000800000000000
-      0000808080008080800000000000000000000000000080000000008000000080
-      000000800000FFFFFF00FFFFFF00008000000080000000800000008000000080
-      0000008000008000000080808000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000080000000800000008000
-      000080000000FFFFFF00FFFFFF00FFFFFF008000000080000000800000008000
-      0000000000008080800000000000000000000000000080000000008000000080
-      000000800000FFFFFF00FFFFFF00FFFFFF000080000000800000008000000080
-      0000008000008000000080808000808080000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000080000000800000008000
-      000080000000FFFFFF00FFFFFF00FFFFFF008000000080000000800000008000
-      0000000000008080800080808000000000008000000000800000008000000080
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000800000008000000080
-      0000008000000080000080000000808080000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000008000000080000000800000008000
-      0000800000008000000080000000800000008000000080000000800000008000
-      0000800000000000000080808000000000008000000000800000008000000080
-      0000FFFFFF00FFFFFF0000800000FFFFFF00FFFFFF00FFFFFF00008000000080
-      0000008000000080000080000000808080000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000008000000080000000800000008000
-      000080000000FFFFFF00FFFFFF00FFFFFF008000000080000000800000008000
-      000080000000000000008080800000000000800000000080000000800000FFFF
-      FF00FFFFFF00FFFFFF000080000000800000FFFFFF00FFFFFF00FFFFFF000080
-      0000008000000080000080000000808080000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000008000000080000000800000008000
-      000080000000FFFFFF00FFFFFF00FFFFFF008000000080000000800000008000
-      000080000000000000008080800000000000800000000080000000800000FFFF
-      FF00FFFFFF0000800000008000000080000000800000FFFFFF00FFFFFF00FFFF
-      FF00008000000080000080000000808080000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000008000000080000000800000008000
-      000080000000FFFFFF00FFFFFF00FFFFFF008000000080000000800000008000
-      0000800000000000000080808000000000008000000000800000008000000080
-      0000008000000080000000800000008000000080000000800000FFFFFF000080
-      0000008000000080000080000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000008000000080000000800000008000
-      000080000000FFFFFF00FFFFFF00FFFFFF008000000080000000800000008000
-      0000800000000000000000000000000000000000000080000000008000000080
-      0000008000000080000000800000008000000080000000800000008000000080
-      0000008000008000000080808000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000080000000800000008000
-      000080000000FFFFFF00FFFFFF00FFFFFF008000000080000000800000008000
-      0000000000008080800000000000000000000000000080000000008000000080
-      0000008000000080000000800000008000000080000000800000008000000080
-      0000008000008000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000080000000800000008000
-      000080000000FFFFFF00FFFFFF00FFFFFF008000000080000000800000008000
-      0000000000000000000000000000000000000000000000000000800000000080
-      0000008000000080000000800000008000000080000000800000008000000080
-      0000800000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000800000008000
-      000080000000FFFFFF00FFFFFF00FFFFFF008000000080000000800000000000
-      0000000000000000000000000000000000000000000000000000000000008000
-      0000800000000080000000800000008000000080000000800000800000008000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000800000008000000080000000800000008000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000008000000080000000800000008000000080000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000808080008080
-      8000808080008080800080808000808080008080800080808000808080008080
-      8000808080008080800080808000000000000000000000000000000000000000
-      0000000000000000000080808000808080008080800080808000808080000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000080808000808080008080800080808000808080000000
-      0000000000000000000000000000000000000000000000808000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000080808000808080000000000000000000000000000000
-      0000808080008000000080000000800000008000000080000000808080008080
-      800080808000000000000000000000000000000000007B7B7B007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B000000000000000000000000000000
-      0000808080000000000000000000000000000000000000000000808080008080
-      8000808080000000000000000000000000000080800000FFFF0000FFFF0000FF
-      FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF
-      FF0000FFFF0000FFFF0000000000808080000000000000000000000000008000
-      0000800000000000FF000000FF000000FF000000FF000000FF00800000008000
-      00008080800080808000000000000000000000000000BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD007B7B7B000000000000000000000000000000
-      0000000000008000000080000000800000008000000080000000000000000000
-      0000808080008080800000000000000000000080800000FFFF0000FFFF0000FF
-      FF0000FFFF0000FFFF0080808000000000008080800000FFFF0000FFFF0000FF
-      FF0000FFFF0000FFFF0000000000808080000000000000000000800000000000
-      FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
-      FF008000000080808000808080000000000000000000BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD007B7B7B000000000000000000000000008000
-      0000800000008000000080000000800000008000000080000000800000008000
-      0000000000008080800080808000000000000080800000FFFF0000FFFF0000FF
-      FF0000FFFF0000FFFF0080808000000000008080800000FFFF0000FFFF0000FF
-      FF0000FFFF0000FFFF00000000000000000000000000800000000000FF000000
-      FF000000FF00FFFFFF00FFFFFF000000FF000000FF000000FF000000FF000000
-      FF000000FF0080000000808080000000000000000000BDBDBD00BDBDBD007B7B
-      7B00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD0080808000808080008080
-      800080808000BDBDBD00BDBDBD007B7B7B000000000000000000800000008000
-      00008000000080000000FFFFFF00FFFFFF00FFFFFF0080000000800000008000
-      000080000000000000008080800000000000000000000080800000FFFF0000FF
-      FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF
-      FF0000FFFF0000000000808080000000000000000000800000000000FF000000
-      FF000000FF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000FF000000
-      FF000000FF0080000000808080008080800000000000BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD0080808000BDBDBD00BDBDBD007B7B7B000000000000000000800000008000
-      00008000000080000000FFFFFF00FFFFFF00FFFFFF0080000000800000008000
-      000080000000000000008080800080808000000000000080800000FFFF0000FF
-      FF0000FFFF0000FFFF0000FFFF000000000000FFFF0000FFFF0000FFFF0000FF
-      FF0000FFFF00000000000000000000000000800000000000FF000000FF000000
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000
-      FF000000FF000000FF00800000008080800000000000BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD007B7B7B000000000080000000800000008000
-      00008000000080000000FFFFFF00FFFFFF00FFFFFF0080000000800000008000
-      00008000000080000000000000008080800000000000000000000080800000FF
-      FF0000FFFF0000FFFF0000808000000000000080800000FFFF0000FFFF0000FF
-      FF0000000000808080000000000000000000800000000000FF000000FF000000
-      FF00FFFFFF00FFFFFF000000FF00FFFFFF00FFFFFF00FFFFFF000000FF000000
-      FF000000FF000000FF00800000008080800000000000BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD0080808000808080008080
-      800080808000BDBDBD00BDBDBD007B7B7B00000000008000000080000000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF008000000080000000000000008080800000000000000000000080800000FF
-      FF0000FFFF0000FFFF0000000000000000000000000000FFFF0000FFFF0000FF
-      FF0000000000000000000000000000000000800000000000FF000000FF00FFFF
-      FF00FFFFFF00FFFFFF000000FF000000FF00FFFFFF00FFFFFF00FFFFFF000000
-      FF000000FF000000FF00800000008080800000000000BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD0080808000BDBDBD00BDBDBD007B7B7B00000000008000000080000000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00800000008000000000000000808080000000000000000000000000000080
-      800000FFFF0000FFFF0000000000000000000000000000FFFF0000FFFF000000
-      000080808000000000000000000000000000800000000000FF000000FF00FFFF
-      FF00FFFFFF000000FF000000FF000000FF000000FF00FFFFFF00FFFFFF00FFFF
-      FF000000FF000000FF00800000008080800000000000BDBDBD00BDBDBD007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD007B7B7B00000000008000000080000000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00800000008000000000000000808080000000000000000000000000000080
-      800000FFFF0000FFFF0000000000000000000000000000FFFF0000FFFF000000
-      000000000000000000000000000000000000800000000000FF000000FF000000
-      FF000000FF000000FF000000FF000000FF000000FF000000FF00FFFFFF000000
-      FF000000FF000000FF00800000000000000000000000BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD007B7B7B000000000080000000800000008000
-      00008000000080000000FFFFFF00FFFFFF00FFFFFF0080000000800000008000
-      0000800000008000000000000000000000000000000000000000000000000000
-      00000080800000FFFF0000FFFF000000000000FFFF0000FFFF00000000008080
-      80000000000000000000000000000000000000000000800000000000FF000000
-      FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
-      FF000000FF0080000000808080000000000000000000BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD007B7B7B000000000000000000800000008000
-      00008000000080000000FFFFFF00FFFFFF00FFFFFF0080000000800000008000
-      0000800000000000000080808000000000000000000000000000000000000000
-      00000080800000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00000000000000
-      00000000000000000000000000000000000000000000800000000000FF000000
-      FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
-      FF000000FF0080000000000000000000000000000000BDBDBD007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B00FFFF
-      FF007B7B7B00FFFFFF007B7B7B007B7B7B000000000000000000800000008000
-      00008000000080000000FFFFFF00FFFFFF00FFFFFF0080000000800000008000
-      0000800000000000000000000000000000000000000000000000000000000000
-      0000000000000080800000FFFF0000FFFF0000FFFF0000000000808080000000
-      0000000000000000000000000000000000000000000000000000800000000000
-      FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
-      FF008000000000000000000000000000000000000000BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD007B7B7B000000000000000000000000008000
-      0000800000008000000080000000800000008000000080000000800000008000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000080800000FFFF0000FFFF0000FFFF0000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000008000
-      0000800000000000FF000000FF000000FF000000FF000000FF00800000008000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000008000000080000000800000008000000080000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000808000008080000080800000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000008000000080000000800000008000000080000000000000000000
-      000000000000000000000000000000000000000000000000000000000000C0C0
-      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000C0C0C000C0C0C000C0C0C000C0C0C0000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000000000000000000000000000000000000000000000000000000000000C0C0
-      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000C0C0C000C0C0C000C0C0C000C0C0C0000000000000000000000000008080
-      8000808080008080800080808000808080008080800080808000808080008080
-      8000808080008080800000000000000000000000000000000000000000008080
-      8000808080008080800080808000808080008080800080808000808080008080
-      8000808080008080800000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000000000000000000000000000000000000000000000000000000000000C0C0
-      C000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000C0C0C0000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000008080800000000000000000000000000000000000C0C0C000C0C0
-      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000C0C0C0008080800000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000000000000000000000000000000000000000000000000000000000000C0C0
-      C000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000C0C0C000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF0000000000808080000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C00080808000000000000000000000000000BDBDBD007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B00000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000C0C0C000000000000000000080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF0000000000808080000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000FFFFFF00FFFF
-      FF00C0C0C00080808000000000000000000000000000BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B00000000000000000000808000C0C0C0000080
-      8000C0C0C0000080800000000000C0C0C000C0C0C00000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000C0C0C000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF0000000000808080000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C00080808000000000000000000000000000BDBDBD00BDBDBD007B7B
-      7B00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD007B7B7B007B7B7B007B7B
-      7B007B7B7B00BDBDBD007B7B7B00000000000000000000808000C0C0C0000080
-      8000C0C0C0000080800000000000000000000000000000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000C0C0C000000000000000000080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF0000000000808080000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000FFFFFF00FFFF
-      FF00C0C0C00080808000000000000000000000000000BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD007B7B7B00BDBDBD007B7B7B0000000000000000000000000000808000C0C0
-      C00000808000C0C0C0000080800000000000FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000C0C0C000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF0000000000808080000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C00080808000000000000000000000000000BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B00000000000000000000000000000000000080
-      8000C0C0C00000808000C0C0C0000080800000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000C0C0C000000000000000000080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF0000000000808080000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000FFFFFF00FFFF
-      FF00C0C0C00080808000000000000000000000000000BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD007B7B7B007B7B7B007B7B
-      7B007B7B7B00BDBDBD007B7B7B00000000000000000000000000000000000000
-      0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C00000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000C0C0C000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF0000000000808080000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C00080808000000000000000000000000000BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD007B7B7B00BDBDBD007B7B7B00000000000000000000000000000000000000
-      000000000000000000000000000000000000C0C0C00000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000C0C0C000000000000000000080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF0000000000808080000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000FFFFFF00FFFF
-      FF00C0C0C00080808000000000000000000000000000BDBDBD00BDBDBD007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B00000000000000000000000000C0C0C0000080
-      8000C0C0C00000808000C0C0C00000000000C0C0C00000000000FFFFFF00FFFF
-      FF00FFFFFF00C0C0C000C0C0C000C0C0C000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF0000000000808080000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C00080808000000000000000000000000000BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B00000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00C0C0C000C0C0C000C0C0C000C0C0C000000000000000000080808000FFFF
-      FF00FFFFFF00800000008000000080000000FFFFFF0000000000000000000000
-      000000000000000000000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00C0C0C000C0C0C000C0C0C000FFFFFF00C0C0C000C0C0C000C0C0
-      C000C0C0C00000000000000000000000000000000000BDBDBD007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B0000000000000000000000000000000000C0C0
-      C000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C000FFFFFF00C0C0C00000000000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0080808000FFFFFF008080
-      800000000000000000000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0080808000FFFFFF008080
-      80000000000000000000000000000000000000000000BDBDBD00FF000000FF00
-      0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFF
-      FF00FF000000FFFFFF007B7B7B0000000000000000000000000000000000C0C0
-      C000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C000C0C0C0000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0080808000808080000000
-      000000000000000000000000000000000000000000000000000080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0080808000808080000000
-      00000000000000000000000000000000000000000000BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD0000000000000000000000000000000000C0C0
-      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000C0C0C0000000000000000000000000000000000000000000808080008080
-      8000808080008080800080808000808080008080800080808000000000000000
-      0000000000000000000000000000000000000000000000000000808080008080
-      8000808080008080800080808000808080008080800080808000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000C0C0C000C0C0
-      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000C0C0C000C0C0C00000000000000000000000000000000000000000008080
-      8000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000C0C0C000C0C0C000C0C0C000000000000000000000000000000000000000
-      0000000000000000000000000000FFFFFF008000000080000000800000008000
-      0000FFFFFF000000000000000000000000000000000080808000C0C0C000C0C0
-      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000C0C0C0000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00C0C0C00000000000000000000000000000000000000000008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF000000000000000000000000000000000080808000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C0000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000FFFFFF00C0C0C00000000000000000000000000000000000000000008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
-      0000FFFFFF008000000000000000FFFFFF008000000080000000800000008000
-      0000FFFFFF0000000000FFFFFF00000000000000000080808000FFFFFF00FFFF
-      FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF00C0C0C0000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00C0C0C00000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C0000000000000000000FFFFFF00FFFFFF000000
-      0000FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF0000000000FFFFFF00000000000000000080808000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C0000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000FFFFFF00C0C0C00000000000000000000000000000808000C0C0C0000080
-      8000C0C0C000008080000000000080808000C0C0C00000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C0000000000000000000FFFFFF00800000000000
-      0000FFFFFF008000000000000000FFFFFF008000000080000000FFFFFF000000
-      00000000000000000000FFFFFF00000000000000000080808000FFFFFF00FFFF
-      FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF
-      FF00C0C0C0000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00C0C0C00000000000000000000000000000FFFF00FFFFFF0000FF
-      FF00FFFFFF0000FFFF0000000000000000000000000000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C0000000000000000000FFFFFF00FFFFFF000000
-      0000FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
-      00000000000080808000FFFFFF00000000000000000080808000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C0000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00C0C0C0000000000000000000000000000000000000FFFF00FFFF
-      FF0000FFFF00FFFFFF0000FFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C0000000000000000000FFFFFF00800000000000
-      0000FFFFFF008000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF00FFFFFF00000000000000000080808000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C0000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00C0C0C000C0C0C000C0C0C000FFFFFF00FFFF
-      FF00FFFFFF00C0C0C000000000000000000000000000000000000000000000FF
-      FF00FFFFFF0000FFFF00FFFFFF0000FFFF0000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C0000000000000000000FFFFFF00FFFFFF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF008080
-      800080808000FFFFFF00FFFFFF00000000000000000080808000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00800000008000000080000000FFFFFF00FFFFFF00FFFF
-      FF00C0C0C0000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000FFFF
-      FF00FFFFFF00C0C0C00000000000000000000000000000000000000000000000
-      000080808000808080008080800080808000C0C0C00000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C0000000000000000000FFFFFF00800000000000
-      00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00000000000000000080808000FFFFFF00FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF00C0C0C0000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00C0C0C00000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000008080800000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C0000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF000000000000000000808080008080800080808000FFFFFF00FFFF
-      FF008080800080808000FFFFFF00000000000000000080808000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00C0C0C0000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000FFFFFF00FFFFFF00C0C0
-      C000C0C0C000C0C0C00000000000000000000000000000000000FFFFFF0000FF
-      FF00FFFFFF0000FFFF00FFFFFF00000000008080800000000000FFFFFF00FFFF
-      FF00FFFFFF00C0C0C000C0C0C000000000000000000000000000000000000000
-      00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00000000000000000080808000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00000000000000
-      0000000000000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000FFFFFF00FFFFFF00C0C0
-      C00097979700C0C0C00000000000000000000000000000000000000000000000
-      00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00000000000000000000000000000000000000000000000000000000008000
-      0000800000008000000080000000800000008000000080000000800000008000
-      0000800000008000000080000000000000000000000080808000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00C0C0C000FFFF
-      FF00808080000000000000000000000000000000000000000000C0C0C000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0
-      C000C0C0C0000000000000000000000000000000000000000000000000008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF0080808000FFFFFF0080808000000000000000000000000000000000008000
-      0000800000008000000080000000800000008000000080000000800000008000
-      0000800000008000000080000000000000000000000080808000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C0008080
-      8000000000000000000000000000000000000000000000000000C0C0C000C0C0
-      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000000000000000000000000000000000000000000000000000000000008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00808080008080800000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000080808000808080008080
-      8000808080008080800080808000808080008080800080808000808080000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000008080
-      8000808080008080800080808000808080008080800080808000808080008080
-      800080808000000000000000000000000000424D3E000000000000003E000000
-      2800000040000000500000000100010000000000800200000000000000000000
-      000000000000000000000000FFFFFF0000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000FFFFFC1F00000000F83FF00700000000
-      EF8FE00300000000F067C00100000000C013800100000000800B800000000000
-      8009000000000000000500000000000000050000000000000005000000000000
-      00050001000000000007800100000000800B800300000000800FC00700000000
-      C01FE00F00000000F07FF83F00000000FFFFFFFFC001FC1FFFFFFC1F8000F007
-      8000F7C70000E0038000F8330000C0018000E009000180018000C00580018000
-      8000C0048003000080008002C003000080008002C007000080008002E0070000
-      80008002E00F000180008003F00F80018000C005F01F80038000C007F81FC007
-      8000E00FF83FE00FFFFFF83FFC7FF83FE000FFFFFFFFFFFFE000E003E003FFFF
-      E000C003C0038000E000C003C00380008000C003C00380000000C003C0038000
-      0000C003C00380008000C003C0038000C000C003C0038000E000C003C0038000
-      8000C003C00380008000C003C0038000C000C007C0078000E001C00FC00F8000
-      E003C01FC01F8000E007C03FC03FFFFFFC03FFFFFFFFE000FC038003C003E000
-      E0038003C003E000E0008003C003E00000008003C003800000008003C0030000
-      00008003C003000000008003C003800000008003C003C00000008003C003E000
-      00008003C003800000008003C003800000008003C003C000C0008007C007E001
-      C000800FC00FE003C000801FFFFFE007}
-  end
   object ppmProjectTree: TPopupMenu
   object ppmProjectTree: TPopupMenu
     Images = frmLuaEditMain.imlActions
     Images = frmLuaEditMain.imlActions
     OnPopup = ppmProjectTreePopup
     OnPopup = ppmProjectTreePopup
@@ -782,4 +104,12 @@ object frmProjectTree: TfrmProjectTree
     Left = 8
     Left = 8
     Top = 40
     Top = 40
   end
   end
+  object SystemImages: TImageList
+    Left = 40
+    Top = 40
+  end
+  object StatesImages: TImageList
+    Left = 40
+    Top = 72
+  end
 end
 end

+ 244 - 163
LuaEdit/ProjectTree.pas

@@ -11,15 +11,17 @@ uses
 type
 type
   PProjectTreeData = ^TProjectTreeData;
   PProjectTreeData = ^TProjectTreeData;
   TProjectTreeData = record
   TProjectTreeData = record
+    ItemType: Integer;
     pLuaEditFile: TLuaEditFile;
     pLuaEditFile: TLuaEditFile;
     ActiveProject: Boolean;
     ActiveProject: Boolean;
     ToKeep: Boolean;
     ToKeep: Boolean;
     Deleting: Boolean;
     Deleting: Boolean;
+    OpenIndex: Integer;
+    CloseIndex: Integer;
   end;
   end;
 
 
   TfrmProjectTree = class(TForm)
   TfrmProjectTree = class(TForm)
     Panel1: TPanel;
     Panel1: TPanel;
-    imlProjectTree: TImageList;
     ppmProjectTree: TPopupMenu;
     ppmProjectTree: TPopupMenu;
     ActivateSelectedProject1: TMenuItem;
     ActivateSelectedProject1: TMenuItem;
     N1: TMenuItem;
     N1: TMenuItem;
@@ -29,23 +31,22 @@ type
     AddUnittoProject1: TMenuItem;
     AddUnittoProject1: TMenuItem;
     RemoveUnitFromProject1: TMenuItem;
     RemoveUnitFromProject1: TMenuItem;
     Options1: TMenuItem;
     Options1: TMenuItem;
-    vstProjectTree: TVirtualStringTree;
     mnuFindTarget: TMenuItem;
     mnuFindTarget: TMenuItem;
+    vstProjectTree: TVirtualDrawTree;
+    SystemImages: TImageList;
+    StatesImages: TImageList;
     procedure UnloadFileProject1Click(Sender: TObject);
     procedure UnloadFileProject1Click(Sender: TObject);
     procedure ppmProjectTreePopup(Sender: TObject);
     procedure ppmProjectTreePopup(Sender: TObject);
-    procedure vstProjectTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
-    procedure vstProjectTreeGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
     procedure vstProjectTreeGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
     procedure vstProjectTreeGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
-    procedure vstProjectTreePaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType);
     procedure vstProjectTreeDblClick(Sender: TObject);
     procedure vstProjectTreeDblClick(Sender: TObject);
     procedure vstProjectTreeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
     procedure vstProjectTreeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
     procedure vstProjectTreeAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
     procedure vstProjectTreeAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
-    function GetNodeInTree(sFileName, sProjectName: String): PVirtualNode;
+    function GetNodeInTree(pFile: TLuaEditFile; pPrj: TLuaEditProject): PVirtualNode;
     procedure mnuFindTargetClick(Sender: TObject);
     procedure mnuFindTargetClick(Sender: TObject);
-    procedure vstProjectTreeGetHint(Sender: TBaseVirtualTree;
-      Node: PVirtualNode; Column: TColumnIndex;
-      var LineBreakStyle: TVTTooltipLineBreakStyle;
-      var HintText: WideString);
+    procedure vstProjectTreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+    procedure vstProjectTreeDrawNode(Sender: TBaseVirtualTree; const PaintInfo: TVTPaintInfo);
+    procedure FormCreate(Sender: TObject);
+    procedure vstProjectTreeInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
   private
   private
     { Private declarations }
     { Private declarations }
   public
   public
@@ -60,6 +61,69 @@ implementation
 
 
 {$R *.dfm}
 {$R *.dfm}
 
 
+// Returns the index of the system icon for the given file object.
+function GetIconIndex(Name: String; Flags: Cardinal): Integer;
+var
+  SFI: TSHFileInfo;
+begin
+  if SHGetFileInfo(PChar(Name), 0, SFI, SizeOf(TSHFileInfo), Flags) = 0 then
+    Result := -1
+  else
+    Result := SFI.iIcon;
+end;
+
+procedure GetOpenAndClosedIcons(Name: String; var Open, Closed: Integer);
+begin
+  Closed := GetIconIndex(Name, SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
+  Open := GetIconIndex(Name, SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_OPENICON);
+end;
+
+// Rescale source but keep aspect ratio
+procedure RescaleImage(ScaleX, ScaleY: Integer; Source, Target: TBitmap);
+var
+  NewWidth, NewHeight: Integer;
+begin
+  if (Source.Width > ScaleX) or (Source.Height > ScaleY) then
+  begin
+    if Source.Width > Source.Height then
+    begin
+      NewWidth := ScaleX;
+      NewHeight := Round(ScaleY * Source.Height / Source.Width);
+    end
+    else
+    begin
+      NewHeight := ScaleY;
+      NewWidth := Round(ScaleX * Source.Width / Source.Height);
+    end;
+
+    Target.Width := NewWidth;
+    Target.Height := NewHeight;
+    SetStretchBltMode(Target.Canvas.Handle, HALFTONE);
+    StretchBlt(Target.Canvas.Handle, 0, 0, NewWidth, NewHeight,
+    Source.Canvas.Handle, 0, 0, Source.Width, Source.Height, SRCCOPY);
+  end
+  else
+    Target.Assign(Source);
+end;
+
+// Little helper to convert a Delphi color to an image list color.
+function GetRGBColor(Value: TColor): DWORD;
+begin
+  Result := ColorToRGB(Value);
+  case Result of
+    clNone:
+      Result := CLR_NONE;
+    clDefault:
+      Result := CLR_DEFAULT;
+  end;
+end;
+
+
+////////////////////////////////////////////////////////////////////////////////
+// TfrmProjectTree functions
+////////////////////////////////////////////////////////////////////////////////
+
+
 procedure TfrmProjectTree.vstProjectTreeDblClick(Sender: TObject);
 procedure TfrmProjectTree.vstProjectTreeDblClick(Sender: TObject);
 var
 var
   pNode: PVirtualNode;
   pNode: PVirtualNode;
@@ -88,7 +152,7 @@ begin
   frmLuaEditMain.CheckButtons;
   frmLuaEditMain.CheckButtons;
 end;
 end;
 
 
-function TfrmProjectTree.GetNodeInTree(sFileName, sProjectName: String): PVirtualNode;
+function TfrmProjectTree.GetNodeInTree(pFile: TLuaEditFile; pPrj: TLuaEditProject): PVirtualNode;
 var
 var
   pNode: PVirtualNode;
   pNode: PVirtualNode;
   pData: PProjectTreeData;
   pData: PProjectTreeData;
@@ -100,13 +164,13 @@ begin
   begin
   begin
     pData := vstProjectTree.GetNodeData(pNode);
     pData := vstProjectTree.GetNodeData(pNode);
 
 
-    if sProjectName <> '' then
+    if Assigned(pPrj) then
     begin
     begin
       if ((pData.pLuaEditFile.FileType in LuaEditTextFilesTypeSet) and (not pData.Deleting)) then
       if ((pData.pLuaEditFile.FileType in LuaEditTextFilesTypeSet) and (not pData.Deleting)) then
       begin
       begin
-        if ((pData.pLuaEditFile.PrjOwner.Name = sProjectName) or (sProjectName = '[@@SingleUnits@@]')) then
+        if pData.pLuaEditFile.PrjOwner = pPrj then
         begin
         begin
-          if pData.pLuaEditFile.Name = sFileName then
+          if pData.pLuaEditFile = pFile then
           begin
           begin
             Result := pNode;
             Result := pNode;
             Break;
             Break;
@@ -118,7 +182,7 @@ begin
     begin
     begin
       if pData.pLuaEditFile.FileType = otLuaEditProject then
       if pData.pLuaEditFile.FileType = otLuaEditProject then
       begin
       begin
-        if pData.pLuaEditFile.Name = sFileName then
+        if pData.pLuaEditFile = pFile then
         begin
         begin
           Result := pNode;
           Result := pNode;
           Break;
           Break;
@@ -138,7 +202,7 @@ var
   x, y: Integer;
   x, y: Integer;
 
 
   // Go through all nodes of the tree and set their ToKeep flag to false
   // Go through all nodes of the tree and set their ToKeep flag to false
-  procedure UnflagAllExpanded(pTree: TVirtualStringTree);
+  procedure UnflagAllExpanded(pTree: TVirtualDrawTree);
   var
   var
     pNode: PVirtualNode;
     pNode: PVirtualNode;
     pData: PProjectTreeData;
     pData: PProjectTreeData;
@@ -154,7 +218,7 @@ var
   end;
   end;
 
 
   // Deletes all nodes for wich their ToKeep flag is still on false
   // Deletes all nodes for wich their ToKeep flag is still on false
-  procedure CleanTree(pTree: TVirtualStringTree);
+  procedure CleanTree(pTree: TVirtualDrawTree);
   var
   var
     pNode, pPrevious: PVirtualNode;
     pNode, pPrevious: PVirtualNode;
     pData: PProjectTreeData;
     pData: PProjectTreeData;
@@ -175,7 +239,6 @@ var
       pNode := pTree.GetNext(pNode);
       pNode := pTree.GetNext(pNode);
     end;
     end;
   end;
   end;
-
 begin
 begin
   // Initialize stuff
   // Initialize stuff
   pPrjNode := nil;
   pPrjNode := nil;
@@ -195,7 +258,7 @@ begin
   for x := 0 to LuaProjects.Count - 1 do
   for x := 0 to LuaProjects.Count - 1 do
   begin
   begin
     pTempPrj := TLuaEditProject(LuaProjects.Items[x]);
     pTempPrj := TLuaEditProject(LuaProjects.Items[x]);
-    pPrjNode := GetNodeInTree(pTempPrj.Name, '');
+    pPrjNode := GetNodeInTree(pTempPrj, nil);
 
 
     if not Assigned(pPrjNode) then
     if not Assigned(pPrjNode) then
     begin
     begin
@@ -232,7 +295,7 @@ begin
 
 
     for y := 0 to pTempPrj.lstUnits.Count - 1 do
     for y := 0 to pTempPrj.lstUnits.Count - 1 do
     begin
     begin
-      pUnitNode := GetNodeInTree(TLuaEditUnit(pTempPrj.lstUnits.Items[y]).Name, pTempPrj.Name);
+      pUnitNode := GetNodeInTree(TLuaEditUnit(pTempPrj.lstUnits.Items[y]), pTempPrj);
 
 
       if not Assigned(pUnitNode) then
       if not Assigned(pUnitNode) then
       begin
       begin
@@ -328,9 +391,9 @@ begin
           if Answer = IDYES then
           if Answer = IDYES then
           begin
           begin
             if SaveUnitsInc then
             if SaveUnitsInc then
-              pFile.SaveUnitInc(pFile.Path)
+              pFile.SaveInc(pFile.Path)
             else
             else
-              pFile.SaveUnit(pFile.Path);
+              pFile.Save(pFile.Path);
           end
           end
           else if Answer = IDCANCEL then
           else if Answer = IDCANCEL then
           begin
           begin
@@ -349,9 +412,9 @@ begin
         if Answer = IDYES then
         if Answer = IDYES then
         begin
         begin
           if SaveProjectsInc then
           if SaveProjectsInc then
-            pLuaPrj.SaveProjectInc(pLuaPrj.Path)
+            pLuaPrj.SaveInc(pLuaPrj.Path)
           else
           else
-            pLuaPrj.SaveProject(pLuaPrj.Path);
+            pLuaPrj.Save(pLuaPrj.Path);
         end
         end
         else if Answer = IDCANCEL then
         else if Answer = IDCANCEL then
         begin
         begin
@@ -372,9 +435,9 @@ begin
           if Answer = IDYES then
           if Answer = IDYES then
           begin
           begin
             if SaveUnitsInc then
             if SaveUnitsInc then
-              pFile.SaveUnitInc(pFile.Path)
+              pFile.SaveInc(pFile.Path)
             else
             else
-              pFile.SaveUnit(pFile.Path);
+              pFile.Save(pFile.Path);
           end
           end
           else if Answer = IDCANCEL then
           else if Answer = IDCANCEL then
           begin
           begin
@@ -416,10 +479,6 @@ begin
         ActiveProject := nil;
         ActiveProject := nil;
     end;
     end;
 
 
-    // Reset LuaEdit main form caption to its initial value
-    if not Assigned(ActiveProject) then
-        frmLuaEditMain.Caption := 'LuaEdit';
-
     // Initialize stuff...
     // Initialize stuff...
     UnitsToDelete.Free;
     UnitsToDelete.Free;
     BuildProjectTree;
     BuildProjectTree;
@@ -437,7 +496,7 @@ begin
   if Assigned(pNode) then
   if Assigned(pNode) then
   begin
   begin
     pData := vstProjectTree.GetNodeData(pNode);
     pData := vstProjectTree.GetNodeData(pNode);
-    ShellExecute(Self.Handle, 'explore', PChar(ExtractFileDir(pData.pLuaEditFile.Path)), nil, nil, SW_SHOWNORMAL);
+    ShellExecute(Self.Handle, 'explore', PChar(ExtractFileDir(pData.pLuaEditFile.Path)), nil, nil, SW_SHOWMAXIMIZED);
   end;
   end;
 end;
 end;
 
 
@@ -452,143 +511,12 @@ begin
   if Assigned(pNode) then
   if Assigned(pNode) then
   begin
   begin
     pData := vstProjectTree.GetNodeData(pNode);
     pData := vstProjectTree.GetNodeData(pNode);
-    mnuFindTarget.Enabled := ((not pData.pLuaEditFile.IsNew) and (FileExists(pData.pLuaEditFile.Path)));
+    mnuFindTarget.Enabled := ((not pData.pLuaEditFile.IsNew) and (FileExistsAbs(pData.pLuaEditFile.Path)));
   end;
   end;
 
 
   frmLuaEditMain.DoMainMenuProjectExecute;
   frmLuaEditMain.DoMainMenuProjectExecute;
 end;
 end;
 
 
-procedure TfrmProjectTree.vstProjectTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
-var
-  pData: PProjectTreeData;
-begin
-  // Set text to display for all nodes
-  if TextType = ttNormal then
-  begin
-    case Column of
-      0:
-      begin
-        pData := Sender.GetNodeData(Node);
-        pData.ToKeep := True;
-        CellText := pData.pLuaEditFile.Name;
-      end;
-      1: CellText := '';
-      2:
-      begin
-        pData := Sender.GetNodeData(Node);
-        pData.ToKeep := True;
-        CellText := pData.pLuaEditFile.Path;
-      end;
-    end;
-  end;
-end;
-
-procedure TfrmProjectTree.vstProjectTreePaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType);
-var
-  pData: PProjectTreeData;
-begin
-  pData := Sender.GetNodeData(Node);
-
-  if pData.pLuaEditFile.FileType = otLuaEditProject then
-  begin
-    // Set bold style on the active project node
-    if pData.ActiveProject then
-    begin
-      TargetCanvas.Font.Style := [fsBold];
-      frmLuaEditMain.Caption := 'LuaEdit - ' + pData.pLuaEditFile.Path;
-    end;
-  end
-  else
-  begin
-    // Set disabled color for non-loaded units
-    if not pData.pLuaEditFile.IsLoaded then
-    begin
-      TargetCanvas.Font.Color := clInactiveCaption;
-      TargetCanvas.Pen.Color := clInactiveCaption;
-    end;
-  end;
-end;
-
-procedure TfrmProjectTree.vstProjectTreeGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
-var
-  pData: PProjectTreeData;
-begin
-  // Set image index for all nodes
-  if Column = 0 then
-  begin
-    pData := Sender.GetNodeData(Node);
-
-    if pData.pLuaEditFile.FileType = otLuaEditProject then
-      ImageIndex := 0
-    else if pData.pLuaEditFile.FileType = otLuaEditUnit then
-    begin
-      if pData.pLuaEditFile.IsLoaded then
-        ImageIndex := 1
-      else
-        ImageIndex := 2;
-    end
-    else if pData.pLuaEditFile.FileType = otLuaEditMacro then
-    begin
-      if pData.pLuaEditFile.IsLoaded then
-        ImageIndex := 3
-      else
-        ImageIndex := 4;
-    end
-    else if pData.pLuaEditFile.FileType = otTextFile then
-    begin
-      if pData.pLuaEditFile.IsLoaded then
-        ImageIndex := 5
-      else
-        ImageIndex := 6;
-    end
-    else if pData.pLuaEditFile.FileType = otLuaEditForm then
-    begin
-      if pData.pLuaEditFile.IsLoaded then
-        ImageIndex := 7
-      else
-        ImageIndex := 8;
-    end;
-  end
-  else if Column = 1 then
-  begin
-    pData := Sender.GetNodeData(Node);
-
-    if pData.pLuaEditFile.IsNew then
-      ImageIndex := 9
-    else if not pData.pLuaEditFile.IsLoaded then
-      ImageIndex := 10
-    else if pData.pLuaEditFile.IsReadOnly then
-      ImageIndex := 11
-    else if pData.pLuaEditFile.HasChanged then
-      ImageIndex := 12
-    else
-      ImageIndex := 13;
-  end;
-end;
-
-procedure TfrmProjectTree.vstProjectTreeGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: WideString);
-var
-  pData: PProjectTreeData;
-begin
-  case Column of
-    1:
-    begin
-      pData := Sender.GetNodeData(Node);
-
-      if pData.pLuaEditFile.IsNew then
-        HintText := 'File is New'
-      else if not pData.pLuaEditFile.IsLoaded then
-        HintText := 'File could not be loaded'
-      else if pData.pLuaEditFile.IsReadOnly then
-        HintText := 'File is Read-Only'
-      else if pData.pLuaEditFile.HasChanged then
-        HintText := 'File is Modified'
-      else
-        HintText := 'File is All Right and Saved';
-    end;
-  end;
-end;
-
 procedure TfrmProjectTree.vstProjectTreeGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
 procedure TfrmProjectTree.vstProjectTreeGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
 begin
 begin
   NodeDataSize := SizeOf(TProjectTreeData);
   NodeDataSize := SizeOf(TProjectTreeData);
@@ -636,4 +564,157 @@ begin
   end;
   end;
 end;
 end;
 
 
+procedure TfrmProjectTree.vstProjectTreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+begin
+  if Key = VK_DELETE then
+    if Assigned(vstProjectTree.GetFirstSelected()) then
+      frmLuaEditMain.DoRemoveFromPrjExecute(TLuaEditFile(vstProjectTree.GetNodeData(vstProjectTree.GetFirstSelected())));
+end;
+
+procedure TfrmProjectTree.vstProjectTreeDrawNode(Sender: TBaseVirtualTree; const PaintInfo: TVTPaintInfo);
+const
+  Style: array[TImageType] of Cardinal = (0, ILD_MASK);
+  
+var
+  pData: PProjectTreeData;
+  pRect, pImageRect: TRect;
+  sCellText: String;
+  iImageIndex, iOverlayIndex: Integer;
+  ExtraStyle, ForegroundColor: Cardinal;
+  bShowImageEnabled: Boolean;
+begin
+  with Sender as TVirtualDrawTree do
+  begin
+    pData := Sender.GetNodeData(PaintInfo.Node);
+    PaintInfo.Canvas.Font.Color := clBlack;
+    PaintInfo.Canvas.Pen.Color := clBlack;
+
+    // Determine text color
+    if pData.pLuaEditFile.FileType = otLuaEditProject then
+    begin
+      // Set bold style on the active project node
+      if pData.ActiveProject then
+        PaintInfo.Canvas.Font.Style := [fsBold];
+    end;
+
+    if Sender.Selected[PaintInfo.Node] then
+    begin
+      PaintInfo.Canvas.Font.Color := clHighlightText
+    end
+    else
+    begin
+      // Set disabled color for non-loaded units
+      if not pData.pLuaEditFile.IsLoaded then
+      begin
+        PaintInfo.Canvas.Font.Color := clInactiveCaption;
+        PaintInfo.Canvas.Pen.Color := clInactiveCaption;
+      end;
+    end;
+
+    SetBKMode(PaintInfo.Canvas.Handle, TRANSPARENT);
+    pRect := PaintInfo.ContentRect;
+    InflateRect(pRect, -TextMargin, 0);
+    Dec(pRect.Right);
+    Dec(pRect.Bottom);
+
+    case PaintInfo.Column of
+      0:
+      begin
+        // Determine is loaded image style
+        if Assigned(pData.pLuaEditFile) then
+          bShowImageEnabled := pData.pLuaEditFile.IsLoaded
+        else
+          bShowImageEnabled := False;
+
+        // Get image area
+        pImageRect := pRect;
+
+        // Determine image index
+        if Sender.Expanded[PaintInfo.Node] then
+          iImageIndex := pData.OpenIndex
+        else
+          iImageIndex := pData.CloseIndex;
+
+        // Determine overlay index
+        if pData.pLuaEditFile.IsNew then
+          iOverlayIndex := 0
+        else if not pData.pLuaEditFile.IsLoaded then
+          iOverlayIndex := 1
+        else if pData.pLuaEditFile.IsReadOnly then
+          iOverlayIndex := 2
+        else if pData.pLuaEditFile.HasChanged then
+          iOverlayIndex := 3
+        else
+          iOverlayIndex := 4;
+
+        // Handle cell text
+        pRect.Left := pRect.Left + SystemImages.Width + 2;
+        sCellText := pData.pLuaEditFile.Name;
+        DrawText(PaintInfo.Canvas.Handle, PChar(sCellText), Length(sCellText), pRect, DT_TOP or DT_LEFT or DT_VCENTER or DT_SINGLELINE or DT_END_ELLIPSIS);
+        ExtraStyle := ILD_TRANSPARENT or ILD_OVERLAYMASK;// and IndexToOverlayMask(iOverlayIndex + 1);
+        ForegroundColor := ColorToRGB(PaintInfo.Canvas.Font.Color);
+
+        // Draw icon
+        ImageList_DrawEx(SystemImages.Handle, iImageIndex, PaintInfo.Canvas.Handle, pImageRect.Left, pImageRect.Top, 0, 0, GetRGBColor(SystemImages.BkColor), ForegroundColor, Style[SystemImages.ImageType] or ExtraStyle);
+        // Draw overlay icon
+        ImageList_DrawEx(StatesImages.Handle, iOverlayIndex, PaintInfo.Canvas.Handle, pImageRect.Left, pImageRect.Top, 0, 0, GetRGBColor(SystemImages.BkColor), ForegroundColor, Style[SystemImages.ImageType] or ExtraStyle);
+      end;
+      1:
+      begin
+        sCellText := pData.pLuaEditFile.DisplayPath;
+        DrawText(PaintInfo.Canvas.Handle, PChar(sCellText), Length(sCellText), pRect, DT_TOP or DT_LEFT or DT_VCENTER or DT_SINGLELINE or DT_PATH_ELLIPSIS);
+      end;
+    end;
+  end;
+end;
+
+procedure TfrmProjectTree.FormCreate(Sender: TObject);
+var
+  SFI: TSHFileInfo;
+  pBitmap: TBitmap;
+  pIcon: TIcon;
+begin
+  // Load system images...
+  SystemImages.Handle := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
+  SystemImages.ShareImages := True;
+
+  try
+    // Load overlay icons...
+    pBitmap := TBitmap.Create;
+    pIcon := TIcon.Create;
+
+    pIcon.LoadFromFile(GetLuaEditInstallPath() + '\Graphics\FileIsNew.ico');
+    StatesImages.AddIcon(pIcon);
+    pIcon.LoadFromFile(GetLuaEditInstallPath() + '\Graphics\FileNotLoaded.ico');
+    StatesImages.AddIcon(pIcon);
+    pIcon.LoadFromFile(GetLuaEditInstallPath() + '\Graphics\FileIsReadOnly.ico');
+    StatesImages.AddIcon(pIcon);
+    pIcon.LoadFromFile(GetLuaEditInstallPath() + '\Graphics\FileHasChanged.ico');
+    StatesImages.AddIcon(pIcon);
+    pIcon.LoadFromFile(GetLuaEditInstallPath() + '\Graphics\FileIsOK.ico');
+    StatesImages.AddIcon(pIcon);
+  finally
+    FreeAndNil(pBitmap);
+    FreeAndNil(pIcon);
+  end;
+end;
+
+procedure TfrmProjectTree.vstProjectTreeInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
+var
+  pData: PProjectTreeData;
+  WinDir: String;
+begin
+  pData := Sender.GetNodeData(Node);
+
+  // If the pLuaEditFile member is not initialize at this point, we assume it's a project folder
+  if not Assigned(pData.pLuaEditFile) then
+  begin
+    SetLength(WinDir, GetWindowsDirectory(nil, 0)); 
+    GetWindowsDirectory(PChar(WinDir), Length(WinDir));
+    GetOpenAndClosedIcons(WinDir, pData.OpenIndex, pData.CloseIndex);
+  end
+  else
+    GetOpenAndClosedIcons(pData.pLuaEditFile.Path, pData.OpenIndex, pData.CloseIndex);
+end;
+
 end.
 end.

+ 3 - 3
LuaEdit/RegSetFileType.pas

@@ -37,18 +37,18 @@ begin
   try
   try
     Reg.RootKey := HKEY_CLASSES_ROOT;
     Reg.RootKey := HKEY_CLASSES_ROOT;
 
 
-    if not Reg.OpenKey('\'+inExtension, true) then
+    if not Reg.OpenKey('\'+inExtension, True) then
       raise Exception.Create(cExceptMsg);
       raise Exception.Create(cExceptMsg);
 
 
     Reg.WriteString('', inFileType);
     Reg.WriteString('', inFileType);
     Reg.WriteString('Content Type', inContentType);
     Reg.WriteString('Content Type', inContentType);
 
 
-    if not Reg.OpenKey('\'+inFileType, true) then
+    if not Reg.OpenKey('\'+inFileType, True) then
       raise Exception.Create(cExceptMsg);
       raise Exception.Create(cExceptMsg);
 
 
     Reg.WriteString('', inTypeDesc);
     Reg.WriteString('', inTypeDesc);
 
 
-    if not Reg.OpenKey('DefaultIcon', true) then
+    if not Reg.OpenKey('DefaultIcon', True) then
       raise Exception.Create(cExceptMsg);
       raise Exception.Create(cExceptMsg);
 
 
     Reg.WriteString('', inIconPath);
     Reg.WriteString('', inIconPath);

File diff suppressed because it is too large
+ 1471 - 2032
LuaEdit/Splash.dfm


+ 1 - 0
LuaEdit/Splash.pas

@@ -17,6 +17,7 @@ type
     imlLua: TImage;
     imlLua: TImage;
     Image1: TImage;
     Image1: TImage;
     Image2: TImage;
     Image2: TImage;
+    shpBorder: TShape;
     procedure FormShow(Sender: TObject);
     procedure FormShow(Sender: TObject);
   private
   private
     { Private declarations }
     { Private declarations }

+ 1 - 1
LuaEdit/Stack.dfm

@@ -47,7 +47,7 @@ object frmStack: TfrmStack
   end
   end
   object JvDockClient1: TJvDockClient
   object JvDockClient1: TJvDockClient
     DirectDrag = False
     DirectDrag = False
-    DockStyle = frmMain.jvDockVSNet
+    DockStyle = frmLuaEditMain.jvDockVSNet
     Left = 32
     Left = 32
     Top = 24
     Top = 24
   end
   end

+ 1 - 0
LuaEdit/Watch.dfm

@@ -55,6 +55,7 @@ object frmWatch: TfrmWatch
     OnAfterItemPaint = vstWatchAfterItemPaint
     OnAfterItemPaint = vstWatchAfterItemPaint
     OnChange = vstWatchChange
     OnChange = vstWatchChange
     OnCreateEditor = vstWatchCreateEditor
     OnCreateEditor = vstWatchCreateEditor
+    OnDblClick = vstWatchDblClick
     OnDragOver = vstWatchDragOver
     OnDragOver = vstWatchDragOver
     OnDragDrop = vstWatchDragDrop
     OnDragDrop = vstWatchDragDrop
     OnEdited = vstWatchEdited
     OnEdited = vstWatchEdited

+ 10 - 2
LuaEdit/Watch.pas

@@ -84,8 +84,8 @@ type
     procedure Collapse1Click(Sender: TObject);
     procedure Collapse1Click(Sender: TObject);
     procedure ExpandAll1Click(Sender: TObject);
     procedure ExpandAll1Click(Sender: TObject);
     procedure CollapseAll1Click(Sender: TObject);
     procedure CollapseAll1Click(Sender: TObject);
-    procedure vstWatchMouseDown(Sender: TObject; Button: TMouseButton;
-      Shift: TShiftState; X, Y: Integer);
+    procedure vstWatchMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+    procedure vstWatchDblClick(Sender: TObject);
   private
   private
     { Private declarations }
     { Private declarations }
     procedure WMStartEditing(var Message: TMessage); message WM_STARTEDITING;
     procedure WMStartEditing(var Message: TMessage); message WM_STARTEDITING;
@@ -474,4 +474,12 @@ begin
   end;
   end;
 end;
 end;
 
 
+procedure TfrmWatch.vstWatchDblClick(Sender: TObject);
+begin
+  if Assigned(vstWatch.GetFirstSelected()) then
+  begin
+    // todo: Allow Variable Inspection...
+  end;
+end;
+
 end.
 end.

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