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
   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
   TfrmAbout = class(TForm)
     btnClose: TButton;
-    GroupBox1: TGroupBox;
+    Image1: TImage;
+    Label4: TLabel;
     lblVersion: TLabel;
     Label2: TLabel;
     Label3: TLabel;
-    imgLuaLogo: TImage;
     Label5: TLabel;
     Label6: TLabel;
     lblMemory: TLabel;
@@ -21,18 +22,18 @@ type
     Label7: TLabel;
     Label8: TLabel;
     Label9: TLabel;
-    Image1: TImage;
     Label10: TLabel;
     Label1: TLabel;
+    imgLuaLogo: TImage;
     Image2: TImage;
     procedure imgLuaLogoClick(Sender: TObject);
     procedure btnCloseClick(Sender: TObject);
     procedure FormShow(Sender: TObject);
     procedure Label7Click(Sender: TObject);
-    procedure Image1Click(Sender: TObject);
     procedure Label1Click(Sender: TObject);
     procedure Image3Click(Sender: TObject);
     procedure Image2Click(Sender: TObject);
+    procedure Label4Click(Sender: TObject);
   private
     { Private declarations }
   public
@@ -82,11 +83,6 @@ begin
   ShellExecute(Self.Handle, 'open', PChar('mailto:' + Label7.Caption + '?subject=About LuaEdit...'), nil, nil, SW_SHOWNORMAL);
 end;
 
-procedure TfrmAbout.Image1Click(Sender: TObject);
-begin
-  BrowseURL(PChar('http://www.luaedit.net'));
-end;
-
 procedure TfrmAbout.Label1Click(Sender: TObject);
 begin
   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'));
 end;
 
+procedure TfrmAbout.Label4Click(Sender: TObject);
+begin
+  BrowseURL(PChar('http://www.luaedit.net'));
+end;
+
 end.

+ 1 - 1
LuaEdit/AddToPrj.dfm

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

+ 3 - 1
LuaEdit/AddToPrj.pas

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

+ 1 - 1
LuaEdit/Breakpoints.dfm

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

+ 51 - 13
LuaEdit/EditorSettings.dfm

@@ -134,19 +134,19 @@ object frmEditorSettings: TfrmEditorSettings
       Indent = 19
       TabOrder = 0
       Items.Data = {
-        0400000025000000000000000000000000000000FFFFFFFF0000000003000000
+        0400000025000000010000000100000000000000FFFFFFFF0000000003000000
         0C456E7669726F6E656D656E7420000000FFFFFFFFFFFFFFFF01000000FFFFFF
         FF00000000000000000747656E6572616C25000000FFFFFFFFFFFFFFFF010000
         00FFFFFFFF02000000000000000C53656172636820506174687324000000FFFF
         FFFFFFFFFFFF02000000FFFFFFFF03000000000000000B5765622042726F7773
-        6572210000000000000000000000FFFFFFFFFFFFFFFF07000000010000000844
+        6572210000000100000001000000FFFFFFFFFFFFFFFF07000000010000000844
         6562756767657220000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0700000000
-        0000000747656E6572616C240000000000000000000000FFFFFFFFFFFFFFFF01
+        0000000747656E6572616C240000000100000001000000FFFFFFFFFFFFFFFF01
         000000020000000B5465787420456469746F7220000000FFFFFFFFFFFFFFFFFF
         FFFFFFFFFFFFFF01000000000000000747656E6572616C1D000000FFFFFFFFFF
-        FFFFFFFFFFFFFFFFFFFFFF050000000000000004466F6E742000000000000000
-        00000000FFFFFFFFFFFFFFFF040000000200000007446973706C61791F000000
-        0200000002000000FFFFFFFFFFFFFFFF0400000000000000064775747465722C
+        FFFFFFFFFFFFFFFFFFFFFF050000000000000004466F6E742000000001000000
+        01000000FFFFFFFFFFFFFFFF040000000200000007446973706C61791F000000
+        FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000000000000064775747465722C
         000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06000000000000001353796E74
         617820486967686C69676874696E67}
       Items.Links = {
@@ -158,7 +158,7 @@ object frmEditorSettings: TfrmEditorSettings
       Top = 0
       Width = 463
       Height = 367
-      ActivePage = JvStandardPage8
+      ActivePage = JvStandardPage1
       PropagateEnable = False
       ShowDesignCaption = sdcNone
       Align = alClient
@@ -1121,7 +1121,7 @@ object frmEditorSettings: TfrmEditorSettings
         end
         object Label18: TLabel
           Left = 16
-          Top = 144
+          Top = 160
           Width = 161
           Height = 13
           Caption = 'Maximum Printable Size of Tables:'
@@ -1135,7 +1135,7 @@ object frmEditorSettings: TfrmEditorSettings
         end
         object JvGroupHeader8: TJvGroupHeader
           Left = 0
-          Top = 120
+          Top = 136
           Width = 463
           Height = 17
           Align = alCustom
@@ -1149,14 +1149,28 @@ object frmEditorSettings: TfrmEditorSettings
         end
         object Label19: TLabel
           Left = 16
-          Top = 192
+          Top = 208
           Width = 133
           Height = 13
           Caption = 'Maximum Sub Tables Level:'
         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
           Left = 16
-          Top = 158
+          Top = 174
           Width = 201
           Height = 21
           MaxValue = 65536.000000000000000000
@@ -1190,7 +1204,7 @@ object frmEditorSettings: TfrmEditorSettings
         end
         object chkAutoLoadLibTable: TCheckBox
           Left = 16
-          Top = 48
+          Top = 96
           Width = 201
           Height = 17
           Caption = 'Table Library'
@@ -1214,7 +1228,7 @@ object frmEditorSettings: TfrmEditorSettings
         end
         object jvspinMaxSubTablesLevel: TJvSpinEdit
           Left = 16
-          Top = 206
+          Top = 222
           Width = 201
           Height = 21
           MaxValue = 999.000000000000000000
@@ -1222,6 +1236,30 @@ object frmEditorSettings: TfrmEditorSettings
           Value = 999.000000000000000000
           TabOrder = 7
         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
     object Panel3: TPanel

+ 29 - 4
LuaEdit/EditorSettings.pas

@@ -127,6 +127,10 @@ type
     chkAutoLoadLibDebug: TCheckBox;
     jvspinMaxSubTablesLevel: TJvSpinEdit;
     Label19: TLabel;
+    chkAutoLoadLibPackage: TCheckBox;
+    chkCheckCyclicReferencing: TCheckBox;
+    JvGroupHeader9: TJvGroupHeader;
+    chkShowStackTraceOnError: TCheckBox;
     procedure cboFontsMeasureItem(Control: TWinControl; Index: Integer;  var Height: Integer);
     procedure cboFontsDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
     procedure FormCreate(Sender: TObject);
@@ -430,12 +434,20 @@ begin
     if chkFileAssociate.Checked then
     begin
       // 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'));
 
       // 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'));
+
+      // 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
     else
     begin      
@@ -446,6 +458,14 @@ begin
       // Clear file association registration for .lua files
       RegClearIEOpenKey('.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;
 
     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.WriteInteger('MaxTablesSize', Trunc(jvspinMaxTablesSize.Value));
   pReg.WriteInteger('MaxSubTablesLevel', Trunc(jvspinMaxSubTablesLevel.Value));
+  pReg.WriteBool('CheckCyclicReferencing', chkCheckCyclicReferencing.Checked);
   pReg.WriteBool('AutoLoadLibBasic', chkAutoLoadLibBasic.Checked);
+  pReg.WriteBool('AutoLoadLibPackage', chkAutoLoadLibPackage.Checked);
   pReg.WriteBool('AutoLoadLibTable', chkAutoLoadLibTable.Checked);
   pReg.WriteBool('AutoLoadLibString', chkAutoLoadLibString.Checked);
   pReg.WriteBool('AutoLoadLibMath', chkAutoLoadLibMath.Checked);
   pReg.WriteBool('AutoLoadLibOSIO', chkAutoLoadLibOSIO.Checked);
   pReg.WriteBool('AutoLoadLibDebug', chkAutoLoadLibDebug.Checked);
-
+  pReg.WriteBool('ShowStackTraceOnError', chkShowStackTraceOnError.Checked);
 
   //Writing display settings
   pReg.OpenKey('\Software\LuaEdit\EditorSettings\Display', True);
@@ -614,13 +636,16 @@ begin
   txtTempFolder.Text := TempFolder;
   jvspinHistoryMaxAge.Value := HistoryMaxAge;
   jvspinMaxTablesSize.Value := MaxTablesSize;
+  chkCheckCyclicReferencing.Checked := CheckCyclicReferencing;
   jvspinMaxSubTablesLevel.Value := MaxSubTablesLevel;
   chkAutoLoadLibBasic.Checked := AutoLoadLibBasic;
+  chkAutoLoadLibPackage.Checked := AutoLoadLibPackage;
   chkAutoLoadLibTable.Checked := AutoLoadLibTable;
   chkAutoLoadLibString.Checked := AutoLoadLibString;
   chkAutoLoadLibMath.Checked := AutoLoadLibMath;
   chkAutoLoadLibOSIO.Checked := AutoLoadLibOSIO;
   chkAutoLoadLibDebug.Checked := AutoLoadLibDebug;
+  chkShowStackTraceOnError.Checked := ShowStackTraceOnError;
 
   // Manage serach paths
   txtLibraries.Text := '';
@@ -877,7 +902,7 @@ begin
   begin
     if sColorSet <> '' then
     begin
-      if not FileExists(GetLuaEditInstallPath()+'\Data\'+sColorSet+'.dat') then
+      if not FileExistsAbs(GetLuaEditInstallPath()+'\Data\'+sColorSet+'.dat') then
       begin
         if not DirectoryExists(GetLuaEditInstallPath()+'\Data\') then
           CreateDirectory(PChar(GetLuaEditInstallPath()+'\Data\'), nil);

+ 1 - 1
LuaEdit/FindWindow1.dfm

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

+ 1 - 1
LuaEdit/FindWindow2.dfm

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

+ 15 - 14
LuaEdit/LEMacros.pas

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

+ 7 - 9
LuaEdit/LuaCore/LuaUtils.pas

@@ -154,14 +154,17 @@ const
   LF = #$0A;
   CRLF = CR + LF;
 
-function Quote(const Str: string): string;
+function Quote(const Str: String): String;
 begin
   Result := AnsiQuotedStr(Str, QuoteStr);
 end;
 
-function Dequote(const QuotedStr: string): string;
+function Dequote(const QuotedStr: String): String;
 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;
 
 function fwriteex(F, S: PChar; Un, Len: Integer; L, Dummy: Integer): Integer;
@@ -1287,14 +1290,9 @@ begin
   raise ELuaException.Create(Title, Line, Msg);
 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
    NArgs, i: Integer;
-
 begin
      //Put Function To Call on the Stack
      luaPushString(L, FunctionName);

+ 16 - 3
LuaEdit/LuaEdit.dof

@@ -114,8 +114,8 @@ IncludeVerInfo=1
 AutoIncBuild=1
 MajorVer=3
 MinorVer=0
-Release=2
-Build=148
+Release=3
+Build=205
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=1252
 [Version Info Keys]
 CompanyName=Open Source
 FileDescription=IDE for Lua 5.0.2
-FileVersion=3.0.2.148
+FileVersion=3.0.3.205
 InternalName=LuaEdit
 LegalCopyright=LuaEdit Copyright 2004-2006 ©
 LegalTrademarks=
@@ -134,3 +134,16 @@ OriginalFilename=LuaEdit.exe
 ProductName=LuaEdit for Lua 5.0
 ProductVersion=3.0.2.116
 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},
   GUIDesigner in 'GUIDesigner.pas' {GUIForm1},
   GUIControls in 'GUIControls.pas' {frmGUIControls},
-  GUIFormType in 'GUIFormType.pas' {frmGUIFormType};
+  GUIFormType in 'GUIFormType.pas' {frmGUIFormType},
+  ConvertPath in 'ConvertPath.pas' {frmConvertPath};
 
 {$R *.res}
 
@@ -107,7 +108,7 @@ begin
   if CheckAppInstance() then
   begin
     copyDataStruct.dwData := Integer(cdtAnsiString);
-    copyDataStruct.cbData := Length(CmdLine)+1; // +1 NULL
+    copyDataStruct.cbData := Length(CmdLine) + 1; // +1 NULL
     copyDataStruct.lpData := CmdLine;
 
 
@@ -154,6 +155,7 @@ begin
   Application.CreateForm(TfrmComponentList, frmComponentList);
   Application.CreateForm(TfrmGUID, frmGUID);
   Application.CreateForm(TfrmMacroManager, frmMacroManager);
+  Application.CreateForm(TfrmConvertPath, frmConvertPath);
   frmLuaEditMain.CheckButtons;
 
   // show splash screen...
@@ -173,7 +175,7 @@ begin
   LoadDockTreeFromFile(ExtractFilePath(Application.ExeName) + 'LuaEdit.dck');
 
   // Backward compatibility with the ini file (versions < 3.0)
-  if FileExists(GetLuaEditInstallPath()+'\LuaEdit.ini') then
+  if FileExistsAbs(GetLuaEditInstallPath()+'\LuaEdit.ini') then
   begin
     frmLuaEditMain.LoadEditorSettingsFromReg;
     frmLuaEditMain.LoadEditorSettingsFromIni;
@@ -189,7 +191,7 @@ begin
     begin
       FileName := ParamStr(x);
 
-      if FileExists(FileName) then
+      if FileExistsAbs(FileName) then
       begin
         pFiles.Add(FileName);
         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.Style = hsFlatButtons
     Images = imlMessages
+    LineMode = lmBands
     ScrollBarOptions.AlwaysVisible = True
     TabOrder = 0
     TreeOptions.MiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toReportMode, toToggleOnDblClick, toWheelPanning]
     TreeOptions.PaintOptions = [toShowDropmark, toThemeAware, toUseBlendedImages]
-    TreeOptions.SelectionOptions = [toFullRowSelect, toRightClickSelect]
+    TreeOptions.SelectionOptions = [toExtendedFocus, toFullRowSelect, toRightClickSelect, toSiblingSelectConstraint]
     OnDblClick = vstLuaEditMessagesDblClick
     OnGetText = vstLuaEditMessagesGetText
     OnGetImageIndex = vstLuaEditMessagesGetImageIndex
@@ -65,7 +66,7 @@ object frmLuaEditMessages: TfrmLuaEditMessages
     Left = 24
     Top = 48
     Bitmap = {
-      494C010103000400040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
+      494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000001000000001002000000000000010
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000004A1E0B0063361B00502511000000
@@ -201,6 +202,7 @@ object frmLuaEditMessages: TfrmLuaEditMessages
       FC1F0001C0070000E007000180030000C0038003800300008001800300010000
       0000C007000100000000C007000100000000E00F000100000000E00F00010000
       0000F01F000100000000F01F000100000001F81F800300008003F83FC0070000
-      C007F87FE00F0000E00FFCFFF01F0000}
+      C007F87FE00F0000E00FFCFFF01F000000000000000000000000000000000000
+      000000000000}
   end
 end

+ 28 - 3
LuaEdit/LuaEditMessages.pas

@@ -27,7 +27,8 @@ type
     { Private declarations }
   public
     { 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;
 
 var
@@ -39,7 +40,7 @@ uses Main, Misc;
 
 {$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
   pData: PLuaEditMsgLine;
   pNode: PVirtualNode;
@@ -50,6 +51,25 @@ begin
   pData.MsgText := MsgText;
   pData.MsgType := MsgType;
   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;
 
 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_WARNING_MSG:  CellText := '[WARNING]';
         LUAEDIT_ERROR_MSG:    CellText := '[ERROR]';
+      else
+        CellText := '';
       end;
     end;
     1:
     begin
       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;

+ 3 - 2
LuaEdit/LuaGlobals.dfm

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

+ 1 - 0
LuaEdit/LuaOutput.dfm

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

+ 8 - 2
LuaEdit/LuaOutput.pas

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

+ 2 - 2
LuaEdit/MacroManager.pas

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

+ 280 - 260
LuaEdit/Main.dfm

@@ -145,7 +145,7 @@ object frmLuaEditMain: TfrmLuaEditMain
     TabOrder = 1
     OnDockOver = ctrlBarDockOver
     object tlbRun: TToolBar
-      Left = 387
+      Left = 389
       Top = 2
       Width = 283
       Height = 22
@@ -255,7 +255,7 @@ object frmLuaEditMain: TfrmLuaEditMain
     object tlbBaseFile: TToolBar
       Left = 11
       Top = 2
-      Width = 352
+      Width = 365
       Height = 22
       Align = alLeft
       AutoSize = True
@@ -790,16 +790,16 @@ object frmLuaEditMain: TfrmLuaEditMain
     end
     object actAddToPrj: TAction
       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
       ShortCut = 8314
       OnExecute = actAddToPrjExecute
     end
     object actRemoveFromPrj: TAction
       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
       ShortCut = 8315
       OnExecute = actRemoveFromPrjExecute
@@ -1081,7 +1081,7 @@ object frmLuaEditMain: TfrmLuaEditMain
     Left = 48
     Top = 217
     Bitmap = {
-      494C010148004A00040010001000FF00FF00FF10FFFFFFFFFFFFFFFF424D3600
+      494C010148004A00040010001000FF00FF00FF00FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000003001000001002000000000000030
       0100000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -1216,128 +1216,128 @@ object frmLuaEditMain: TfrmLuaEditMain
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00A0A0A0008080800080808000808080008080800080808000808080008080
+      8000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00CEC3
+      C000A4A49E008484800070706E006C6C6C00767676008484840092929200A4A4
+      A400C8C8C800FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000808080008080800080808000808080008080800080808000808080008080
-      80008080800080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D004D4D4D00FF00
+      8000C0C0C000FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C000C0C0C0008080
+      8000808080008080800080808000FF00FF00FF00FF004D4D4D004D4D4D00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D004D4D
-      4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800CECA
+      B600F2F4E900F2F4E900F3F5EB00F4F5EC00C9CAC400C1C1BD00A5A6A3009393
+      920099999900FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      000000000000FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000000000000000000000000000000000000FF00FF004D4D4D004D4DA6004D4D
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000A0A0
+      A000C0C0C00080808000808080006060600080808000E0E0E000E0E0E0008080
+      8000A0A0A000A0A0A000A0A0A00060606000FF00FF004D4D4D004D4DA6004D4D
       4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D00D3D3D3004D4D
-      4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D4CC
+      BC00F2F4E9007F7F7E00BDBDBB00F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000008400
-      000000FFFF0000000000FF00FF00FF00FF00FF00FF00BDBDBD007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B0000000000FF00FF00FF00FF004D4D4D004D4D
+      000000FFFF0000000000FF00FF00FF00FF00C0C0C00080808000606060006060
+      6000C0C0C000C0C0C000FF808000E0E0E00080808000A0A0A000A0A0A0008080
+      8000A0A0A000A0A0A000C0C0C00040404000FF00FF00FF00FF004D4D4D004D4D
       A6004D4D4D00FF00FF00FF00FF00FF00FF004D4D4D00D3D3D3004D4D4D00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D9CE
+      C100F2F4E900F2F4E900F2F4E900F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000008400000000FF
-      FF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B0000000000FF00FF00FF00FF00FF00FF004D4D
+      FF00FFFFFF0000000000FF00FF00FF00FF00A0A0A000A0A0A000606060006080
+      8000C0C0C000C0C0C000FF808000E0E0E00080808000C0C0C000C0C0C0008080
+      8000FFFFFF00C0C0C000C0C0C00040404000FF00FF00FF00FF00FF00FF004D4D
       4D004D4DA6004D4D4D00FF00FF004D4D4D00D3D3D3004D4D4D00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D8CA
+      BF00F2F4E9007F7F7E007F7F7E007F7F7E007F7F7E00BDBDBB00FFFFFF00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000008400000000FFFF00FFFF
-      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD007B7B7B007B7B7B007B7B
-      7B007B7B7B00BDBDBD007B7B7B0000000000FF00FF00FF00FF00FF00FF00FF00
+      FF0000000000FF00FF00FF00FF00FF00FF00A0A0A00040808000008000002040
+      4000C0C0C000C0C0C000C0C0C000C0C0C000E0E0E000E0E0E000E0E0E0008080
+      8000FFFFFF00C0C0C000C0C0C00040404000FF00FF00FF00FF00FF00FF00FF00
       FF004D4D4D004D4DA6004D4D4D00D3D3D3004D4D4D00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF00FF00FF00FF00FF00848484000000
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D4CD
+      BE00F2F4E900F2F4E900F2F4E900F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00848484000000
       0000000000000000000000000000000000008400000000FFFF00FFFFFF000000
-      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD007B7B7B00BDBDBD007B7B7B0000000000FF00FF00FF00FF00FF00FF00FF00
+      0000FF00FF00FF00FF00FF00FF00FF00FF00A0A0A00020404000008000000080
+      0000C0404000FF000000FF000000FF000000FF000000FF000000FF0000008000
+      0000FFFFFF00C0C0C000C0C0C00040404000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF004D4D4D00D3D3D3004D4D4D00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF00FF00FF000000000084848400C6C6
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D1D0
+      BE00F2F4E9007F7F7E007F7F7E007F7F7E007F7F7E00BDBDBB00FFFFFF00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF00FF00FF000000000084848400C6C6
       C600C6C6C600C6C6C600848484000000000000000000FFFFFF0000000000FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B0000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00A0A0A0004080400000C000000040
+      000040804000C0C08000C0C0800070707000C0C0C000C0C0C000C0C0C000A0A0
+      A000FFFFFF00C0C0C000C0C0C00040404000FF00FF00FF00FF00FF00FF00FF00
       FF004D4D4D00D3D3D3004D4D4D004D4DA6004D4D4D00FF00FF00FF00FF00FF00
-      FF00FF00FF004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF008484840084848400C6C6C600C6C6
+      FF00FF00FF004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF00C0787800D5CD
+      BF00F2F4E900F2F4E900F2F4E900F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF008484840084848400C6C6C600C6C6
       C600FFFFFF00C6C6C600C6C6C600848484000000000000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD007B7B7B007B7B7B007B7B
-      7B007B7B7B00BDBDBD007B7B7B00000000004D4D4D004D4D4D004D4D4D004D4D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00A0A0A00040800000008000006060
+      6000C0C04000C0C040000080800060606000FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00C0C0C000C0C0C000404040004D4D4D004D4D4D004D4D4D004D4D
       4D00D3D3D3004D4D4D00FF00FF004D4D4D004D4DA6004D4D4D00FF00FF00FF00
-      FF004D4D4D004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF0000000000C6C6C600C6C6C600FFFF
+      FF004D4D4D004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF00C0787800D5CE
+      BF00F2F4E9007F7F7E007F7F7E007F7F7E00BDBDBB00FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF0000000000C6C6C600C6C6C600FFFF
       FF00C6C6C600C6C6C600C6C6C600C6C6C6008484840000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B00FFFFFF00FFFFFF00FFFFFF00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD007B7B7B00BDBDBD007B7B7B00000000004D4D4D004D4D4D004D4D4D004D4D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00A0A0A000FFFF800040800000C0C0
+      4000FFFF8000C0C080000080800060606000FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00C0C0C000C0C0C000404040004D4D4D004D4D4D004D4D4D004D4D
       4D004D4D4D00FF00FF00FF00FF00FF00FF004D4D4D004D4DA6004D4D4D004D4D
-      4D004D4D4D004DA6A6004DA6A6004D4D4D00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF008000000080000000800000008000000080000000FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF0000000000C6C6C600FFFFFF00C6C6
+      4D004D4D4D004DA6A6004DA6A6004D4D4D00FF00FF00FF00FF00C0787800D6CF
+      C100F2F4E900F2F4E900F2F4E900F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF0000000000C6C6C600FFFFFF00C6C6
       C600C6C6C600C6C6C600C6C6C600C6C6C6008484840000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B00000000004D4D4D00FF00FF00FF00FF004D4D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00B0B0B000A0A0A000A0A0A000A0A0
+      A000A0A0A000A0A0A000A0A0A00090909000FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00C0C0C000C0C0C000404040004D4D4D00FF00FF00FF00FF004D4D
       4D004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D004D4D4D004DA6
-      A6004DA6A6004D4D4D004D4D4D00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF000000000080808000FF00FF00FF00FF0000000000C6C6C600C6C6C600C6C6
+      A6004DA6A6004D4D4D004D4D4D00FF00FF00FF00FF00FF00FF00C0787800D0CD
+      BB00F2F4E900F2F4E900F2F4E900F4F6EC00F7F8F100FAFBF700FDFDFC00FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF0000000000C6C6C600C6C6C600C6C6
       C600C6C6C600FFFFFF00FFFFFF00C6C6C6008484840000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD007B7B7B0000000000FF00FF00FF00FF00FF00FF004D4D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000C0C0
+      C000A0A0A000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
+      C000C0C0C000A0A0A000C0C0C00040404000FF00FF00FF00FF00FF00FF004D4D
       4D004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF004D4D4D004DA6A6004DA6
-      A6004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00800000008000000080000000FFFFFF0000000000000000000000
-      000000000000FF00FF00FF00FF00FF00FF0000000000C6C6C600C6C6C600C6C6
+      A6004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF00C0787800E2C6
+      C40042698600F2F4E90042698600F4F6EC0042698600FAFBF70042698600FFFF
+      FF0071717100FF00FF00FF00FF00FF00FF0000000000C6C6C600C6C6C600C6C6
       C600C6C6C600FFFFFF00FFFFFF00848484008484840000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B
-      7B007B7B7B007B7B7B007B7B7B0000000000FF00FF00FF00FF004D4D4D004D4D
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000C0C0
+      C000C0404000FF000000FF000000FF000000FF000000FF000000FF000000FF00
+      0000FF000000C0404000C0C0C00040404000FF00FF00FF00FF004D4D4D004D4D
       4D004D4D4D00FF00FF00FF00FF00FF00FF004D4D4D004D4D4D004DA6A6004DA6
-      A6004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0080808000FFFFFF008080
-      8000FF00FF00FF00FF00FF00FF00FF00FF000000000000000000C6C6C600C6C6
+      A6004DA6A6004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF00E7CDCD00C178
+      7800C1787800316B900091AABC006F798D00D3B6B9006F90A900BAB4BE005D82
+      9D00A8A8A800FF00FF00FF00FF00FF00FF000000000000000000C6C6C600C6C6
       C600C6C6C600C6C6C60084848400848484000000000084848400FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00FF000000FF00
-      0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFF
-      FF00FF000000FFFFFF007B7B7B0000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000C0C0
+      C000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0A000A0A0
+      A000A0A0A000A0A0A000C0C0C00040404000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF004D4D4D004D4D4D004DA6A6004DA6A6004D4D4D004D4D
-      4D004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0080808000FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080800080808000FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF008484840000000000000000008484
+      4D004D4D4D00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004F9C
+      BE004BBFD400316B90003E86A5004BBFD400637E94004BBFD4006D6E84005D82
+      9D00FF00FF00FF00FF00FF00FF00FF00FF008484840000000000000000008484
       84008484840084848400848484000000000000000000FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBDBD00BDBD
-      BD00BDBDBD00BDBDBD00BDBDBD0000000000FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000E0E0
+      E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000E0E0E000E0E0E000E0E0E00060606000FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF004D4D4D004D4D4D004D4D4D004D4D4D00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00808080008080
-      8000808080008080800080808000808080008080800080808000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0084848400000000000000
-      000000000000000000000000000084848400FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0084848400000000000000
+      000000000000000000000000000084848400FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0
+      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
+      C000C0C0C000C0C0C000C0C0C000FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
@@ -1345,129 +1345,129 @@ object frmLuaEditMain: TfrmLuaEditMain
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF004C4C4C004C4C
-      4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000004C4C4C00FFFFFF00D2D2D200D2D2
+      4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A0A0A000606060006060
+      6000606060006060600060606000606060006060600060606000606060006060
+      6000606060006060600080808000FF00FF004C4C4C00FFFFFF00D2D2D200D2D2
       D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2D200D2D2
       D200D2D2D200D2D2D200D2D2D2004C4C4C00FF00FF004C4C4C004C4C4C004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A64C4C00FFFF4C00FF4C
-      4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
-      C000C0C0C000C0C0C000C0C0C000000000004C4C4C00FFFFFF004CFFFF004CFF
+      4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF004CFF
       FF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFF
       FF004CFFFF004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00A64C4C00FFFF4C00FF4C4C00FF4C
-      4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF004CFF
+      4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00E0C0
+      C000C0808000C0808000E0C0C000FFFFFF00E0C0C000E0C0C000FFFFFF00C080
+      8000E0C0C000E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF004CFF
       FF004CFFFF004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
       4C004C4C4C004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00A64C4C00FFFF4C00FF4C4C00FF4C4C004C4C
-      4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00A6A6
+      4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00C0808000FFFFFF00C0808000C0808000C0808000FFFF
+      FF00E0C0C000E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00A6A6
       A6004CFFFF004CA64C004CA64C004CFFFF00FF4C4C00FF4C4C004CFFFF004C4C
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00A64C4C00FFFFFF00FF4C4C00FF4C4C004C4C4C00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000
-      00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF004CFF
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00C0808000E0C0C000C0808000C0808000C0808000FFFF
+      FF00E0C0C000E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF004CFF
       FF004CFFFF004CA64C004CA64C004CFFFF00FF4C4C00FF4C4C004CFFFF004C4C
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF004C4C
       4C00FF00FF004C4C4C00FF00FF004C4C4C00FF00FF00FF00FF00A6A6A6004C4C
       4C004C4C4C00A6A6A600D2D2D200FF4C4C00FF4C4C004C4C4C00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000808000C0C0C0000080
-      8000C0C0C000008080000000000080808000C0C0C00000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00A6A6
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00E0C0C000E0C0C000C0808000E0C0C000FFFFFF00C080
+      8000E0C0C000E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00A6A6
       A6004CFFFF004CA64C004CA64C004CFFFF004CFFFF004CFFFF004CFFFF004C4C
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00FF00FF00D1D8
       DB00FF00FF00D1D8DB00FF00FF00D1D8DB00FF00FF00D1D8DB00FF00FF00D1D8
       DB00FF00FF00D1D8DB00FF00FF004C4C4C00FF00FF00A6A6A600D2D2D200FFFF
       4C00D2D2D2004C4C4C00A6A6A6004CA6A6004CA6A6004C4C4C004C4C4C004C4C
-      4C004C4C4C004C4C4C00FF00FF00FF00FF000000000000FFFF00FFFFFF0000FF
-      FF00FFFFFF0000FFFF0000000000000000000000000000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF004CFF
+      4C004C4C4C004C4C4C00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00E0C0
+      C000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF004CFF
       FF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004C4C
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00D1D8DB00FF00
       FF00D1D8DB00A64C4C00D1D8DB00FF00FF00D1D8DB00FF00FF00D1D8DB00A64C
       4C00D1D8DB00FF00FF00D1D8DB004C4C4C00A6A6A600FFFFFF00FFFF4C00D2D2
       D200FFFF4C00D2D2D2004C4C4C004CA6A6004CA6A600D2D2D2004CA6A6004C4C
-      4C00A6A6A600D2D2D2004C4C4C00FF00FF00FF00FF000000000000FFFF00FFFF
-      FF0000FFFF00FFFFFF0000FFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00A6A6
+      4C00A6A6A600D2D2D2004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000F0F0F000F0F0F000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00A6A6
       A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A6004CFFFF004CFFFF004C4C
       FF004C4CA6004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00D1D8DB00D1D8
       DB00A64C4C00A64C4C00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00A64C
       4C00A64C4C00D1D8DB00D1D8DB004C4C4C00A6A6A600FFFF4C00FFFFFF00FFFF
       4C00D2D2D200FFFF4C004C4C4C004CA6A6004CFFFF00FFFFFF004CFFFF004C4C
-      4C004C4C4C004C4C4C004C4C4C00FF00FF00FF00FF00FF00FF000000000000FF
-      FF00FFFFFF0000FFFF00FFFFFF0000FFFF0000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00FFFF
+      4C004C4C4C004C4C4C004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004CFFFF004CFF
       FF004CFFFF004CFFFF00D2D2D2004C4C4C00FF00FF004C4C4C00D1D8DB00A64C
       4C00A64C4C00A64C4C00A64C4C00A64C4C00D1D8DB00A64C4C00A64C4C00A64C
       4C00A64C4C00A64C4C00D1D8DB004C4C4C00A6A6A600FFFFFF00FFFF4C00FFFF
       FF00FFFF4C00D2D2D2004C4C4C00A6A6A600FFFFFF004CFFFF00FFFFFF004CFF
-      FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      000080808000808080008080800080808000C0C0C00000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00A6A6
+      FF004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000F0F0F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00A6A6
       A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A6004CFFFF00A6A6
       A600A6A6A600A6A6A600A6A6A6004C4C4C00FF00FF004C4C4C00D1D8DB00D1D8
       DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00D1D8DB00D1D8DB00A64C
       4C00D1D8DB00D1D8DB00D1D8DB004C4C4C00FF00FF00A6A6A600FFFFFF00FFFF
       4C00FFFFFF004C4C4C004C4C4C00FFFFFF004CFFFF00FFFFFF004CFFFF00FFFF
-      FF004CFFFF004C4C4C00FF00FF00FF00FF00FF00FF0000000000000000000000
-      0000000000000000000000000000000000008080800000000000FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF00C0C0C000000000004C4C4C00FFFFFF004CFFFF00FFFF
+      FF004CFFFF004C4C4C00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000F0F0F000F0F0F000E0E0E000E0E0E000E0E0E000E0E0E000F0F0
+      F000FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004CFFFF004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C00FF00FF00D1D8DB00D1D8DB00D1D8
       DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00A64C
       4C00D1D8DB00D1D8DB00D1D8DB00D1D8DB00FF00FF00FF00FF00A6A6A600A6A6
       A6004C4C4C00A6A6A600FF00FF004C4C4C00FFFFFF004CFFFF00FFFFFF004CFF
-      FF00FFFFFF004CFFFF004C4C4C00FF00FF00FF00FF0000000000FFFFFF0000FF
-      FF00FFFFFF0000FFFF00FFFFFF00000000008080800000000000FFFFFF00FFFF
-      FF00FFFFFF00C0C0C000C0C0C000000000004C4C4C00FFFFFF004CFFFF00A6A6
+      FF00FFFFFF004CFFFF004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004C4C4C00FFFFFF004CFFFF00A6A6
       A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A600A6A6A6004CFFFF00A6A6
       A600FFFFFF00FFFFFF00D2D2D2004C4C4C00FF00FF00D1D8DB00A64C4C00D1D8
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00D1D8
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF004C4C4C00A6A6A600A6A6A600A6A6
-      A600A6A6A600D2D2D2004C4C4C00FF00FF00FF00FF00FF00FF00000000000000
-      00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00000000000000000000000000000000004C4C4C00FFFFFF004CFFFF004CFF
+      A600A6A6A600D2D2D2004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000F0F0F000A0A0
+      A000808080007070700080808000FF00FF004C4C4C00FFFFFF004CFFFF004CFF
       FF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF004CFFFF00A6A6
       A600FFFFFF00D2D2D2004C4C4C00FF00FF00FF00FF00D1D8DB00D1D8DB00D1D8
       DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8
       DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C
-      4C004C4C4C00A6A6A6004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF0080808000FFFFFF0080808000FF00FF004C4C4C00FFFFFF00FFFFFF00FFFF
+      4C004C4C4C00A6A6A6004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000F0F0F000E0E0E000F0F0F000E0E0E000E0E0E000F0F0F000C0C0
+      C000C0C0C00060606000FF00FF00FF00FF004C4C4C00FFFFFF00FFFFFF00FFFF
       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A6A6
       A600D2D2D2004C4C4C00FF00FF00FF00FF00FF00FF00D1D8DB00A64C4C00D1D8
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00D1D8DB00D1D8DB00A64C4C00D1D8
       DB00D1D8DB00D1D8DB00A64C4C00D1D8DB00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF004C4C4C00FFFFFF004CFFFF00FFFFFF004CFFFF00FFFF
-      FF004C4C4C00A6A6A6004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF008080800080808000FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C
+      FF004C4C4C00A6A6A6004C4C4C00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009090
+      900060606000FF00FF00FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C
       4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C004C4C4C00A6A6
       A6004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF004C4C4C004C4C4C004C4C4C004C4C4C004C4C
-      4C004C4C4C004C4C4C00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
-      8000808080008080800080808000808080008080800080808000808080008080
-      800080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      4C004C4C4C004C4C4C00FF00FF00FF00FF00FF00FF00C0C0C000C0C0C000C0C0
+      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0008080
+      8000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
@@ -3135,131 +3135,131 @@ object frmLuaEditMain: TfrmLuaEditMain
       4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B4B004B4B
       4B004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
-      0000000000000000000000000000000000000000000000000000FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C6C6
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00A0A0A000606060006060
+      6000606060006060600060606000606060006060600060606000606060006060
+      6000606060006060600080808000FF00FF00FF00FF00FF00FF00FF00FF00C6C6
       C600848484008484840084848400848484008484840084848400848484008484
-      84008484840084848400848484004B4B4B00FF00FF00FF00FF00FF00FF000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000FF00FF00FF00FF00FF00FF0075757500FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
+      84008484840084848400848484004B4B4B00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00505050006060
+      60006060600060606000606060006060600080808000FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
       E000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
-      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF00000000000000000075757500FFFF
-      FF0075000000750000007500000075000000FFFFFF0000000000FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
+      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF00000000000000
+      0000000000000000000000000000000000000000000000000000000000000000
+      000000000000FF00FF00FF00FF00FF00FF00C0C0C00080808000C0C0C000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00E0C0
+      C000C0808000C0808000FFFFFF00C0808000E0C0C000FFFFFF00C0808000E0C0
+      C000FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
       E000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
-      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF007575750000FFFF0075757500FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000
-      000000000000000000000000000000000000FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
+      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF00C0C0C000C080
+      8000C0808000C0808000C0808000E0E0E0004040400080808000808080008080
+      8000808080008080800080808000FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00C0808000FFFFFF00A0404000C0808000FFFFFF00A040
+      4000FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
       E000C6C6C6000000FF000000FF00C6C6C600C6C6C600C6C6C600C6C6C600C6C6
-      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF0075757500FFFFFF0075757500FFFF
-      FF0075000000750000007500000075000000FFFFFF0000000000FFFFFF00B9B9
-      B900FFFFFF00B9B9B900FFFFFF0000000000FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
+      C600C6C6C600C6C6C600848484004B4B4B00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF00C0C0C000C080
+      8000C0808000C0808000C0808000E0E0E00060606000D0D0D000D0D0D000D0D0
+      D000D0D0D000D0D0D00060606000FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00C0808000FFFFFF00C0808000E0C0C000C0808000A040
+      4000FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00FF00FF00FF00E3DF
       E000E3DFE000E3DFE000E3DFE000E3DFE000E3DFE000E3DFE000E3DFE000E3DF
-      E000E3DFE000E3DFE000C6C6C600FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF007575750000FFFF0075757500FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000B9B9B900FFFF
-      FF00B9B9B900FFFFFF00B9B9B90000000000FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      E000E3DFE000E3DFE000C6C6C600FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF00C0C0C000C080
+      8000C0808000C0808000C0808000E0E0E00070707000E0E0E000E0E0E000E0E0
+      E000E0E0E000E0E0E00060606000FF00FF00FF00FF00C0C0C000FFFFFF00C080
+      8000FFFFFF00FFFFFF00E0C0C000FFFFFF00E0C0C000FFFFFF00C0808000E0C0
+      C000FFFFFF00E0E0E00080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF0075757500FFFFFF0075757500FFFF
-      FF0075000000750000007500000075000000FFFFFF0000000000FFFFFF00B9B9
-      B900FFFFFF00B9B9B900FFFFFF0000000000FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF00FF00FF004B4B4B004B4B4B004B4B
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF00C0C0C000C080
+      8000C0808000C0808000C0808000E0E0E00070707000E0E0E000E0E0E000E0E0
+      E000E0E0E000E0E0E00060606000FF00FF00FF00FF00C0C0C000FFFFFF00E0C0
+      C000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00FFFFFF00E0E0E00080808000FF00FF00FF00FF004B4B4B004B4B4B004B4B
       4B004B4B4B004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF007575750000FFFF0075757500FFFF
-      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000B9B9B900FFFF
-      FF00B9B9B900FFFFFF00B9B9B90000000000FF00FF00FF00FF00FF00FF000000
-      0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF004B4B4B00DFFFFF0080FFFF0080FF
+      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF00C0C0C000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00E0E0E00080808000F0F0F000E0E0E000E0E0
+      E000E0E0E000E0E0E00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000F0F0F000F0F0F000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004B4B4B00DFFFFF0080FFFF0080FF
       FF0080FFFF0080FFFF0080FFFF00DFFFFF004B4B4B00FF00FF00FF00FF00FF00
-      FF004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF00A19D
-      9D00FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF0000FFFF00B9B9B900757575007575
-      7500FFFFFF0000FFFF0075757500757575007575750000000000FFFFFF00B9B9
-      B900FFFFFF00B9B9B900FFFFFF0000000000FF00FF00FF00FF00FF00FF00A19D
-      9D00FFFFFF000000000000000000000000000000000000000000000000000000
-      0000FFFFFF00FFFFFF0000000000FF00FF004B4B4B0080FFFF0080FFFF0080FF
+      FF004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080FFFF0080C0C00080C0
+      C00080C0C00080C0C00090909000B0B0B000C0C0C000C0808000F0F0F000F0F0
+      F000F0F0F000E0E0E00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004B4B4B0080FFFF0080FFFF0080FF
       FF0080FFFF0080FFFF0060DFDF0080FFFF004B4B4B00FF00FF00FF00FF004B4B
-      4B004B4B4B004B4B4B004B4B4B004B4B4B00A19D9D00FF00FF00FF00FF00A19D
-      9D0000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF0075757500FFFFFF00B9B9B9007575
-      750000FFFF00FFFFFF00FFFFFF0075757500FFFFFF00FFFFFF00B9B9B900FFFF
-      FF00B9B9B900FFFFFF00B9B9B90000000000A19D9D00FF00FF00FF00FF00A19D
-      9D0000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF004B4B4B0080FFFF0080FFFF0080FF
+      4B004B4B4B004B4B4B004B4B4B004B4B4B00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00C0C0C00080C0C00080C0C00080C0
+      C00080C0C00080C0C000B0B0B000E0E0E000C0808000A0404000C0808000E0C0
+      C000C0808000F0F0F00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000F0F0F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004B4B4B0080FFFF0080FFFF0080FF
       FF0080FFFF0080FFFF0080FFFF0080FFFF004B4B4B00FF00FF00FF00FF00FF00
-      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00A19D
-      9D00FFFFFF00FFFFFF00A19D9D000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF00DAEBED00B9B9B90000FFFF007575
-      7500FFFFFF00757575007575750075757500FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00B9B9B900FFFFFF0000000000FF00FF00FF00FF00FFFFFF00A19D
-      9D00FFFFFF00FFFFFF00A19D9D000000000000000000FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00FFFFFF0000000000FF00FF004B4B4B0000FFFF0080FFFF0080FF
+      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00E0E0E000F0F0F000C0808000C0808000FFFFFF00C080
+      8000C0808000F0F0F00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000F0F0F000F0F0F000E0E0E000E0E0E000E0E0E000E0E0E000F0F0
+      F000FFFFFF00E0E0E00080808000FF00FF004B4B4B0000FFFF0080FFFF0080FF
       FF0080FFFF0080FFFF0080FFFF0080FFFF004B4B4B00FF00FF00FF00FF00FF00
-      FF00FF00FF004B4B4B00FF00FF00FF00FF00A19D9D00A19D9D00A19D9D00FFFF
-      FF0000FFFF0000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
-      0000000000000000000000000000FF00FF00757575007575750075757500FFFF
-      FF0000FFFF0000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00B9B9B900FFFFFF00B9B9B90000000000A19D9D00A19D9D00A19D9D00FFFF
-      FF0000FFFF0000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
-      0000000000000000000000000000FF00FF004B4B4B004B4B4B004B4B4B004B4B
+      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000
+      000000000000FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00F0F0F000C0808000A0404000C0808000E0C0
+      C000A0404000E0C0C00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0
+      E000FFFFFF00E0E0E00080808000FF00FF004B4B4B004B4B4B004B4B4B004B4B
       4B0010BFCF0080FFFF0080FFFF00DFFFFF004B4B4B00FF00FF00FF00FF00FF00
-      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF0000FFFF00A19D9D0000FF
-      FF00FFFFFF00A19D9D00A19D9D00A19D9D00A19D9D00FFFFFF0000000000FFFF
-      FF00FFFFFF0000000000FF00FF00FF00FF0000FFFF00FFFFFF007575750000FF
-      FF00FFFFFF007575750000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-      FF00FFFFFF00B9B9B900FFFFFF0000000000FF00FF0000FFFF00A19D9D0000FF
-      FF00FFFFFF00A19D9D00A19D9D00A19D9D00A19D9D00FFFFFF0000000000FFFF
-      FF00FFFFFF0000000000FF00FF00FF00FF004B4B4B0000FFFF00FFFFFF0000CF
+      FF00FF00FF004B4B4B00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF000000
+      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0808000F0F0F000F0F0F000F0F0
+      F000F0F0F000F0F0F00060606000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000E0E0E000F0F0F000A0A0
+      A000808080007070700080808000FF00FF004B4B4B0000FFFF00FFFFFF0000CF
       CF004B4B4B004B4B4B004B4B4B004B4B4B00FF00FF004B4B4B004B4B4B004B4B
-      4B004B4B4B0084848400FF00FF00FF00FF00FF00FF00A19D9D0000FFFF00A19D
-      9D0000FFFF00A19D9D0000FFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF
-      FF0000000000FF00FF00FF00FF00FF00FF00DAEBED007575750000FFFF007575
-      750000FFFF00B9B9B9007575750000FFFF007500000075000000750000007500
-      000075000000750000007500000075000000FF00FF00A19D9D0000FFFF00A19D
-      9D0000FFFF00A19D9D0000FFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF
-      FF0000000000FF00FF00FF00FF00FF00FF00FF00FF004B4B4B004B4B4B004B4B
+      4B004B4B4B0084848400FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0A0A000C0808000C080
+      8000C0808000C0808000C0808000C0808000C0808000B0707000B0707000B070
+      7000B0707000B070700070303000FF00FF00FF00FF00C0C0C000FFFFFF00F0F0
+      F000E0E0E000F0F0F000E0E0E000F0F0F000E0E0E000E0E0E000F0F0F000C0C0
+      C000C0C0C00060606000FF00FF00FF00FF00FF00FF004B4B4B004B4B4B004B4B
       4B00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF00A19D9D0000FFFF00FF00FF00A19D
-      9D00FFFFFF00FF00FF00A19D9D0000FFFF00FFFFFF00FFFFFF00000000000000
-      0000FF00FF00FF00FF00FF00FF00FF00FF007575750000FFFF00B9B9B9007575
-      7500FFFFFF00DAEBED00B9B9B900757575007500000075000000750000007500
-      000075000000750000007500000075000000A19D9D0000FFFF00FF00FF00A19D
-      9D00FFFFFF00FF00FF00A19D9D0000FFFF00FFFFFF00FFFFFF00000000000000
-      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
+      0000000000000000000000000000000000000000000000000000FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00C0808000800000008000
+      0000800000008000000080000000800000008000000080000000800000008000
+      0000800000008000000080000000FF00FF00FF00FF00C0C0C000FFFFFF00FFFF
+      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009090
+      900060606000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00FF00FF00A19D
-      9D0000FFFF00FF00FF00FF00FF00A19D9D00000000000000000000000000FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00B9B9B900DAEBED007575
-      750000FFFF00DAEBED00DAEBED00B9B9B900FF00FF00FF00FF00FF00FF00FF00
-      FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00FF00FF00A19D
-      9D0000FFFF00FF00FF00FF00FF00A19D9D00000000000000000000000000FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+      FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00E0C0C000C0808000C080
+      8000C0808000C0808000C0808000C0808000C0808000C0808000C0808000C080
+      8000C0808000C0808000C0808000FF00FF00FF00FF00C0C0C000C0C0C000C0C0
+      C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0008080
+      8000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
@@ -3593,14 +3593,14 @@ object frmLuaEditMain: TfrmLuaEditMain
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      000000000000}
+      00000000000000000000000000000000}
   end
   object odlgOpenUnit: TOpenDialog
     Filter = 
       'Lua Files (*.lua, *.lpr)|*.lua;*.lpr|Lua Units (*.lua)|*.lua|Lua' +
       ' Projects (*.lpr)|*.lpr|LuaEdit Macros (*.lmc)|*.lmc|Text Files ' +
       '(*.txt)|*.txt|All Files (*.*)|*.*'
+    FilterIndex = 6
     InitialDir = 'C:\'
     Options = [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing]
     Left = 80
@@ -3942,6 +3942,21 @@ object frmLuaEditMain: TfrmLuaEditMain
   end
   object jvDockVSNet: TJvDockVSNetStyle
     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.ActiveFont.Charset = ANSI_CHARSET
     TabServerOption.ActiveFont.Color = clWindowText
@@ -4966,35 +4981,40 @@ object frmLuaEditMain: TfrmLuaEditMain
     object ools1: TMenuItem
       Action = actMainMenuTools
       object RegistryEditor1: TMenuItem
-        Caption = 'Registry Editor'
+        Caption = 'Registry Editor...'
         ImageIndex = 37
         OnClick = RegistryEditor1Click
       end
       object Calculator1: TMenuItem
-        Caption = 'Calculator'
+        Caption = 'Calculator...'
         ImageIndex = 37
         OnClick = Calculator1Click
       end
       object ErrorLookup1: TMenuItem
-        Caption = 'Error Lookup'
+        Caption = 'Error Lookup...'
         ImageIndex = 37
         OnClick = ErrorLookup1Click
       end
       object Conversions1: TMenuItem
-        Caption = 'Conversions'
+        Caption = 'Conversions...'
         ImageIndex = 37
         OnClick = Conversions1Click
       end
       object AsciiTable1: TMenuItem
-        Caption = 'Ascii Table'
+        Caption = 'Ascii Table...'
         ImageIndex = 37
         OnClick = AsciiTable1Click
       end
       object CreateGUID1: TMenuItem
-        Caption = 'Create GUID'
+        Caption = 'Create GUID...'
         ImageIndex = 37
         OnClick = CreateGUID1Click
       end
+      object PathConverter1: TMenuItem
+        Caption = 'Path Converter...'
+        ImageIndex = 37
+        OnClick = PathConverter1Click
+      end
       object N23: TMenuItem
         Caption = '-'
       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;
 
 const
+  LUAEDIT_UNKNOW_MSG  = 0;
   LUAEDIT_HINT_MSG    = 1;
   LUAEDIT_WARNING_MSG = 2;
   LUAEDIT_ERROR_MSG   = 3;
@@ -52,7 +53,7 @@ const
 type
 
   //////////////////////////////////////////////////////////////////////////////
-  // Copy data type
+  // Copy data message data types
   //////////////////////////////////////////////////////////////////////////////
   TCopyDataType = (cdtAnsiString = 0, cdtWideString = 1, cdtBinary = 2);
 
@@ -157,8 +158,8 @@ type
   end;
 
   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
     Line:     Integer;  // Actual line definition in script
   public
@@ -232,6 +233,7 @@ type
     FLastTimeModified:  TDateTime;
     FName:              String;
     FPath:              String;
+    FDisplayPath:       String;
     FIsReadOnly:        Boolean;
     FIsNew:             Boolean;
     FHasChanged:        Boolean;
@@ -239,11 +241,15 @@ type
     FPrjOwner:          TLuaEditProject;
   public
     constructor Create(Path: String; otType: TLuaEditFileType = otTextFile);
+
+    function  Save(Path: String): Boolean; virtual;
+    function  SaveInc(Path: String): Boolean; virtual;
   published
     property FileType: TLuaEditFileType read FOTFileType write FOTFileType;
     property LastTimeModified: TDateTime read FLastTimeModified write FLastTimeModified;
     property Name: String read FName write FName;
     property Path: String read FPath write FPath;
+    property DisplayPath: String read FDisplayPath write FDisplayPath;
     property IsReadOnly: Boolean read FIsReadOnly write FIsReadOnly;
     property IsNew: Boolean read FIsNew write FIsNew;
     property HasChanged: Boolean read FHasChanged write FHasChanged;
@@ -273,8 +279,8 @@ type
     constructor Create(Path: String; otType: TLuaEditFileType = otTextFile);
     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
     property LastEditedLine:   Integer read FLastEditedLine write FLastEditedLine;
     property SynUnit:          TSynEdit read FSynUnit write FSynUnit;
@@ -292,8 +298,8 @@ type
     constructor Create(Path: String; otType: TLuaEditFileType = otTextFile);
     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 GetBreakpoints();
   published
@@ -344,8 +350,8 @@ type
     destructor  Destroy; override;
 
     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();
   end;
 
@@ -359,12 +365,40 @@ function  SetPrivilege(sPrivilegeName : PChar; bEnabled : boolean): boolean; cde
 procedure ToggleFileReadOnlyAttr(const sFileName: PChar); cdecl; external 'LuaEditSys.dll';
 function  WinExit(iFlags: integer): 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
 
 uses
   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
 ///////////////////////////////////////////////////////////////////
@@ -634,40 +668,43 @@ var
   ImgIndex: integer;
   pLuaUnit: TLuaEditUnit;
 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
-    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
-      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;
 
@@ -719,16 +756,31 @@ begin
   FPath := Path;
 
   // Get Last Time accessed and readonly state
-  if ((Path <> '') and FileExists(Path)) then
+  if ((Path <> '') and FileExistsAbs(Path)) then
   begin
     FLastTimeModified := GetFileLastTimeModified(PChar(Path));
     FIsReadOnly := GetFileReadOnlyAttr(PChar(Path));
+    FDisplayPath := FPath;
   end
   else
   begin
+    FPath := GetLuaEditInstallPath() + '\Templates\Template' + ExtractFileExt(Path);
+    FDisplayPath := '?\' + ExtractFileName(Path);
     FLastTimeModified := Now;
     FIsReadOnly := False;
   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;
 
 ///////////////////////////////////////////////////////////////////
@@ -762,7 +814,6 @@ begin
 
   FLastEditedLine := -1;
   FAssociatedTab := nil;
-  FName := ExtractFileName(Path);
 
   // Set some properties
   FSynUnit := TSynEdit.Create(frmLuaEditMain.pnlMain);
@@ -792,7 +843,7 @@ begin
     FSynUnit.Highlighter := TSynLuaSyn.Create(nil);
 
   // 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);
 end;
 
@@ -803,12 +854,12 @@ begin
   FSynUnit.Free;
 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
   xPos, IncValue, iAnswer, TempIncValue: Integer;
   bResult: Boolean;
   pMsgBox: TfrmReadOnlyMsgBox;
-begin
+begin  
   frmLuaEditMain.jvchnNotifier.Active := False;
   Result := True;
 
@@ -868,7 +919,7 @@ begin
     Path := Copy(Self.Path, 1, Length(Self.Path) - xPos + 1) + IntToStr(IncValue) + ExtractFileExt(Self.Path);
 
     // Check if file is read only first
-    while (GetFileReadOnlyAttr(PChar(Path)) and (FileExists(Path))) do
+    while (GetFileReadOnlyAttr(PChar(Path)) and (FileExistsAbs(Path))) do
     begin
       pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
       iAnswer := pMsgBox.MessageBox('The project '+Path+' is read-only. Save anyway?      ', 'LuaEdit');
@@ -923,13 +974,14 @@ begin
   end;
 
   frmLuaEditMain.jvchnNotifier.Active := True;
+  inherited SaveInc(Path);
 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
   iAnswer: Integer;
   pMsgBox: TfrmReadOnlyMsgBox;
-begin
+begin  
   frmLuaEditMain.jvchnNotifier.Active := False;
   Result := True;
 
@@ -968,7 +1020,7 @@ begin
     end;
 
     // Check if file is read only first
-    while (GetFileReadOnlyAttr(PChar(Path)) and (FileExists(Path))) do
+    while (GetFileReadOnlyAttr(PChar(Path)) and (FileExistsAbs(Path))) do
     begin
       pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
       iAnswer := pMsgBox.MessageBox('The project '+Path+' is read-only. Save anyway?      ', 'LuaEdit');
@@ -1023,6 +1075,7 @@ begin
   end;
 
   frmLuaEditMain.jvchnNotifier.Active := True;
+  inherited Save(Path);
 end;
 
 ///////////////////////////////////////////////////////////////////
@@ -1053,9 +1106,9 @@ begin
   FSynParams.Free;
 end;
 
-function TLuaEditDebugFile.SaveUnit(Path: String; bNoDialog: Boolean; bForceDialog: Boolean): Boolean;
+function TLuaEditDebugFile.Save(Path: String; bNoDialog: Boolean; bForceDialog: Boolean): Boolean;
 begin
-  inherited SaveUnit(Path, bNoDialog, bForceDialog);
+  inherited Save(Path, bNoDialog, bForceDialog);
 
   // Reinitialize variables
   DebugInfos.iLineError := -1;  // Do not display anymore the current line error
@@ -1069,9 +1122,9 @@ begin
   SynUnit.Refresh;
 end;
 
-function TLuaEditDebugFile.SaveUnitInc(Path: String; bNoDialog: Boolean; bForceDialog: Boolean): Boolean;
+function TLuaEditDebugFile.SaveInc(Path: String; bNoDialog: Boolean; bForceDialog: Boolean): Boolean;
 begin
-  inherited SaveUnitInc(Path, bNoDialog, bForceDialog);
+  inherited SaveInc(Path, bNoDialog, bForceDialog);
 
   // Reinitialize variables
   DebugInfos.iLineError := -1;  // Do not display anymore the current line error
@@ -1097,7 +1150,7 @@ begin
   begin
     // Erase existing file if any to ensure a new clean breakpoint file
     // 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')));
 
     // Create the ini file engine and the file on the hard drive
@@ -1134,7 +1187,7 @@ var
   pBreakpoint: TBreakpoint;
 begin
   // 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
     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
@@ -1253,7 +1306,7 @@ begin
     begin
       sUnitName :=  ExpandUNCFileName(ExtractFilePath(FPath) + fFile.ReadString('Files', lstTmpFiles.Strings[x], ''));
 
-      if FileExists(sUnitName) then
+      if FileExistsAbs(sUnitName) then
       begin
         // Initialize unit and global variables considering the fact that open was a success
         pLuaUnit := TLuaEditUnit(frmLuaEditMain.AddFileInProject(sUnitName, False, Self));
@@ -1282,13 +1335,15 @@ begin
   lstTmpFiles.Free;
 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
   pFile: TIniFile;
   x, xPos, IncValue, iAnswer, TempIncValue: integer;
   bResult: Boolean;
   pMsgBox: TfrmReadOnlyMsgBox;
 begin
+  inherited SaveInc(Path);
+
   frmLuaEditMain.jvchnNotifier.Active := False;
   Result := True;
 
@@ -1331,7 +1386,7 @@ begin
   Path := Copy(Path, 1, Length(Path) - xPos + 1) + IntToStr(IncValue) + ExtractFileExt(Path);  // Build the new name
 
   // Check if file is read only first
-  while (GetFileReadOnlyAttr(PChar(Path)) and (FileExists(Path))) do
+  while (GetFileReadOnlyAttr(PChar(Path)) and (FileExistsAbs(Path))) do
   begin
     pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
     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
   // NOTE: IniFiles append stuff to it when they already exists
-  if FileExists(Path) then
+  if FileExistsAbs(Path) then
     DeleteFile(PChar(Path));
 
   pFile := TIniFile.Create(Path);  // Create project file writer engine (using *.ini files way)
@@ -1427,12 +1482,14 @@ begin
   frmLuaEditMain.jvchnNotifier.Active := True;
 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
   pFile: TIniFile;
   x, iAnswer: integer;
   pMsgBox: TfrmReadOnlyMsgBox;
 begin
+  inherited Save(Path);
+
   frmLuaEditMain.jvchnNotifier.Active := False;
   Result := True;
 
@@ -1457,7 +1514,7 @@ begin
   end;
 
   // Check if file is read only first
-  while (GetFileReadOnlyAttr(PChar(Path)) and (FileExists(Path))) do
+  while (GetFileReadOnlyAttr(PChar(Path)) and (FileExistsAbs(Path))) do
   begin
     pMsgBox := TfrmReadOnlyMsgBox.Create(nil);
     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
   // NOTE: IniFiles append datas when they already exists
-  if FileExists(Path) then
+  if FileExistsAbs(Path) then
     DeleteFile(PChar(Path));
 
   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
       begin
         if SaveUnitsInc then
-          pLuaUnit.SaveUnitInc(pLuaUnit.Path)
+          pLuaUnit.SaveInc(pLuaUnit.Path)
         else
-          pLuaUnit.SaveUnit(pLuaUnit.Path);
+          pLuaUnit.Save(pLuaUnit.Path);
       end;
     end;
 

+ 7 - 8
LuaEdit/PrjSettings.dfm

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

+ 4 - 4
LuaEdit/PrjSettings.pas

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

+ 9 - 4
LuaEdit/Profiler.dfm

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

+ 16 - 7
LuaEdit/Profiler.pas

@@ -18,6 +18,7 @@ type
     Source: String;
     FctPointer: Pointer; // Functions's pointer
     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)
     DurationRGauge: TGauge; // Relative 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 vstLuaProfilerGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
     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);
   private
     { Private declarations }
@@ -43,7 +41,7 @@ type
     { Public declarations }
     procedure InitProfiler;
     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);
   end;
 
@@ -110,6 +108,7 @@ begin
   pNodeData.Line := -1;
   pNodeData.Source := 'Lua';
   pNodeData.FctPointer := nil;
+  pNodeData.MemUsage := -1;
   pNodeData.FctName := '[RESIDUAL PROCESSES]';
 
   pNodeData.DurationRGauge := TGauge.Create(Self);
@@ -130,7 +129,7 @@ begin
   vstLuaProfiler.EndUpdate;
 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
   StartedTime: Int64;
   pCallData: PProfilerCall;
@@ -161,6 +160,7 @@ begin
   pCallData.Line := Line;
   pCallData.Source := Source;
   pCallData.EnterTime := StartedTime;
+  pCallData.MemUsage := MemUsage;
   pCurrentCall := pCallNode;
   Result := pCallData;
 end;
@@ -231,6 +231,15 @@ begin
         else
           CellText := pData.ExitTimeStr;
       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
       CellText := '';
     end;

+ 24 - 694
LuaEdit/ProjectTree.dfm

@@ -1,8 +1,8 @@
 object frmProjectTree: TfrmProjectTree
-  Left = 782
-  Top = 213
-  Width = 250
-  Height = 200
+  Left = 675
+  Top = 184
+  Width = 262
+  Height = 400
   BorderStyle = bsSizeToolWin
   Caption = 'Project Tree'
   Color = clBtnFace
@@ -17,23 +17,24 @@ object frmProjectTree: TfrmProjectTree
   FormStyle = fsStayOnTop
   OldCreateOrder = False
   Position = poOwnerFormCenter
+  OnCreate = FormCreate
   PixelsPerInch = 96
   TextHeight = 13
   object Panel1: TPanel
     Left = 0
     Top = 0
-    Width = 242
-    Height = 173
+    Width = 254
+    Height = 373
     Align = alClient
     BevelOuter = bvNone
     TabOrder = 0
-    object vstProjectTree: TVirtualStringTree
+    object vstProjectTree: TVirtualDrawTree
       Left = 0
       Top = 0
-      Width = 242
-      Height = 173
+      Width = 254
+      Height = 373
       Align = alClient
-      Header.AutoSizeIndex = 2
+      Header.AutoSizeIndex = 1
       Header.Font.Charset = DEFAULT_CHARSET
       Header.Font.Color = clWindowText
       Header.Font.Height = -11
@@ -41,19 +42,16 @@ object frmProjectTree: TfrmProjectTree
       Header.Font.Style = []
       Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoVisible]
       Header.Style = hsFlatButtons
-      HintMode = hmHintAndDefault
-      Images = imlProjectTree
       PopupMenu = ppmProjectTree
       TabOrder = 0
-      TreeOptions.MiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toReportMode, toToggleOnDblClick, toWheelPanning]
+      TreeOptions.PaintOptions = [toShowBackground, toShowButtons, toShowDropmark, toShowRoot, toShowTreeLines, toThemeAware]
       TreeOptions.SelectionOptions = [toFullRowSelect, toRightClickSelect]
       OnAfterItemPaint = vstProjectTreeAfterItemPaint
       OnDblClick = vstProjectTreeDblClick
-      OnGetText = vstProjectTreeGetText
-      OnPaintText = vstProjectTreePaintText
-      OnGetImageIndex = vstProjectTreeGetImageIndex
-      OnGetHint = vstProjectTreeGetHint
+      OnDrawNode = vstProjectTreeDrawNode
       OnGetNodeDataSize = vstProjectTreeGetNodeDataSize
+      OnInitNode = vstProjectTreeInitNode
+      OnKeyDown = vstProjectTreeKeyDown
       OnMouseDown = vstProjectTreeMouseDown
       Columns = <
         item
@@ -62,688 +60,12 @@ object frmProjectTree: TfrmProjectTree
           WideText = 'Files'
         end
         item
-          Alignment = taCenter
           Position = 1
-          Style = vsOwnerDraw
-          Width = 24
-        end
-        item
-          Position = 2
-          Width = 114
+          Width = 150
           WideText = 'Path'
         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
     Images = frmLuaEditMain.imlActions
     OnPopup = ppmProjectTreePopup
@@ -782,4 +104,12 @@ object frmProjectTree: TfrmProjectTree
     Left = 8
     Top = 40
   end
+  object SystemImages: TImageList
+    Left = 40
+    Top = 40
+  end
+  object StatesImages: TImageList
+    Left = 40
+    Top = 72
+  end
 end

+ 244 - 163
LuaEdit/ProjectTree.pas

@@ -11,15 +11,17 @@ uses
 type
   PProjectTreeData = ^TProjectTreeData;
   TProjectTreeData = record
+    ItemType: Integer;
     pLuaEditFile: TLuaEditFile;
     ActiveProject: Boolean;
     ToKeep: Boolean;
     Deleting: Boolean;
+    OpenIndex: Integer;
+    CloseIndex: Integer;
   end;
 
   TfrmProjectTree = class(TForm)
     Panel1: TPanel;
-    imlProjectTree: TImageList;
     ppmProjectTree: TPopupMenu;
     ActivateSelectedProject1: TMenuItem;
     N1: TMenuItem;
@@ -29,23 +31,22 @@ type
     AddUnittoProject1: TMenuItem;
     RemoveUnitFromProject1: TMenuItem;
     Options1: TMenuItem;
-    vstProjectTree: TVirtualStringTree;
     mnuFindTarget: TMenuItem;
+    vstProjectTree: TVirtualDrawTree;
+    SystemImages: TImageList;
+    StatesImages: TImageList;
     procedure UnloadFileProject1Click(Sender: TObject);
     procedure ppmProjectTreePopup(Sender: TObject);
-    procedure vstProjectTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
-    procedure vstProjectTreeGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
     procedure vstProjectTreeGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
-    procedure vstProjectTreePaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType);
     procedure vstProjectTreeDblClick(Sender: TObject);
     procedure vstProjectTreeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
     procedure vstProjectTreeAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
-    function GetNodeInTree(sFileName, sProjectName: String): PVirtualNode;
+    function GetNodeInTree(pFile: TLuaEditFile; pPrj: TLuaEditProject): PVirtualNode;
     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 declarations }
   public
@@ -60,6 +61,69 @@ implementation
 
 {$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);
 var
   pNode: PVirtualNode;
@@ -88,7 +152,7 @@ begin
   frmLuaEditMain.CheckButtons;
 end;
 
-function TfrmProjectTree.GetNodeInTree(sFileName, sProjectName: String): PVirtualNode;
+function TfrmProjectTree.GetNodeInTree(pFile: TLuaEditFile; pPrj: TLuaEditProject): PVirtualNode;
 var
   pNode: PVirtualNode;
   pData: PProjectTreeData;
@@ -100,13 +164,13 @@ begin
   begin
     pData := vstProjectTree.GetNodeData(pNode);
 
-    if sProjectName <> '' then
+    if Assigned(pPrj) then
     begin
       if ((pData.pLuaEditFile.FileType in LuaEditTextFilesTypeSet) and (not pData.Deleting)) then
       begin
-        if ((pData.pLuaEditFile.PrjOwner.Name = sProjectName) or (sProjectName = '[@@SingleUnits@@]')) then
+        if pData.pLuaEditFile.PrjOwner = pPrj then
         begin
-          if pData.pLuaEditFile.Name = sFileName then
+          if pData.pLuaEditFile = pFile then
           begin
             Result := pNode;
             Break;
@@ -118,7 +182,7 @@ begin
     begin
       if pData.pLuaEditFile.FileType = otLuaEditProject then
       begin
-        if pData.pLuaEditFile.Name = sFileName then
+        if pData.pLuaEditFile = pFile then
         begin
           Result := pNode;
           Break;
@@ -138,7 +202,7 @@ var
   x, y: Integer;
 
   // Go through all nodes of the tree and set their ToKeep flag to false
-  procedure UnflagAllExpanded(pTree: TVirtualStringTree);
+  procedure UnflagAllExpanded(pTree: TVirtualDrawTree);
   var
     pNode: PVirtualNode;
     pData: PProjectTreeData;
@@ -154,7 +218,7 @@ var
   end;
 
   // Deletes all nodes for wich their ToKeep flag is still on false
-  procedure CleanTree(pTree: TVirtualStringTree);
+  procedure CleanTree(pTree: TVirtualDrawTree);
   var
     pNode, pPrevious: PVirtualNode;
     pData: PProjectTreeData;
@@ -175,7 +239,6 @@ var
       pNode := pTree.GetNext(pNode);
     end;
   end;
-
 begin
   // Initialize stuff
   pPrjNode := nil;
@@ -195,7 +258,7 @@ begin
   for x := 0 to LuaProjects.Count - 1 do
   begin
     pTempPrj := TLuaEditProject(LuaProjects.Items[x]);
-    pPrjNode := GetNodeInTree(pTempPrj.Name, '');
+    pPrjNode := GetNodeInTree(pTempPrj, nil);
 
     if not Assigned(pPrjNode) then
     begin
@@ -232,7 +295,7 @@ begin
 
     for y := 0 to pTempPrj.lstUnits.Count - 1 do
     begin
-      pUnitNode := GetNodeInTree(TLuaEditUnit(pTempPrj.lstUnits.Items[y]).Name, pTempPrj.Name);
+      pUnitNode := GetNodeInTree(TLuaEditUnit(pTempPrj.lstUnits.Items[y]), pTempPrj);
 
       if not Assigned(pUnitNode) then
       begin
@@ -328,9 +391,9 @@ begin
           if Answer = IDYES then
           begin
             if SaveUnitsInc then
-              pFile.SaveUnitInc(pFile.Path)
+              pFile.SaveInc(pFile.Path)
             else
-              pFile.SaveUnit(pFile.Path);
+              pFile.Save(pFile.Path);
           end
           else if Answer = IDCANCEL then
           begin
@@ -349,9 +412,9 @@ begin
         if Answer = IDYES then
         begin
           if SaveProjectsInc then
-            pLuaPrj.SaveProjectInc(pLuaPrj.Path)
+            pLuaPrj.SaveInc(pLuaPrj.Path)
           else
-            pLuaPrj.SaveProject(pLuaPrj.Path);
+            pLuaPrj.Save(pLuaPrj.Path);
         end
         else if Answer = IDCANCEL then
         begin
@@ -372,9 +435,9 @@ begin
           if Answer = IDYES then
           begin
             if SaveUnitsInc then
-              pFile.SaveUnitInc(pFile.Path)
+              pFile.SaveInc(pFile.Path)
             else
-              pFile.SaveUnit(pFile.Path);
+              pFile.Save(pFile.Path);
           end
           else if Answer = IDCANCEL then
           begin
@@ -416,10 +479,6 @@ begin
         ActiveProject := nil;
     end;
 
-    // Reset LuaEdit main form caption to its initial value
-    if not Assigned(ActiveProject) then
-        frmLuaEditMain.Caption := 'LuaEdit';
-
     // Initialize stuff...
     UnitsToDelete.Free;
     BuildProjectTree;
@@ -437,7 +496,7 @@ begin
   if Assigned(pNode) then
   begin
     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;
 
@@ -452,143 +511,12 @@ begin
   if Assigned(pNode) then
   begin
     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;
 
   frmLuaEditMain.DoMainMenuProjectExecute;
 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);
 begin
   NodeDataSize := SizeOf(TProjectTreeData);
@@ -636,4 +564,157 @@ begin
   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.

+ 3 - 3
LuaEdit/RegSetFileType.pas

@@ -37,18 +37,18 @@ begin
   try
     Reg.RootKey := HKEY_CLASSES_ROOT;
 
-    if not Reg.OpenKey('\'+inExtension, true) then
+    if not Reg.OpenKey('\'+inExtension, True) then
       raise Exception.Create(cExceptMsg);
 
     Reg.WriteString('', inFileType);
     Reg.WriteString('Content Type', inContentType);
 
-    if not Reg.OpenKey('\'+inFileType, true) then
+    if not Reg.OpenKey('\'+inFileType, True) then
       raise Exception.Create(cExceptMsg);
 
     Reg.WriteString('', inTypeDesc);
 
-    if not Reg.OpenKey('DefaultIcon', true) then
+    if not Reg.OpenKey('DefaultIcon', True) then
       raise Exception.Create(cExceptMsg);
 
     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;
     Image1: TImage;
     Image2: TImage;
+    shpBorder: TShape;
     procedure FormShow(Sender: TObject);
   private
     { Private declarations }

+ 1 - 1
LuaEdit/Stack.dfm

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

+ 1 - 0
LuaEdit/Watch.dfm

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

+ 10 - 2
LuaEdit/Watch.pas

@@ -84,8 +84,8 @@ type
     procedure Collapse1Click(Sender: TObject);
     procedure ExpandAll1Click(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 declarations }
     procedure WMStartEditing(var Message: TMessage); message WM_STARTEDITING;
@@ -474,4 +474,12 @@ begin
   end;
 end;
 
+procedure TfrmWatch.vstWatchDblClick(Sender: TObject);
+begin
+  if Assigned(vstWatch.GetFirstSelected()) then
+  begin
+    // todo: Allow Variable Inspection...
+  end;
+end;
+
 end.

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